IP分片(IP Fragment),记录一次操作系统被某同学裁剪编译后,导致IP分片出了问题,从而是UDP报文大于1500的通信都出了异常

1、为什么要进行IP分片?

       常见的以太网的MTU(Maxitum Transmission Unit)值为1500,如果需要转发的报文长度超出其接口的MTU值,则在转发该报文时,需要先将报文进行分片,分为适合该链路传输类型的报文,由接收方完成报文的重组。另外需要注意,不同链路的MTU值可能不同。

2、报文的分片和重组

     该部分内容主要从一个网友那里参考过来http://www.vants.org/?post=106,感谢作者易隐者(如有侵权,请联系我,然后我删除)。

      先来看一下分片的过程,为了简单起见,就用《TCPIP详解卷一》第11章《UDP:用户数据报协议》中关于IP分片的案例,应用进程将1473字节应用字段交给UDP处理,UDP加上8字节的UDP报头之后,交给IP层处理,IP层在转发之前,发现该报文长度超出转发接口的MTU,因此需要分片,分为两个IP分组,如下图所示: 

 从上图可以看出原始的IP报文经过分片后,只有第一个分片报文是带有四层信息的,后续报文均不带四层信息,为做直观展示,找了一个实际环境下抓取的分片报文,如下图所示:

这是分片的第一个报文,我们可以看到该报文IP层封装的上层协议为ICMP协议,这是一个ping报文(上层协议信息),我们再来看一下后续分片报文的解码:

  这是分片后续报文,我们能看到封装的是ICMP协议,但是封装的上层协议的具体信息就无法看到了。

       IP数据报被分片之后,所有分片报文的IP报头中的源IP、目的IP、IP标识、上层协议等信息都是一样的(TTL不一定是一样的,因为不同的分片报文可能会经过不同的路由路径达到目的端),不同的地方在于分片标志位和分片偏移量,而接收方正是根据接收到的分片报文的源IP、目的IP、 IP标识、分片标志位、分片偏移量来对接收到的分片报文进行重组

       接收方根据报文的源IP、目的IP、IP标识将接收到的分片报文归为不同原始IP数据报的分片分组;分片标志中的MF位(More Fragment)标识了是否是最后一个分片报文,如果是最后一个分片报文,则根据分片偏移量计算出各个分片报文在原始IP数据报中的位置,重组为分片前的原始IP报文。如果不是最后一个分片报文,则等待最后一个分片报文达到后完成重组。

3、操作系统异常分片报文

下面我们来看看被某同学,把linux系统IP Fragment功能无意中阉掉的分片报文(猜测可能是IP Fragment相关的某个宏没有打开导致):

根据IP分片原理,另个分片的Reassembled IPv4 in frame值大小,明显不对。

分片错误,导致SIP程序不能正确处理完整的SIP信息,导致SIP呼叫失败。

4、分片带来的问题,可以接着参考网友易隐者 的IP分片文章,http://www.vants.org/?post=106

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值