了解 Linux 桥接

网络工程 linux
2021-07-24 01:39:00

我正在尝试了解 Linux 桥接。

假设我有一个带有两个 veth 接口和一个 vNic 的 Linux 网桥。

网桥:br0 接口:veth1、veth2 和 eth1

现在,如果我这样做brctl showmacs br0,它会向我显示端口号#s/ MAC 地址等列表。例如:

 $ brctl showmacs br0
 port no mac addr                is local?       ageing timer 

   1     00:50:56:8f:96:e5       yes                0.00

   2     f2:2b:f5:fa:17:9c       yes                0.00

   3     0e:fd:9d:0a:2c:4f       yes                0.00

问题1:上表是如何构造的?我假设它称为转发数据库?

帧桥接

现在,如果在 veth1 生成一个帧,目标 MAC 地址为 veth2。它只会转到网桥,网桥将查找其转发数据库,​​然后将其发送到网桥上的 veth2 端口。简单的。

问题 2:但是如果在 veth1 生成的帧的目标 MAC 地址不是桥接端口,那么桥接如何工作?我假设网桥用这个帧淹没了所有端口。但是然后呢?如果端口接受泛洪帧,它会通知网桥我有这个 MAC 地址吗?如果桥上没有端口是接收器,那么在没有桥端口是预期接收器的情况下,桥如何知道上行链路端口或应该将帧发送到的端口是什么?

2个回答

交换机(网桥)的工作方式是交换机建立一个 MAC 地址表,该表将 MAC 地址与 MAC 地址所连接的端口相关联。当帧进入交换机端口时,交换机将更新其 MAC 地址表以显示帧中的源 MAC 地址连接到该端口。每个端口可以有多个关联的 MAC 地址,但每个 MAC 地址只有一个端口。

当一个帧进入交换机时,交换机将使用该帧中的源 MAC 地址更新其 MAC 地址表,并查看目标 MAC 地址是否在其 MAC 地址表中。如果目的MAC地址在表中,帧将被切换到相应的端口。如果目的MAC地址不在MAC地址表中,或者目的MAC地址是广播地址或组播地址,帧将被泛洪到所有交换机端口。

上表是如何构造的?

该表由通过网桥的帧的源 MAC 地址构成。

问题 2:但是如果在 veth1 生成的帧的目标 MAC 地址不是桥接端口,那么桥接如何工作?我假设网桥用这个帧淹没了所有端口。

正确的

但是然后呢?如果端口接受泛洪帧,它会通知网桥我有这个 MAC 地址吗?

它没有明确通知网桥。

但通常请求会引起响应。通常,该响应会告诉网桥 MAC 地址所在的位置。

此外,除了在没有重新启动连接设备的情况下重新启动网桥的情况外,这首先不太可能发生。通常,当主机开始通信时,它们会在开始发送单播流量之前发送 arp 广播(或对于 IPv6 ND“多播”)。

如果网桥上没有端口是接收者,那么网桥如何知道上行端口是什么

不是的,以太网桥接中没有“上行链路端口”的概念。只是一个端口列表,每个端口都有一个关联的 MAC 地址列表。