欢迎来到天天文库
浏览记录
ID:40710050
大小:1.44 MB
页数:21页
时间:2019-08-06
《IP的分片与重装》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、下载第10章IP的分片与重装10.1引言我们将第8章的IP的分片与重装处理问题推迟到本章来讨论。IP具有一种重要功能,就是当分组过大而不适合在所选硬件接口上发送时,能够对分组进行分片。过大的分组被分成两个或多个大小适合在所选定网络上发送的IP分片。而在去目的主机的路途中,分片还可能被中间的路由器继续分片。因此,在目的主机上,一个IP数据报可能放在一个IP分组内,或者,如果在发送时被分片,就放在多个IP分组内。因为各个分片可能以不同的路径到达目的主机,所以只有目的主机才有机会看到所有分片。因此,也只有目的主机才能把所有分片重装成一个完整的数
2、据报,提交给合适的运输层协议。图8-5显示在被接收的分组中,0.3%(72786/27881978)是分片,0.12%(264484/(29447726-796084))的数据报是被分片后发送的。在world.std.com上,被接收分组的9.5%是被分片的。world有更多的NFS活动,这是IP分片的主要来源。IP首部内有三个字段实现分片和重装:标识字段(ip_id)、标志字段(ip_off的3个高位比特)和偏移字段(ip_off的13个低位比特)。标志字段由三个1bit标志组成。比特0是保留的,必须为0;比特1是“不分片”(DF)标志
3、;比特2是“更多分片”(MF)标志。Net/3中,标志和偏移字段结合起来,由ip_off访问,如图10-1所示。分片偏移13比特图10-1ip_off控制IP分组的分片Net/3通过用IP_DF和IP_MF掩去ip_off来访问DF和MF。IP实现必须允许应用程序请求在输出的数据报中设置DF比特。当使用UDP或TCP时,Net/3并不提供对DF比特的应用程序级的控制。进程可以用原始IP接口(第32章)构造和发送它自己的IP首部。运输层必须直接设置DF比特。例如,当TCP运行“路径MTU发现(pathMTUdiscovery)”时。ip_o
4、ff的其他13bit指出在原始数据报内分片的位置,以8字节为单元计算。因而,除最后一个分片外,其他每个分片都希望是一个8字节倍数的数据,从而使后面的分片从8字节边界开始。图10-2显示了在原始数据报内的字节偏移关系,以及在分片的IP首部内分片的偏移(ip_off的低位13bit)。图10-2显示了把一个最大的IP数据报分成8190个分片,除最后一个分片包含3个字节外,其他每个分片都包含8个字节。图中还显示,除最后一个分片外,设置了其余分片的MF比特。这是一个不太理想的例子,但它说明了一些实现中存在的问题。第10章IP的分片与重装计计219
5、下载最大数据报IP首部20字节8字节8字节8字节8字节3字节IP首部20字节8字节IP首部20字节8字节IP首部20字节8字节IP首部20字节8字节IP首部20字节3字节图10-265535字节的数据报的分片原始数据报上面的数字是该数据部分在数据报内的字节偏移。分片偏移(ip_off)是从数据报的数据部分开始计算的。分片不可能含有偏移超过65514的字节,因为如果这样的话,重装的数据报会大于65535字节—这是ip_len字段的最大值。这就限制了ip_off的最大值为8189(8189×8=65512),只为最后一个分片留下3字节空间。如
6、果有IP选项,则偏移还要小些。因为IP互联网是无连接的,所以,在目的主机上,来自一个数据报的分片必然会与来自其他数据报的分片交错。ip_id唯一地标识某个特定数据报的分片。源系统用相同的源地址(ip_src)、目的地址(ip_dst)和协议(ip_p)值,作为数据报在互联网上生命期的值,把每个数据报的ip_id设置成一个唯一的值。总而言之,ip_id标识了特定数据报的分片,ip_off确定了分片在原始数据报内的位置,除最后一个分片外,MF标识每个分片。10.2代码介绍重装数据结构出现在一个头文件里。两个C文件中有重装和分片处理的代码。这三
7、个文件列在图10-3中。文件描述netinet/ip_var.h重装数据结构netinet/ip_output.c分片代码netinet/ip_input.c重装代码图10-3本章讨论的文件220计计TCP/IP详解卷2:实现下载10.2.1全局变量本章中只有一个全局变量,ipq。如图10-4所示。变量类型描述ipqstructipq*重装表图10-4本章介绍的全局变量10.2.2统计量分片和重装代码修改的统计量如图10-5所示。它们是图8-4的ipstat结构中所包含统计量的子集。ipstat成员描述ips_cantfrag要求分片但被
8、DF比特禁止而没有发送的数据报数ips_odropped因为内存不够而被丢弃的分组数ips_ofragments被发送的分片数ips_fragmented为输出分片的分组数图10-5本章收集的
此文档下载收益归作者所有