我正在尝试了解Linux覆盖网络。据我所知,网桥具有 L2 交换机和 L3 路由器的组合功能。它使用 ARP 表来IP -> MAC 映射,以及一个 FDBMAC -> iface 映射。但是这些表到底在哪里记录以及谁“拥有/管理”它们?
例如,假设您创建了一个 linux桥在一个网络命名空间并附上2veth接口到它。
- 每个 veth 接口是否维护自己的 ARP 和 FDB 表?
- 或者网桥是否为所有接口维护一张表?
- 或者是管理表的命名空间?
答案1
不,(Linux 内核)桥接器不结合 L2 交换机和 L3 路由器的功能。
网桥纯粹在第 2 层工作,就像交换机一样,它的优化是,如果知道某个 MAC 地址将在某个端口后面,则具有该 MAC 地址的 L2 目的地的数据包将仅通过该端口离开,而不是被发送到所有港口。这就是 FDB 的用途。然而,许多硬件交换机都使用相同的优化。
Linux 网桥与硬件交换机有两个不同之处: 为该网桥分配端口的方式是使用其他网络接口(通常是物理以太网接口)。在这种情况下,它们会失去 L3 功能,分配给它们的任何 IP 地址都会被忽略等。此外,还有一个特殊的网络接口(桥接器本身的接口br0
等),其作用就像是硬件的端口一样交换机通过物理接口直接连接到计算机。
ARP 表与这一切无关。
命名空间隔离所有与网络相关的内容,因此每个命名空间都有自己的 ARP 表、自己的网络接口列表以及这些潜在的桥接器等。
(有一种方法可以让网桥将选定的数据包发送到 L3 并iptables
形成一些人所说的“桥接器”,即网桥和路由器的组合,但这必须启用,并且网桥本身就可以正常工作没有该功能)。