linux下ip层的一些概念.docVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux下ip层的一些概念

linux下ip层的一些概念 首先来看这个ip层的结构: 这里看到非常多的netfilter hook,这是因为netfilter主要是针对ip层的。 ip层的主要任务有下面5个方面: 1 ip数据包的校验 2 防火墙的处理(也就是netfilter子系统) 3 处理options(这里的options包含了一些可选的信息。比如时间戳或者源路由option). 4 切包和组包(由于mtu的存在,因此我们需要切包和组包). 5 接收,输出和转发操作。 接下来我们来看ip头的结构: Java代码 ? struct?iphdr?{ ?? #if?defined(__LITTLE_ENDIAN_BITFIELD) ?? ????__u8????ihl:4, ?? ????????version:4; ?? #elif?defined?(__BIG_ENDIAN_BITFIELD) ?? ????__u8????version:4, ?? ????????ihl:4; ?? #else?? #error??Please?fix?asm/byteorder.h?? #endif ?? ????__u8????tos; ?? ????__be16??tot_len; ?? ????__be16??id; ?? ///这里要注意DF,MF和Fragment?offset表示为frag_off一个域. ?? ????__be16??frag_off; ?? ????__u8????ttl; ?? ????__u8????protocol; ?? ????__sum16?check; ?? ????__be32??saddr; ?? ????__be32??daddr; ?? ????/*The?options?start?here.?*/?? };?? struct iphdr { #if defined(__LITTLE_ENDIAN_BITFIELD) __u8 ihl:4, version:4; #elif defined (__BIG_ENDIAN_BITFIELD) __u8 version:4, ihl:4; #else #error Please fix asm/byteorder.h #endif __u8 tos; __be16 tot_len; __be16 id; ///这里要注意DF,MF和Fragment offset表示为frag_off一个域. __be16 frag_off; __u8 ttl; __u8 protocol; __sum16 check; __be32 saddr; __be32 daddr; /*The options start here. */ }; 这里每个字段的意思也就没什么好解释得了,基本上对网络协议有些了解的都会知道。我下面会介绍几个主要的域。这里可以看到在 首先来看options域。 前面已经说过了,这个域也就是包含一些其他程序(比如路由)需要的信息。这个域的大小为0到40位,一般不会超过40个位,再大的options基本上很罕见。 options被分为2种,一种是单字节的,一种是多字节的。下面我们就来看这两种的结构: 先来看type字段,它的结构: clas也就是这个options的类型了,copied如果被设置,则当数据包切片的时候,这个option必须被复制到每一个切好的包。而number则是类型所对应的值:下面这个图就是ip option的一些类型值: 主要的类型定义在linux/ip.h里面。 接下来length表示这个option的长度。poionter这个指针表示options的起始位移。option data存储一些需要的数据。 随便举个ip options的例子,比如record route option,这个option用来保存输出接口的ip地址,但它有大小限制,只能保存9个地址们如果超过九个就会忽略,接下来看下面的图,a主机发送包到b主机: 最后我们来看一下数据报的切片和组包。 首先来看相关的ip头里面的域: DF,表示不切片,因为有时切片并组包耗时太长,影响性能。可是如何解决mtu等问题呢,这里linux采用了Path MTU Discovery算法,来取得所能传输的最大mtu,而不是根据输入帧的头来判断。 MF表示需要更多的切好的片。当一个包被切片之后,它设置mg为true,知道最后一个分片,而这个分片的MF会被设置为false(也就是0).当接收端接收到这最后一个切片时,就会开始组包,哪

文档评论(0)

peain + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档