(转自 http://blog.csdn.net/u010246947/article/details/18223263)
网桥原理:
网桥工作在链路层,所以它是二层的东西,对于以太网来说网桥和二层网络设备交换机的工作方式几乎是一样的,每个交换机包含一系列以太网接口,交换机通过其内部的硬件交换芯片实现对这些以太网接口出入报文的二层接收转发及过滤等二层qos功能,网桥在功能上和交换机几乎是一样的,只不过它是由软件实现这些功能。
下图是交换机和网桥的内部实现原理简图:
二层交换机内部实现简图
网桥内部实现简图
如上图,可以把网桥本身看做一个二层交换机,该交换机下面有eth0、usb1、vlan2、wlan3共4个接口,每个网桥下可以有很多个接口,不考虑STP生成树协议的话,可以认为网桥下接口是由用户配置的,普遍用brctl应用程序工具生成网桥,并在每个网桥下增加和删除接口,brctl使用举例如下:
初始情况下,没有网桥,由命令“brctl addbr br0”创建一个网桥br0,然后可以观察到创建了网桥br0,此时它底下还没有接口,然后由命令“brctl addif br0 XXX”在网桥br0下加入接口eth1、eth2,然后可以观察到网桥br0底下有这两个接口;同时网桥br0的MAC地址表还加入了两个静态的MAC地址,分别是接口eth1和eth2的MAC地址,这时如果从eth1接口进入属于网桥br0的报文,并且该报文的目的MAC地址与eth2接口的MAC地址相同,那么报文将被从eth2接口转发出去,并且会记录该报文的源MAC地址和进入接口eth1的对应关系作为网桥br0的一个动态MAC地址条目。
再如,我们的网关设备做测试时,如需测试二层业务流性能,经常把wan接口和vlan1接口做桥接,然后即可打双向二层业务流,同样是通过网桥学习两个接口进入报文的源MAC地址和进入接口的对应关系,实现网桥的两个接口对打二层业务流,由此可见,这和二层交换机的MAC地址学习和转发的道理是一样的。
此外,linux的网桥同样还实现了多种多样的报文处理功能,同样依托netfilter框架,通过不同的hook点挂载不同的包处理环节,其qos功能可以比二层交换机还要丰富。
1、linux的网桥实现:
1.1、涉及文件:
Linux网桥实现在代码树的net/bridge/目录下,主要文件如下: