IP数据报格式

1、报文格式

前几篇总结过较多网络层的知识,ARP,ip地址、子网掩码等等。这次总结一下IP数据报的报文格式
IP数据报的格式能够说明IP协议都具有什么功能。在TCP/IP的标准中,各种数据格式常常以32位(4字节)为单位来描述的。
IP数据报格式_第1张图片
wireshark中IP数据报文呈现
IP数据报格式_第2张图片

一个IP数据报文由首部数据两部分组成。首部的前一部分是固定长度,共20字节。是所有IP数据报文必须具有的。在首部的固定部分的后面是一些可选字段,其长度可变。

2、首部个字段意义

  1、版本占4位,指IP协议的版本。通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。版本号为6(即IPv6)
  2、首部长度占4位,可表示的最大十进制数值是15。首部长度字段所表示的单位是32位(4字节,与TCP首部中长度字端单位一致)。因为IP首部的固定长度是20字节,因此首部长度字段的最小值为5(0101)。当首部长度为15(1111)时,表示的长度为60字节当IP分组的首部长度不是4的整数倍时,必须利用最后的填充字段加以填充达到4的整数倍。
  3、区分服务占1字节,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。只有在区分服务时,这个字段才起作用。在一般情况下都不使用这个字段。
  4、总长度占2字节,指首部和数据之和的长度,单位为字节。能表示的最大长度为65535字节。在IP层下面的链路层协议规定了一个数据帧的数据字段的最大长度,这称为最大传输单元MTU(maximum transfer unit)。当一个IP数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的链路层所规定的的MTU值。

以太网规定MTU为1500字节。MTU是数据链路层所规定的,用于限制链路层数据部分的长度。按照分层组包思路MTU是作用于网络层(网络层此时是链路层的数据部分)。若所传送的数据报长度超过链路层的MTU值,就必须把过长的数据进行分片处理(后面会详细讲述)。

  虽然使用尽可能长的IP数据报会使传输效率得到提高(载荷利用率高)。但数据报短些也有好处。每个IP数据报越短,路由器转发的速度就越快。

  5、标识(identification)占2字节。网络层软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不同于TCP首部中的序号,因为IP是无连接的服务,数据报不存在按序接收的问题。当数据报长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有被分片报文片的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装层原来的数据。
  6、标志占3位,目前只有两位有意义。

标志字段中间的一位记为DF(dongt fragment),意思是“不能分片”。当DF=0时才允许分片。
标志字段最低位MF(more fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个。

  7、片偏移占13位。片偏移指出:较长的IP报文在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。每片的长度一定是8字节的整数倍。

例如:一数据报的总长度为3820字节,数据部分为3800字节(IP首部为固定20字节),需要分片传输。假设每片IP报文长度不超过1420字节。去掉固定首部长度20字节,每片报文数据部分长度不超过1400。于是分成3个数据报片,其数据部分长度分别为1400、1400、100字节。原始数据报首部被复制为各数据报片的首部,只需要改变有关字段的值。

数据分片举例

IP数据报格式_第3张图片
报文首部中与分片有关的字段中数值,标识部分是任意给定的值

总长度 标识 DF MF 片偏移
原始数据报 3820 123 0 0 0
分片1 1420 123 0 1 0
分片2 1420 123 0 1 175
分片3 1020 123 0 0 350

  8、生存时间占8位,英文缩写TTL(Time To Live),表明数据报在网络中的寿命。由发出数据报的源点设置这个字段。目的是防止无法交付的数据无限制地在互联网中兜圈子。路由器在每次转发数据报之前就把TTL值减1。若TTL值减小到零,就丢弃此报文,不在转发。
  9、协议占8位,协议字段指出此数据报携带的数据是使用何种协议(上面数据包中协议字段为6表示使用TCP协议),以便使用的目的主机的IP层知道应将数据部分上交给哪个协议进行处理。
常见的协议号

协议名 ICMP IGMP IP TCP IPv6 UDP
协议字段值 1 2 4 6 41 17

  10、首部检验和占16位,也常成为校验和。这个字段只检验数据报的首部,但不包括数据部分(与UDP、TCP中的检验和不同)。IP数据报每经过一个路由器,路由器都需要重新计算一下首部检验和(IP首部中的TTL、标志、片偏移等都可能发生变化)。检验和的计算方式这里就不总结了。
  11、源地址占32位。
  12、目的地址占32位

你可能感兴趣的:(tcp/ip,网络,网络协议,运维,linux)