免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1454 | 回复: 0
打印 上一主题 下一主题

分析了一下tcp/ip的protocol stack [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-29 09:58 |只看该作者 |倒序浏览

((以下内容只是个人在开发中的理解和感悟,如果有不正确的地方请大家不吝指出,谢谢)
看了一下26.18.3的协议栈源码,理清楚了一点疑问,在这里写下,。
分析片段:
  在函数中ip_output中最终调用了NF_HOOK_COND宏,从这个宏的参数看得出,它会历遍
NF_IP_POST_ROUTING链上的钩子函数,然后调用ip_finish_output.然后我们进入到
ip_finish_output,,可以看出ip_finish_out的逻辑是这样的,如果得到的数据包是
大于MTU的那么就是执行ip_fragment函数,否则直接返回ip_finish_output2,它接着调
用hh_output也就是dev_queue_xmit把数据包传到数据链路层了。
  以上说明了什么呢,让我们先回到nat模块,nat模块的钩子函数就有一个关于ip包重新分
块的钩子函数注册在NF_IP_POST_ROUTING链,而且是最低优先级的。以上说明了
NF_LOCAL_OUT链最高优先级的钩子函数到NF_POST_ROUTING的最低优先级的钩子函数之间的
所有注册了的钩子函数处理的ip包都是完整的(其中nat在NF_POST_ROUTING链的最低优先级
的地方重新分块,协议栈本身在调用完所有的这个链的钩子函数后重新分块)。
  关于NF_LOCAL_OUT的问题,同理是nat模块在这个链的最高优先级的地方注册了一个关于
重组ip包的钩子函数,所以才说nat增强了防护ip碎片攻击的能力。
  最后说一点实际点的事情,就是你如果要在网桥式透明防火墙上面进行扩展开发,你在什么环境下怎样调试你的程序呢。
  优先级0:如果你有一台主机,带了2个以太网卡,good,这是最好的,你就在这台上开发就行了,上面文章提到的所有东东可以立即忘掉。
优先级1:你只有一台主机,带一个以太网卡,hell,认真分析protocol stack源码和上面的文章。
优先级2:VMware吧,我试过网桥是这个事行不通的,根本原因是虚拟机的两个以太网口没从硬件上分开,只是逻辑上,所以很难成功,不过可能有其他办法。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/109128/showart_2133864.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP