IPv4数据报的结构

IPv4分组结构

image

IPv4各个字段的含义

  • 4位版本号

版本字段值为4,表示IPv4
版本字段值为6,表示IPv6

  • 4位头部长度

表示IPv4头部的长度,不包括数据部分。它的单位为4字节,所以可以表示的最大长度为6
0字节。而IPv4数据报前20个字节的字段是必须的,所头部长度的最小值为5,最大值为15。

  • 服务类型

8位服务类型包含3位优先权字段(已经被忽略),4位的TOS字段和1位保留字段(保留字
段必须置0)。4位的TOS字段分别表示:最小延时、最大吞吐量、最高可靠性和最小费用
。其中最多一个能置1.。比如像ssh和Telnet这样的登录程序需要最小延时的服务,而文
件传输程序需要最大吞吐量的服务。

  • 16位总长度(字节为单位)

这个字段表示的是整个IPv4数据报的长度(头部和数据之和)。由于有16位字段可以表示
的最大长度为:65535字节,但是受到MTU的限制,则超过MTU部分会被分片传输

  • 16位标识

16位标识唯一标识主机发送的每一个数据报。其初始值由系统随机生成;每发送一个数据
报,其值加1。该值在数据报分片传输时,被复制到每个分片中,因此同一数据报的所
有分片都具有相同的标识值。

  • 3位的标志字段

第一位保留,第二位(Don’t
FragmentDF)表示不要分片。如果该位被置1,IP模块将不对数据报进行分片,如果数据
报超出了MTU,则会被丢弃并且返回ICMP数据报给发送端。第三位(More Fragment
MF),表示更多分片,除了数据报的最后一个分片外,其他分片都要把它置1。

  • 13位偏移

这个偏移是指当前分片的偏移是相对于原始IP数据报的开始处(仅指数据部分)的偏移。
实际的偏移值是该值左移3位(乘8)后得到的值。正是由于这个原因,除了最后一个IP分
片外,其他的每个分片的数据部分的长度都要为8的倍数。

  • 8位生存时间

8位的生存值(Time To Live TTL)是数据报到达目的之前允许经过的路由器跳数。TTL值被发送端设置(通常设置为64
)。数据报在转发过程中,每经过一个路由器,该值就减一,但TTL的值减为0时,数据报
就被丢弃,并返回一个ICMP数据报给发送端。

  • 8协议字段

这字段用来区分上层所使用的协议,1代表ICMP,6代表TCP,17代表UDP,89代表OSPF

  • 头部检验和

16位头部校验和由发送端填充,接收端对其使用CRC算法以检验IP数据报头部(注意:只是检查头部),在传输过程中是否被损坏

  • 源IP地址和目的IP地址

这两个字段都是由发送端填充。

  • 选项字段

IPv4最后一个选项字段(option)是可变长的可选信息。这部分最多包含40字节,因为IP
头部最长是60字节(其中还包含前面讨论的20字节的固定部分)。可用的IP选项包括:

  1. 记录路由(record route),告诉数据报途经的所有路由器都将自己的IP地址填入IP
    头部的选项部分,这样我们就可以跟踪数据报的传递路径。
  2. 时间戳(timestamp),告诉每个路由器都将数据报被转发的时间(或时间与IP地址对)填入IP头部的选项部分,这样就可以测量途经路由之间数据报传输的时间。
  3. 松散源路由选择(loose source routing),指定一个路由器IP地址列表,数据报发送过程中必须经过其中所有的路由器。
  4. 严格源路由选择(strict source routing),和松散源路由选择类似,不过数据报只能经过被指定的路由器。

总结

本篇博客介绍了IPv4的数据报的布局以及各个字段的含义,这个对我们去了解后续介绍的网络层方面的知识是很有帮助的。