什么是网桥

网桥是二层交换机,是基于 Linux 网络的不可或缺的组成部分。本文旨在为网络工程师提供关于网桥概念的理解,以及如何在 Cumulus Linux 中使用它们,并展示传统厂商配置中隐藏的网桥示例。

简介

对于那些在传统厂商环境(Cisco、Juniper、Arista)中工作的人来说,网桥的概念可能很陌生;现代网络环境忽略了“网桥”这个术语,除了在课程的历史部分简要提及。然而,软件定义的网桥在 Linux 中的重要性,以及它们与传统交换机的比较,使得充分理解这个概念非常重要。

在配置中某处不使用网桥的情况下部署现代网络可能很困难,尽管大多数工程师可能没有意识到正在使用网桥。这部分是由于“网桥”和“交换机”这两个术语之间复杂的历史关系。

网桥”这个术语通常仅在谈论 STP(生成树协议)中的根网桥时使用。STP 中的根网桥通常是其他交换机——您可以轻松地称它们为根交换机——并且概念是相同的,因为交换机就是一种网桥。

今天,“网桥”这个词的另一个常见用例是当您查看无线以太网桥等产品时。在这种情况下,其行为与经典网桥相同,只有两个端口(一个用于 wifi,另一个用于物理以太网段)。

概念 1:网桥不是集线器

网桥和集线器之间的主要区别在于,网桥智能地在网络中传输帧,而集线器在如何传输帧方面没有任何智能。

作为第 1 层设备,集线器对于网络基本上是不可见的,因为它们在将流量传递到目的地时没有使用任何智能,并且不执行数据过滤。虽然使用集线器可能是拆分以太网连接的最简单方法,但在高流量环境中,它可能会将您的数据速率吞吐量降至几乎为零。这是因为使用集线器时,帧进入一个端口,并立即复制到每个端口,而不管目的地是否位于特定端口上。这可能会导致连接到集线器的每个端口同时讲话,从而导致每个端口都必须等待轮到它。

概念 2:网桥不限于两个端口

推论:桥接帧或交换帧是同一件事。

与集线器不同,网桥监听在网络上发送的帧。网桥参与接收到的每个帧的源 MAC 地址学习,并维护一个 MAC 地址表,该表定义了与每个 MAC 地址关联的端口。

在讨论基础网络概念时,简要提到了网桥作为隔离冲突域的方法(但不像路由器那样分离广播域)。网桥的旧观点是只包含两个端口的专用物理设备;今天仍然这样教,因为理解网桥只能包含两个端口有助于阐明交换机是多端口网桥。

虽然网桥具有两个端口的想法对于教学目的来说很方便,并且在最初以“网桥”一词在市场上销售的历史意义上是准确的,但从技术上来说并不准确。从未存在过定义可以成为网桥成员的端口数量限制的标准。最初的 IEEE 802.1D 标准 甚至包括一个带有三个端口的网桥。

从概念上讲,交换机和网桥是相同的。当“交换机”一词成为 LAN 中网络设备的主要术语时,工程师们停止谈论桥接,因为他们将网桥重新命名为交换机。如今,双端口物理网桥已不再使用,取而代之的是 48+ 端口网桥,现在通常称为多端口交换机。

概念 3:大多数供应商使用软件网桥而没有明确声明其用途

下面的示例比较了两个配置,一个来自 Cisco IOS,另一个来自 Cumulus Linux。

默认情况下,由 bridge-ports 配置指定的端口是 trunk 端口。以下配置覆盖了端口级别的 trunk,因为它将端口定义为其各自 VLAN 的接入端口。

在 Cisco IOS 中

vlan 100,200
interface ethernet0/1
    switchport mode access
    switchport access vlan 100
interface ethernet0/2
    switchport mode access
    switchport access vlan 200

在 Cumulus Linux 中(使用 VLAN 感知网桥)

auto bridge
iface bridge
    bridge-vlan-aware yes
    bridge-ports swp1 swp2
    bridge-vids 100 200
    bridge-stp on

auto swp1
iface swp1
    bridge access 100
auto swp2
iface swp2
    bridge access 200

这两个配置在功能上是相同的。但是,表面之下还有一个额外的概念值得强调。下面的示例重点介绍了 Cumulus Linux 上的配置

在 Cumulus Linux 中(使用 VLAN 感知网桥)

auto bridge
iface bridge
    bridge-vlan-aware yes
    bridge-ports glob swp1-48 
    bridge-vids 100 200
    bridge-stp on

auto swp1
iface swp1
    bridge access 100

auto swp
iface swp2
    bridge access 200

Cisco 不允许用户配置此项。在 Cisco 交换机中,所有端口都是单个网桥或交换机的成员。Cisco 通过 vlan 100,200 语句声明 VLAN,允许其未声明的软件网桥中的所有端口使用这些 VLAN,这几乎与 bridge-vids 语句相同,后者定义了 Cumulus Linux 中网桥所有成员端口上支持的 VLAN 列表。

这里的区别在于,并非所有端口都固有地是 Cumulus Linux 中单个网桥的成员。这种区别允许下面的下一个概念。

概念 4:网桥的行为类似于 Linux 中逻辑隔离的交换机

推论:Linux 允许您在单个物理交换机上定义多个逻辑交换机(网桥)。

在 Linux 以及 Cumulus Linux 中,默认情况下并非所有端口都是同一逻辑交换机或网桥的成员。此行为与传统厂商不同。

在下面的示例中,网桥充当隔离交换机。因此,可以通过在不同的逻辑交换机(网桥)内部定义 VLAN 来隔离重用 VLAN。您声明在两个单独的网桥上使用 vlan 100

这些网桥默认情况下彼此隔离,并且由于没有允许它们之间路由的第 3 层交换虚拟接口 (SVI),因此它们是 vlan 100 的完全隔离实例,并且行为类似于两个隔离的交换机。vlan 100 的 MAC 地址表对于每个网桥都是唯一的,因此,连接到 bridge1 上的 vlan 100 的主机无法与 bridge2 上的 vlan 100 主机通信。

NVIDIA 不建议使用此配置。它不常见且未经测试,但在 Linux 中网桥允许的范围内是可能的。下面的示例仅使用它来突出网桥作为逻辑隔离交换机的概念。

在 Cumulus Linux 中(使用 VLAN 感知网桥和传统网桥)

auto swp1
iface swp1

auto swp
iface swp2

auto swp3
iface swp3

auto swp4
iface swp4

auto swp3.100
iface swp3.100

auto swp4.100
iface swp4.100

auto bridge1
iface bridge1
    bridge-vlan-aware yes
    bridge-ports swp1 swp2
    bridge-vids 100
    bridge-stp on

auto bridge2
iface bridge2
    bridge-ports swp3.100 swp4.100
    bridge-stp on

您可以在 Cumulus Linux 的每个物理交换机上仅声明一个 VLAN 感知网桥。上面的示例使用了 VLAN 感知 (bridge1) 和传统 (bridge2) 网桥配置的组合。

为这两个网桥的 vlan 100 添加 SVI 将提供路由器单臂路由配置,其中先前隔离的两个 vlan100 将能够使用第 3 层路由进行通信。