“本页考虑单VLAN、有限连通的点到点桥接图。桥ID唯一,每条链路具有严格正的对称成本,端口ID在桥内唯一。学习交换机只在被允许的端口之间传送普通数据帧;桥控制消息仍能在阻塞数据的端口交换。”
交换机刚启动时,并不知道主机A接在哪个端口。它可以从A发来的第一帧获得一条局部证据:“到A的方向,应当是这帧进来的方向。”学习交换机把这种观察存成表,再用帧的目的地址查表,减少无关链路上的副本。
形式陈述
先学习源,再查询目的
沿用逐层封装中的以太帧源MAC、目的MAC和入端口。MAC是链路层地址;此处只讨论一个VLAN,全部端口属于同一广播域,端口已经允许转发。帧校验失败、源地址不合法等情形在进入本状态机前丢弃。
动态转发表FDB保存
- 删除所有满足
的动态表项;恰好到期也删除 - 对有效单播源地址写入
;已有记录就覆盖端口和时刻 - 若
为广播,输出到全部其他转发端口 - 若
为已知单播,且 的端口不等于 ,只输出该端口;若相等,不输出 - 若
为未知单播,输出到全部其他转发端口
“输出到多个端口”称为泛洪。每个出口只产生一份本次帧副本,入端口永远不在输出集合中。本例把普通组播也按泛洪处理,不包括组播侦听优化和保留控制地址的专门处理。
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有
表容量不足时,拒绝学习新源会使后续未知目的继续泛洪;驱逐策略改变性能,不增加地址真实性保证。排查一条帧的去向时,先记下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:透明桥接中永久循环的来源