一:IP数据报格式
- 网络层最重要的便是IP协议,它定义了数据传送的基本单元——IP数据报
IP数据报格式:一个IP分组由首部和数据两部分组成。首部前一部分的长度固定,共20B,是所有IP分组必须具有的。在首部固定部分的后面是一些可选字段,其长度可变,用来提供错误检测及安全等机制。IP 数据报的格式如下图所示
-
版本:指IP的版本,目前广泛使用的版本号为4,即IPv4 -
首部长度:占4位,以32位为单位,最大值为60B (15×4B)。 最常用的首部长度是20B,此时不使用任何选项(即可选字段) -
区分服务:用于指示期望获得哪种类型的服务 -
总长度:占16位。指首部和数据之和的长度,单位为字节,因此数据报的最大长度为216-1= 65535B。以太网帧的最大传送单元(MTU)为1500B,因此当一个IP数据报封装成帧时,数据报的总长度(首部加数据) 一定不能超过下面数据链路层的MTU值 -
标识:占16位。它是一个计数器,每产生一个数据报就加1,并赋值给标识字段。但它并不是“序号”(因为IP是无连接服务)。当一个数据报的长度超过网络的MTU时,必须分片,此时每个数据报片都复制一次标识号,以便能正确重装成原来的数据报 -
标志:占3位。标志字段的最低位为MF,MF= 1表示后面还有分片、MF=0表示最后一个分片。标志字段中间的一位是DF,只有当DF=0时才允许分片 -
片偏移:占13位。它指出较长的分组在分片后某片在原分组中的相对位置。片偏移以8个字节为偏移单位,即每个分片的长度一定是8B (64位)的整数倍 -
首部校验和:占16位。IP数据报的首部校验和只校验分组的首部,而不校验数据部分 -
生存时间(TTL):占8位。数据报在网络中可通过的路由器数的最大值,标识分组在网络中的寿命,以确保分组不会永远在网络中循环。路由器在转发分组前,先把TTL减1。若TTL被减为0,则该分组必须丢弃 -
协议:占8位。指出此分组携带的数据使用何种协议,即分组的数据部分应交给哪个传输层协议,如TCP、UDP等(值为6表示TCP,值为17表示UDP) -
源地址字段:占4B,标识发送方的IP地址 -
目的地址字段:占4B,标识接收方的IP地址 -
可选字段:占0-40B,用于支持排错、测量及安全等措施 -
填充:全0,用于把首部补成4B的整数倍
二:IP数据报分片
IP数据报分片:前面说过,最大传送单元(MTU)是指链路层数据报能承载的最大数据量。因此,由于IP数据报被封装在链路层数据报中,所以链路层的MTU严格限制着IP数据报的长度,而且在IP数据报的源与目的地路径上的各段链路可能使用不同的链路层协议,有不同搞得MTU。所以,当IP数据报的总长度大于链路MTU时,就需要将IP数据报中的数据分装在两个或多个较小的IP数据报中,这些较小的数据报称为片
要完成IP数据报的分片与重组,需要借助IP数据报格式中的标识、标志和片偏移
- 标识:同一数据报的分片使用同一标识
- 标志:中间为DF(DF=1表示禁止分片;DF=0表示允许分片)和最低位MF(MF=1表示后面还有分片;MF=0表示最后一片或者没有分片了)
- 片偏移:指出较长分组分片后某片在原分组中的相对位置,以8B位单位
特别注意: 除了最后一个分片,每个分片长度一定是8B的整数倍
如下是一个分片的典型例子
|