多台电脑插在同一台交换机上时,电脑 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:10 | MAC-A |
| 电脑 B 的网卡 | 02:00:00:00:01:20 | MAC-B |
电脑 A 给电脑 B 发帧时,会在帧头里写上:源 MAC = MAC-A,目的 MAC = MAC-B。
MAC 地址通常在网卡出厂时烧录在硬件里,所以也叫物理地址。不过现代系统里完全可以用软件改掉它(比如手机连公共 Wi-Fi 时默认开启随机 MAC 保护隐私),因此它只负责局域网当前这一跳链路上的投递,不能当成防伪身份凭证。
交换机自学习过程
假设电脑 A、B、C 分别插在交换机的 1、2、3 号口。交换机刚通电时,内部的 MAC 地址表还是空的。此时 A 给 B 发第一帧数据:
- A 发送数据帧:帧从 1 号口进交换机,帧头写着源 MAC =
MAC-A、目的 MAC =MAC-B。 - 根据源 MAC 学习端口:交换机看到
MAC-A从 1 号口进来,立刻在表里记下一笔:MAC-A→ 1 号口。 - 未知目的地址泛洪(Flooding):交换机查表找目的地址
MAC-B,发现表里还没有,于是把这一帧复制发给除 1 号口外的所有端口(2 号口和 3 号口)。 - 目标网卡收下、无关网卡丢弃:B 和 C 都收到了帧。B 核对目的 MAC 是自己就收下;C 发现不是自己,直接丢弃。
- B 回复时完成双向学习:B 给 A 回帧(源
MAC-B、目的MAC-A),从 2 号口进交换机。交换机立刻记下MAC-B→ 2 号口;再查目的地址MAC-A已经在表里指向 1 号口,于是直接从 1 号口单点转发给 A,不再打扰 C。
单播、广播与组播
- 单播(Unicast):一对一发给某个具体 MAC 地址(比如刚才 A 发给 B)。
- 广播(Broadcast):一对所有,发给当前局域网内的全部设备。以太网广播帧的目的 MAC 固定填全 1 地址
ff:ff:ff:ff:ff:ff,交换机收到后会往除入口外的所有端口转发。 - 组播(Multicast):发给加入了同一个特定组的一批设备。