本章将会了解网桥设备 (bridge device) 是什么、如何使用,以及它存在哪些限制。重点介绍透明网桥(transparent bridging)、地址学习,以及所谓转发表(forwarding database) 的使用。
本章最后,会解释为什么环路拓扑中不能使用网桥,并引出下一章的内容 —— 生成树协议(STP) 是如何解决这一限制的。
14.1. 中继器、网桥与路由器
中继器 (repeater)
- 一种通常配备两个端口的设备,它只是将从一个端口接收到的内容复制到另一个端口,反之亦然。
- 它逐比特复制数据,不具备任何协议认知,因此无法区分不同的帧或数据包。
- 如今中继器已很少使用,因为网桥的价格已十分亲民,其提供的更强能力足以弥补价格差异。
- 多端口中继器被称为集线器(Hub)。
网桥 (bridge)
- 能够理解链路层协议,因此它是按帧复制数据,而不是按比特复制。
- 这意味着网桥必须在每个端口上至少能够缓冲一帧数据。
- 大多数局域网(LAN)都使用网桥(通常更常被称为交换机(switches),参见「网桥与交换机」一节)来实现。
路由器 (router)
- 一种能够理解 IP 等三层(L3)网络协议,并根据路由表转发入站数据包的设备。
- 在路由器这一术语出现之前就已存在的 ** 网关(gateway)** 一词,现在也通常用来指代同类设备。

图 14‑1 (b) 展示了所谓的存储转发网桥(store‑and‑forward bridge),这也是 Linux 所采用的机制:以太网帧只有在完整接收完毕后,才会从对应端口转发出去。
网桥会为它的每个接口分配一个链路层地址,并转发所有经过它、但目的地不是它自身的报文。(路由器会在三层(L3)层面执行类似的行为,我们将在第七部分看到。)
网桥确实会在以下两种情况下接收并处理部分入站帧:
- 将其传递给上层(即三层 L3)
- 只有当网桥同时实现了三层功能(也就是说,它除了是网桥之外,还是路由器或主机),并且入站帧的目的地是接收接口上配置的二层地址时,才能执行上述操作。
- 将其传递给协议处理器
- 我们将在第 15 章介绍生成树协议 (Spanning Tree Protocol) 时看到这种情况。
14.2 网桥(bridge) vs 交换机(switch)
bridge(网桥)和switch(交换机) 这两个术语可以用来指代同一种设备。
不过如今,bridge 一词主要用于文档中,用来描述网桥的行为以及生成树协议(STP,我们将在下一章介绍)的工作原理。
相比之下,指代实际硬件设备时,通常使用 switch 一词。
14.3 主机 hosts
在本章及后续讲解网桥的章节中,任何工作在高于网桥所在网络层(即链路层 / L2) 的设备,都被视为主机(包括路由器在内)。
一台主机(例如 Linux 系统)如果配置得当,既可以作为网桥,也可以作为供用户使用的标准工作站。
但在本章及后续章节中,我们不考虑这种情况;我们假设主机不运行任何网桥相关代码。因此,所有图中的个人计算机(PC)都不会运行网桥代码,除非文中另有说明。
14.4 用网桥合并 LAN
假设两个 LAN 里的主机都属于同一个 IP 子网,在 LAN 中的任何主机发出的任何帧都会被其它主机接收。
当主机 A 发出一个帧时,LAN1 的其它主机和网桥都会接收到帧,网桥将入口帧复制到其它所有端口上,最后 LAN1 和 LAN2 上的所有主机都会接收到主机 A 所产生的帧的副本。

如果把两个 LAN 的主机设置成两个不同的 IP 子网,使用路由器代替网桥,路由器不会把要传给 LAN1 中的主机的数据包转发至 LAN2。

14.5 桥接不同技术的 LAN
Linux 网桥只在以太网端口之间进行桥接
14.6 地址学习 (Address Learning)
网桥实际上能够学习主机的位置(更准确地说,是学习主机的二层地址),并利用这些信息将入站帧有选择地仅复制到正确的端口。这个过程被称为被动学习(passive learning),因为它完全由网桥自主完成,无需用户配置,也不需要协议的协助。
图中使用 Host N 表示 L2 地址。

网桥在不知道该通过哪个接口去往某个二层地址时,会将帧从除接收接口之外的所有接口转发出去,这种行为称为泛洪(flooding)。
14.6.1 广播 (Broadcast) 和多播 (Multicast) 地址
当网桥收到目的地址为链路层广播地址(FF:FF:FF:FF:FF:FF)或二层组播地址的帧时,会将其从除接收端口外的所有端口转发出去。
组播地址和广播地址不能作为帧中的源地址使用,因此网桥不会学习这些地址,也不会将它们与任何特定端口关联(否则会出错)。
14.6.2 老化 Aging
为了让网桥的认知适配网络拓扑变化,网桥学习到的地址会在一段可配置的时间后超时失效。
这种老化机制通常由一个简单的定时器实现:地址首次被学习时启动定时器;每当再次监听到该主机时,定时器就会重启(重置),以确认或更新其地址。该过程如图 14‑5 所示。
默认老化时间为 5 分钟。我们将在第 15 章看到,在特定条件下生成树协议(STP) 如何缩短老化时间;并在第 17 章介绍系统管理员如何修改默认的老化时间。

14.7 多台网桥 (Multiple Bridges)
从网桥 1 的角度看,主机 A, B, C, D 都位于 LAN2 中,都可通过网桥 1 在 LAN2 的接口访问。

同一个 LAN 中有多台网桥,可以提高不同 LAN 之间的连通能力,但存在问题。

14.7.1 网桥环路 (Bridging Loops)
- 透明网桥不能用在环路拓扑上

14.7.2 无环路拓扑

网桥和 LAN 的连接都是双向的链路:

要让图 14-10 的图形无环路,所需要做的就是关闭一个网桥端口,并删除一条连接线路。
14.7.3 定义无环路拓扑
STP
RSTP(Papid Spanning Tree Protocol, 快速生成树协议)
MSTP(Multiple Spanning Tree Protocol, 多重生成树协议)