TCP/IP网络协议——IP分片


一、IP首部

IP首包

  • 版本字段:IPv4 0x04
  • 报头长度字段:普通IP数据报(没有任何选项),该字段是5。即,20bytes
  • 服务类型字段:在这里插入图片描述
  • 总长度字段:整个数据报的长度
  • 标志字段:标识主机发送的每一份数据报,通常每发一份报文,值加1
  • 段偏移字段:若一份数据报要求分段的话,此字段指明该段偏移距原始数据报开始的位置
  • 生存期:设置数据报最多可以经过的路由器数。
  • 协议字段:指明IP层所封装的上层协议类型(ICMP(1)、IGMP(2)、TCP(6)、UDP(17)等)
  • 头部校验和字段:对头部中每个16比特进行二级制反码求和;

IP分片依靠标志字段和段偏移字段;

抓包分析举例:
IP首包

二、IP分片

IP首部内有三个字段实现分片和重装:

  • 标识字段
  • 标志字段
  • 偏移字段

1. 标识字段

  • 对于发送的每份IP数据报,标识字段都包含一个唯一的值。该值在数据报分片时被复制到每个片中;
  • 标志字段用其中1 bit表示“更多的片”;
  • 除最后一片外,其他每一个组成数据报的片都要把该比特置1;

2. 标志字段

标志字段由三个1bit标志组成:

  • 比特0是保留的,必须为0;
  • 比特1是“不分片”(DF)标志;
  • 比特2是“更多分片”(MF)标志;

即:
DF=0表示可以分片,DF=1表示不可以分片;
MF=0表示后面没有分片,MF=1表示后面有分片;
ip_off控制IP分组的分片

3. 片偏移字段

  • 该片偏移原始数据报开始处的位置;
  • 当数据报被分片后,每个片的总长度值要改为该片的长度值;
    UDP分片距离

举例:

一个长4000B的IP数据报,数据部分3980B,到达了一个路由,需要转发到一个MTU为1500B的链路上,这样就得分片了。分片数目是3片。每个片都是一个数据报。假设标识是777,那么数据报分片结果是

分片一:标识:777,MF=1,DF=0, 片偏移=0,
有效数据:1480B(编号0~1479) 分片二:标识:777,MF=1, DF=0, 片偏移=185,185*8=1480

有效数据:1480B(编号1480~2959) 分片三:标识:777,MF=0, DF=0, 片偏移=370, 370*8=2960
有效数据:1020B(编号2960~3979)


猜你喜欢

转载自blog.csdn.net/zhouxiangjun11211/article/details/109368833