IP数据包data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==格式

引言

IP提供不可靠,无连接的数据报传送服务。

  1. 不可靠:意思它不保证IP数据包能成功地到达目的地,IP仅提供尽力而为的传输服务。任何要求的可靠性必须有上层来提供。
  2. 无连接:意思是IP并不维护任何关于后续数据报的状态信息,每个数据报的处理都是独立的。

IP报数据格式

                                IP数据包data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==格式

IP数据包由首部和数据两部分组成,首部由固定部分和可变部分构成,固定部分长度是20个字节,是所有IP数据报必须具有的,可变部分是可选的,长度也是可变的。

  1. 版本:4bit,指协议版本,通信双方必须使用相同的IP协议版本。IPV4对应协议版本号为4.
  2. 首部长度:4bit,单位4字节。当首部长度取1111时,首部长度达最大值15×4=60字节,有以下推论:
    推论1:当IP分组首部长度不是4字节的整数倍时,必须使用最后的填充字段加以填充;
    推论2:数据部分用用在4字节的整数倍开始;
  3. 服务:8bit;
  4. 总长度: 16bit,单位字节。当总长度取1111 1111 1111 1111时,总长度取最大值65535字节。数据链路层帧格式中数据部分长度最大值为MTU,当IP层的数据报封装成链路层的帧时,此数据包的总长度(首部+数据部分)若大于MTU,则需要分片。
  5. 标识:16bit。当数据报长度大于MTU时必须分片,这个标识字段值就会被复制到所有的分片数据包中。相同的标识字段值使分片后的各数据包片最后能正确的重装为原来的数据报。
  6. 标志:3bit,目前只有2位有意义。最低位MF,1(默认值)表示“还有分片”,0表示“最后一个分片”;中间位DF,1(默认值)表示“不分片”,0表示“允许分片”。
  7. 片偏移:13bit,单位8字节,相对数据部分起点的偏移。可知每个分片的数据部分长度都一定是8字节的整数倍。
  8. 生存时间(TTL):8bit, 表明数据包在网络中的寿命。发出数据报的源点设置这个字段,其目的是防止无法交付的数据报无限制的在网络中兜圈子,白白消耗网络资源。单位不是秒,是跳hop,每经过一个路由时减1,直到为0时被抛弃。
  9. 协议:8bit,运输层所使用的协议,方便IP层知道应将数据包部分上交给哪个协议栈处理。
  10. 首部校验和:16bit,没经过一个路由器,都需要重新计算一下首部校验和,比如生存时间等首部区域的值可能发生变化,不检验数据部分可以减少工作量。
  11. 源地址:32bit.
  12. 目的地址:32bit.

IP数据报的分片

如果IP数据报被分片,分片后的数据报和原来没有分片的数据报结构是相同的,即也有是由首部和数据部两部分组成:数据区是原IP数据报数据区的一个连续部分,头部是原IP数据报头部的复制,但与原来未分片的IP数据报头部有两点主要不同:标志和片偏移。

IP数据报的重组

重组依赖首部中的以下三个域:

  1. 标识:相同的标识代表这些数据来源于同一个IP数据报;
  2. 标志:表示是否是最后一个分片;
  3. 偏移量:确定分片在原数据报中的位置。