Linux网桥介绍

网桥的功能类似于二层交换机,作用都是划分冲突域,它们之前且一些细微的差别,此处不展开。

Linux网桥作为一个特殊的网桥的实现,有一些自己的特点,因为没有看代码,只能从功能上简单分析一下。个人认为,Linux网桥与二层交换中最大的不同就是网桥对应一个虚拟网络设备,可以直接收发数据包。因为Linux设备本身也是一个主机,可以直接收发数据包,也可以直接接收数据包,这使得Linux网桥的功能有点类似于三层交换机。

Linux的网桥功能由bridge模块实现,在应用层可以使用brctl通过ioctl方式来操作该模块。

要使用网桥,先要创建一个网桥,使用如下命令:

#brctl addbr br0

即可创建一个名为br0的网桥,同时也会创建一个br0的虚拟网络设备。

下一步需要将从设备添加到网桥中,要注意的是,网桥只能绑定以太网设备,使用如下命令:

#brctl addif br0 eth0

#brctl addif br0 eth1

假设还有一个网络设备为eth2,那么现在网络结构如下图所示:

由上图可见,从设备已经不可以直接与网络层协议之间收发数据包,只能通过网桥来中转,所以此时从设备的IP地址已经不再有用。另外,将网络设备添加到网桥后,设备会工作于混杂模式,即接收目的地址为所有MAC地址的数据包,由网桥来判断该数据包要发往何处,因此从设备的MAC地址也不再有意义。网桥会选取它的从设备的MAC地址中最小的作为自己的MAC地址(鸠占鹊巢了)。

可以为网桥对应的虚拟设备添加IP地址,这样就把该设备加入到路由系统,并通过该设备直接收发数据包。

事实上,家用无线路由器一般都是LAN与WLAN(无线)都绑定到网桥上,这样,WLAN与LAN就属于一个局域网,它们都可以通过网桥来访问路由器主机(即路由器内部的Linux主机)的服务,主要也就是DHCP,用于配置路由器的Web Server,Samba Server等由路由器自身提供的服务。因为网桥只能绑定以太网设备,所以无线设备(athx)最终也是通过以太网设备连接到网桥的。

当网桥收到一个数据包时,它会根据自己学习到的MAC地址表决定将数据包发向哪个端口(即从设备),也有可能是直接通过自己的虚拟网络设备传递给上层协议栈。如果是广播包,则向所有端口转发,且复制一份给自己的虚拟网络设备。网桥接收到的每个数据包都是更新它的MAC地址表。

当网桥的虚拟网络设备要发包时,会根据MAC地址表决定要发往哪个端口中或者广播到所有端口。

 

好像不分析代码也没什么好写的了,那就这与这么多吧。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。