以太网基础:交换网络是怎么工作的

办公室插网线、服务器接交换机、家里路由器下面挂几台设备——你身边的局域网,背后几乎都是以太网在跑。但大多数人对它的印象,停留在"有根线、有个交换机,插上就能用"。一个很自然却很少被认真回答的问题是:你给同事的电脑发个文件,数据帧进了交换机,它凭什么知道该从哪个口送出去,而不是把每个口都广播一遍?

这一篇我们就把交换网络的核心机制讲透:交换机如何学习 MAC 地址、如何根据学到的信息精准转发、遇到不认识的目标又怎么泛洪。把这套"学习—转发"机制看明白,你就理解了二层网络高效运转的根本,也才能看懂虚拟交换机、容器网络、VLAN、二层环路这些工程现象。

理解以太网的关键,不是背帧格式,而是搞清楚交换机怎么从"逢帧必广播"进化成"按需精准转发"——这是一台设备靠"边用边学"自我优化的经典范例。

一、以太网到底是什么

先给以太网一个准确的定位:它是一组局域网技术标准(IEEE 802.3),规定了三件事——帧的格式、链路如何访问介质、MAC 地址怎么用。你可以把它理解成"局域网世界的通用语言":只要网卡、交换机、服务器都说这门语言,它们就能协同工作。

以太网能成为绝对主流,靠的是三个特点:成本低、兼容好、性能持续演进(从 10Mbps 一路到 10G、40G、100G,帧格式却基本不变)。这种"接口稳定、内部演进"的特性,正是它能统治局域网几十年的原因。

二、以太网帧里装了什么

要理解转发,得先知道交换机看的是帧里的哪些字段。一个标准以太网帧的关键结构:

字段 长度 作用
目的 MAC 6 字节 这帧要送给哪块网卡(交换机转发的依据)
源 MAC 6 字节 这帧从哪块网卡来(交换机学习的依据)
类型/长度 2 字节 上层协议是什么(如 0x0800=IPv4,0x0806=ARP)
负载 46~1500 字节 上层数据(如 IP 数据报)
FCS 4 字节 CRC 校验,检测传输错误

不用背长度,但要抓住两个最关键的字段和它们的用途:

  • 目的 MAC——交换机靠它决定"从哪个端口转发出去";
  • 源 MAC——交换机靠它学习"这个 MAC 在哪个端口后面"。

记住这组对应:目的 MAC 用于转发,源 MAC 用于学习。 整个交换机的智能,全建立在"收到帧时偷看源 MAC"这一个动作上。

负载最小 46 字节是个有意思的细节:以太网规定帧不能太短(最小 64 字节含头尾),不足要填充。这是为了保证冲突检测在最坏情况下也能正常工作——属于早期共享介质时代留下的设计遗产。

三、为什么交换机比集线器聪明

理解交换机,最好先看它的"前辈"集线器(hub)有多笨。

集线器的做法极其粗暴:任何一个端口收到信号,就原样复制到所有其他端口。它根本不看 MAC,纯粹是个"电信号复读机"。后果是:

  • 同一时刻只能有一对设备通信,其他设备一发就冲突(所有端口同属一个冲突域);
  • 每台设备都收到不属于自己的帧,既浪费带宽又不安全。

交换机则会"动脑子":它维护一张 MAC 地址表,记录"哪个 MAC 在哪个端口后面"。收到帧时,它查表,只把帧从目标 MAC 对应的那个端口送出去。于是:

  • 不同端口对之间可以同时通信(每个端口是独立冲突域);
  • 绝大多数帧只走该走的路,带宽利用率和安全性都大幅提升。

集线器是"逢帧必广播",交换机是"查表精准转发"。二者的分水岭,就在交换机会不会学习和记忆 MAC 地址。

四、核心机制:交换机怎么学习 MAC 并转发

这是本篇的心脏。交换机不是天生知道每台设备在哪——它是在日常收发中一边转发一边学出来的。完整机制如下:

flowchart TD A[收到一帧 from 端口P] --> B[看源MAC:<br/>记录 源MAC→端口P 到MAC表] B --> C{目的MAC在MAC表里?} C -->|在 命中| D[只从对应端口转发] C -->|不在 未知单播| E[泛洪:从除P外<br/>所有端口转发] C -->|是广播/组播地址| F[泛洪到所有其他端口] E --> G[对方回帧时<br/>交换机学到它的位置]

拆开看每一步:

  1. 学习(看源 MAC):每当一帧从端口 P 进来,交换机就记下"源 MAC 在端口 P 后面",写进 MAC 地址表(带一个老化计时器)。这一步与转发无关,只要收到帧就做
  2. 转发决策(看目的 MAC)
    • 命中:目的 MAC 在表里,且对应端口不是 P,就只从那个端口转发——这是最理想的精准转发。
    • 未知单播:目的 MAC 不在表里,交换机不知道它在哪,只能泛洪(flooding)——从除入口外的所有端口都发一份,赌它在某个口后面。
    • 广播/组播:目的 MAC 是广播地址(ff:ff:ff:ff:ff:ff)或组播,直接泛洪到所有其他端口。ARP 请求就是典型的广播。
  3. 后续收敛:被泛洪后,真正的目标主机会回一帧,这帧的源 MAC 让交换机学到了它的位置。下次再发给它,就能精准转发,不用再泛洪了。

交换机的智能是"自学习"的:它启动时 MAC 表是空的,靠"收到帧就记源 MAC、不认识目标就先泛洪"两条规则,用得越多、学得越全、泛洪越少。这是一个无需人工配置、自我收敛的优雅机制。

MAC 表项会老化(比如 300 秒没再见到这个源 MAC 就删掉),这是为了应对设备移动、关机、换端口——保证表里的信息不会永远过时。

五、广播、泛洪、冲突域:三个容易混的概念

这三个词初学者经常搅在一起,机制上厘清它们:

  • 广播(broadcast):发送方主动把目的 MAC 填成全 1 的广播地址,意图就是"让本网络所有设备都收到"。这是发送方的行为和意图。ARP 请求、DHCP 发现都靠它。
  • 泛洪(flooding):交换机在"不知道目标在哪个端口"时的临时扩散行为。它不是发送方的意图,而是交换机的无奈之举——查不到表,只能广撒网。学到之后就不再泛洪。
  • 冲突域(collision domain):可能发生信号冲突的范围。集线器下所有端口是一个大冲突域;现代交换机每个端口是独立冲突域,所以冲突几乎消失了。
  • 广播域(broadcast domain):广播帧能到达的范围。一台普通交换机下所有端口属于同一个广播域——这正是 VLAN 和路由器要去切分的东西。

交换机消灭了"冲突域"(每端口独立),但默认没有缩小"广播域"(全交换机一个广播域)。广播域过大正是大二层网络的隐患——广播流量会随设备数量线性增长,最终拖垮网络。

六、广播风暴:机制失控会怎样

理解了泛洪和广播,就能理解一个经典事故——广播风暴

假设两台交换机之间因为接线错误形成了环路。一个广播帧(比如一个 ARP 请求)进来后:交换机 A 泛洪给 B,B 又泛洪回 A,A 再泛洪给 B……由于二层帧头没有 TTL 字段(不像 IP 有生存时间),这个帧永远不会自己消失,会在环里被无限复制放大。几秒内就能把链路占满、交换机 CPU 打爆,整个局域网瘫痪。

这就是为什么交换网络需要生成树协议(STP):它通过逻辑上阻断冗余链路,把有环的物理拓扑变成无环的逻辑树,从根本上防止帧在环里打转。

二层没有 TTL,所以二层环路是致命的——帧不会自己死。这也反向解释了为什么 IP 层一定要设计 TTL:网络层允许复杂的多路径拓扑,必须有机制兜底防止包无限循环。

七、为什么云时代还要懂二层

很多人觉得"上云了只要会 IP 就行",这是个误区。云和容器环境里,二层机制无处不在,只是被虚拟化了:

  • 虚拟交换机(vSwitch):宿主机上的 Open vSwitch、Linux bridge 本质就是软件实现的交换机,同样靠 MAC 学习转发。容器/虚机的网卡接到它上面。
  • 容器网络:同一节点上的容器互通,常常就是走一个 Linux bridge 的二层转发;跨节点则可能用 VXLAN 把二层帧封装进 UDP "隧道"过去(大二层 overlay)。
  • VLAN:用 802.1Q 标签把一个物理交换机切成多个互相隔离的广播域,限制广播范围、隔离租户/业务。
  • MAC 漂移:虚机热迁移、容器重建后,同一 MAC 出现在新位置,交换机要重新学习。学习不及时就会出现"迁移后短暂不通"。

你不一定要去机房插网线,但只要你的服务跑在虚机或容器里,你的流量就一定经过某种"软件交换机",遵循的还是 MAC 学习、泛洪、广播域这套以太网原理。看懂它,才能排查"同节点容器能通、跨节点不通"这类问题。

八、学习这一部分最容易踩的坑

1. 以为交换机一开始就知道所有设备位置

交换机启动时 MAC 表是空的,全靠"看源 MAC"边收边学。学不到的目标只能先泛洪。理解"自学习"是理解交换机的前提。

2. 把广播和泛洪当成一回事

广播是发送方主动填广播地址、想让所有人收到;泛洪是交换机查不到表时的被动扩散。一个是意图,一个是无奈,机制完全不同。

3. 以为交换机能隔离广播

普通交换机每个端口是独立冲突域,但默认全在同一个广播域。要隔离广播,得靠 VLAN 或路由器(三层)。

4. 忽视二层没有 TTL

IP 包有 TTL 防环,但以太网帧没有。所以二层环路会引发广播风暴,必须靠 STP 等机制处理。这也是二层和三层在容错设计上的根本差异。

总结

这一篇我们把交换网络的核心机制拆开了:

  • 以太网是局域网的"通用语言",规定了帧格式、介质访问和 MAC 使用,靠"接口稳定、内部演进"统治局域网;
  • 交换机的全部智能建立在一个动作上:收到帧时偷看源 MAC 来学习,发送时看目的 MAC 来转发
  • 转发三种情况——命中则精准转发、未知单播则泛洪、广播则扩散;MAC 表带老化机制应对设备变动;
  • 广播是发送方意图、泛洪是交换机无奈、冲突域已被每端口独立消解、广播域默认仍是全交换机一个;
  • 二层帧没有 TTL,环路会引发广播风暴,需要 STP 兜底;这反衬出 IP 层 TTL 的必要性;
  • 云和容器时代,vSwitch、VXLAN、VLAN、MAC 漂移全是这套以太网原理的延伸。

把"学习—转发—泛洪"这条主线记牢,你就抓住了二层网络的灵魂。但还留了一个问题:应用层和网络层手里拿的是 IP 地址,交换机转发却要 MAC 地址——这中间的翻译是谁做的?下一篇的 ARP,就是这座桥。

参考资源