FreeBSD 内核网络处理流程分析
2009-05-13 00:54:40来源:未知 阅读 ()
不打开就不会知道里面是什么,打开了就会觉得里面是丰富多彩的。
    本文试图从一个原始数据包处理流程的角度,结合源代码(相应的函数)简单扼要地
分析FreeBSD的内核网络处理。
    主机对主机的方式是比较简单的,数据包从链路层上来,一路上行,达到用户空间的
应用程序,一个数据包的生命期就结束了。对于像网关或防火墙之类包转发的方式,处理起
来就相对复杂了一些,这也是许多人迷惑不解之处。
    对于不了解内核的,特别是内核网络的人来说,内核的网路处理就像一个巧克力盒子。
不打开就不会知道里面是什么,打开了就会觉得里面是丰富多彩的。
    本文试图从一个原始数据包处理流程的角度,结合源代码(相应的函数)简单扼要地
分析FreeBSD的内核网络处理。
    主机对主机的方式是比较简单的,数据包从链路层上来,一路上行,达到用户空间的
应用程序,一个数据包的生命期就结束了。对于像网关或防火墙之类包转发的方式,处理起
来就相对复杂了一些,这也是许多人迷惑不解之处。
    上面是开场白,接下来就转入正题。
    老规矩,先建立场景,场景总是要假设并建立起来的。设:
    
    hostA  --  GW  --  hostB
    
    主机A通过GW互访hostB
    
    谈到数据的通讯,总是双向的,如同2人谈话,如果仅仅是一个人说,那就成了演讲--
广播。GW就是扮演了一个传递员的角色,将2人的话传来传去,粗俗的话,优化的GW或防火
墙十有八九是不传的,免得制造矛盾。
    对于主机如何产生包,本文不作详细讨论。关心此项内容的,可以参见tcp/udp处理以
及内核中的socket等系统调用。本文的重点放在GW上,分析GW是如何处理转发数据包的。
    hostA 想要访问hostB的ftp(21端口):
    0. 先广播询问并获得网关的MAC地址。谁是网关,速速报来!!!
    1. 连接hostB的ftp端口
    2. 成功后,发送数据包
    ....
    hostA找到网关的MAC地址后,发往非本网段的数据包的目标 MAC地址都是网关的 MAC地址
但目标 IP地址不是网关的。    
        
    下面就看看GW都作了哪些工作
    
    1. GW听到一个包
    
         NIC               ip->mbuf,层层封装的,不要仅仅是停留在书本上。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:设置提示符
下一篇:李寄同学翻译的反垃圾邮件文章
- mysql-bin.000001文件的来源及处理方法 2009-05-13
- 分析squid的日志,罗列出一天最多的点击url 2009-05-13
- 分析工作迁移到 NetBSD 5.0 2009-05-13
- 使用Nagios监控服务器,Python处理故障通知(邮件与短信) 2009-05-13
- FreeBSD下authlib出现Input/output error的分析及解决一例 2009-05-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash