报文分片(16位分片标识、3位标志、13位片偏移字段详解)

目录

一、什么是分片?

二、如何分片?

三、如何组装?(16位分片标识、3位标志、13位片偏移)

1、回顾16位分片标识、3位标志、13位片偏移

2、组合分片报文

四、分片的影响

1、对UDP的影响

2、对TCP的影响


一、什么是分片?

网络层再继续向下传递的时候,会限制报文的大小,mtu(max transform unit)是最大传送单元,代表了每次所能传输报文的大小(含IP报头)。当我们的报文大小(含IP报头)超过了1500 个字节的时候,将一个报文分成多部份来传递,这就是“分片”。

注意:分片不是大多数情况,而是特殊情况。本来传递一个报文就有着丢包的风险,现在要传递一堆报文,丢包的概率会增加。

二、如何分片?

假设 IP协议 收到上层的报文大小为 1700 字节。这1700字节在IP协议看来就是数据,不考虑选项字段,加上IP报头的20个字节,要向下传递的大小为1720个字节,很显然超出了传输限制。

那么说明需要对这1700个字节进行分片,注意,是1700个字节分片,而不是1720个字节,先对数据进行分片,然后每一部分再加上报头。因为是分成多个报文来发送,每一个报文都要送到对端,那就必须加上报头来告诉下一层目标主机的IP地址。

三、如何组装?(16位分片标识、3位标志、13位片偏移)

1、回顾16位分片标识、3位标志、13位片偏移

因为这些报文由一个完整的报文分片得到,不能随意组合。这就需要用到IP报头中的三个字段16位分片标识、3位标志、13位片偏移。

  • 13位片偏移:分片以后,各个部分在原始报文的哪个位置,即在原始报文中的偏移量。

  • 16位分片标识:如果一个报文不分片,不同报文之间的16位标识符是不同的;如果一个报文分片了,分片报文的16位标识符是一样的,说明这些分片报文原本属于一个完整的报文。

  • 3位标识:1位保留、1位标识禁止分片、1位标识更多报文(1说明后面跟了具有16位标志符的报文,0说明后面没有)

2、组合分片报文

第一步,通过三位标识符的第三位标识“更多报文”判断当前收到的报文后面是否存在其他分片报文。

如果第三位标识为1,说明当前报文是分片报文,加入到具有相同16位标识符的集合中,进入下一步;如果为0,可能为普通报文,也有可能是分片报文的最后一部分,此时需要根据片偏移判断。

  • 如果片偏移为0,说明是普通报文,结束判断,直接向上层交付;
  • 如果不为0,说明是分片报文,加入到具有相同16位标识符的集合中

第二步,判断所有的报文是否收全。将集合中的报文按照片偏移进行升序排序。

判断起始分片报文是否收到:如果第一个报文的片偏移为0,说明起始分片报文收到了。

判断末尾分片报文是否收到:如果最后一个报文的三位标志位中的第三位为0,说明末尾分片报文收到了

判断中间报文是否收到:以第二个报文为例,第二个报文的片偏移理应等于 第一个报文的片偏移 + 第一个报文的数据长度,以此来判断第二个报文是否收到;依此类推,可以判断中间报文是否收到。

=》该集合中一旦发现少了任意一个报文,整个集合中的报文直接全部丢弃!也不会通知上层TCP

四、分片的影响

分片有风险,只要有一部分丢了,如果对端网络层无法组装,要组装的几部分会全部丢弃,对方TCP没有收到报文,就认为是丢包了。所以一般不建议分片,分片会增加丢包概率。

1、对UDP的影响

UDP没有发送缓冲区,应用层要发多少,到了网络层就是多少,这个时候就得老老实实分片。分片会增加丢包的概率,一旦某个分片报文丢了导致无法组装就会将相关的分片报文全部丢弃。(是否相关可以根据16位分片标识来判断)

2、对TCP的影响

因为TCP有缓冲区的存在,想发多少、什么时候发都由TCP决定,TCP可以做到自己控制数据段的长度,然后再传到网络层,此时就无需网络层来分片了。

但TCP每次可以发送的数据长度不是无限大,受制于MTU和对方主机的MSS(Max Segment Size),即最大消息长度。

  • 受制于MTU的意思是,为了不分片,TCP每次最多携带的数据是多少。不同系统的MTU可能有所不同,MTU减去TCP报头和IP报头的大小,就是TCP每次最多可以发送的数据量。
  • 受制于对方主机的MSS的意思是,对方每次最多可以接收多少。双方在发送SYN的时候会在TCP头部写入自己可以支持的MSS值,在得知对方的MSS以后,选取较小的作为最终MSS。MSS的值就是在TCP首部的40字节变长选项中(kind=2);
  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Wireshark 是一款开源的网络封包分析软件,它可以帮助用户对网络流量进行抓包和分析。当我们在使用 Wireshark 进行网络数据捕获时,有时会遇到分片报文分片报文是指在网络传输过程中,由于网络链路或设备限制,原始的数据报文可能需要分成多个较小的片段进行传输。这种分片的操作是由发送端设备根据网络链路的 MTU(最大传输单元)进行分割的。 在 Wireshark 中,我们可以通过一些特殊的设置来观察和分析这些分片报文。当我们在捕获网络数据时,Wireshark 会将这些分片报文按照 IP 协议的分片机制进行重组,以便我们能够更好地理解和分析。 通过 Wireshark,我们可以观察到分片报文的相关信息,如源 IP 地址、目的 IP 地址、分片标识符、偏移量、原始数据长度等。这些信息有助于我们分析网络链路的传输状况和效率,并检查网络设备是否正确地处理和重组这些分片报文。 此外,Wireshark 还提供了一些过滤器和统计功能,可以帮助我们筛选和分析分片报文。我们可以使用过滤器来查看特定的分片报文,可以根据偏移量等字段来排序和统计分片报文的数量和大小。 总的来说,Wireshark 在分片报文的分析中提供了很好的支持。通过分析分片报文,我们可以深入了解网络传输过程中可能遇到的问题,并确保网络数据的完整性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值