linux bridge 是什么?
通俗的说linux bridge可以比作一个简单的二层虚拟交换机,集成在linux里面。像普通交换机一样,其他端口可以连接bridge,终端虚拟设备通过接入bridge实现互相通信和外部设备的通信。
linux bridge主要包括四个部分,这也是简单二层物理交换机的必备部分,可以说是虚拟了物理交换机的基础业务。
1:网络端口(或接口)集:用于将终端交换机之间的流量转发到网络中的其他主机。
2:控制平面:用于运行生成树协议(STP),该协议计算最小生成树,以防止环路使网络崩溃。
3:转发平面:用于处理来自端口的输入帧,通过基于MAC学习数据库进行转发决策,将输入帧转发至网络端口。
4:MAC学习数据库:用于跟踪LAN中的主机位置,记录mac 地址端口等信息用于转发,如下所示
:~$ bridge -d fdb
33:33:00:00:00:01 dev eth2 self permanent
02:42:6c:25:91:03 dev br-4b26bd39c37a vlan 1 master br-4b26bd39c37a permanent
02:42:6c:25:91:03 dev br-4b26bd39c37a master br-4b26bd39c37a permanent
02:42:19:0d:0e:8e dev docker0 vlan 1 master docker0 permanent
02:42:19:0d:0e:8e dev docker0 master docker0 permanent
对于每一个单播mac地址,网桥根据维护的mac地址表中匹配的mac地址的端口进行转发,如果没有找到,它会包这个单播报文广播到除了接收端口外的所有端口。
linux bridge how to 实现?
有三个子系统可以实现bridges:
ioctl: 这个接口可以用来创建或者销毁网桥,把端口从网桥上添加或者删除。
sysfs: 管理网桥和端口的特殊参数
netlink: 使用AF_NETLINK地址族的基于异步队列的通信也可以用于与网桥进行交互。
这里我们重点介绍ioctl
创建一个网桥
可以通过ioctl命令SIOCBRADDBR来实现创建一个网桥,如下面使用bridge-utils 的brctl所示:
~$ sudo strace brctl addbr br1
execve("/sbin/brctl", ["brctl", "addbr", "br1"], [/* 16 vars */]) = 0
...
ioctl(3, SIOCBRADDBR, 0x7fff2eae9966) = 0
...
注意,此时没有设备可以处理ioctl命令,因此ioct

本文深入解析Linux Bridge的工作原理,包括其作为二层虚拟交换机的角色、关键组件如控制平面和转发平面的功能,以及MAC学习数据库的作用。同时,文章详细介绍了通过ioctl、sysfs和netlink实现网桥操作的方法,以及brctl命令的具体应用。

3484

被折叠的 条评论
为什么被折叠?



