Networking - IPv4 报文格式

每一个 IP 数据报都以一个 IP 报头开始。源计算机的 TCP/IP 软件构造这个 IP 报头,目的计算机的 TCP/IP 软件利用 IP 报头中封装的信息处理数据。IP 报头包含大量信息,包括源 IP 地址、目的 IP 地址、数据报长度、IP版本号和对路由器的特殊指令等。安全

Version

这个 4 位的字段表示所使用的 IP 版本。IPv4 相应的二进制是 0100。测试

IHL(Internet Header Length)

这个 4 位字段表示 IP 报头以 32 位字为单位的长度。IP 报头的最小长度是 5 个 32 比特字,相应的二进制表示 0101。调试

Type of Service

源 IP 可以指定特殊的路由信息。有些路由器会忽略这个地段的信息,但随着服务质量(QoS)技术的出现,这个字段获得了更多的重视。这个 8 位字段的主要用途是对等待经过路由器的数据报区分优先级,而目前大多数 IP 实现是把这个字段全填为 0。blog

Total Length

这个 16 位的字段表示 IP 数据报的长度,单位是字节,这个长度包含了 IP 报头和数据载荷。排序

Identification

这个 16 位的字段是一个依序变大的数值,分配给源 IP 发出的消息。当传递到 IP 层的消息太大而不能放到一个数据报里时,IP 会把消息拆分到多个数据报,并对这些数据报排序分配相同的标识号。接收端利用这些数值重组为原始消息。路由

Flags

这个字段表示分段可能性。第 1 位未使用,其值应该为 0。第 2 位称为 DF(Don’t Fragment),表示是否容许分段,0 表示容许,1 表示不容许。第 3 位是 MF(More Fragments),表示是否还有分段正在传输,设置为 0 时表示没有更多分段须要发送,或是数据报根本没有分段。io

Fragment Offset

这个 13 位的字段是一个数值,被赋予每一个连续的分段。目的设备的 IP 利用这个值以正确的次序重组分段。table

Time To Live (TTL)

这个字段表示数据报在被抛弃以前能保留的时间(以秒为单位)或路由器跳数。每一个路由器都会检查这个字段,而且至少把它减去 1,或数据报在路由器中延迟的秒数。当这个字段的值为 0 时,数据报会被抛弃。软件

Protocol

这个 8 位的字段表示接收数据载荷的协议,好比协议标识为 6(二进制位为 00000110)的数据报会被传递到 TCP 模块。下面是一些常见的协议标识值。路由器

 协议名称   协议标识 
ICMP 1
TCP 6
UDP 17

Header Checksum

这个字段包含 16 位的校验和,只用于检验报头自己的有效性。数据报通过的每一个路由器都会对这个值从新进行计算,由于 TTL 字段的值是在不断变化的。

Source IP Address

这个 32 位的字段包含了数据报的源 IP 地址。

Destination IP Address

这个 32 位的字段包含了数据报的目的 IP 地址。目的 IP 根据这个值检验发送的正确性。

IP Options

这个字段支持一些可选的报头设置,主要用于测试、调试和安全的目的。这些选项包括严格源路由(数据报必须通过指定的路由)、网际时间戳(通过美国路由器的时间戳记录)和安全限制。

Padding

IP 选项字段的长度不是固定的。填充字段能够提供一些额外的 0,从而保证整个报头的长度是 32 位的整倍数(报头长度必须是 32 位字的整数倍,由于 IHLL 字段以 32 位字为单位表示报头的长度)。

IP Data Payload

这个字段用于保存传递给 TCP 或 UDP(在传输层中)、ICMP 或 IGMP 的数据。数据块的长度不定,能够包含数千字节。

相关文章
相关标签/搜索