IP分片(IP Fragment)

为何要分片安全

       不一样的链路类型可以支持的最大传输单元值(MTU: Maxitum Transmission Unit)主要是由相关RFC文档规定的,常见的以太网链路的MTU值为1500,若是须要转发的IP报文超出其转发接口的MTU值,则在转发该报文以前,须要将其分片,分为多个适合于该链路类型传输的报文,这些分片报文在到达接收方的时候,由接收方完成重组。网络

       各类常见链路类型的MTU值以下图所示: post

点击查看原图


报文的分片和重组性能

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

点击查看原图


       从上图能够看出原始的IP报文通过分片后,只有第一个分片报文是带有四层信息的,后续报文均不带四层信息,为作直观展现,我找了一个实际环境下抓取的分片报文,以下图所示: 3d

点击查看原图

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

点击查看原图

       这是分片后续报文,咱们能看到封装的是ICMP协议,可是封装的上层协议的具体信息就没法看到了。接口

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

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

分片带来的问题

1, 分片带来的性能消耗

       分片和重组会消耗发送方、接收方必定的CPU等资源,若是存在大量的分片报文的话,可能会形成较为严重的资源消耗;
       分片对接收方内存资源的消耗较多,由于接收方要为接收到的每一个分片报文分配内存空间,以便于最后一个分片报文到达后完成重组。

2,分片丢包致使的重传问题

       若是某个分片报文在网络传输过程当中丢失,那么接收方将没法完成重组,若是应用进程要求重传的话,发送方必须重传全部分片报文而不是仅重传被丢弃的那个分片报文,这种效率低下的重传行为会给端系统和网络资源带来额外的消耗。

3, 分片攻击

       黑客构造的分片报文,可是不向接收方发送最后一个分片报文,致使接收方要为全部的分片报文分配内存空间,可因为最后一个分片报文永远不会达到,接收方的内存得不到及时的释放(接收方会启动一个分片重组的定时器,在必定时间内若是没法完成重组,将向发送方发送ICMP重组超时差错报文,关于ICMP重组超时差错,请你们参考本博客《ICMP重组超时》一文),只要这种攻击的分片报文发送的足够多、足够快,很容易占满接收方内存,让接收方无内存资源处理正常的业务,从而达到DOS的攻击效果。

4, 安全隐患

       因为分片只有第一个分片报文具备四层信息而其余分片没有,这给路由器、防火墙等中间设备在作访问控制策略匹配的时候带来了麻烦。
       若是路由器、防火墙等中间设备不对分片报文进行安全策略的匹配检测而直接放行IP分片报文,则有可能给接收方带来安全隐患和威胁,由于黑客能够利用这个特性,绕过路由器、防火墙的安全策略检查对接收方实施攻击;
       若是路由器、防火墙等中间设备对这些分片报文进行重组后在匹配其安全策略,那么又会对这些中间设备的资源带来极大的消耗,特别是在遇到分片攻击的时候,这些中间设备会在第一时间内消耗完其全部内存资源,从而致使全网中断的严重后果。

       基于以上缘由,不少应用程序都尽可能避免分片的产生,其经过将IP报文的分片标志中的DF位(Don’t Fragment)置一来实现,而这可能给应用带来一些难以预料的麻烦。下一篇我将介绍端系统如何处理这种情况,请你们关注。

相关文章
相关标签/搜索