首页 > 代码库 > IPv4报头

IPv4报头

wKiom1R2i9qCF3vEAAYEiBgK_tU048.bmp

IPv4有哪些字段呢?为什么要有这些字段呢?

 

版本:就是用来区分IP报文的版本的

   IHL:什么是IHL,为什么会有这个字段呢?因为IPV4的报头是可变长的,那我要怎么告诉接收到这个报文的设备,从哪里开始是我携带的数据,万一没有这个字段,别人就不知道从哪里开始才是我携带的数据。IHL字段二级制是1111,十进制就是15,所以乘以4就是IP报头的最大长度。

 

那么问题就来了?你说IP报文头是可变长的?那范围呢?为什么是可变长的呢?

我先回答第一个问题,IP报文头的大小从20-60字节。

第二个问题,是因为IPv4报文头定义了一个options字段,这个字段主要是用来测试用的,他可以有很多功能,常用的如下:

松散源路由选择:这个字段里面可以记录一连串的IP地址,数据包必须沿着IP地址转发,但是可以跳过多个路由器,只要转发的路径能经过里面的IP就行。

严格源路由选择:就是说我的数据包必须按照我指定的IP路径来转发,如果不是这样的就发生错误。

记录路由:可以记录数据包经过的路由器的传站IP地址,用来保存路径

时间戳:记录到达每个路由器的时间。

 

Type of Service:QOS字段

 

TotalLength:二进制16个1,用这个减去IP报头大小,就是数据的有效载荷的大小。16个1十进制等于65535,IP数据包最大65535,

 

Indentifier:字段长度为16位,在数据包有分片的时候,可以给分片的数据包做个标记,让别人区分分片数据包是属于哪一组数据的。

 

标记字段(flag):3位(初始二进制000),第1位没有用,第2位(DF)是不分段,如果是1就表示不允许分段,如果分段了就丢弃;第三位(MF)什么意思呢,就是还有更多分片,如果是1就表示还有分段,如果是0就是没有分段了。

 

分段偏移(fragment offset):标记一个分片报文在一个分组中是处于什么位置的,让接受设备可以正确重组设备。

 

假设数据包长度为3000字节,分片以后为1480 1480 40,接口的MTU1500,数据帧传输的过程中数据最大长度为1514字节,最小为82字节,14字节为二层帧大小,那第一个数据包的偏移量为0,因为是始发数据包,第二个数据包的偏移量为1480,第三个数据包的偏移量为2960

 

生存时间(TTL):二进制8位,默认为255,数据包每过一个路由器,该字段减1,当变0时数据包丢弃。

 

报头校验和(Header checksum):只针对IP报头的纠错字段。

 

源地址和目的地址:32位字段。

 

可选项:前面已经提过啦;

 

padding:针对option字段的填充,保证IP头是32的倍数。


本文出自 “八块排骨加油站” 博客,谢绝转载!

IPv4报头