Linux实现交换机的另一种方法

需要涉及到内核的两个模块:bridge网桥和802.1q VLAN。


二层交换



首先创建全局网桥br_test。将所有物理接口添加到网桥下。此时,相当于一个纯二层交换机。

brctl addbr br_test
brctl addif br_test eth0
brctl addif br_test eth1


三层交换

利用Linux的802.1q模块实现三层交换机。首先为网桥配置管理IP地址。

ifconfig br_test 192.168.1.1

利用vconfig命令创建vlan接口,如下在eth0接口上创建vlan1(eth0.1),在eth1接口上创建vlan2(eth1.2)。同时,将vlan接口eth0.1和eth1.2加入到网桥br_test之下。

vconfig add eth0 1
vconfig add eth1 2

brctl addif br_test eth0.1
brctl addif br_test eth1.2

此时,系统的接口结构如下:

Linux实现交换机的另一种方法_第1张图片

以上创建好了基于Linux的交换机。此结构可以保障管理IP在任意接口上都可访问,vlan接口作为网桥的子接口,不需要额外的IP地址。但是这样也引入了一个新问题,由于VLAN接口和所有物理口在同一网桥下,导致没有实现二次隔离。为此,另外引入一个L2-Domian的概念,为每个结构赋予一个domain ID,只有在同一个domain内的接口之间可以互相通信,实现二层隔离。内核的网桥代码做以下改动:


1)二层转发表fdb引入L2-Domain ID,查表时同时使用mac与domain id作为关键字;
2)对于fdb中未命中的数据包,仅在与入接口的domain id相同的接口上flood流量;


引入L2-Domain带来一个新问题,由于要保持管理IP在各个domain内都可达,网桥br_test不属于任何一个L2-domain,导致在查询FDB表时,总是失败,管理IP不可访问。所以在查询fdb时有一个例外:当目的MAC为网桥MAC地址时,不检查L2-domain id,直接送到上层处理,实现管理IP在各个domain都可达。




你可能感兴趣的:(网桥子系统)