第四章 网络层
本章重点
1、IP数据报的格式和分片
2、IP地址的表示和分类分配、子网掩码、地址有效性、广播地址
3、子网划分
4、CIDR路由聚合
5、ARP协议和ICMP协议
6、路由表、路由器的工作原理
7、RIP协议和OSPF协议
8、网络层的综合设计和应用
网络层的功能
网络层的主要任务是将分组从源主机经过多个网络和多段链路传输到目的主机。
该任务可以划分为分组转发和路由选择两种功能。
- 投递分组
- 编址
- 寻址—路由
IP协议及配套协议
网际协议IP
- 数据单元是数据报
- 负责把数据报交付给主机,不负责数据交付的可靠性
地址解析协议ARP
- 由IP获得MAC地址
反向地址解析协议RARP
- 由MAC地址获得IP
- 来源端不知道自己的IP地址时使用
网际控制报文协议ICMP
- 用以向源主机报告IP数据报在交付时出现的一些错误
- ICMP消息包含在IP数据报之内,所以能找到回源主机的路径
网际组管理协议IGMP
- 提供带有
多播组
标识的路由,使整个网络都支持多播 - TCP/IP支持下面三种类型的数据发送:
- 广播:把目标地址设为FFFFFFFFFFFF而发送到网上所有主机
- 多播:数据被交付到网上的一组主机,每台主机必须注册多播地址,才能接收指定多播地址的数据
- 单播:数据只被交付到一个指定地址的主机
- IGMP消息位于IP数据报中
异构网络互连
-
网络互连:路由器进行网络连接和路由选择;路由器是一台专用计算器,用于在互联网中进行路由选择。
-
虚拟互连网络:逻辑互连网络。互连起来的各种物理网络的异构性本来是客观存在的,但是通过IP协议使得这些网络在网络层上看起来像一个统一的网络。可以简称为IP网络。
使用IP网络的好处:当IP网上的主机进行通信时,就好像在单个网络上通信一样,看不见互连的各个网络的具体异构细节(比如具体的编址方案、路由选择协议)
路由与转发
路由:计算机网络中用于确定数据包从源设备到目标设备的路径选择过程。
-
路由选择:根据路由选择协议构造并维护路由表;
同时经常或定期地与相邻路由器交换信息,获取网络拓扑。
网络拓扑:网络中各个设备(如计算机、路由器、交换器、服务器等)如何连接和组织的结构。有星型、总线型、环形等。
动态更新维护路由表,以决定分组到达目的地结点的最优路径。
-
分组转发:路由器根据转发表将分组从合适的端口转发出去。
路由表根据路由选择算法得出;转发表通过路由表得出。
路由表要最优化网络拓扑变化的计算,转发表的结构需要使查找过程最优化。
讨论路由选择的原理时,两者常合称为路由表。
答案是C。
网路层提供的两种服务
虚电路
-
电信网的设计思路
-
当两台计算机进行通信时,应当先建立网络层的连接,即先建立一条逻辑上的虚电路(VC);
-
连接一旦建立,就固定了虚电路对应的物理路径。
-
整个通信过程分为三个阶段:虚电路建立、数据传输与虚电路释放。
-
面向连接(逻辑上的连接)
-
分组的首部只在连接建立时使用完整的目的地址,之后每个分组的首部只要携带这条虚电路的编号即可。
-
当某个结点或某条链路故障时,所有相关的虚电路都会被影响
数据报
-
因特网采用的设计思路。
-
发送分组前不需要建立连接。
-
网络尽最大努力交付,传输不保证可靠性,分组可能出错或丢失;
-
网络为每个分组独立地选择路由,转发的路径可能不同,因此分组不一定按序到达目的结点。
-
如果需要主机间的通信是可靠的,那么由主机的传输层来负责。
-
分组正在某一连路上传送时,并不占用网络其他部分的资源。
-
好处:价格低廉,运行方式灵活。
对比
IPv4
IP地址
为什么需要IP地址:
-
物理地址只在两个设备在同一物理网络中才使用;
IP地址提供了对远程网络中的设备进行寻址和访问的方法,它使网关容易决定数据报时留在本地网还是传输到其他网络
-
并非所有网络主机都有网卡
-
物理地址用户使用不友好,IP地址可以使地址逻辑上有序,易于理解和组织
-
IP地址实际上是一种组织网络的方式,与物理地址的作用(区分不同的硬件设备)无关。
IP地址的特点:
- 分等级的地址结构。方便管理,减少路由表中的项目数
- IP地址表示一个主机(或路由器)和一条链路的接口
- 当一个主机同时连接到两个网络上时,主机一定有两个相应的IP地址(多归属主机)
- 一个路由器至少连接到两个网络,所以一个路由器至少有两个IP地址。
IP数据报的格式
一个IP分组(IP数据报)由首部和数据部分组成。
首部的前一部分的长度固定,共20B;后面是一些长度可变的可选字段。
-
版本:IP的版本,IPv4中该字段值为4
-
首部长度:单位为4B,最大可表示60B首部。
常用首部长度:20B,此时本字段值为5,首部不使用任何可选字段。
IP首部常以0x45开头。
-
区分服务:?
-
总长度:单位为1B,指首部和数据之和的长度。最大可表示65535B。
-
标识:同一数据报的分片使用同一标识。
-
标志:x DF MF ,只有两位有意义。
- 中间位DF=1,禁止分片
- 中间位DF=0,允许分片(分片后的数据报中DF同样为0)
- 最低位MF=1,后面“还有分片”
- 最低位MF=0,说明这是最后一片或者没有分片。
-
片偏移:指出较长分组分片后,某片在原分组中的相对位置。单位为8B。
-
生存时间:TTL,每个路由器在转发数据报前对TTL–1,变成0则丢弃。
-
首部长度:单位是4B;范围:0101~1111,即20~60B。(因为固定部分有20B)
填充部分总会将首部长度填充为4B的整数倍。
-
区分服务:指示期望获得哪种类型的服务
-
总长度:首部+数据,单位为1B。总长度上限:65535B。
-
生存时间:TTL。IP分组的保质期,经过一个路由器–1,变成0则丢弃。
-
协议:数据部分的协议(ICMP、IGMP、TCP 6、UDP 17等)
-
首部检验和:只检验首部,不检验数据部分。
-
可选字段:0~40B,用来支持排错、测量以及安全等措施。
-
填充:全0。
-
源地址、目的地址:在整个传输过程中都不会变化。
IP数据报分片
-
最大传送单元MTU:链路层数据帧可以封装数据的上限,以太网的MTU是1500字节。
所以过长的数据报需要分片。
-
片偏移以8B为单位,所以除了最后一个分片,其他每个分片的数据部分长度都是8B的整数倍。
-
每个分片都需要加上一个首部,注意分片的DF=0,MF需要判断是不是最后一片。
-
IP分组可以被路径中的路由器分片(不同网络的MTU可能不同),但是只能由目的主机进行重组。
IPv4地址
-
IP地址是给互联网上每台主机(或路由器)的每个接口分配的一个在全球范围内唯一的32位标识符。
-
互联网早期采用分类的IP地址。
任何一类IP地址都由网络号和主机号两部分组成。
其中网络号标识主机(或路由器)连接到的网络,一个网络号在整个互联网范围内唯一;
主机号标识该主机(或路由器),一个主机号在指明的网络范围内是唯一的。
-
特殊IP地址的用途:
主机号全0表示本网络本身;
主机号全1表示本网络的广播地址;
127.x.x.x保留为环回自检地址,此地址表示任意主机本身。
32位全为0,即0.0.0.0表示本网络上的本主机
32位全为1,即255.255.255.255表示整个TCP/IP网络的广播地址,又称受限广播地址。
- 最大主机数:减去全0、全1
- 192,128,127,255,191
- D类:224开头,全部是多播地址。
- 路由器不转发目的IP地址为255.255.255.255的分组;当收到它时,路由器将把该IP分组丢弃。
另:
网络地址转换NAT
指的是通过专用网络地址转换为公用地址,从而对外隐藏内部管理的IP地址。
它使得整个专用网只需要一个全球IP地址就可以与互联网连通。
私有IP地址:私有IP地址只用于LAN,不用于WAN连接(必须通过网关利用NAT把私有IP地址转换为Internet中合法的全球IP地址后才能出现在Internet上),并且允许私有IP地址被LAN重复使用。
NAT的原理和应用
- 普通路由器在转发IP分组的时候,其源IP地址和目的IP地址都不会改变;
- NAT路由器在转发IP分组时,一定要更换其IP地址;
- 普通路由器仅工作在网络层,不改变IP数据报的IP地址字段。
- NAT路由器转发数据报时需要查看和转换传输层的端口号。
子网划分
IP地址中增加了一个“子网号字段”,使两级IP地址变成了三级IP地址。这种做法称为划分子网。
划分子网的方法是从网络的主机号中借用若干位作为子网号。
至少需要保留2位仍为主机号。
三级IP地址的结构:<网络号>,<子网号>,<主机号>。
例题
子网掩码
一个与IP地址同样为32位的地址串。其中1对应IP地址中的网络号及子网号,而0对应主机号。
主机或路由器只需要将IP地址和IP做‘&’运算,就可以得出相应子网的网络地址。
默认子网掩码(没有划分子网时):
A/B/C类分别为255.0.0.0 255.255.0.0 255.255.255.0
默认网关
默认网关是连接本机或子网的路由器接口的IP地址。
当主机发送数据时,根据所发送的数据的目的IP地址,通过子网掩码来判定目的主机是否在子网中;
- 如果在,则直接发送;
- 如果不在,则将数据发送到默认网关,再由网关(路由器)将其转发到其他网络。
无分类编址CIDR
CIDR的记法:
IP 地址 := <网络前缀>,<主机号>
CIDR地址块的分析:
使用斜线记法,表示这个地址块的网络前缀有多少位。
路由聚合、最长前缀匹配
以上两个听王道课。
-
路由聚合:因为一个CIDR地址块中有很多地址,所以在路由表中就可以利用CIDR地址块来查找目的网络。
-
路由聚合使得路由表中的一个项目可以表示原来传统分类地址的路由,有利于减少路由器之间的信息交换。
如上题,一定要保证网络前缀完全匹配(十进制转二进制),再考虑最长匹配。
地址解析协议ARP
IP地址是网络层及网络层之上使用的地址,是分层式的。
硬件地址(MAC)地址是数据链路层使用的,是平面式的。
路由器不仅有多个IP地址,还有多个硬件地址。
ARP功能
无论网络层使用什么协议,在实际网络的链路上传输数据帧时,最终必须使用硬件地址。
ARP完成IP地址到MAC地址的映射。
每台主机都设有一个ARP高速缓存,用来存放本局域网上各主机和路由器的IP地址到MAC地址的映射表,称为ARP表。
工作原理
A想向B发送IP数据报:(同一局域网)
-
在ARP高速缓存中查看有无B的IP地址
-
若有,则可以查出对应的硬件地址,并写入MAC帧。
-
若没有,通过使用【目的MAC地址为FF-FF-FF-FF-FF-FF】的帧来封装并广播ARP请求分组(广播发送),
同一个局域网内所有的主机都收到此ARP请求
-
主机B收到ARP请求后,向A发出ARP响应分组(单播发送),分组中包含B的IP和MAC地址的映射关系
-
A收到后,将此映射写入ARP缓存,然后回到步骤2。
广播的ARP请求分组中,并不包含待发送的数据报。
ARP用于解决同一局域网上的主机或路由器的IP和MAC的映射问题。如果目的主机和源主机不在同一个局域网上,则需要通过ARP找到本局域网上的某个路由器的硬件地址,再把分组发送给这个路由器,让路由器把分组转发给下一个网络。
-
ARP广播只在子网中传播,如果相互通信的主机不在同一个子网内,就不能直接通过ARP广播获得目的站的硬件地址。
-
硬件地址只具有本地意义,所以每当路由器将IP数据报发送到一个具体的网络中时,都需要重新封装源硬件地址和目的硬件地址。
MAC地址是点到点传输用的,端到端传输中包含很多点到点,所以每次都需要更新MAC地址。
动态主机配置协议DHCP
//TODO,不考
用于给主机动态地分配IP地址,提供了即插即用的连网机制。
网际控制报文协议ICMP
作用:有效地转发IP数据报和提高交付成功的机会,在网络层使用了ICMP,让主机或路由器报告差错和异常情况。
ICMP报文被封装在IP数据报中发送,但ICMP不是高层协议,而是网络层的协议。
ICMP报文包括ICMP差错报告报文和ICMP询问报文。
差错报文
类型:
-
终点不可达
-
源点抑制:路由器或主机因为拥塞而丢弃数据报时,向源点发送,让源点发送数据报的速率放慢
-
时间超过:当路由器收到生存时间TTL为0的数据报时,需要向源点发送时间超过报文。
当终点在规定时间内不能收到一个数据报的全部数据报片时,就丢弃已收到的所有数据报片,并向源点发送时间超过报文。
-
参数问题
-
改变路由(重定向):让主机知道下次应将数据报发送给另外的路由器。
询问报文
- 回送请求和回答报文
- 时间戳请求和回答报文
- 地址掩码请求和回答报文
- 路由器询问和通告报文
应用
分组网间探测PING:使用ICMP回送请求和回答报文
ping在应用层,直接使用ICMP,跳过了传输层的UDP和TCP
Traceroute:使用ICMP时间超过报文
Traceroute工作在网络层。
不应发送ICMP差错报文的情况
-
对ICMP报文不发送ICMP报文
报错的不报错
-
对第一个分片的数据报文的后续数据报文不发送ICMP
分片只报第一个
-
对具有多播地址的数据报不发送
-
对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送
IPv6
//TODO
主要特点
- 更大的地址空间,IPv4有32位,IPv6有128位。
- 扩展的地址层次结构。因为地址空间很大,所以可以划分为更多的层次。
- 定义了很多可选的扩展首部,可以提高路由器的处理效率。
- 改进的选项。IPv6首部长度固定,选项放在有效载荷中;IPv4所规定的选项是固定不变的,放在首部的可变部分。
- 允许协议继续扩充
路由算法与路由协议
路由算法
路由算法的目的:
找到一条从源路由器到目的路由器的最佳路径。
- 静态路由算法:网络管理员手动配置每一条路由
- 动态路由算法:根据网络流量负载和拓扑结构的变化来动态调整自身的路由表。
常用的动态路由算法:
距离–向量路由算法
基础是图的Bellman-Ford算法,对每个节点计算单源最短路径。
初始化时每个结点向其邻居发送距离向量,在接受到该更新报文后,每个节点重新计算自己的距离向量。距离向量发生更新的结点再次向邻居发送更新的距离向量。
显然,更新报文的大小与网络中的结点数量成正比。
最常见的距离–向量路由算法是RIP算法,采用“跳数”作为距离的衡量。
链路状态路由算法
链路状态指本路由器和哪些路由器相邻,以及相应链路的代价。
链路状态算法要求每个节点都具有全网拓扑结构图,执行任务:
- 主动测试所有相邻结点的状态
- 定期将链路状态传播给所有其他的结点。
- 结点每收到一个链路状态报文,便用其更新自己的网络状态“视野图:
- 一旦链路状态发生变化,就使用Dijkstra算法重新计算到达所有其他节点的最短路径。
于是每个节点都可以用Dijkstra算法计算出到其他节点的最短路径。
典型:OSPF算法。
分层次的路由选择协议
把互联网划分为许多较小的自治系统(AS),自治系统是在单一技术管理下的一组路由器。
于是路由选择协议被划分为:
内部网关协议(IGP)
在一个自治系统内部使用的路由选择协议,比如RIP和OSPF。
外部网关协议(EGP)
源主机和目的主机位于不同的自治系统中时需要运行EGP。
如BGP-4
路由信息协议RIP
一种分布式的基于距离向量的路由选择协议。
RIP是应用层协议,使用UDP传送数据。
规定:
-
每个路由器都需要维护从它自身到其他各个目的网络的距离记录(距离向量)
-
RIP使用跳数来衡量到达目的网络的距离。
从路由器到直接连接的网络的距离定义为1;而每经过一个路由器,距离+1
-
跳数越少,RIP认为路由更好。
-
RIP一条路径中最多包含15个路由器,所以距离=16时表示网络不可达。
避免循环。
-
每个路由表项都有三个关键字段:
<目的网络N,距离d,下一跳路由器地址X>
特点:
- 仅和直接相邻的路由器交换信息
- 交换的信息是本路由器所知道的全部信息,即自己的路由表。
- 按照固定的时间间隔交换路由信息。
- 刚开始工作时,只知道自己到直接相连的几个网络的距离为1。
- 选择的路径不一定是时间最短的,但是一定具有最少的路由跳数。
算法:
RIP报文:包含路由表中的所有信息。
优点:
- 实现简单、开销小、收敛过程较快
- 发现更短路由的更新消息传播很快
缺点:
- RIP限制了网络的规模,能使用的最大距离为15
- 路由器之间交换完整的路由表,网络规模越大,开销也就越大
- 网络出现故障时,路由器之间需要反复多次传递消息才能完成收敛。
好消息传播得快,坏消息传播得慢
坏消息得慢例题:
开放最短路径优先OSPF
使用分布式链路状态路由算法的典型代表。
OSPF是网络层协议,不使用UDP或TCP,而是直接使用IP数据报传送。
与RIP的区别:
-
OSPF使用洪泛法向本自治系统内所有路由器发送信息;
RIP则只向与自己相邻的几个路由器发送信息
-
OSPF发送的信息是与本路由器相邻的所有路由器的链路状态(是路由器知道的信息的一部分)
RIP发送的是本路由器的整个路由表
-
OSPF中,当链路状态发生变化时,路由器才用洪泛法发送信息,且更新过程收敛很快
不会出现“坏消息传递得慢”的情况。
RIP中,不管网络拓扑是否发生变化,路由器之间都要定期交换路由表信息。
-
一个路由器的链路状态只涉及与相邻路由器的连通状态,与整个网络的规模并没有直接关系。
特点:
- OPSF允许对每条路由
设置不同的代价
,对不同类型的业务可以计算出不同的路由 - 如果到同一个目的网络有多条相同代价的路径,则可以将通信量分配给这几条路径
- OSPF分组具有
鉴别功能
,从而保证仅在可信赖的路由器之间
交换链路状态信息。 - OSPF支持可变长度的子网划分和无分类编址CIDR
- 每个链路状态都带上一个32位的序号,序号越大表示状态越新。
- 所有的路由器都能建立一个链路状态数据库,即全网拓扑图。
区域划分:
- OSPF将一个自治系统再划分为若干更小的范围,称为
区域
。划分区域的好处是,将利用洪泛法交换链路信息的范围局限在每个区域,减少了整个网络上的通信量。 - 在一个区域内部的路由器只知道本区域的完整网络拓扑,不知道其他区域的情况
- 划分区域使交换信息的种类增多,同时也让OSPF协议更加复杂。
- 在上层的区域叫做主干区域,用来连通其他在下层的区域。
- 主干路由器可以兼做区域边界路由器。
分组类型
- 问候分组:用来发现和维持邻站的可达性
- 数据库描述分组,向邻站给出自己的链路状态数据库中所有链路状态的摘要信息
- 链路状态请求分组,向对方请求发送某些链路状态项目的详细信息
- 链路状态更新分组,用洪泛法对全网更新链路状态。是OSPF最核心的部分
- 链路状态确认分组,对链路更新分组的确认
BGP协议
源主机和目标主机属于不同的自治系统时,需要使用外部网关协议,BGP就是一种。
- BGP发言人:配置BGP时,每个AS的管理员要选择至少一个路由器,作为该AS的发言人。一般是BGP边界路由器。
- 交换网络可达性的信息。
- 发生变化时更新有变化的部分。
BGP是应用层协议,借助TCP传送。
特点:
- 交换信息的结点数量级是AS个数的数量级,比AS中的网络数少很多
- 寻找一条较好的路径,取决于找好BGP发言人
- BGP支持CIDR
- BGP刚运行时,BGP的临站交换整个BGP路由表,但以后只在发生变化时更新有变化的部分。
- 四种报文:
- 打开
- 更新
- 保活:周期性地证实临站的连通性
- 通知:发送检测到的差错。
IP多播
-
源地址:源主机IP地址
-
目的地址:IP多播地址,即D类地址
223.0.0.0~239.255.255.255
每个D类IP地址标示一个多播组
-
使用IGMP协议
-
尽最大努力交付,不提供可靠交付
-
多播地址只能用于目的地址,不能用于源地址
-
对多播数据报不产生ICMP差错报文。
网际组管理协议IGMP
路由器要获取多播组的成员信息,需要利用IGMP。
被封装在IP数据报中传输。
工作分为两个阶段:
-
当某台主机加入新的多播组时,该主机应向多播组的多播地址发送一个IGMP报文,声明自己要成为该组的成员
-
组成员关系是动态的。
本地多播路由器周期性地探寻本地局域网上的主机,以便知道这些主机是否仍继续是组的成员。
只要对某个组有一台主机相应,多播路由器就认为这个组是活跃的。
移动IP
网络层设备
冲突域和广播域
-
冲突域:指连接到同一物理介质上的所有节点的集合,这些节点之间存在介质争用的现象。
集线器、中继器等不能划分冲突域;
网桥、交换机、路由器设备可以划分冲突域
-
广播域:指接收同样广播消息的结点集合
集线器、中继器、网桥、交换机不能划分广播域
路由器可以划分广播域,也可以连接不同的广播域。
通常说的局域网(LAN)特指使用路由器分割的网络,也就是广播域。
路由器的组成和功能
- 路由器是一种具有多个输入/输出端口的专用计算机,其任务是连接不同的网络(异构网络),并完成分组转发。
- 在多个逻辑网络互连时必须使用路由器。
工作过程
当源主机向目标主机发送数据报时,路由器先检查源主机与目标主机是否连接在同一个网络上。
-
若是,则直接交付而无需通过路由器
-
若否,则路由器按照转发表(由路由表得出)指出的路由,将分组转发给下一个路由器。这叫
间接交付
。 -
从结构上看,路由器由路由选择和分组转发两部分构成
-
从模型上看,路由器是网络层设备,实现了网络模型的下三层,即物理层、数据链路层、网络层。
路由选择
- 路由选择部分也称控制部分,核心构建是路由选择处理机,任务是根据选定的路由协议
构造并维护路由表
- 分组转发由三部分组成:
交换结构
、一组输入端口
、一组输出端口
。 - 交换结构:根据转发表对分组进行处理,将某个输入端口进入的分组从一个合适的端口转发出去。
- 输入端口:从数据链路层中提取出帧,剥去帧的首部和尾部后,分组被送入网络层的处理模块。
- 输出端口:执行和输入端口相反的操作
- 端口都设有一个
缓冲队列
,用来暂存分组,还可以用来进行差错检测。
路由表和分组转发
路由表
是根据路由选择算法得出的。- 标准的路由表具有4个项目:
目的网络IP地址
、子网掩码
、下一跳IP地址
、接口
- 路由表包含到互联网的默认路由,默认路由的目的地址和子网掩码都是0.0.0.0
转发表
是由路由表得出的,其结构应该使查找过程最优化。- 转发表中含有一个分组将要发往的目的地址,以及分组的下一跳。
- 可以用一个默认路由代替所有具有相同下一跳的项目,并把默认路由设置得比其他项目优先级低。
转发和路由选择
-
转发:路由器根据转发表把收到的IP数据报从何时的端口转发出去,只涉及一个路由器
转发靠查找转发表,而不是路由表。
-
路由选择:涉及很多路由器,路由表是许多路由器协同工作的结果。