Linux Bridge

Linux Bridge
Linux Bridge简介
  Linux中有多种网络设备,其中Bridge是比较简单的一种。
  Bridge译为中文是桥的意思,专业的意译是网桥,其功能与物理的交换机功能相似,都是工作在二层协议(数据链路层)的交换设备。网桥可以理解为Linux中虚拟出来的交换机。多个网络设备可以连接(attach)到网桥上,之后这些网络设备就可以通过Brige进行通信了。详细的通信过程参考下面的内容。
  Linux Bridge通过软件包bridge-utils进行安装,可以通过命令来判断是否安装了Linux Bridge:rpm -qa | grep bridge-utils。
网桥的功能
  网桥主要功能与实际的物理交换机是相同的:
  1.MAC地址学习:对于物理交换机,网络设备是通过网线连接到交换端口上进行连接的。而对于Linux 网桥是通过命令进行虚拟连接的。网桥刚开始工作时,接收到数据包后,会从数据包中解析出源MAC地址,并记录源MAC与端口的对应关系,以此建立MAC-端口对应表。
  2.转发:当要发送一个数据包时,网桥就会在MAC-端口对应表中查找对应的端口,将数据从找到的端口发送出去。
网桥的工作流程
  网桥上有端口,网络设备有其唯一的MAC地址,可以通过命令将网络设备与网桥上的端口连接,这样网络设备就连接到网桥上了。
  网桥刚开始工作时,MAC-端口对应表是空的,会按照以下原则处理数据包:
  1.接收一个数据包之后,会解析出其源MAC地址,并将MAC地址和端口添加(或更新)到MAC-端口对应表中,这一步称为MAC地址学习。
  2.经过MAC地址学习后,会解析出数据包中的目的MAC地址,在MAC-端口对应表中查找此MAC地址。如果找到,则将此数据包从此端口发送出去;如果未找到,则将此数据包发送给除了接收端口之外的所有端口,即广播。
  3.无论如何,网桥都不会将从一个端口接收到的数据包再从此接收端口中发送出去,因为这样做没有任何意义。
网桥的基本命令
  显示当前所有网桥:brctl show
  显示指定网桥的详细信息:brctl show
  添加一个网桥:brctl addbr
  删除一个网桥:brctl delbr
  向网桥添加一个连接:brctl addif
网桥上配置IP地址
  Linux网桥有一个有趣的特性:可以给网桥配置一个IP地址。通常情况下经过以下步骤:
  1.创建一个Linux网桥:brctl addbr br0
  2.将一个常规的网络设备例如eth0连接到网桥:brctl addif br0 eth0
  3.经过上面的步骤之后,eth0上原来的IP地址失效了,可以将eth0上原来的IP地址配置到网桥br0上。
  给一个网桥配置IP地址并不是必须的,换句话说即使网桥没有IP地址也是能正常工作。在以下场景下可能需要给网桥配置IP地址:
  1.希望使用网桥的虚拟机VM可以和主机host进行通信。常见的VM需要和host上的服务程序进行通信的是DHCP、DNS和NTP。
  2.希望为所有的虚拟机提供统一的防火墙firewall。
  3.在一台只有一个网卡的物理主机host上,希望使用网桥的同时可以继续远程sssh连接。