以太网帧与交换机转发

多台电脑插在同一台交换机上时,电脑 A 发给电脑 B 的数据,交换机是怎么知道该往几号口转的?

以太网帧与 MAC 地址

以太网传文件时,会先把数据切成一块块大小合适的数据段,并在前后包上源地址、目的地址和校验码,这种打包好的二层数据单元叫帧(Frame)。

在以太网里,用来标识收发网卡的是 MAC 地址(Media Access Control Address)。它长 48 位(6 字节),通常写成六组两位十六进制数:

02:00:00:00:01:10

假设电脑 A 和电脑 B 的网卡 MAC 地址如下:

接口MAC 地址简记
电脑 A 的网卡02:00:00:00:01:10MAC-A
电脑 B 的网卡02:00:00:00:01:20MAC-B

电脑 A 给电脑 B 发帧时,会在帧头里写上:源 MAC = MAC-A,目的 MAC = MAC-B。

MAC 地址通常在网卡出厂时烧录在硬件里,所以也叫物理地址。不过现代系统里完全可以用软件改掉它(比如手机连公共 Wi-Fi 时默认开启随机 MAC 保护隐私),因此它只负责局域网当前这一跳链路上的投递,不能当成防伪身份凭证。

交换机自学习过程

假设电脑 A、B、C 分别插在交换机的 1、2、3 号口。交换机刚通电时,内部的 MAC 地址表还是空的。此时 A 给 B 发第一帧数据:

  1. A 发送数据帧:帧从 1 号口进交换机,帧头写着源 MAC = MAC-A、目的 MAC = MAC-B。
  2. 根据源 MAC 学习端口:交换机看到 MAC-A 从 1 号口进来,立刻在表里记下一笔:MAC-A → 1 号口。
  3. 未知目的地址泛洪(Flooding):交换机查表找目的地址 MAC-B,发现表里还没有,于是把这一帧复制发给除 1 号口外的所有端口(2 号口和 3 号口)。
  4. 目标网卡收下、无关网卡丢弃:B 和 C 都收到了帧。B 核对目的 MAC 是自己就收下;C 发现不是自己,直接丢弃。
  5. B 回复时完成双向学习:B 给 A 回帧(源 MAC-B、目的 MAC-A),从 2 号口进交换机。交换机立刻记下 MAC-B → 2 号口;再查目的地址 MAC-A 已经在表里指向 1 号口,于是直接从 1 号口单点转发给 A,不再打扰 C。

交换机从源 MAC 学习接口,再按目的 MAC 转发

单播、广播与组播

  • 单播(Unicast):一对一发给某个具体 MAC 地址(比如刚才 A 发给 B)。
  • 广播(Broadcast):一对所有,发给当前局域网内的全部设备。以太网广播帧的目的 MAC 固定填全 1 地址 ff:ff:ff:ff:ff:ff,交换机收到后会往除入口外的所有端口转发。
  • 组播(Multicast):发给加入了同一个特定组的一批设备。

本章阅读

阅读标记