下面简述的只是linux下的brctl创建出来的玩意,和网桥的学术定义什么的没有关系。

想像你有一块网卡,接上网线,OK,能上网了。

现在,你有一台物理的机器,和一台虚拟机,都需要上网。但是网卡和网线只有一块,怎么办?

如果你能够物理的触摸到虚拟机,你也许会这么干。

找一个交换机来,把物理设备的网卡用网线连接到上面,把虚拟机的网卡连接到上面,再把外网网线接上去,OK,齐活了。

brctl创立出来的网桥就是这么工作的。

你原本的物理网卡,例如eth0,我们直接为他分配IP,进行通讯。结构大概是这个样子的。

system -- eth0 -- network

接入网桥这个假的交换机后,eth0依然负责向外通讯,但是没有自己的IP了。网桥和宿主所在的机器的连接叫做br0(或者br1,以此类推)。

system -- br0 -- eth0 -- network

然后,我们可以为这个交换机接入很多的设备。

system -- br0 -- eth0 -- network
                  |
               vethXX
                  |
virtual -- eth0   /

其中,eth0和vethXX是一对设备。一个在宿主里,一个在虚拟机里。互相连通。

所以,当虚拟机发生通讯时,eth0上可以看到数据流,但是br0上看不到。而如果虚拟机和宿主通讯时,eth0看不到数据流,br0上可以。