Skip to content

算法Algorithm

以太网交换机的源地址学习

Learning bridge · Ethernet learning switch · 自学习网桥

从收到帧的源地址学习出口,逐事件复算未知目的泛洪、同端口过滤、MAC移动和老化,并辨认二层环路的失败边界。

交换机刚启动时,并不知道主机A接在哪个端口。它可以从A发来的第一帧获得一条局部证据:“到A的方向,应当是这帧进来的方向。”学习交换机把这种观察存成表,再用帧的目的地址查表,减少无关链路上的副本。

形式陈述 ​

先学习源,再查询目的 ​

沿用逐层封装中的以太帧源MAC、目的MAC和入端口。MAC是链路层地址;此处只讨论一个VLAN,全部端口属于同一广播域,端口已经允许转发。帧校验失败、源地址不合法等情形在进入本状态机前丢弃。

动态转发表FDB保存 F[s]=(p,ts):最后一次观察到源MAC s 的端口为 p,观察时刻为 ts。教学有效期取 T=10 个时间单位;这只是本例参数,不是以太网统一规定的老化时长。时刻 t 在端口 p 收到源为 s、目的为 d 的帧,按以下次序执行:

  1. 删除所有满足 t−ts≥T 的动态表项;恰好到期也删除
  2. 对有效单播源地址写入 F[s]=(p,t);已有记录就覆盖端口和时刻
  3. 若 d 为广播,输出到全部其他转发端口
  4. 若 d 为已知单播,且 F[d] 的端口不等于 p,只输出该端口;若相等,不输出
  5. 若 d 为未知单播,输出到全部其他转发端口

“输出到多个端口”称为泛洪。每个出口只产生一份本次帧副本,入端口永远不在输出集合中。本例把普通组播也按泛洪处理,不包括组播侦听优化和保留控制地址的专门处理。

FDB记录的是到达某MAC的方向,不必是该主机直接插入的物理端口。一个端口后面若接另一台交换机,可以学习到很多源MAC。完整VLAN系统应把VLAN身份计入表项作用域;不能让一个VLAN里学到的地址决定另一个VLAN的出口。

直觉

来路能说明源在哪里,不能说明目的在哪里 ​

收到“A发给B”的帧,只能直接观察A的来路。B可能在任何其他方向,甚至目前不存在。若从目的地址猜测B也在入端口,就可能把本该转发的帧过滤掉。只有B真正发来一帧,才出现关于B来路的新证据。

同端口过滤也有具体理由:若A和B都在端口2后的同一共享网段,B已经能在那一段看到A的原帧。再把它转到其他端口没有帮助;再从端口2发回去还会制造重复。点到点交换机互联时,含义相同:正确目的方向就是帧的来路,本桥不应把它绕到别处。

空表会增加流量,不一定阻断通信 ​

在无环、连通、无丢帧的交换拓扑中,未知目的泛洪沿树展开。每条边只有一个从注入点远离的方向,副本不会折返入端口,所以一次注入不会反复经过同一条树边。即使FDB全空,目的主机仍能收到副本;学习主要减少这种额外传送。

这个说明还要求端口状态和拓扑在该帧传播期间不变。FDB错误时,已知单播反而可能被引到错误端口;表不完整和表中存着错误位置是两种不同情况。

例子与边界

六帧足以看见四种动作 ​

交换机有端口1、2、3,起初表为空;字母A、B、R分别代表不同的有效单播MAC。端口后的网段允许主机移动。到期删除发生在本次学习之前。

时刻 入端口与帧 学习或过期后的关键状态 输出端口
0 1:A→B A在1,最后见于0;B未知 2、3
1 2:B→A B在2,最后见于1;A仍在1 1
4 1:A→R A刷新为时刻4;R未知 2、3
5 3:R→A R在3,最后见于5;A仍在1 1
6 2:A→B A移动到2,刷新为6;B在2 无,过滤
12 3:R→B B已在11到期;R刷新为12 1、2

时刻6之后A的旧端口1被覆盖,不是同时保留两个动态出口。B在时刻6只是目的,最后一次作为源仍是时刻1,因此会在11到期。若误把目的查找也当作续期,时刻12就会错误地只发端口2,而不是得到题设状态机的泛洪结果。

时刻12处理完的表为A→端口2、最后见于6,以及R→端口3、最后见于12;B不在表中。A应在16到期,R应在22到期。老化时刻由最后一次源观察决定,与交换机是否还记得该主机名称无关。

移动可以先造成短暂错投 ​

假设A从端口1移到端口2后一直沉默,交换机还存A→1。此时收到发给A的单播,就会按旧表送往1;交换机不能从A的新位置凭空获得更新。A发送一帧、原记录到期,或实现处理拓扑变化,才可能消除这条旧信息。因此源学习不保证移动后的第一帧一定送达。

二层帧不会靠IP的TTL终止循环 ​

三台交换机若组成环,广播副本可以绕圈后从另一个端口回来,于是再次被泛洪。以太桥转发本身不递减帧内IP包的TTL;ARP帧甚至没有IP TTL。以太网FCS检查比特错误,也不记录“这帧已经经过本桥”。源学习不能替代生成树桥接对活动转发拓扑的限制。

环上的重复帧还会使同一源MAC交替从不同端口出现,造成位置反复改变。此时“最近看见的来路”是循环副本的来路,已经失去稳定树上的定位意义。

推论与应用

把学习成本与副本成本分别计费 ​

若FDB有 k 项,以散列表实现查找/更新,可在合适散列假设下取得期望常数成本;逐帧扫描全部表项做老化则仍需 O(k)。定时桶或到期队列可以把清理另行安排,但不能把这部分工作藏在查表的常数成本里。一次泛洪还要处理最多 p−1 个出口,输出规模本身不可忽略。若按本文逐事件扫描老化,包含空表和单播查找的一次完整事件为期望 O(1+k+出口数);其中常数项包含接收、键查询和空表检查。

表容量不足时,拒绝学习新源会使后续未知目的继续泛洪;驱逐策略改变性能,不增加地址真实性保证。排查一条帧的去向时,先记下VLAN、入端口、源学习后的表和到期规则,再计算输出集合,比只看“目的MAC是否曾出现过”更准确。

ARP邻居解析的广播请求可以利用这种泛洪传播,但ARP缓存是IP下一跳到MAC的映射,FDB是MAC到桥端口的映射,两张表的拥有者、键和更新事件都不同。

参考资料
  • Larry L. Peterson、Bruce S. Davie,Computer Networks: A Systems Approach,官方开放教材,§3.2.1 Learning Bridges、§3.2.2 Implementation:源学习、未知目的泛洪和表项老化;本文六帧轨迹与有效期为独立教学例
  • Radia Perlman,An Algorithm for Distributed Computation of a Spanning Tree in an Extended LAN,SIGCOMM 1985,pp.44–53,原论文,pp.44–45:透明桥接中永久循环的来源
关系图谱4 个相邻概念 · 1 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组