交换机
复习
- MAC 地址:链路层用 MAC 地址在本地交付帧
- 共享信道与冲突:共享介质会带来冲突,需要接入规则
- 以太网:规定了有线局域网的帧格式与接入方式
TL;DR
- 交换机学习 MAC 地址与端口的对应关系
- 已知目的端口就只转发到那里,未知时暂时泛洪
- 把冲突域拆小,交换机让大多数本地通信不再打扰全网
正文
上一章留下一个问题:交换机怎样知道某个 MAC 地址在哪一根线上?
答案藏在一个很巧妙、又很自然的动作里:它不需要事先知道,它可以边收边学。
从“来向”学习
交换机有很多端口,每个端口接一条线路。每当一帧从某个端口进来,交换机就顺便记下一件事:这帧的源 MAC 地址,来自这个端口。
为什么记源地址,而不是目的地址?因为一个简单的道理:你既然从这个口收到它发的帧,它当然就在这个口这一侧。 而目的地址此刻还没有任何证据表明它在哪一侧,所以不能乱记。
就这样,随着通信不断发生,交换机会逐渐建立起一张转发表:哪个 MAC 地址,对应哪个端口。
知道了就直送,不知道就先广播
有了这张表,转发就变得聪明起来:
- 如果目的 MAC 已在表里,就只从对应端口转发出去,别的端口不受打扰
- 如果目的 MAC 还不在表里,就暂时把帧从其他所有端口送出去,这叫泛洪
- 等对方回应时,交换机又会从回应帧里学到“原来它在这个口”,此后就能精准转发了
这就像一位前台:第一次见到某人时还认不得,但他一开口登记,前台就记住了他常去哪间办公室;下次找他就直接指路,不必挨个敲门。
把大冲突域拆小
交换机的意义,不只是“转发得更精准”。更重要的是,它让每台设备大多拥有独立的线路,把原本一个大冲突域拆成了许多小段。这样一来,前面那套“先听再说、冲突退避”的紧张感就大大缓解了。
不过,交换机只认识本地的 MAC 地址,它不知道“网络的位置”。规模一大,跨网络寻路仍然是难题。接下来,我们需要一套可分层、可路由的地址。
思考题 1
交换机为何从源地址学习,而不是从目的地址学习?
思考题 2
转发表为空时,第一帧似乎只能泛洪。这与交换机的“聪明转发”矛盾吗?
小结
知识点
- 交换机用观察到的来向建立转发表
- 已知目的端口则定向转发,未知则泛洪
- 交换机缩小了冲突域,但不负责跨网络路由
参考资料
- Wikipedia(zh):网络交换机:基于 MAC 地址转发帧的设备
- Wikipedia(zh):MAC地址表:交换机记录地址与端口对应关系的表
思考题答案(仅供参考)
思考题 1
收到帧时,已经能确定源设备就在入端口这一侧;而目的地址此刻还未证明在哪一侧,若贸然记录,日后转发就可能出错。所以先学有证据的来源,是稳妥的做法。
思考题 2
不矛盾。泛洪正是“还不知道”时的合理选择,它的目的是让通信先跑起来,并在对方的回应中收集信息。等表逐渐建好,转发就会越来越精准。先保证能动,再逐步变聪明,这也是很多协议的通用思路。
协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
封面图
设计师 | 南国微雪