Chapter 4. 网络层
公式与性质
-
数据报服务 虚电路服务 连接的建立 不需要 必须有 目的地址 每个分组都有完整的目的地址 仅在连接阶段使用,之后每个分组使用长度较短的虚电路号 VCID
路由选择 每个分组独立地进行路由选择和转发 属于同一条虚电路的分组按照同一路由转发 分组顺序 不保证分组的有序到达 保证分组的有序到达 可靠性 不保证可靠通信,可靠通信由用户主机来保证 可靠性由网络保证 对故障网络的适应性 出故障的结点丢失分组,其他分组路径选择发生变化时可以正常传输 所有经过故障结点的虚电路均不能正常工作 差错处理和流量控制 由用户主机进行流量控制,不保证数据报的可靠性 可由分组交换网负责,也可由用户主机负责 -
虚电路服务不需要预先分配带宽。
-
软件定义网络
Software Defined Network, SDN
- 北向接口:
SDN
提供给开发者的编程接口。 - 南向接口:
SDN
控制器和转发设备建立双向会话的接口。 - 东西向接口:
SDN
控制器集群内部控制器之间的通信接口。
- 北向接口:
-
拥塞控制
- 开环控制:静态预防。
- 闭环控制:动态调整。
-
Internet Protocal version 4, IPv4
IPv4
分组的格式- 版本 4bit :
IP
的版本 4 。 - 首部长度 4bit :单位为 4B ,最大可表示 15\times 4=60B 。最常用的值为 5 ,此时首部占 20B ,不使用可选字段。
故
IPv4
首部前两个字节通常是0x45
。- 总长度 16bit :单位为 1B ,表示首部和数据之和的长度,因此数据报最大长度为 2^{16}-1=65535B 。然而以太网帧的
MTU
为 1500B ,因此需要分片。 - 标识 16bit :自增计数器,不表示序号,当需要分片时每个数据报片对标识号都相同。
- 标志 3bit :最低位 MF = 1 时标识后面还有分片,否则表示最后一个分片;次低位 DF=0 时才允许分片。
- 片偏移 13bit :单位为 8B ,某片在原数据中的相对位置。因此除最后一个分片外,每个分片的(数据)长度一定是 8B 的整数倍。
TTL
8bit :路由器在转发前,先将TTL
减 1 ,若TTL
被减为 0 ,则丢弃该数据报。- 协议 8bit :
TCP
- 6 ;UDP
- 17 。 - 首部检验和 16bit :只检验数据报的首部,每经过一个路由器,都要重新计算。
- 源地址字段 4B 。
- 目的地址字段 4B 。
- 版本 4bit :
IPv4
地址的分类A类 (1~126) 0_______ ________ ________ ________ ,网络位 0~8 B类 (128~191) 10______ ________ ________ ________ ,网络位 0~16 C类 (192~223) 110_____ ________ ________ ________ ,网络位 0~16 D类 (224~239) 1110____ ________ ________ ________ ,多播地址 E类 (240~255) 1111____ ________ ________ ________ ,保留
- 主机号全为 0 表示本网络本身。
- 主机号全为 1 表示本网络的广播地址,又称直接广播地址。
127.x.x.x
为环回自检地址。- 网络号全为 0 ,主机号为 x 表示本网络号上的某个主机,只能作为源地址使用。
0.0.0.0
表示本网络上的本主机。(用于DHCP
)。255.255.255.255
表示整个TCP/IP
的广播地址,又称受限广播地址。实际上由于路由器对广播域的隔离,等效于本网络的广播地址。
IP
分组可以被路径中的路由器分片,并在目的主机进行重组。
-
网络地址转换
Network Address Translation, NAT
- 私有
IP
地址网段A
类 1 个:10.0.0.0 ~ 10.255.255.255
。B
类 16 个:172.16.0.0 ~ 172.31.255.255
。C
类 256 个:192.168.0.0 ~ 192.168.255.255
。
NAT
转换表的映射为 \{ 本地IP
地址 : 端口 \} 到 \{ 全球IP
地址 : 端口 \} 。NAT
路由器在转发分组时,一定要转换源IP
地址或目的IP
地址。普通路由器仅工作在网络层,NAT
路由器在转发数据报时需要查看和转换传输层的端口号。
- 私有
-
路由聚合
- 转发接口相同,部分网络前缀也相同才可路由聚合。
- 优先选择具有最长网络前缀的路由。
-
地址解析协议
Address Resolution Protocol, ARP
- 主机
A
欲向本局域网上的某台主机B
发送IP
数据报时,先在其ARP
高速缓存中查看有无主机B
的IP
地址。若有,则可以查出其对应的硬件地址,再将此硬件地址写入MAC
帧,然后通过局域网将该MAC
帧发往此硬件地址。若没有,则通过使用目的MAC
地址为FF-FF-FF-FF-FF-FF
的帧来封装并广播ARP
请求分组(广播发送),使同一个局域网里的所有主机都收到此ARP
请求。主机B
收到该ARP
请求后,向主机A
发出ARP
响应分组(单播发送),分组中包含主机B
的IP
地址与MAC
地址的映射关系,主机A
收到ARP
响应分组后就将此映射写入ARP
缓存,然后按查询到的硬件地址发送MAC
帧。 ARP
因为“看到了”IP
地址,所以它工作在网络层。
NAT
路由器因为“看到了”端口,所以它工作在传输层。- 尽管
ARP
请求分组是广播发送的,但ARP
响应分组是普通的单拨。
- 主机
-
动态主机配置协议
Dynamic Host Configuration Protocal, DHCP
DHCP
服务器和DHCP
客户的交换过程- 广播
IP
,广播帧:DHCP
客户广播“DHCP
发现”消息,试图找到网络中的DHCP
服务器,以便从DHCP
服务器获得一个IP
地址。源地址为0.0.0.0
,目的地址为255.255.255.255
。 - 广播
IP
,单播帧:DHCP
服务器收到“DHCP
发现”消息后,广播“DHCP
提供”消息,其中包括提供给DHCP
客户机的IP
地址。源地址为DHCP
服务器地址,目的地址为255.255.255.255
。 - 广播
IP
,广播帧:DHCP
客户收到“DHCP
提供”消息,若接受该IP
地址,则广播“DHCP
请求”消息向DHCP
服务器请求提供IP
地址。源地址为0.0.0.0
,目的地址为255.255.255.255
(局域网中可能有多台DHCP
服务器)。 - 广播
IP
,单播帧:DHCP
服务器广播“DHCP
确认”消息,将IP
地址分配给DHCP
客户。源地址为DHCP
服务器地址,目的地址为255.255.255.255
。
- 广播
DHCP
客户只能在一段有限的时间内使用这个分配到的IP
地址。DHCP
称这段时间为租用期。租用期的数值应由DHCP
服务器自己决定,DHCP
客户也可在自己发送的报文中提出对租用期的要求。DHCP
客户和服务器端采用C/S
模型。DHCP
是应用层协议。
-
网际控制报文协议
Internet Control Message Protocol, ICMP
ICMP
报文被封装在IP
数据报中发送,但ICMP
不是高层协议,而是网络层的协议。ICMP
差错报告报文- 终点不可达
- 源点抑制*
- 时间超过
- 参数问题
- 改变路由(重定向)
- 不应发送
ICMP
差错报告报文的情况- 对
ICMP
差错报告报文,不再发送ICMP
差错报告报文。 - 对第一个分片的数据报片的所有后续数据报片,都不发送
ICMP
差错报告报文。 - 对具有多播地址的数据报,都不发送
ICMP
差错报告报文。 - 对具有特殊地址(如
127.0.0.0
或0.0.0.0
)的数据报,不发送ICMP
差错报告报文。
- 对
ICMP
询问报文- 回送请求和回答报文
- 时间戳请求和回答报文
- 地址掩码请求和回答报文
- 路由器询问和通告报文
PING
使用回送请求和回答报文,Tracert
使用时间超过报文。PING
工作在应用层,它直接使用网络层的ICMP
;Traceroute/Tracert
工作在网络层。
-
Internet Protocal version 6, IPv6
IPv6
基本首部- 版本 4bit:
IP
的版本 4。 - 通信量类 8bit:用来区分
IPv6
数据报的类别或优先级。 - 流标号 20bit:属于同一个流的数据报都具有相同的流标号。
- 有效载荷长度 16bit:除基本首部以外的字节数(包括扩展首部),最大值是 65535 。
- 下一个首部 8bit:当没有扩展首部时表示数据是何种协议数据单元;否则标识后面第一个扩展首部的类型。
- 跳数限制 8bit 。
- 源地址和目的地址:各 128bit 。
- 版本 4bit:
- 不需要计算首部检验和。
- 路由器对扩展首部不进行处理。
- 允许协议功能继续扩充。
- 支持即插即用(自动配置),不需要
DHCP
。 - 只有源主机才能分片,不允许传输路径中的路由分片。
IPv6
地址地址类型 二进制前缀 未指明地址 00\dots 0( 128 位), ::/128
环回地址 00\dots 01( 128 位), ::1/128
多播地址 11111111 ( 8 位), FF00::/8
本地链路单播地址 1111111010 ( 10 位), FE80::/10
全球单播地址 除上述地址以外的所有 IPv6
地址- 全球单播地址:48bit 全球路由选择前缀 +16bit 子网标识符 +64bit 接口标识符
- 不需要
ARP
协议,可以从最后 64 位中直接提取。 - 从
IPv4
向IPv6
过渡- 双协议栈
- 隧道
-
距离-向量路由算法
- 基础:
Bellman-Ford
算法 - 路由信息协议
Routing Information Protocol, RIP
- 规定
- 网络中的每个路由器都要维护从它自身到其他每个目的网络的距离记录,即距离向量。
RIP
使用跳数(或称距离)来衡量到达目的网络的距离。规定从一路由器到直接连接的网络的距离定义为 1 ;而每经过一个路由器,距离就加 1 。RIP
认为好的路由就是它通过的路由器数目少,即距离短或跳数少。RIP
允许一条路径最多只能包含 15 个路由器。因此距离等于 16 时表示网络不可达。可见RIP
只适用于小型互联网。距离向量路由可能会出现环路的情况,规定路径上的最高跳数的目的是为了防止分组不断在环路上循环,减少网络拥塞的可能性。- 每个路由表项都有三个关键字段:
<目的网络 N ,距离 d ,下一跳路由器地址 X >
- 特点
- 和谁交换信息:仅和直接相邻的路由器交换信息。
- 交换什么信息:交换的信息是本路由器所知道的全部信息,即自己的路由表。
- 何时交换信息:按固定的时间间隔(如 30 秒)交换路由信息。当网络拓扑发生变化时,路由器也及时向相邻路由器通告拓扑变化后的路由信息。
- 路由器刚开始工作时,只知道自己到直接相连的几个网络的距离为 1。
RIP
是应用层协议,它使用UDP
传送数据(端口 520 )。RIP
选择的路径不一定是时间最短的,但一定是具有最少的路由跳数,因为它是根据最少跳数进行路径选择的。
- 算法
- 对地址为
X
的相邻路由器发来的RIP
报文,先修改此报文中的所有项目:把“下一跳”字段中的地址都改为X
,并把所有“距离”字段的值加 1 。 - 对修改后的
RIP
报文中的每个项目,执行如下步骤:IF(若原来的路由表中没有目的网络N) 则把该项目添加到路由表中(表明这是新的目的网络)。 ELSEIF(若原来的路由表中有目的网络N,且下一跳路由器的地址是X) 用收到的项目替换原路由表中的项目(因为要以更新的消息为准)。 ELSEIF(若原来的路由表中有目的网络N,且下一跳路由器的地址不是X) 若收到的项目中的距离d小于路由表中的距离,则进行更新。 ELSE 什么也不做。
- 若 180 秒(
RIP
默认超时时间)还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达的路由器,即把距离设置为 16 。 - 返回。
- 对地址为
- 优缺点:好消息传播得快,坏消息传播得慢。
- 规定
- 基础:
-
链路状态路由算法
- 基础
Dijkstra
算法 - 开放路径最短优先协议
OSPF
- 与
RIP
的区别OSPF
向本自治系统中所有路由器发送信息。这里使用的方法是洪泛法。而RIP
仅仅向自己相邻的几个路由器发送信息。- 发送的信息是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。而在
RIP
中,发送的信息是本路由器所知道的全部信息,即整个路由表。 - 只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息,并且更新过程收敛得快,不会出现
RIP
“坏消息传得慢”的问题。而在RIP
中,不管网络拓扑是否发生变化,路由器之间都要定期交换路由表的信息。 OSPF
是网络层协议,它不用UDP
或TCP
,而直接用IP
数据报传送(其IP
数据报首部的协议字段为 89 )。而RIP
是应用层协议,它在传输层使用UDP
。
- 其它特点
OSPF
允许对每条路由设置成不同的代价,对于不同类型的业务可计算出不同的路由。- 若到同一个目的网络有多条相同代价的路径,则可将通信量分配给这几条路径。
OSPF
分组具有鉴别功能,从而保证仅在可信赖的路由器之间交换链路状态信息。OSPF
支持可变长度的子网划分和无分类编址CIDR
。- 每个链路状态都带上一个
32
位的序号,序号越大,状态就越新。
- 工作原理:因为各路由器之间频繁地交换链路状态信息,所以所有路由器最终都能建立一个链路状态数据库,即全网的拓扑结构图。然后,每个路由器利用链路状态数据库中的数据,使用
Dijkstra
算法计算自己到达各目的网络的最优路径,构造出自己的路由表。此后,当链路状态发生变化时,每个路由器重新计算到达各目的网络的最优路径,构造出新的路由表。虽然使用Dijkstra
算法能计算出完整的最优路径,但路由表中不会存储完整路径,而只存储“下一跳”(只有到了下一跳路由器,才能知道再下一跳应当怎样走)。 - 分组类型
- 问候分组,用来发现和维持邻站的可达性。
- 数据库描述分组,向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息。
- 链路状态请求分组,向对方请求发送某些链路状态项目的详细信息。
- 链路状态更新分组,用洪泛法对全网更新链路状态,它是OSPF最核心的部分。
- 链路状态确认分组,对链路更新分组的确认。
- 在网络中通常传送的
OSPF
分组大多是问候分组。两个相邻路由器通常每隔 10 秒要交换一次问候分组,以便知道哪些站可达。若有 40 秒没有收到某个相邻路由器发来的问候分组,则认为该相邻路由器不可达,应立即修改链路状态数据库,并重新计算路由表。 - 只要一个路由器的链路状态发生变化,该路由器就要使用链路状态更新分组,用洪泛法向全网更新链路状态。其他路由器在收到更新分组后要发送确认。
OSPF
还规定每隔一段时间(如 30 分钟)要刷新一次数据库中的链路状态。因为一个路由器的链路状态只涉及与相邻路由器的连通状态,与整个网络的规模并无直接关系,所以当互联网规模很大时,OSPF
要比RIP
好得多。
- 与
- 基础
-
路径向量路由选择算法
- 边界网关协议
Border Gateway Protocol, BGP
- 特点
- 是不同自治系统
AS
的路由器之间交换路由信息的协议,是一种外部网关协议。边界网关协议BGP
常用于互联网的网关之间。 - 力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。
- 是应用层协议,基于
TCP
。 BGP
交换路由信息的结点数量级是AS
个数的数量级,这要比这些AS
中的网络数少很多。- 寻找一条较好的路径,取决于找准正确的
BGP
发言人,而每个AS
中BGP
发言人(或边界路由器)的数目是很少的。这样就使得AS
之间的路由选择不致过分复杂。 BGP
支持CIDR
,因此BGP
的路由表也就应当包括目的网络前缀、下一跳路由器,以及到达该目的网络所要经过的各个自治系统序列。- 当
BGP
刚运行时,BGP
的邻站交换整个BGP
路由表。但以后只需要在发生变化时更新有变化的部分。这样做对节省网络带宽和减少路由器的处理开销方面都有好处。
- 是不同自治系统
- 工作原理
- 配置
BGP
时,每个AS
的管理员要选择至少一个路由器,作为该AS
的“BGP
发言人”,BGP
发言人往往就是BGP
边界路由器。 - 一个
BGP
发言人与其他AS
中的BGP
发言人要交换路由信息,就要先建立TCP
连接,然后在此连接上交换BGP
报文以建立BGP
会话,再利用BGP
会话交换路由信息。使用TCP
连接交换路由信息的两个BGP
发言人,彼此成为对方的邻站或对等站。每个BGP
发言人除了必须运行BGP
外,还必须运行该AS
所用的内部网关协议,如OSPF
或RIP
。 BGP
所交换的网络可达性的信息,就是要到达某个网络所要经过的一系列自治系统(如:自治系统AS2
的BGP
发言人通知主干网的BGP
发言人:“要到达网络N1,N2,N3
和N4
可经过AS2
。主干网还可发出通知:“要到达网络N5,N6
和N7
可沿路径(AS1,AS3)
。)。当BGP
发言人互相交换网络可达性的信息后,各BGP
发言人就根据所用的策略,从收到的路由信息中找出到达各自治系统的较好路由。
- 配置
- 报文类型
- 打开(
Open
)报文。用来与相邻的另一个BGP
发言人建立关系,使通信初始化。 - 更新(
Update
)报文。用来通知某一路由的信息,以及列出要撤销的多条路由。 - 保活(
Keepalive
)报文。用来周期性地证实邻站的连通性。 - 通知(
Notification
)报文。用来发送检测到的差错。
- 若一个
BGP
发言人想与另一个AS
的BGP
发言人建立邻站关系,则要向对方发送Open
报文,若对方接受这种邻站关系,则用Keepalive
报文响应。邻站关系一旦建立,就要继续维持这种关系。为此,这两个BGP
发言人彼此要周期性地交换Keepalive
报文(一般每隔 30 秒)。Keepalive
报文只有 19B ,因此不会造成网络上太大的开销。Update
报文是BGP
的核心内容,BGP
发言人可以用Update
报文撤销它曾经通知过的路由,也可以宣布增加新的路由。
- 打开(
- 特点
- 边界网关协议
-
IP
多播多播是主动订阅,广播是被动接收。
IP
多播地址就是IPv4
中的D
类地址。D
类地址的前四位是1110
,因此D
类地址范围是224.0.0.0 ~ 239.255.255.255
。每个D
类IP
地址标志一个多播组,一台主机可以随时加入或离开一个多播组。- 首部中的协议字段值是 2 ,表明使用
IGMP
协议。 - 多播数据报也是“尽最大努力交付”,不提供可靠交付。
- 多播地址只能用于目的地址,而不能用于源地址。
- 对多播数据报不产生
ICMP
差错报文。 - 仅应用于
UDP
,它能将报文同时发送给多个接收者。 - 局域网硬件多播:
IANA
拥有的以太网多播地址的范围是从01-00-5E-00-00-00
到01-00-5E-7F-FF-FF
。在这些地址中,只有 23 位可用作多播。这只能和D
类IP
地址中的 23 位有一一对应关系。D
类IP
地址可供分配的有 28 位,可见在这 28 位中前 5 位无法映射到多播MAC
地址。例如,IP
多播地址224.128.64.32
(即E0-80-40-20
)和另一个IP
多播地址224.0.64.32
(即E0-00-40-20
)转换成以太网的硬件多播地址都是01-00-5E-00-40-20
。因为多播IP
地址与以太网MAC
地址的映射关系不是唯一的,所以收到多播数据报的主机,还要在IP
层利用软件进行过滤,把不是本主机要接收的数据报丢弃。 IGMP
与多播路由协议:IGMP
是让连接到本地局域网上的多播路由器,知道本局域网上是否有主机参加或退出了某个多播组。IGMP
并不是在互联网范围内对所有多播组成员进行管理的协议。IGMP
不知道IP
多播组包含的成员数,也不知道这些成员分布在哪些网络上。IGMP
报文被封装在IP
数据报中传送,但它也向IP
提供服务。因此不把IGMP
视为一个单独的协议,而视为整个网际协议IP
的一个组成部分。IGMP
的工作可分为两个阶段。第一阶段:当某台主机加入新的多播组时,该主机应向多播组的多播地址发送一个IGMP
报文,声明自己要成为该组的成员。本地的多播路由器收到IGMP
报文后,还要利用多播路由选择协议,把这种组成员关系转发给互联网上的其他多播路由器。第二阶段:组成员关系是动态的。本地多播路由器要周期性地探询本地局域网上的主机,以便知道这些主机是否仍继续是组的成员。只要对某个组有一台主机响应,多播路由器就认为这个组是活跃的。但一个组在经过几次探询后仍然没有一台主机响应,多播路由器就认为本网络上的主机都已离开了这个组,因此就不再把这个组的成员关系转发给其他的多播路由器。多播路由选择实际上就是要找出以源主机为根结点的多播转发树,其中每个分组在每条链路上只传送一次(即在多播转发树上的路由器不会收到重复的多播数据报)。不同的多播组对应于不同的多播转发树;同一个多播组,对不同的源点也会有不同的多播转发树。
-
移动
IP
:IP
地址在移动过程中保持不变。- 功能实体
- 移动结点。具有永久
IP
地址的移动主机。 - 本地代理。通常就是连接在归属网络(原始连接到的网络)上的路由器。
- 外地代理。通常就是连接在被访网络(移动到另一地点所接入的网络)上的路由器。
- 移动结点。具有永久
- 永久地址(归属地址)和归属网络的关联是不变的。
- 外地代理有两个重要功能:①要为移动站创建一个临时地址,称为转交地址。转交地址的网络号显然和被访网络一致。②及时把移动站的转交地址告诉其归属代理。
- 外地代理要向连接在被访网络上的移动站发送
IP
分组时,直接使用移动站的MAC
地址。 - 基本通信流程
- 移动站
A
在归属网络时,按传统的TCP/IP
方式进行通信。 - 移动站
A
漫游到被访网络时,向外地代理进行登记,以获得一个临时的转交地址。外地代理要向A
的归属代理登记A
的转交地址。 - 归属代理知道移动站
A
的转交地址后,会构建一条通向转交地址的隧道,将截获的发送给A
的IP
分组进行再封装,并通过隧道发送给被访网络的外地代理。 - 外地代理把收到的封装的
IP
分组进行拆封,恢复成原始的IP
分组,然后发送给移动站A
,这样A
在被访网络就能收到这些发送给它的IP
分组。 - 移动站
A
在被访网络对外发送IP
分组时,仍然使用自己的永久地址作为IP
分组的源地址,此时显然无须通过A
的归属代理来转发,而是直接通过被访网络的外部代理。 - 移动站
A
移动到另一被访网络时,在新外地代理登记后,然后新外地代理将A
的新转交地址告诉其归属代理。无论如何移动,A
收到的IP
分组都是由归属代理转发的。 - 移动站
A
回到归属网络时,A
向归属代理注销转交地址。
- 移动站
- 功能实体
概念
-
路由器的默认路由:目的地址全为 0 ,子网掩码也全为 0 。
-
路由表总是用软件来实现的;转发表可以用软件来实现,甚至也可以用特殊的硬件来实现。
-
“转发”是路由器根据转发表把收到的
IP
数据报从合适的端口转发出去,它仅涉及一个路由器。而“路由选择”则涉及很多路由器,路由表是许多路由器协同工作的结果。这些路由器按照复杂的路由算法,根据从各相邻路由器得到的关于网络拓扑的变化情况,动态地改变所选择的路由,并由此构造出整个路由表。 -
路由表不等于转发表,分组的实际转发是靠直接查找转发表,而不是查找路由表。
考点
-
一台主机移动到了另一个
LAN
中,若一个分组到达了它原来所在的LAN
中,则分组会被转发给移动IP
的本地代理。(随后转交给外地代理) -
对于
MTU
为 800B 的链路,每个分片的最大长度为 776B 。首部占 20B ,数据部分必须为 8B 的倍数。
-
指明分类的
IPv4
子网号不能全为 1 或 0 ;若使用则CIDR
无此要求。 -
在采用
TCP/IP
协议的以太网中可能出现"广播风暴"的主要原因是多台主机同时进行ARP
查询。 -
BGP
交换的网络可达性信息是到达某个网络所经过的路径。