如图所示,IPv4 协议定义了数据包报头中的许多不同字段。这些字段中包含了 IPv4 服务在通过网络转发数据包时要参照的二进制值。

本课程将考虑以下 6 个关键字段:

  • IP 源地址
  • IP 目的地址
  • 生存时间 (TTL)
  • 服务类型 (ToS)
  • 协议
  • 片偏移量

IPv4 报头的关键字段

IP 目的地址

IP 目的地址字段包含一个 32 位二进制值,代表数据包目的主机的网络层地址。

IP 源地址

IP 源地址字段包含一个 32 位二进制值,代表数据包源主机的网络层地址。

生存时间

生存时间 (TTL) 是一个 8 位二进制值,表示数据包的剩余“寿命”。数据包每经一个路由器(即每一跳)处理,TTL 值便至少减一。当该值变为零时,路由器会丢弃数据包并从网络数据流量中将其删除。此机制可以防止无法到达其目的地的数据在路由环路中的路由器之间无限期转发。如果允许路由环路继续,网络将会因永远也无法到达目的地的数据包而堵塞。在每一跳处减少 TTL 值可以确保该值最终变为零并且丢弃 TTL 字段过期的数据包。

协议

此 8 位二进制值表示数据包传送的数据负载类型。网络层参照协议字段将数据传送到相应的上层协议。

典型的值包括:

01 ICMP

06 TCP

17 UDP

服务类型

服务类型字段包含一个 8 位二进制值,用于确定每个数据包的优先级别。通过此值,可以对优先级别高的数据包(如传送电话语音数据的数据包)使用服务质量 (QoS) 机制。处理数据包的路由器可以配置为根据服务类型值来确定首先转发的数据包。

片偏移量

正如前文所提到的,路由器从一种介质向具有较小 MTU 的另一种介质转发数据包时必须将数据包分片。如果出现分片的情况,IPv4 数据包会在到达目的主机时使用 IP 报头中的片偏移量字段和 MF 标志来重建数据包。片偏移量字段用于标识数据包的数据片在重建时的放置顺序。

更多片标志

更多片 (MF) 标志是标志字段中的一个位,与片偏移量共同用于数据包的分片和重建。如果设置了更多片标志位,则表示这并非数据包的最后一个数据片。当接收方主机收到 MF = 1 的数据包时,会检查片偏移量以便了解此数据片在重建的数据包中应放置的位置。当接收方主机收到 MF = 0 且片偏移量中的值非零的帧时,会将该数据片作为重建的数据包的最后一部分放置。未分片数据包的分片信息全部为零(MF = 0,片偏移量 =0)。

不分片标志不分片 (DF) 标志是标志字段中的一个位,表示不允许对数据包分片。如果设置了不分片标志位,则表示不允许对此数据包分片。如果路由器必须对数据包分片后才能将其向下传送到数据链路层但 DF 位却设置为 1,则该路由器将丢弃此数据包。

链接:

RFC791 http://www.ietf.org/rfc/rfc0791.txt 

有关 IP 协议号字段值的完整列表:

http://www.iana.org/assignments/protocol-numbers

IPv4 报头的其它字段

 

版本 - 包含 IP 版本号 (4)

报头长度 (IHL) - 指定数据包报头的大小。

数据包长度 - 此字段以字节为单位,提供了包括报头和数据在内的整个数据包的大小。

标识 - 此字段主要用于唯一标识原始 IP 数据包的数据片。

典型的 IP 数据包

版本 = 4;IP 版本。

IHL = 5;以 32 位字(4 个字节)为单位的报头大小。此报头为 5*4 = 20 个字节,是最小有效大小。

总长度 = 472;数据包(报头和数据)的大小为 472 个字节。

标识 = 111;原始数据包的标识符(如果稍后对数据包分片,则需要此值)。

标志 = 0;表示可以根据需要对数据包分片。

片偏移量 = 0;表示此数据包当前未分片(无偏移量)。

生存时间 = 123;表示在丢弃该数据包之前允许的第 3 层处理时间,以秒为单位(设备每处理数据包报头一次便至少减 1)。

协议 = 6;表示此数据包所传送的数据是一个 TCP 数据段。

报头校验和 - 校验和字段用于对数据包报头执行差错校验。

选项 - IPv4 报头中为提供其它服务另行准备了一些字段,但这些字段极少使用。