IPV4数据包结构

IPV4数据包结构:

IPV4数据包结构

每一行32个bit,一个字节8bit,也就是4个字节,IPV4的Header(包头)默认大小为20个字节(默认上面五行)

IPV4数据包结构

第一行:

1.version,IP协议版本号,代表IPV4,大小为4个bit

2.IHL,代表IP包头的大小,大小为4个bit(其中一个bit代表32bit),IHL最小值为4最大值为15,所以IPV4大小在20个字节与60个字节之间

3.Type of Service,服务类型(Tos),对流量进行标记用于做QS(服务质量,用作网络优化,重要流量优先传递),大小为8个bit,利用DSCP(区分服务)方法标记前6位bit(64种不同的服务类别),后2个bit用于ECN(显示拥塞通道)

4.Total Length,描述的是一个完整IPV4数据包的大小(总长度),很多时候描述的是没有被分段切割的数据,大小为16位bit,IP 包最大长度 65535 字节(16位长的二进制最大表示:2的16次方-1)

第二行:

1.Identification,标识符,在三层对流量进行标记,针对同一个流量包被分成很多片其每一片的标记符一样,占16bit。该字段和 Flags 和Fragment Offest字段联合使用,对大的上层数据包进行分段(fragment)操作。

2.Flage,标记位,作用于后面方便数据重排序重组。第一个bit为(R保留位不使用);第二个bit(DF,Don’t Fragment不分片位),DF位设为 1 时表明路由器不能对该上层数据包分段,如果一个上层数据包无法在不分段的情况下进行转发,则路由器会丢弃该上层数据包并返回一个错误信息;第三个bit(MF,More Fragment更多分片位),当路由器对一个上层数据包分段,除了最后一个分段的MF 为 0 外,其它所有分段的 MF 位均为 1,直到接受到 MF 位为0 的分段说明数据结束,占3bit

3.Fragment Offset,分片偏移,指的时该分片距离没分片完整数据包头部的偏移值(比如第一个分片的偏移值就是0,第二个分片的偏移值则为第一个分片的大小),占13bit,该字段对包含分段的上层数据包的 IP 包赋予序号。由于 IP 包在网络上传送的时候不一定能按顺序到达,这个字段保证了目标路由器在接受到 IP 包之后能够还原分段的上层数据包。到某 个包含分段的上层数据包的 IP 包在传送是丢失,则整个一系列包含分段的上层 数据包的 IP 包都会被要求重传。因此,容易发生故障的数据链路会造成时延不成比例。另外,如果由于网络拥塞造成分段丢失,那么重传整段分组会进一步加重网络拥塞。

第三行:

1.Time To Live,生存时间(默认为255s),占8个bit,当 IP 包进行传送时,先会对该字段赋予某个特定的值,该值不以s为单位。当 IP 包经过每一个沿途的路由器的时候,每个沿途的路由器会将 IP 包的 TTL 值减少 1。如果 TTL 减少为 0,则该 IP 包会被丢弃。这个字段可以防止由于故障而导致 IP 包在网络中不停被转发。 TTL 常用的值是 15 和 32,但是建议缺省值是 64.

2.Protocol,协议号(0255,可用1255),用作描述上层是用什么协议(例如TCP=6,UDP=17,OSPF=89,ICMP=1,EIGRP=88),占8个bit

3.Header Checksum,包头校验和,用于计算IP包头的完整性,占16个bit,由于 IP 包头是变长的,所以提供一个头部校验来保证 IP 包头中信息的正确性。如果数据包没有发送错误,那么结果应该16 位全部为1,由于每一台路由器都会降低 TTL 的值,所以每台路由器都必须重新计算校验和。

第四行:

Source Address,源地址,占32个bit

第五行:

Destination Address,目的地址,占32个bit**

第六行:

大小要不为0,要不为32bit,要不为32bit的倍数

1.Options,可选字段(长度可变),该字段由起源设备根据需要改写可选项目有:松散源路由,严格源路由,路由记录,时间戳

(1)松散源路由(Loose source routing):给出一连串路由器接口的 IP 地址。 IP 包必须沿着这些 IP 地址传送,但是允许在相继的两个 IP 地址之间跳过多个 路由器。
(2)严格源路由(Strict source routing):给出一连串路由器接口的 IP 地 址。IP 包必须沿着这些 IP 地址传送,如果下一跳不在 IP 地址表中则表示发生错误。
(3)路由记录(Record route):当 IP 包离开每个路由器的时候记录路由器的出站接口的 IP 地址。
(4)时间戳(Timestamps):当 IP 包离开每个路由器的时候记录时间。

2.Padding,填充项,通过在可选字段后面添加0来补足32位,这样保证报头长度是32位的倍数。