网桥工作原理
网桥是一种两端口的二层网络设备,用来实现同一个IP网段的不同物理子网段之间的互联互通。网桥所沟通的那些机器都是属于同一个IP网段,但是这些机器可能又在物理上分成了多个部分,比如一部分连接到某个集线器,另一部分连接到另外一个集线器。
网桥与集线器相比具有可以隔离冲突域的优势:集线器是所有的网口共享背板带宽,数据包在各个网口之间广播;而网桥可以做到只有数据包的目的地址位于另一边的物理网络上,才转发到另一边网口,从而隔离冲突域。后来网桥被具有更多端口、同时也可以隔离冲突域的交换机取代。
网桥有两个端口,一个端口连接一个网络设备,比如主机或者集线器,它将两个端口所连接的两部分网络进行沟通,具体做法是:
网桥内部维护MAC地址表,MAC地址表保存MAC地址和该MAC地址的机器所在的物理网络连接的网桥口。
当数据包到达网桥口A的时候,根据数据包的目的MAC地址查找MAC地址表,如果该数据包的目的MAC对应的网桥口为A,则网桥不进行转发处理;如果该数据包的目的MAC对应的网桥口为B,则网桥将该数据包转发到B口;如果在MAC地址表中找不到表项,则也转发到口B,进行学习。
那么,网桥的MAC地址表是如何建立起来的呢?和交换机等网络设备类似,网桥也可以对地址进行学习。网桥启动时,内部的MAC地址表为空;之后进入如下学习过程:
当有机器C1发的数据包到达网桥口A时,说明C1的MAC地址对应的网桥口为A,如果该数据包的源MAC地址不在MAC地址表中,则插入一条新的C1的MAC地址对应网桥口A的记录;然后网桥根据目的MAC地址进行转发或者不处理。每当有数据包到达网桥口时,网桥都会进行更新数据包源MAC地址对应的网桥口,这样一段时间之后,网络里所有的机器MAC地址都会被学习到。
linux下网桥设置
linux系统支持软件方式搭建网桥,且网桥可以连接不止两个机器的网卡设备,但是连接到同一个网桥的那些网卡设备的IP地址必须在同一个网段!
首先安装网桥管理软件 brctl
brctl addbr br0 ( 建立一个逻辑网段,名称为br0)
brctl delbr br0 删除网桥
brctl addif br0 eth0 (让eth0 成为br0 的一个端口)
brctl addif br0 eth1 ( 让eth1 成为br0 的一个端口)
brctl addif br0 eth0 ( 让eth2 成为br0 的一个端口)
brctl addif br0 eth3 ( 让eth3 成为br0 的一个端口)
brctl delif br0 eth0