教材:计算机网络(第四版)
作者:吴功宜 吴英
出版社:清华大学
第五章 网络层

5.1 网络层与IP协议
- 网络层基本概念:网络层通过路由选择算法,为IP分组从源主机到目的主机选择一条合适的传输路径,为传输层端—端数据传输提供服务

5.2 IPv4协议的基本内容
5.2.1 IP协议的主要特点
-
IP协议:是一种无连接、不可靠的分组传送服务的协议
(分组→类似数据报P30)
-
IP协议是点-点的网络层通信协议
IP协议是针对源主机—路由器、路由器—路由器、路由器—目的主机之间的数据传输的点—点的网络层通信协议
-
IP协议屏蔽了互联的网络在数据链路层、物理层协议与实现技术上的差异
(IP协议承上启下)
IP协议是为了在分组交换(Packet-switched,又译为包交换)计算机通信网络的互联系统中使用而设计
IP层只负责数据的路由和传输,在源节点与目的节点之间传送数据报,但并不处理数据内容。
数据报中有目的地址等必要内容,使每个数据报经过不同的路径也能准确地到达目的地,在目的地重新组合还原成原来发送的数据

5.2.2 IPv4分组格式
1. IPv4分组结构
-
IP分组也称为IP数据报
-
IPv4分组:分组头和数据。IP分组头长度为20B~60B(就是一串数字)
- 分组头长度可变,每行宽度为4B
- 前五行为分组头必需有的域,长度为20B(5行*4B)
- 第六行为选项域,最长为40B

2. 分组头格式
(1)版本字段
-
长度:4位
-
版本字段值为4,表示IPv4
版本字段值为6,表示IPv6
(2)协议字段
-
长度: 8位
-
作用: 表示使用IP协议的高层协议类型
-
标识使用何种协议,通过该字段指示了IP分组应该交给哪个传输层协议
(IP数据部分须按什么协议来进行解析,可参考第六章UDP协议)
(3)长度
-
IP分组头有两个长度字段:分组头长度(报头长度)、总长度
-
分组头长度字段
-
长度: 4位
-
作用:它定义了以4字节为一个单位的分组头的长度
(定义了分组头有多少行)
-
分组头中除了IP选项字段与填充字段之外,其他各项是定长的
-
IP分组的分组头长度必须为4字节的整数倍。如果不是4字节的整数倍,则由填充字段(填充域)“添0”补齐
-
分组头长度字段最小值为5(4B×5行=20B4B×5行=20B4B×5行=20B)
(分组头最少有五行)
最大长度为15 (4B×15行=60B4B×15行=60B4B×15行=60B)
(分组头长度为4bit,取值范围为:0000B-1111B,也就是0~15行,但规定了分组头最少必须要有五行,因此 分组头的长度范围是5~15行)
-
-
总长度字段
- 长度: 16位
- 作用: 定义以字节为单位的分组总长度,是分组头长度与数据长度之和
- 总长度字段长度为16位,它能表示的IP分组最大长度为65535(216-12^{16}-1216-1)字节,其中包括分组头长度
- IP分组中高层协议的数据长度=分组的总长度−分组头长度IP分组中高层协议的数据长度 = 分组的总长度 - 分组头长度IP分组中高层协议的数据长度=分组的总长度−分组头长度
(4)区分服务字段(服务类型字段)
- 长度: 8位
- 作用: 用于指示路由器如何处理该分组
(5)生存时间(time-to-live,TTL)字段
- 长度: 8位
- 作用: 设定分组在Internet中的“寿命”,它通常是用转发分组最多的路由器跳数(hop) 来度量
- 生存时间TTL的初始值由源主机设置,经过一个路由器转发之后,TTL值减1
- 当TTL的值为0时,丢弃分组并发送ICMP报文通知源主机
(6)头校验和字段
-
长度: 16位
(P216 中写的是8位,估计是印错了)
-
作用: 保证分组头部数据完整性
-
IP分组只对分组头进行校验,不包括分组数据
- IP分组头之外的部分属于高层数据,高层数据都会有相应的校验字段,IP分组不对高层数据进行校验
- 每经过一个路由器,IP分组头都要改变一次,数据部分并不改变。设置头校验和只对变化部分进行校验是合理的,可以减少路由器对每个接收分组的处理时间,提高路由器的运行效率
(7)地址字段
-
地址字段包括源地址与目的地址(点-点传输)
-
在分组的整个传输过程中,无论采用什么样的传输路径或如何分片,源地址与目的地址始终保持不变
(在物理链路层中,物理地址在转发时会改变)
-
源地址字段
- 长度: 32位
- 作用: 表示发送分组的源主机的IP地址
-
目的地址字段
- 长度: 32位
- 作用: 表示接收分组的目的主机的IP地址
3. IP分组的分片与组装
(1) 最大传输单元(MTU)与IP数据报分片
-
MTU(Maximum Transmission Unit):最大传输单元
每个数据链路层能够确定发送的一个帧的最大长度
-
分片: 实际使用的网络最大传输单元长度比IP数据报最大长度短,使用它们传输IP数据报时,要对其进行分片传输
如:Ethernet的MTU的长度为1500B,因此,在使用这些网络传输IP分组时,要将IP分组分成若干较小的片(fragment)来传输
-
IP数据报(作为网络层数据)→数据链路层(封装成帧)→物理层(传输到另一物理层)
-
一个数据报可能要通过多个不同的物理网络
-
不同的物理网络的数据链路层的MTU长度可能不同(MTU长度由物理网络所采用的协议决定,如PPP协议规定它的信息帧的信息字段最长为1500B,P117)
-
-
由于IP协议是数据链路的上一层,所以它必须不受数据链路的MTU大小的影响能够加以利用
-
因此,路由器将接收到的帧进行拆包和处理,然后封装成另外一个帧,并准备转发到目的主机时,首先根据下一个网络的数据链路层MTU,决定该分组在转发之前是否需要分片
(2)IP数据报分片的基本方法
先确定片长度,然后将原始IP分组包括分组头分成第1片,若剩下的数据仍大于片长度,再进行第2次分片,第2个分片数据加上分组头构成第2个片,如此直到剩下的数据小于片长度

(3)域标识、标志和片偏移
在IP分组的报头中,与一个分组的分片、组装相关的域有

-
标识域