IP数据报的格式
一个IP分组(或称IP数据报)由首部和数据部分组成。首部前一部分的长度固定,共20B,是所有IP分组必须具有的。在首部固定部分的后面是一些可选字段,其长度可变,用来提供错误检测及安全等机制。IP数据报的格式如图4.5所示。
- 版本。占4位。指IP的版本,IPv4数据报中该字段值是4。
- 首部长度。占4位。以4B为单位,最大可表示的首部长度为60B(15×4B)。最常用的首部长度是20B(5×4B),该字段值是4,此时不使用任何可选字段。
IP首部前两个字节往往以0x45开头,解题时可用于定位 IP数据报的开始位置。
-
总长度。占16位。指首部和数据之和的长度,单位为字节,因此数据报的最大长度为\(2^{16}\)-1=65535B。以太网帧的最大传送单元(MTU)为1500B,因此当一个IP数据报封装成帧时,数据报的总长度(首部加数据)一定不能超过下面的数据链路层的MTU值。
-
标识。占16位。它是一个计数器,每产生一个数据报就加1,并赋值给标识字段。但它并不是“序号”(因为IP是无连接服务)。当一个数据报的长度超过网络的MTU时,必须分片,此时每个数据报片都复制一次标识号,以便能正确地重装成原来的数据报。
-
标志(Flag)。占3位。标志字段的最低位为MF,MF=1表示后面还有分片,MF=0表示最后一个分片。标志字段中间的一位是DF,只有当DF=0时才允许分片。
-
片偏移。占13位。它指出较长的数据报在分片后,某片在原数据报中的相对位置,片偏移以8B为偏移单位。除最后一个分片外,每个分片的长度一定是8B的整数倍。
-
生存时间(TTL)。占8位。数据报在网络中可通过的路由器数的最大值,标识数据报在网络中的寿命,以确保数据报不会永远在网络中循环。路由器在转发数据报前,先将TTL减1。若TTL被减为0,则该数据报必须丢弃。
-
协议。占8位。指出此数据报携带的数据使用何种协议,即数据报的数据部分应上交给哪个协议进行处理,如TCP、UDP等。其中值为6表示TCP,值为17表示 UDP。
-
首部检验和。占16位。它只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,都要重新计算首部检验和(有些字段,如生存时间、总长度、标志、片偏移、源/目的地址都可能发生变化)。不检验数据部分可减少计算的工作量。
-
源地址字段。占4B,标识发送方的IP地址。
-
目的地址字段。占4B,标识接收方的IP地址。
在IP 数据报首部中有三个关于长度的标记,即首部长度、总长度、片偏移,它们的基本单位分别为4B、1B、8B(需要记住)。题中常出现这几个长度之间的加减运算。
首部校验和的计算
在发送方,首先将IP数据报首部划分为许多16位字的序列,并把检验和字段置零。用反码算数运算把所有16位字相加后,将得到的和的反码写入检验和字段。接收方在接到数据报后,把首部的所有16位字在使用反码算数运算相加一次,将得到的和取反码,即得到接收方检验和的计算结果,若首部未发生任何变化,则此结果必为0,于是就保留这个数据报,否则就认为出差错,将这个数据报丢弃。
反码算数运算:与普通算数运算的唯一区别就是,当最高位产生进位时,要进行一个回卷操作,即将最高位进位加到最低位,直到不再产生新的最高位进位为止
下面我们来举一个实际例子,对1101,1011
进行校验
(1011) + (1101) = (1000) 进1,将这个进位加到结果的末位,得到(1001),再取反码,于是校验和就是(0110)
下面进行校验
(1011) + (1101) + (0110) = (1110)进1,将这个进位加到结果的末位得到(1111),再取反码得到0,说明没有发生错误
IP数据报的分片
一个链路层数据帧能承载的最大数据量称为最大传送单元(MTU)。因为IP数据报被封装在链路层的帧中,因此链路层的MTU严格地限制了 IP数据报的长度,而且在IP 数据报的源与目的地路径上的各段链路可能使用不同的链路层协议,有不同的 MTU。例如,以太网的 MTU为1500B,而许多广域网的MTU不超过576B。当IP数据报的总长度大于链路 MTU时,就需要将IP数据报中的数据分装在多个较小的IP数据报中,这些较小的数据报称为片。
IP分片涉及一定的计算。例如,一个长4000B的IP 数据报(首部 20B,数据部分3980B)到达一个路由器,需要转发到一条MTU为1500B的链路上。这意味着原始数据报中的3980B数据必须分配到3个独立的片中(每片也是一个IP数据报),每片的数据部分依次为1480B、1480B和1020B。假定原始数据报的标识号为777,则分成的3片如图4.6所示。可见,因为偏移值的单位是8B,所以除最后一个片外,其他所有片中的数据部分都为8B的倍数。
标签:首部,IP,MTU,分片,长度,数据 From: https://www.cnblogs.com/AH20/p/18461493注意这里仅对载荷部分进行了分片,原来的首部直接扔掉了