虚拟网络设备和端口概念:Bridge(桥)和Tap
Bridge(桥)和Tap是网络通信中,特别是在Linux环境下,常见的虚拟网络设备或端口概念。下面将分别介绍这两个概念及其在网络中的作用。
Bridge(桥)
定义与功能:
- Bridge是一种虚拟网络设备,其功能类似于物理交换机,可以在TCP/IP二层协议上实现数据包的交换。它能够将多个网络接口连接在一起,实现不同网络之间的通信。
- 在Linux系统中,Bridge设备可以配置IP地址和MAC地址,类似于普通的网络设备。然而,与物理网卡不同,Bridge具有多个端口,可以接收来自任何端口的数据包,并根据目标MAC地址进行转发或丢弃。
- Bridge设备主要用于实现虚拟机之间的通信,或者将虚拟机连接到物理网络。通过Bridge,虚拟机可以像物理机一样,在网络中发送和接收数据包。
工作原理:
- 当一个从设备(如Tap设备或物理网卡)被attach到Bridge上时,Bridge会学习该设备的MAC地址,并将其存储在内部的MAC地址-端口映射表(CAM表)中。
- 当Bridge接收到数据包时,它会检查数据包的目标MAC地址,并在CAM表中查找对应的端口。如果找到匹配的端口,Bridge会将数据包转发到该端口;如果没有找到匹配的端口,Bridge可能会将数据包广播到所有端口,或者根据网络配置进行其他处理。
比如真实的系统里ifconfig命令后显示这样:
bridge1: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
description: vmx0
options=0
ether 58:9c:fc:10:ff:84
id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200
root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0
member: tap2 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
ifmaxaddr 0 port 7 priority 128 path cost 2000000
member: tap1 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
ifmaxaddr 0 port 5 priority 128 path cost 2000000
member: vmx0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
ifmaxaddr 0 port 1 priority 128 path cost 2000
groups: bridge
nd6 options=9<PERFORMNUD,IFDISABLED>
bridge2: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
description: vmx0
options=0
ether 58:9c:fc:10:67:6a
id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200
root id 00:00:00:00:00:00 priority 0 ifcost 0 port 0
groups: bridge
nd6 options=9<PERFORMNUD,IFDISABLED>
Tap(TAP设备)
定义与功能:
- Tap是一种虚拟网络设备,用于模拟物理网络接口。它通常与虚拟机的网络接口相连,实现虚拟机与主机或其他虚拟机之间的网络通信。
- 通过Tap设备,虚拟机可以发送和接收网络数据包,就像它们拥有独立的物理网络接口一样。这使得虚拟机能够在网络上表现得像真实的物理机一样。
工作原理:
- 当虚拟机发送数据包时,数据包会通过Tap设备传递给主机网络堆栈。然后,主机网络堆栈会根据网络配置(如路由表、防火墙规则等)将数据包发送到目标地址。
- 当主机接收到发往虚拟机的数据包时,数据包会被传递给Tap设备。Tap设备再将数据包转发给虚拟机网络接口,从而实现虚拟机与网络的通信。
比如使用ifconfig命令显示:
tap1: flags=8903<UP,BROADCAST,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
description: CBSDSYSTEM0
options=80000<LINKSTATE>
ether 58:9c:fc:10:ff:89
groups: tap
media: Ethernet 1000baseT <full-duplex>
status: no carrier
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
tap2: flags=1008943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
description: ub12-nic0
options=80000<LINKSTATE>
ether 58:9c:fc:10:ff:d9
groups: tap vm-port
media: Ethernet 1000baseT <full-duplex>
status: active
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
Opened by PID 90163
总结
Bridge和Tap是Linux网络虚拟化中两个重要的概念。Bridge设备作为虚拟交换机,连接多个网络接口并实现数据包的交换和转发;Tap设备作为虚拟网络接口,模拟物理网络接口并与虚拟机网络通信。这两个概念的结合使用,为虚拟机提供了高效、灵活的网络通信能力。