ip的分片与重装

上传人:第*** 文档编号:38797333 上传时间:2018-05-08 格式:PDF 页数:21 大小:1.44MB
返回 下载 相关 举报
ip的分片与重装_第1页
第1页 / 共21页
ip的分片与重装_第2页
第2页 / 共21页
ip的分片与重装_第3页
第3页 / 共21页
ip的分片与重装_第4页
第4页 / 共21页
ip的分片与重装_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《ip的分片与重装》由会员分享,可在线阅读,更多相关《ip的分片与重装(21页珍藏版)》请在金锄头文库上搜索。

1、下载第10章IP的分片与重装10.1 引言我们将第8章的I P的分片与重装处理问题推迟到本章来讨论。I P具有一种重要功能,就是当分组过大而不适合在所选硬件接口上发送时,能够对分组进行分片。过大的分组被分成两个或多个大小适合在所选定网络上发送的 I P分片。而在去目的主机的路途中,分片还可能被中间的路由器继续分片。因此,在目的主机上,一个I P数据报可能放在一个 I P分组内,或者,如果在发送时被分片,就放在多个 I P分组内。因为各个分片可能以不同的路径到达目的主机,所以只有目的主机才有机会看到所有分片。因此,也只有目的主机才能把所有分片重装成一个完整的数据报,提交给合适的运输层协议。图8

2、- 5显示在被接收的分组中, 0.3%(72 786/27 881 978)是分片, 0.12% (264 484/(29 447 726-796 084)的数据报是被分片后发送的。在 w o r l d . s t d . c o m上,被接收分组的9 . 5 %是被分片的。w o r l d有更多的N F S活动,这是I P分片的主要来源。I P首部内有三个字段实现分片和重装:标识字段 (i p _ i d)、标志字段(i p _ o f f的3个高位比特)和偏移字段(i p _ o f f的1 3个低位比特)。标志字段由三个1 bit标志组成。比特0是保留的,必须为0;比特1是“不分片”

3、( D F )标志;比特2是“更多分片”( M F )标志。N e t / 3中,标志和偏移字段结合起来,由i p _ o f f访问,如图1 0 - 1所示。图10-1 i p _ o f f 控制I P分组的分片N e t / 3通过用I P _ D F和 I P _ M F掩去i p _ o f f来访问D F和M F。I P实现必须允许应用程序请求在输出的数据报中设置D F比特。当使用U D P或T C P时,N e t / 3并不提供对D F比特的应用程序级的控制。进程可以用原始I P接口(第3 2章)构造和发送它自己的I P首部。运输层必须直接设置D F比特。例如,当T C P运行

4、“路径M T U发现(p a t h MTU d i s c o v e ry)”时。i p _ o f f的其他13 bit指出在原始数据报内分片的位置,以 8字节为单元计算。因而,除最后一个分片外,其他每个分片都希望是一个 8字节倍数的数据,从而使后面的分片从 8字节边界开始。图1 0 - 2显示了在原始数据报内的字节偏移关系,以及在分片的 I P首部内分片的偏移(i p _ o f f的低位13 bit)。图1 0 - 2显示了把一个最大的 I P数据报分成8 1 9 0个分片,除最后一个分片包含 3个字节外,其他每个分片都包含8个字节。图中还显示,除最后一个分片外,设置了其余分片的 M

5、 F比特。这是一个不太理想的例子,但它说明了一些实现中存在的问题。分片偏移13比特图10-2 65535字节的数据报的分片原始数据报上面的数字是该数据部分在数据报内的字节偏移。分片偏移 (i p _ o f f)是从数据报的数据部分开始计算的。分片不可能含有偏移超过 6 5 5 1 4的字节,因为如果这样的话,重装的数据报会大于6 5 5 3 5字节这是i p _ l e n字段的最大值。这就限制了i p _ o f f的最大值为8 1 8 9 ( 8 1 8 98 = 6 5 5 1 2 ),只为最后一个分片留下3字节空间。如果有I P选项,则偏移还要小些。因为I P互联网是无连接的,所以,

6、在目的主机上,来自一个数据报的分片必然会与来自其他数据报的分片交错。 i p _ i d唯一地标识某个特定数据报的分片。源系统用相同的源地址(i p _ s r c)、目的地址(i p _ d s t)和协议(i p _ p)值,作为数据报在互联网上生命期的值,把每个数据报的i p _ i d设置成一个唯一的值。总而言之,i p _ i d标识了特定数据报的分片,i p _ o f f确定了分片在原始数据报内的位置,除最后一个分片外,M F标识每个分片。10.2 代码介绍重装数据结构出现在一个头文件里。两个 C文件中有重装和分片处理的代码。这三个文件列在图1 0 - 3中。文件描述n e t

7、i n e t / i p _ v a r . h重装数据结构 n e t i n e t / i p _ o u t p u t . c分片代码 n e t i n e t / i p _ i n p u t . c重装代码图10-3 本章讨论的文件第1 0章I P的分片与重装计计219下载最大数据报IP首部20字节20字节20字节20字节20字节20字节8字节8字节8字节8字节8字节8字节8字节3字节8字节3 字节IP首部IP首部IP首部IP首部IP首部10.2.1 全局变量本章中只有一个全局变量,i p q。如图1 0 - 4所示。变量类型描述i p qstruct ipq *重装表图1

8、0-4 本章介绍的全局变量10.2.2 统计量分片和重装代码修改的统计量如图 1 0 - 5所示。它们是图8 - 4的i p s t a t结构中所包含统计量的子集。i p s t a t成员描述i p s _ c a n t f r a g要求分片但被D F比特禁止而没有发送的数据报数 i p s _ o d r o p p e d因为内存不够而被丢弃的分组数 i p s _ o f r a g m e n t s被发送的分片数 i p s _ f r a g m e n t e d为输出分片的分组数图10-5 本章收集的统计量10.3 分片我们现在返回到i p _ o u t p u t,

9、分析分片代码。记得在图 8 - 2 5中,如果分组正好适合选定出接口的M T U,就在一个链路级帧中发送它。否则,必须对分组分片,并在多个帧中将其发送。分组可以是一个完整的数据报或者它自己也是前边系统创建的分片。我们分三个部分讨论分片代码: 确定分片大小(图1 0 - 6 ); 构造分片表(图1 0 - 7 );以及 构造第一个分片并发送分片(图1 0 - 8 )。图10-6 函数i p _ o u t p u t :确定分片大小2 5 3 - 2 6 1分片算法很简单,但由于对m b u f结构和链的操作使实现非常复杂。如果 D F比特禁220计计TCP/IP详解 卷2:实现下载止分片,则i

10、 p _ o u t p u t丢弃该分组,并返回E M S G S I Z E。如果该数据报是在本地生成的,则运输层协议把该错误传回该进程;但如果分组是被转发的,则 i p _ f o r w a r d生成一个I C M P目的地不可达差错报文,并指出不分片就无法转发该分组 (图8 - 2 1 )。N e t / 3没有实现“路径M T U发现”算法,该算法用来搜索到目的主机的路径,并发现所有中间网络支持的最大传送单元。卷 1的11 . 8节和2 4 . 2节讨论了U D P和T C P的路径M T U发现。262-266 每个分片中的数据字节数, l e n的计算是用接口的M T U减去

11、分组首部的长度后,舍去低位的3个比特( 10.6 ip_reass函数i p i n t r把一个要处理的分片和一个指针传给 i p _ r e a s s,其中指针指向的是 i p q中匹配的重装首部。 i p _ r e a s s可能重装成功并返回一个完整的数据报,可能把该分片链接到数据报的重装链表上,等待其他分片到达后重装。每个重装链表的表头是一个i p q结构,如图1 0 - 1 3所示。图10-13 i p q 结构5 2 - 6 0用来标识一个数据报分片的四个字段, i p _ i d、i p _ s r c、i p _ d s t和i p _ p,被保存在每个重装链表表头的 i

12、 p q结构中。N e t / 3用n e x t和p r e v构造数据报链表,用 i p q _ n e x t和i p q _ p r e v构造分片的链表。到达分组的I P首部在被放在重装链表之前,首先被转换成一个 i p a s f r a g结构(图1 0 - 1 4 )。图10-14 i p a s f r a g 结构6 6 - 8 6i p _ r e a s s在一个由i p f _ n e x t和i p f _ p r e v链接起来的双向循环链表上,收集某个数据报的分片。这些指针覆盖了 I P首部的源地址和目的地址。 i p f _ m f f成员覆盖i p结构中的第

13、1 0章I P的分片与重装计计227下载i p _ t o s。其他成员是相同的。图1 0 - 1 5显示了分片首部链表(i p q)和分片(i p a s f r a g)之间的关系。图10-15 分片首部链表i p q 和分片图1 0 - 1 5的左下部是重装首部的链表。表中第一个节点是全局 i p q结构,i p q。它永远不会有自己的相关分片表。 i p q表是一个双向链表,用于支持快速插入和删除。 n e x t和p r e v指针指向前一个和后一个i p q结构,用终止结构的角上的箭头表示。图1 0 - 1 5仍然没有显示重装结构的所有复杂性。重装代码很难跟踪,因为它完全依靠把指针

14、指向底层m b u f上的三个不同的结构。我们已经接触过这个技术了,例如,当一个 i p结构覆盖某个缓存的数据部分时。图1 0 - 1 6显示了m b u f、i p q结构、i p a s f r a g结构和i p结构之间的关系。图1 0 - 1 6中含有大量信息: 所有结构都放在一个m b u f的数据区内。 i p q链表由n e x t和p r e v链接起来的i p q结构组成。每个i p q结构保存了唯一标识一个I P数据报的四个字段(图1 0 - 1 6中的阴影部分)。 当作为分片链表的头访问时,每个 i p q结构被看成是一个i p a s f r a g结构。这些分片由i

15、p f _ n e x t和i p f _ p r e v链接起来,分别覆盖了ipq 结构的i p q _ n e x t和i p q _ p r e v成员。 每个i p a s f r a g结构都覆盖了到达分片的i p结构,与分片一起到达的数据在缓存中跟在该结构之后。i p a s f r a g结构的阴影部分的成员的含义与其在 i p结构中不太相同。228计计TCP/IP详解 卷2:实现下载重装表表头; 没有分片链接 到这个结构上收到的某个数 据报的所有分 片分片表,按分片偏移的顺序收到的某个数 据报的所有分 片图10-16 可通过多种结构访问的一段内存区图1 0 - 1 5显示了这些

16、重装结构之间的物理连接, 图1 0 - 1 6显示了i p _ r e a s s使用的覆盖技术。图1 0 - 1 7从逻辑的观点说明重装结构:该图显示了三个数据报的重装,以及i p q链表和i p a s f r a g结构之间的关系。图10-17 三个I P数据报的重装每个重装链表的表头包含原始数据报的标识符、协议、源和目的地址。图中只显示了i p _ i d字段。分片表通过偏移字段排序,如果 M F比特被置位,则用 M F标志分片,缺少的分片出现在阴影里。每个分片内的数字显示了该分片的开始和结束字节相对于原始数据报数据区的相对偏移,而不是相对于原始数据报的 I P首部。这个例子是用来说明三个没有I P选项的U D P数据报, 其中每个数据报都有1 0 2 4字节的数据。每个数据报的全长是1 0 5 2 ( 2 0 + 8 + 1 0 2 4 )字节,正好适合1 5 0 0字节以太网M T U。在到目的主机的途中,这些数据报会遇到一个 S L I P链路,该链路上的路由器对数据报分片,使其大

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号