文档库 最新最全的文档下载
当前位置:文档库 › (完整版)ip分片重组技术要点

(完整版)ip分片重组技术要点

(完整版)ip分片重组技术要点
(完整版)ip分片重组技术要点

IP分片及重组原理

一为什么要分片及在什么样的情况下会分片

IP首部的ip报文长度字段有16位,因而ip数据报的最大长度为65536字节。而由于网络接口的硬件限制以太帧数据字段长度不超过MTU(最大传输单元)。MTU一般取1500字节,因而这就决定了ip报文长度不能超过1500字节。出去IP头部的20字节如果传输UDP数据出去UDP头用户数据不应超过1472字节;传递TCP数据除去TCP头用户数据不应超过1460字节。对于超过1500字节的IP报文IP层会对报文进行分片发送,接收方的IP层收到所有分片后重组这些分片。由于TCP是面向连接的可靠传输协议发送端TCP会将过大的数据采用按序流式方式以多个包发送,每发送一个包后收到接收端的确认信息后再发送下一个包。所发送的TCP包用户数据不超过1460字节;接收端TCP收到所有数据后重组。因而TCP数据不会在IP层重组。

二 IP分片的方式

1 IP头部中与分片相关的字段

标识(identification) 占 16 位,它是一个计数器,用来产生数据报的标识。一个IP地址在每发送一个IP报文时标志位是上一个报文标志位加一。

来自同一个IP报文的分片具有相同的ID

标志(flag) 占 3 位,目前只有前两位有意义。标志字段的最低位是 MF (More Fragment)。MF = 1 表示后面“还有分片”。MF = 0 表示最后一个分片。标志字段中间的一位是 DF (Don't Fragment) 。只有当 DF = 0 时才允许分片。

片偏移(12 位)指出:较长的分组在分片后某片在原分组中的相对位置。片偏移以 8 个字节为偏移单位。

2 分片方式

该图的MTU为1420

如图对于长度超过1500字节的IP报文。IP层会将其分片即分成若干个长度不超过1500的IP报文(分片)传送。从源报文的UDP头部开始将源报文数据段按

1480字节为单位依次分片直到最后凑不够1480字节时为最后一片。每一分片的段偏移为该片第一个八个字节在源IP报文数据段中以八字节为单位的偏移。这些分片中只有第一个分片具有原报文的UDP头部其余报文的IP数据字段为原报文的用户数据。所有分片IP头部与源IP报文一样。

三重组原理

重组算法很多除了协议栈外也有其他改进算法。所有算法的核心问题是可靠重组及消耗内存尽可能小。基于对协议的理解,我们提出了自己的重组算法。

1 怎样确定一个包是否为一个分片?

如果一个包的段偏移为0而frag字段不为1则该报文必定不是一个分片。

2 对于接收到无序分片怎样确定哪些分片来自同一个包?

来自同一个包的分片具有相同的源ip及id号。

3 接收端怎样确定来自同一包的所有分片都已到达?

当收到标志位为0的分片时,说明这是最后一个分片。根据最后一个分片的段偏移可知在源报文中最后一分片以前含有的数据长度,再加上最后一分片的数据长度即为原IP报文数据部分长度。如果接收到的

所有分片的数据长度等于源IP报文数据部分长度这说明所有分片均已到达。此时即可按段偏移量重新组包

4 怎样校验分片到达包

出第一个分片外其余分片无UDP头部,因而对每个分片校验不方便。可以再重组所有分片后构建UDP伪头部校验。

相关文档