分片和组装

霸气de小男生 提交于 2019-12-05 20:15:47
互联网协议(IP)是整个互联网架构的基础,可以支持不同的物理层网络,即IP层独立于链路层传输技术。不同的链路层不仅在传输速度上有差异,还在帧结构和大小上有所不同,不同MTU参数描述了数据帧的大小。为了实现IP数据包能够使用不同的链路层技术,需要将IP数据包变成适合链路层的数据格式,IP报文的分片即是IP数据包为了满足链路层的数据大小而进行的分割。
在IPv6不要求路由器执行分片操作,而是将检测路径最大传输单元大小的任务交给了主机。
 

分片

当设备收到IP报文时,分析其目的地址并决定要在哪个链路上发送它。MTU决定了数据载荷的最大长度,如IP报文长度比MTU大,则IP数据包必须进行分片。每一片的长度都小于等于MTU减去IP首部长度。接下来每一片均被放到独立的IP报文中,并进行如下修改:
  • 总长字段被修改为此分片的长度;
  • 更多分片(MF)标志被设置,除了最后一片;
  • 分片偏移量字段被调整为合适的值;
  • 首部检验和被重新计算。
例如,对于一个长20字节的首部和一个MTU为1,500的以太网,分片偏移量将会是:0、(1480/8)=185、(2960/8)=370、(4440/8)=555、(5920/8)=740、等等。
如果报文经过路径的MTU减小了,那么分片可能会被再次分片。
比如,一个4,500字节的数据载荷被封装进了一个没有选项的IP报文(即总长为4,520字节),并在MTU为2,500字节的链路上传输,那么它会被破成如下两个分片:
#总长更多分片(MF)?DF分片偏移量 
首部数据    
1 2500 0 0
20 2480
2 2040 0 310
20 2020
假设下一跳的MTU为1,500字节,那么每一个分片都会被再次分成两片(由于数据片段只有在目的主机才重新被组成数据报,因此再次分片是针对每个在网络中传输的数据帧):
#总长更多分片(MF)?DF分片偏移量 
首部数据    
1 1500 0 0
20 1480
2 1020 0 185
20 1000
3 1500 0 310
20 1480
4 560 0 495
20 540
第3和4片是从原始第2片再次分片而来,所以除了分片后的最后一个分片外MF为都为1。
 

重组

当一个接收者发现IP报文的下列项目之一为真时:
  • DF标志为0;
  • 分片偏移量字段不为0。
它便知道这个报文已被分片,并随即将数据、标识符字段、分片偏移量和更多分片标志一起储存起来。
当接受者收到了更多分片标志未被设置的分片时,它便知道原始数据载荷的总长。一旦它收齐了所有的分片,它便可以将所有片按照正确的顺序(通过分片偏移量)组装起来,并交给上层协议栈。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!