赞助连接

赞助连接

阅 读 文 章

网桥原理及源代码详解

[来源:网上转载 (http://www.chinaunix.net) | 作者:网友(xie_minix) | 时间:2007-05-27 | 浏览:人次 ]


/*                                     解析:xie_minix                           */

[color=green]/* 概述:
 * 该代码在FB中提供桥接功能,不过他只是在以太网接口上工作,能提供多个逻辑桥
 * ,我们称为组,组是由一组有相同组ID的接口组成,组ID的范围在1到2^16-1之间.
 * 打开桥的功能是通过sysctl net.link.ether.bridge=1来启动的.
 * 而sysctl net.link.ether.bridge_cfg是把以太网接口进行分组的命令,如:
 * sysctl net.link.ether.bridge_cfg="vr0:1,vr1:1,fxp0:2,fxp1:2" 该命令的结果
 * 为网卡vr0和vr1可以进行相互通信,fxp0和fxp1之间可以互相转发,等于是分为俩组了.
 * 但目前的该项设置还不能进行多组成员和单向控制,即一块卡可以为多个组的成员和某卡
 * 与另外卡的数据单向流动.在本文中,我将结合代码来讲解如何实现以上的功能.
 * 在本代码中,重要的数据结构是cluster_softc,他主要是记录一个组的接口所连接的机器
 * 的硬件地址,该地址数组存储采用HASH算法,据我所知,4.4版和OpenBSD版的HASH函数算法根本不同,
 * 我们在下面的代码分析过程中将看到,我也将讲解两个版本的不同之处,说实话,该算法我根本看
 * 不懂(OpenBSD),估计该算法应该有相关的论文描述.
 * 代码的学习顺序:
 * 由于在if_ethersubr.c中的ether_input函数接到一数据包后,先查看bridge功能是否打开,
 * 即判断全局变量do_bridge是否为1(该变量是由上面讲的sysctl来控制的),为真的话就调用
 * 本文中的函数bridge_in(详细可看我写的"ethernet网络驱动代码详解"),所以在本文中的
 * bridge_in函数是第一个被调用的.该函数的作用是在上面讲的哪个重要的数据结构中查找
 * 目标地址要通过本机的哪块卡发送,当然其中还涉及到多播,广播和是否将网卡进行分组以
 * 及是否发送方,目的方经过的本机网卡是否被分在同组中等,在完成后,如果成功找到了发送
 * 到目的地机器和本机直接相连的网卡就返回该网卡的ifnet结构指针(该结构可连接所描述的卡
 * 的所有信息,见我所写的"关于FreeBSD4.4网络源代码接口层数据结构ifnet分析说明"),然后
 * if_ethersubr.c中的ether_input函数还要查看是否是发给本机的包,如果不是则调用本文的
 * bridge_forward函数进行数据的转发,这就是本文的主要功能.和交换机的原理有点类似.
 * 性能分析:
 * 由于在进行桥转发的过程中,是一定要使网卡工作在混杂模式的,所以进行网桥工作的卡要选购
 * 性能好的网卡,我个人觉得intel,3com等比较适合,其他的如rtl8139卡最好只用来做实验,不要
 * 用于实际的工作中(如果要我说明原因,请看看他的驱动程序你就知道了,但单机上网没关系),另
 * 外,PCI漕内不要其他的卡(如声卡等),我们知道,网卡驱动程序目前在BSD中工作于中断驱动模式,
 * 也就是说,进来一个包就能产生一个中断,而中断的系统开销有多达大家可以查看内核代码,总之
 * 是非常大,如果你是四块卡,而且担任网桥及一些过滤功能的话,肯定数据包通过量会比较大,那么
 * 中断产生的频率是平常一块卡的十几甚至是几十倍(平常的卡一个是数据量不大,另一个是不在混
论坛热门帖子: [lch203] 写得蛮好的linux学习笔记(10-21)
[黑马制造] 学习java的30个目标(10-19)
[笑傲股林] 做测试半年了,有点迷茫,应该再学些什么提高自己的测试水平和测试能力呢?(10-19)
[udp8589] 大家用google的来吱一声? 用百度的~~也来报道下?(10-18)
[沂偌掳兆] 本人总结的一些认为C++比较经典的书籍,希望对大家有用(10-18)
TAG标签: 详解 源代码 原理 if 函数 NULL ifp 指针 网卡 结构 地址

最新评论 共有0位网友发表了评论

发表评论

评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名:(注册)
密码:
验证码:
匿名发表

网站地图友情连接交流论坛网站投稿广告服务联系我们留言本站长统计
Some rights reserved: www.chmhome.com, 鄂ICP备07010232号 E-mail:chinakafei@live.com,QQ:552766
中国咖啡技术网(Chmhome):国外编程技术书籍,中文编程手册,经典编程文章,交流技术,技术软件下载,计算机论文,毕业论文.