从物理角度来说,Linux 桥接器是什么?

从物理角度来说,Linux 桥接器是什么?

通常,网桥是将多个网段连接成一个的 L2 设备。它没有 IP,基本上只是将帧发送到除接收帧的网段之外的每个网段(或更智能)。

但是使用 Linux 桥接器,您可以获得具有 IP 地址的接口。考虑以下情况图表使用docker容器:


(来源:docker.com

在这种情况下,我谈论的接口是docker0my_bridge

然后,使用veth对将容器连接到网桥。对的一端veth由一个接口表示,该接口具有您可以在容器中看到的 IP 地址。另一端没有 IP 地址,它属于主机的网络命名空间。您可以master docker0在输出中看到它旁边的内容ip a。您可以将对的这一端视为插入网桥端口的连接器。

另外,我可以172.17.0.0/16 dev docker0 ...在主机的路由表中看到规则,这使得可以将数据包从主机发送到容器。

但是我也可以从容器向主机的eth0接口发送数据包。该接口位于不同的子网中。而且我在输出中看不到master docker0主机eth0接口旁边ip a的内容。这可能没有任何意义,因为网桥无法连接不同的子网。因此,这部分(以及上一段中的内容)可能不能被视为网桥的一部分。而是作为 Linux 网桥附带的额外行为。

另外,当我将数据包从一个容器发送到另一个容器时,我可以在主机的网络命名空间中看到它们(主机对iptables它们进行处理)。

无论我如何努力,我都无法描绘出一张我无法选择的 Linux 桥接图。至于上图,它看起来好像桥接器连接了不同的子网,而这是物理桥接器无法实现的。

我可能更愿意将桥接器放在my_bridgeveth对之间。但必须承认,您veth将对的末端插入my_bridge,而不是插入桥接器。桥接器具有将数据包从主机发送到容器以及从容器发送到主机eth0接口的能力。

因此,Linux 桥接器似乎是一种带有一些额外变化的网络桥接器。而且您无法轻松地在图表上描绘它而不引入不准确的信息,对吧?我上面说的有错吗?

答案1

你曾描述过,你的形象描绘了,路由两个桥接器和一个不属于桥接器的物理接口之间。Linux 所做的其他许多事情之一就是第 3 层路由,当数据包在桥接器和不属于任何桥接器的物理接口之间流动时,就会发生这种情况。

相关内容