IP包的分片与重组资料.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux 下 IP――分片与重组――详解 1 原理介绍 1.1 为一个数据包片再次分片 为数据包分片和为数据包片再次分片之间的细微差别就在于网关处理 MF 比特的不同。 但一 个网关为原来为分片的数据包分片时, 除了末尾的数据包片, 它将其余所有分片上的 MF 比 特都置为一,最后一片为 0 。然而,当网关为一个非末尾的数据包片再次分片时,它会把生 成的所有子分片中的 MF 比特全部设置为 1,因为所有这些子分片都不可能是整个数据包的 末尾的数据包片。对于分片,需要拷贝 IP 首部和选项,以及数据。而选项的拷贝要注意: 根据协议标准, 某些选项只应当出现在的一个数据包片中, 而其他一些则必须出现在所有的 数据包中。 1.2 数据包重组 1.2.1 数据结构 为了使数据包的重组效率更高,用于保存数据包的数据结构必须能够做到: l 为构成某一个特定数据包的一组数据包片快速定位; l 在一组数据包片中快速插入新的数据包片; l 有效地判断一个完整的数据包是否已经全部抵达; l 具有数据包片超时机制( ip_expire ),并且,如果在重组完成之前定时器溢出,则删除数 据包片。 1.2.2 互斥操作 重组程序代码使用了一个互斥信号量。 Ipfrag_lock 1.2.3 在链表中加入一个数据包片 查找方式:链表的线性查找 1.2.4 溢出时的丢弃 分片列表空间以全满的情况下:丢弃对应的数据包的所有分片。 Ip_evictor 1.3 测试是否组成一个完整的数据包 ip_frag_queue 判断 IP_MF 位是否为 0 ! 1.3.1 将数据包片组装成完整的数据包 LAST_IN ,ip_frag_reasm 1.4 数据包片链表的维护管理 为了使丢失数据包片的数据包不再浪费存储资源 ,并防止因为标示符字段的重新使用而给 IP 带来混乱,但已经不可能再受到剩余数据包片时, IP 必须定期检查数据包片列表。 Ipq_unlink Ipq_put Ipq_kill Ipqhashfn 2 Linux 下的实现 2.1 IP 分片 如何提高分片处理的效率 2.1.1 ip_fragment (非UDP 使用) 2.1.1.1 典型调用者 ip_send ip_fragment(skb, ip_finish_output); 一般从转发来 ip_queue_xmit ip_fragment(skb, skb-dst-output) 一般从 TCP 来 , 因为 IP 报太大而将其分片 以适合于一个帧的传输。 2.1.1.2 处理过程 获 取 外 出 设 备 (由 skb 决 定 ) dev = rt-u.dst.dev; 出 口 路 由 设 备 !!! skb-dst=rt=rt-u.dst dst_entryà 取 IP 包头 raw = skb-nh.raw; iph = (struct iphdr*)raw; 取 IP 头设定开始值 hlen=IP 头长 left = ntohs(iph-tot_len) - hlen; 包总长度减去 IP 头长度――需 要分片的数据长度 mtu = rt-u.dst.pmtu - hlen; 物理 MTU 减去 IP 头长度――除去 IP 头的分 片长度 ptr = raw + hlen; 取数据区指针 将数据包分片 l 分片算法很简单,但由于对 sk_buff 结构和链的操作时的实现非常复杂。 l 如果 DF 比特禁止分片,则 ip_output 丢弃分组并返回错误消息。 l 如果该数据包是在本地生成的,则传输层协议把该错误传回该进程 l 如果分组是被转发的,则 ip_forward 生成一个 ICMP 目的不可达差错报文,并指出不分片 就转发

文档评论(0)

飞翔的燕子 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档