IP报文头详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IP报文头详解相关的知识,希望对你有一定的参考价值。

IPv4报头:

技术分享图片

报头长度:20-60字节bytes 

白色部分为固定头部部分(20 bytes),绿色option选项部分为可选部分。  

固定头部大小计算: 

4bit + 4bit + 8bit + 16bit +16bit + 3bit + 13bit + 8bit +8bit + 16bit + 32bit(IP) + 32bit(IP) = 160bit = 20byte  

所以IP头必须大于等于20byte,最大为60byte意味着Option选项部分取值范围0-40bits

 1、 VER(版本):用于区分不同IP版本。如IPv4IPv5IPv6,用4bit表示,IPV4=0100

 2、  HLEN(头部长度):因为头部长度不固定(Option可选部分不固定),所以需要标识该分

组的头部长度多少,用4bit表示,以4byte为单位,取值范围:5-15,即20-40byte(其他字段也是类似的计算方式,因为bit位是不够表示该字段的值) 

3 Service typeType of Service服务类型:TOS):用来指定特殊的报文处理方式,又划分为IP precedencD/T/Rreserve保留字段,RFC2474ToS取消了IP precedence字段而使用了DSCPQoS里有描述,给QoS用来打标签。TOS字段历史:

技术分享图片

4 Total Length(总长度):整个IP分组的长度,可用总长度减去头部长度获得实际报文数据的长度,取值范围0-65535byte,链路只允许1500byte,所以一般都需要MTU分片 

5 IdentificationID:标识符):通常与标记字段和分片偏移字段一起用于IP报文的分片。

当原始报文大小超过MTU,那么就必须将原始数据进行分片。每个被分片的报文大小不得超过MTU,而这个字段还将在通一原始文件被分片的报文上打上相同的标记,一边接收设备可以识别出属于同一个报文的分片,“类似于进程号”,有时候电信会用他来识别流量是否是同一台主机(因为做了PAT后源ip都是一样的)

技术分享图片

6 Flags(标记):1位没有被使用,第2D是不分片位(DF),当DF位设置为1时,表示路由器不能对报文进行分片处理,第3M表示还有后继分片(MF),当路由器对报分进行分片时,除了最后一个分片的MF位设置为0外,其他所有分片的MF位均设置1,以便接收者直到收到MF位为0的分片为止

技术分享图片

7 Fragmentation offset(分片偏移):标识某个分片在分组中的位置

数据为何要分片(MTU):任何一个物理网络都有一个最大的传输单元,物理介质传输的能力是有限制的,不可能一次可传无限的数据帧。 

以太网最大的帧长为1518 IP报文1500byte + 帧头18byte = 1518byte

技术分享图片

注意:Ethernet以太网跟802.3以太网有所区别,802.3是由IEEE指定的标准,比较复杂用的比较少,网卡一般两种都支持。

IP数据包的MTU值在各种物理线路环境下对应的MTU取值:(注意:不包含帧头和尾)

技术分享图片

8 Time to liveTTL:生存时间):也就是跳数的大小,即数据包能传多少跳 

ping命令里的TTL,根据操作系统的不同TTL默认最大取值也会有所不同, linxu

TTL=255win98TTL=128win7TTL=64这都是由应用程序自由决定的。 

注意:TTL并不是一个真正时间值,因为分组的往返所花的时间(包括线路、路由器处理的时间),到底要设置TTL为多少是非常的困难的,所以用跳数来表示,而实际的往返时间计算保存在ICMP所封装的数据里。如下图的time=2ms才是真正的往返时间

技术分享图片

最后的接收者是不需要检查该包的TTL值是否为0,因为没再转发的必要。 

注意:该显示的TTL值是响应方的TTL值(响应方发送的响应包的TTL值,通过中间减跳

后的最终显示在发送者终端上),而不是你自己的TTL值,所以通过pingTTL值可以简单判断对方是什么操作系统 

9 Protocol(协议):标识出传输层的地址或协议号,也就是说表示数据要进行什么样的上层服务,应该交给自己上一层的哪个协议(ICMP/IGMP/OSPF都介于网络层和传输层之间,但一般视作网络层,因为都需要用IP报头封装。所以代表交给ICMP6代表交给TCP 

技术分享图片

10Header checksum(报头校验和):用于校验检查IP报头是差错。 

    1)只校验头部,数据部分由高层协议校验(TCP头的校验字段包含IP头和数据的校验,

IPSecNAT-T穿越时有讲,链路层的帧校验包含整个帧) 

    2)无需重复校验数据部分 

    3)缩短了路由器转发分组时的处理时间,把工作交给终端主机使用高层的协议校验数据

技术分享图片

校验和计算方法: 

首先把检验和字段置为0。然后,对首部中每个16 bit(切割成多个16bit组)进行二进制反码求和(整个首部看成是由一串16 bit的字组成),结果存在检验和字段中。当收到一份IP数据报后,同样对首部中每个16 bit进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1。如果结果不是全1(即检验和错误),那么IP就丢弃收到的数据报。但是不生成差错报文,由上层去发现丢失的数据报并进行重传。 报头:1011011101111011 = 16bit 反码:0100100010000100 求和:1111111111111111 

11source ip addressIP地址,32bit 

12Destination ip address目的IP地址,32bit 

13Option可选字段:Option字段很少使用,用于控制、转发要求、测试等

 

技术分享图片


以上是关于IP报文头详解的主要内容,如果未能解决你的问题,请参考以下文章

http报文头域详解

HTTP协议详解(头报文)

Http协议之详解

IP报文格式详解

IP报文详解

TCP/IP详解卷一06