IP分片

介绍:

常规设备中定义了数据链路层的二层数据帧大小为1500,除去三层和四层封装,如20字节为IP首部,UDP首部8字节,TCP首部为20字节,留给真正封装的数据已然不多,也就是说,如果是TCP数据报文封装,那么留给用户数据,最大支持1460字节,而UDP则最大支持1472字节;然而现实网络中,大数据的请求十分常见(如FTP传文件,下载图片,视频等等)。那么面对大于预定义的MTU值的时候,设备将会触发分片机制(如果允许的话),将大于出接口MTU的数据拿“刀”切片;

分片原理:

分片主要用到了IP层的几个重要字段(有主角光环)

  标识位:用于区分独一无二的数据报文

  标志位:总共3bit,分别为保留位,是否允许分片位,是否有更多的分片

  偏移位:表示该分片位于完整数据报的哪个位置

物理层网络一般要限制每次发送数据帧的最大长度,当设备接收到一份要发送的IP数据报时,首先进行routing选路,判断是给本机还是经本机转发,如果是经本机转发,经routing进程处理后,得到出接口,就需要查询该接口对应的MTU。如果超过了MTU,并且IP报文中的分片位为0(代表允许分片)。则将数据进行分片;当去往目的路径的MTU都不一样,有可能在数据包进行转发过程进行多次IP分片操作;只有当所有数据包都达到目的后,才会进行重组合操作;

使用UDP报文为例子,只有第一份分片报文携带了原始数据头部(UDP),其余分片只需要携带IP首部和数据,因为重组操作是在目的进行的,只需要携带一份原始数据即可;

实验验证:

 

 通过构建ping报文size=1520,抓包如下图

总共产生了5个分片。其中第一个分片仍旧是ICMP数据,最后一个分片的flag位显示0,显示是最后一个分片数据;

 

 

 总结:

1. 由于链路层的特性,一般会对MTU做限制,但是分片得越多,传输的延迟和出错的概率将会比不分片要高。所以在不可靠传输和没有重传机制的情况下,分片有可能会造成更大概率的数据出错;

2. 分片也是会消耗系统系能的,这就是为什么overlay技术中,STT会采用TCP欺骗网卡(不可分片);

3. 对于目的端,保留分片是需要占用内存空间的,如果一直没有收到最后一个分片,重组工作无法进行,有可能会被攻击利用;

 

posted @ 2018-04-21 11:41  System_hjf  阅读(460)  评论(0编辑  收藏  举报