以太网:局域网如何用 MAC 与交换机转发帧

专栏: 《计算机网络基础》· 第五篇·链路 / 物理层

承接: 《链路层导论:帧如何交给邻站》

讲解维度: 概念 → 原理 → 应用 → 问题定位

读完你能: 讲清以太网帧与 MAC 学习;解释交换机为何不是「路由器」;用 ethtool / 双工与环路思路排有线故障

导读:插上网线之后,真正跑的是「帧」

有线办公、机房机柜、家用光猫下挂的小交换机------绝大多数时候,局域网的事实标准仍是 以太网(Ethernet)

网络层已经决定:从 eth0 发给下一跳 192.168.1.1

网卡驱动真正推到线上的,却是带 目的 MAC / 源 MAC 的以太网帧。中间那台八口小盒子、机柜里那排接入交换机,主业不是查 IP 路由表,而是靠 MAC 地址表 决定从哪个口送出。

很多人第一次抓包会愣一下:Wireshark 最外层明明写着 Ethernet,里面才套着 IP。

其实这很正常------你在办公网里「通不通」,经常先卡在这一层:链路有没有 up、口有没有学到 MAC、广播有没有被风暴淹没。

复制代码
主机A                交换机                 主机B / 网关
  │ 帧(目的=B的MAC) │                       │
  │────────────────►│ 查MAC表               │
  │                 │──────────────────────►│

本篇把帧格式、学习老化、洪泛、双工协商和环路直觉摊开,并给几组本机能做的小实验。VLAN、无线另章展开;这里先把「有线二层」摸熟。

一、概念:以太网在认什么、管什么?

1.1 它解决的问题

以太网 :以 为单位、用 MAC 标识邻站、在局域网内交付的链路层技术族。速率从百兆到 100G+ 都有,介质可以是铜缆、光纤,甚至虚拟交换机上的 veth------骨架仍是「帧 + MAC +(常常还有)交换」。

它不管「跨很多个网络怎么选路」;那是 IP 的事。它也不保证可靠投递:FCS 错了就丢,重传多半靠上层。日常排障时,把它当成:

同一广播域里,邻站之间怎么把比特收成一帧、再交给对的人。

1.2 它管什么 / 默认不管什么

它管 默认不管
本段链路的邻站寻址(MAC) 跨网段选路(那是路由)
成帧、类型字段、FCS 校验 「一定到达」、保序、重传
交换机内的学习 / 转发 / 洪泛 加密(那是 TLS / MACsec 等另话题)
速率、双工、链路是否 up 端口号、进程监听(传输层 / 应用)

经典边界再念一遍:

复制代码
Link detected: no     → 先查线、口、光模块、对端供电
同网段 ARP 全 FAILED → 可能 VLAN / 口隔离 / 对端关机(下一章)
ping 通但 443 不通   → 多半不是以太网本身的锅

1.3 MAC:邻站门牌,不是「全世界唯一身份证」

常见 48 位,写成 aa:bb:cc:dd:ee:ff。前半段常能看出厂商 OUI,后半段区分设备------但排障时别迷信「绝对唯一」:克隆、虚拟化、容器、高可用漂移都会改写或漂移 MAC。

记住三件事:

  1. 跨路由器之后,每一跳都会换一层链路封装;帧上的目的 MAC 是「当前这一跳的邻站」,不是远端服务器的 MAC

  2. 交换机主要靠 源 MAC 学习、目的 MAC 转发;它一般不拆开帮你改 IP

  3. ff:ff:ff:ff:ff:ff 是广播------同广播域里人人都该听见(能不能处理是另一回事)

1.4 Ethernet II 帧:你天天在抓的那层信封

现网最常见的是 Ethernet II(DIX)格式。直觉版:

复制代码
目的MAC(6) | 源MAC(6) | EtherType(2) | 载荷 | FCS(4)

线上还会有前导码(Preamble)/ SFD 帮着对齐比特流;抓包工具通常从目的 MAC 开始给你看。字段人话:

字段 你要知道的
目的 MAC 这一跳交给谁;全 F 为广播;组播有特定范围
源 MAC 谁发的------交换机用它「学习:这人在哪个口」
EtherType 里面是啥:0x0800 IPv4,0x86DD IPv6,0x0806 ARP...
载荷 常见承载 IP / ARP 等;长度受 MTU 约束
FCS 帧校验序列;错了接收侧通常直接丢,上层可能表现为偶发重传

还有一套经典 802.3 + LLC/SNAP 的故事(长度字段 vs EtherType 的判别),现代 IP 网络里你更常撞到 Ethernet II。抓包时最外层「Ethernet」就是这份信封;-e 打开链路层地址后,很多「同网段玄学」会突然变清楚。

最小帧、最大帧有历史包袱(早期还要给 CSMA/CD 留槽时间)。今天全双工交换占主流,你更常关心的是:载荷默认按 1500 字节 IP MTU 来设计;机房若开巨型帧,两端与路径都要对齐------这和隧道章里的 MTU 故事是亲戚。

复制代码
常见:Ethernet 载荷 ≤ 1500  → 对应 IP MTU 1500
巨型帧(jumbo):载荷可到 9000 量级(实现各异)
两端一个开一个不开 → 大包怪、小包正常

1.5 单播 / 组播 / 广播

类型 目的 MAC 特征 典型用途
单播 具体主机 MAC 普通点到点通信
广播 ff:ff:ff:ff:ff:ff ARP 请求、部分发现
组播 特定范围(最低位等特征) 发现协议、部分流媒体

广播会扩散到 广播域------在没划 VLAN 的朴素交换网里,往往就是「这些口串在一起的那片」。同域里 ARP、DHCP、误接环路,都会让交换机与主机一起加班。下一章会看到:ARP 请求正是靠广播「喊一嗓子」的。

1.6 交换机 vs 路由器(边界要清)

二层交换机 路由器 / 三层设备
主要看 MAC 地址表 IP / 路由表
典型动作 同网段(同广播域)内转发帧 跨网段选下一跳
改不改 IP 头 一般不改 TTL 等会变
环路风险 二层环 → 风暴 / MAC 抖动 路由环 → TTL 耗尽

家用「路由器」盒子里往往 路由器 + 交换机 + Wi‑Fi AP 焊在一起。后面四个 LAN 口彼此像小交换机;WAN 口才更像路由边界。排障时要问清楚:坏的是 交换口 / 链路协商 ,还是 路由 / NAT / Wi‑Fi

有些盒子系统设置里还能看到「AP 隔离」「访客网络」------那是在二层或策略上把口切开,表现会像「都连着同一个 SSID / 同一台盒子,却互 ping 不通」。

二、原理:学习、洪泛、环路与协商

2.1 MAC 学习:从源地址记住「人在哪个口」

交换机并不预知全世界的 MAC。它靠偷看进来的帧:

复制代码
口1 收到帧:源MAC=AA
→ 表项:AA → 口1

口3 收到帧:源MAC=CC
→ 表项:CC → 口3

人话版:谁从哪个口说话,就把「人名(MAC)→ 门口编号」记下来。

下次有帧要找 AA,就不用满屋子喊,直接从口 1 送出去。

表项有 老化时间(不同设备默认从几十秒到几分钟不等):人不说话久了,条目会忘------再出现时重新学。主机休眠、笔记本合盖、虚拟机暂停,都可能让表项过期;醒来后第一阵流量里,你会短暂看到更多洪泛,直到表重新填满。

学习还会被「异常」打脸:同一 MAC 突然从另一个口进来,表项会迁移到新口。正常场景包括笔记本换了墙上的口、虚拟机漂移;异常场景包括环路导致 MAC 在多口之间乱跳------后面环路一节再展开。

2.2 转发:已知单播、未知单播、广播

复制代码
目的 MAC 在表里     → 从对应口送出(已知单播)
目的 MAC 不在表里   → 向除来源口外的端口洪泛(未知单播 flood)
目的是广播 / 部分组播 → 在广播域内扩散(受 VLAN 等限制)

「未知单播洪泛」是很多人对交换机的第一误解:以为交换机会像路由器一样「查不到就丢」。二层默认更像:

不认识这个人?先问问整层楼------除了刚才说话那扇门。

所以刚清空 MAC 表、或大量主机同时上线时,交换机会更「吵」。表学满之后,单播流量才安静下来。广播本身无法靠「学目的 MAC」消掉------广播的目的就是让域内都听见。

2.3 为什么交换机「不是路由器」------用一次转发对比

同一台接入交换机上,主机 A 要访问同网段主机 B:

复制代码
1. A 已通过 ARP 知道 B 的 MAC(下一章)
2. A 发出以太网帧:目的=B的MAC,源=A的MAC,里面是 IP 包
3. 交换机看目的 MAC:在表 → 从 B 所在口送出
4. IP 头里的源/目的 IP 全程不变;TTL 也不因「过交换机」而减

若 B 在另一个网段,帧的目的 MAC 往往是 网关的 MAC ;交换机只负责把帧送到网关口,网关再改链路封装、查路由往外扔。

把这两步混在一个脑模型里,就会出现「交换机上能学到外网服务器 MAC」这种幻觉------学不到,也不该学到。

2.4 环路与 STP 直觉:广播如何把网打爆

早期以太网共享介质靠 CSMA/CD 听信道;今天全双工点到点链路占主流,冲突域被切得很碎。但 二层环路 并没有退休------两台交换机之间随手插两根线,又没有任何环路保护时:

复制代码
广播帧被反复复制 → 广播风暴
未知单播也可能被放大
MAC 表项在不同口之间抖动 → 闪断、极慢、CPU 打满

有一次机房巡检,两台接入之间多插了一根「备份」网线,又没开环路防护:监控大盘先是接口流量直线起飞,再是一整层楼的电话开始响。看起来像遭受攻击,其实是帧在环上滚雪球。

园区网常用 STP / RSTP / MSTP 一类生成树:在逻辑上堵住冗余边,需要时再切换。数据中心有更多现代方案(本专栏不展开协议细节)。你只要先建立排障指纹:

整片广播域同时炸、交换机 CPU 飙高、同一 MAC 在多口乱跳------先怀疑环路,再怀疑「是不是业务发布把流量打爆了」。

生成树的直觉不是「让网络变快」,而是「有冗余拓扑时,先保证不要自己咬自己」。口状态若长期卡在 listening / blocking 一类(不同厂商显示名不同),也可能表现为「线插着却不通」------这时别只盯着 IP。

2.5 速率与双工:自协商,以及那次「一边强制一边自动」

链路两端要谈妥两件大事:

项目 含义
Speed 100M / 1G / 10G...
Duplex 全双工 / 半双工
Auto-negotiation 是否自动谈上述参数

现代设备默认自协商,多数时候插上就能 work。坑在「有人好心强制」:

有一次两端一边把电口强制成 100M full,另一边保持自动。链路灯还是绿的,ping 小包偶发能通,大文件传输却错包狂涨、速度像回到拨号时代。查了半天才发现是经典 双工不匹配:一端以为全双工,一端实际落到半双工,碰撞 / 错误计数在悄悄报警。

复制代码
ethtool eth0
# 关注:Speed / Duplex / Auto-negotiation / Link detected

示意输出(健康千兆口):

复制代码
Settings for eth0:
	...
	Speed: 1000Mb/s
	Duplex: Full
	Auto-negotiation: on
	...
	Link detected: yes

若你看见 Speed: 100Mb/s 却预期是千兆,先查线缆品类(有些线只能跑到 100M)、水晶头、口脏污、对端是否限速,再查是否有人写了强制速率。

2.6 FCS、错包与「慢」的物理味道

FCS 不对的帧,网卡 / 交换机通常直接丢掉。你在 ip -s linkethtool -S 里看到的 rx errorsframecrccollisions(名称因驱动而异)往上爬时,常见根因包括:

复制代码
双工不匹配
线缆质量差 / 过长 / 干扰
光模块不匹配、光衰过大
网卡或交换口硬件故障
异常巨型帧 / MTU 不一致(表现也可能是丢大包)

链路显示 up 不等于「这一跳很干净」。有线故障里,「极慢、偶断、重传多」常常比「彻底 link down」更磨人------后者至少灯灭了,前者还得盯计数器。

2.7 巨型帧与 MTU(和网络层交界)

以太网载荷默认常按 1500 字节 IP MTU。机房存储、部分 HPC / 东西向流量会开 jumbo frame,把载荷抬到 9000 一类量级(具体以设备为准)。

要求很朴素、却容易忘:

复制代码
发送端、接收端、中间交换机路径
对巨型帧的支持与配置要一致

不一致时的症状像隧道章:小包正常,大包失败或极慢;有时只在某一跳开始丢。云上的「虚拟以太网」未必把宿主机巨型帧能力完整暴露给你------别假设公有云弹性网卡默认 9000。

三、应用:从家里到机房到云

3.1 家用:光猫、小交换机、随手换口

复制代码
光猫/路由器 LAN 口 → 小交换机 → 多台电脑 / NAS / 电视盒子

你换网线、换口,本质是换交换端口;IP 可能仍是 DHCP 租约那一个,但链路协商会重来,交换机要重新学习你的 MAC。

家里若串了两台傻瓜交换机又绕成环,一样能风暴------廉价设备往往没有靠谱的环路保护。

3.2 园区 / 公司接入

复制代码
电脑 → 接入交换机 → 汇聚 → 核心 → 出口路由器

口上常绑 VLAN 、端口安全、802.1X、DHCP Snooping 一类能力。「插上却上不了网」不一定是 IP 配错,也可能是:口在 guest VLAN、没通过认证、MAC 数超限被打到隔离 VLAN。

这时 ethtool 可能显示 link up,邻居表却一直空------别只在主机上改地址,问问网管这个口允许什么。

3.3 数据中心与服务器双上行

服务器双上行、TOR 交换机、聚合链路(bonding / LAG)......细节繁多,但排障仍常从这几行开始:

复制代码
光模块是否亮、对端是否 up
ethtool 速率 / 双工是否预期
RX/TX errors、FCS、drop 是否在涨
聚合口是否一边 down 一边 up 导致哈希倾斜

「业务机看着 CPU 不高却打不满带宽」,有时是单队列 / 单流哈希撞到一根成员链路上------那是性能话题的入口;本篇先要求你能证明:链路层有没有在丢、有没有在半速跑。

3.4 云上的「虚拟以太网」

云主机的 eth0 后面往往是虚拟交换机 + 覆盖网络。你仍可用:

复制代码
ip link
ethtool eth0   # 视虚拟化实现,信息可能简化甚至很少

安全组 / 网络 ACL 是另一层过滤;「虚拟网卡 up 但业务不通」要同时想策略。虚拟场景里广播、混杂模式、MAC 反欺骗规则也可能和物理机房不一样------但 MAC 学习 / 洪泛 的基本剧情仍在,只是演员换成了 vSwitch。

3.5 和下一章的衔接:帧发出去之前还缺一块拼图

主机已经知道下一跳 IP,还要知道下一跳 MAC,才会把目的 MAC 填进帧头。

这块翻译工作是 ARP(IPv6 侧常是 ND)。以太网保证「有帧、有交换」;ARP 保证「帧上的门牌填得对」。同网段不通时,两章要连着看。

四、问题定位:有线链路怎么查?

4.1 故障速查

现象 以太网侧常见根因 先做什么
完全不通,灯不亮 / NO-CARRIER 线、口、供电、光模块、对端关机 换线换口;ip link 看 LOWER_UP
Link up 但极慢、错包涨 双工不匹配、线劣、干扰、坏口 ethtool;盯 rx/tx errors
速率只有 100M(预期千兆) 线序/线材、强制速率、口能力 查协商与线缆;对齐两端配置
同交换机部分主机互访失败 VLAN / 口隔离 / 风暴边缘 对照口配置;抓广播是否异常
整片网同时卡死、交换机 CPU 高 二层环路、广播风暴 找环、看 MAC 抖动、临时拆冗余线
大包失败、小包正常 MTU / 巨型帧不一致 两端与中间路径对齐 MTU
ping 通业务不通 多半不是二层主因 转端口 / 防火墙 / 应用

4.2 决策树

复制代码
有线「不通 / 极慢」
  │
  ├─ Link detected: no / NO-CARRIER
  │     → 换线、换口、查对端、查光衰/模块
  │
  ├─ Speed / Duplex 与预期不符,或一端强制一端自动
  │     → 统一自协商或统一强制;避免混用
  │
  ├─ ip -s link / ethtool -S 错包、碰撞持续上涨
  │     → 双工、线缆、干扰、坏网卡/坏口
  │
  ├─ 同网段 ARP 失败 / 邻居 FAILED
  │     → 下一章;同时怀疑 VLAN、口隔离、对端没上线
  │
  ├─ 整片广播域同时炸、MAC 多口乱跳
  │     → 环路 / 风暴;先物理拆环再谈业务
  │
  └─ 链路干净、邻居也正常
        → 转路由、防火墙、应用

4.3 常用命令(Linux)

复制代码
ip -br link
ip -s link show eth0          # RX/TX errors, dropped, overruns...
ethtool eth0
ethtool -S eth0 | head -n 40  # 驱动统计,字段名因卡而异

持续观察错误是否增长(比看一眼绝对值有用):

复制代码
watch -n1 'ip -s link show eth0 | sed -n "1,12p"'

抓帧看 MAC 与类型:

复制代码
sudo tcpdump -ni eth0 -e -c 20
# -e 打印链路层地址;留意目的是否广播、EtherType 是否预期

4.4 和「网卡中断 / 多队列」的关系( foreshadow )

多队列网卡上,不同队列常对应不同中断;性能调优会看 /proc/interrupts、RPS/XPS 一类旋钮。

本专栏横切篇会再碰;这里只需知道:链路层之上,驱动与中断决定收包效率------链路 up 且无错包,仍可能被软中断或单队列卡住上限。

五、动手:把帧、协商和计数器摸实

下面以常见 Linux / iproute2 + ethtool 为例。接口名请换成你机器上的(ip -br link 查看)。部分云主机 / Wi‑Fi 网卡对 ethtool 支持有限,选有线口做更有感觉。

实验 A:读链路状态与协商参数

复制代码
ip -br link
ethtool eth0

在纸上填:

复制代码
接口名:__________
状态(UP / LOWER_UP?):__________
Speed:__________
Duplex:__________
Auto-negotiation:__________
Link detected:__________

期望:有线插好时 Link detected: yes,办公千兆口常见 1000Mb/s + Full + Auto-negotiation: on

NO-CARRIERLink detected: no,先别排 IP------物理/链路还没交付成功。

示意:

复制代码
$ ip -br link
lo               UNKNOWN        00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
eth0             UP             52:54:00:ab:cd:ef <BROADCAST,MULTICAST,UP,LOWER_UP>

实验 B:盯错误计数------「安静」还是「在流血」

先拍一张快照,过 30~60 秒再拍一次(或用 watch):

复制代码
ip -s link show eth0
# 记录 RX errors / dropped / overruns 与 TX 侧计数
sleep 30
ip -s link show eth0

期望:空闲或轻载时,错误类计数基本不动。

若你一边跑 iperf3 / 大文件拷贝,一边看见 errors 持续增加,优先走双工与线缆方向,而不是先重启业务进程。

可选:看驱动详细统计(字段名五花八门,搜索 crcframealigncollision):

复制代码
ethtool -S eth0 | rg -i 'err|crc|frame|drop|collision|fec'

实验 C:用 tcpdump -e 看见以太网头

在授权环境、尽量选流量不多的口:

复制代码
sudo tcpdump -ni eth0 -e -c 15

示意输出(字段随版本略有差异):

复制代码
12:01:03.112233 aa:bb:cc:dd:ee:01 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: ...
12:01:03.112401 aa:bb:cc:dd:ee:fe > aa:bb:cc:dd:ee:01, ethertype ARP (0x0806), length 42: ...
12:01:03.112520 aa:bb:cc:dd:ee:01 > aa:bb:cc:dd:ee:fe, ethertype IPv4 (0x0800), length 98: ...

你要能指着屏幕说出:

复制代码
谁是源 MAC、谁是目的 MAC
这一帧是广播还是单播
EtherType 是 ARP 还是 IPv4/IPv6

若满屏都是 ff:ff:ff:ff:ff:ff 且速率异常高,结合交换机 CPU / 业务是否全员遭殃,把「风暴 / 环路」提到优先怀疑列表。

实验 D(可选):对比 MTU

复制代码
ip link show eth0 | rg mtu
ping -c 2 -s 1472 -M do 192.168.1.1    # 1472+28≈1500;地址换成你的网关
ping -c 2 -s 8000 -M do 192.168.1.1    # 若路径不支持巨型帧,通常失败

期望:在默认 1500 路径上,大 ping 以 DF 方式会失败或提示需要分片;不要在生产随手改交换机巨型帧------这是思想实验 + 受控环境实验。

本章小结

复制代码
以太网用帧在局域网交付;MAC 标识邻站
交换机学源 MAC、按目的 MAC 转发;未知单播则洪泛
广播域决定 ARP 等能吵多远;环路可把吵闹变成灾难
速率/双工靠协商;一端强制一端自动是经典慢速坑
FCS/错包计数是有线「在流血」的信号
巨型帧与 MTU 必须路径一致
先看 link 与 ethtool,再怪业务
相关推荐
梅菲塔亚2 小时前
Keepalived高可用全解析
linux·运维·服务器·开发语言·网络·php
basketball6163 小时前
软考中级网络工程师 第6章 网络安全 备考总结
大数据·网络·web安全·网络工程师·软考
云老大-阿里云国际站代理商3 小时前
腾讯云国际站代理商:CVM 跨地域网络抖动排查,深度分析 TCP 重传与 MTU 问题
网络·tcp/ip·腾讯云
暖核3 小时前
Keepalived 高可用全解析:从 VRRP 原理到生产环境 Nginx 主备切换实践
网络·nginx·智能路由器
砚凝霜4 小时前
软考网络工程师|第 9 章 网络诊断命令 + 故障工具 + 故障排查完整笔记
网络·笔记
一目Leizi4 小时前
Wireshark SSH 远程抓包配置指南(以 UniFi Dream Router 为例)
智能路由器
数据知道4 小时前
XXE 漏洞深度实战:XML 外部实体攻击与 OOB 带外
xml·网络·安全·网络安全
深圳海导科技5 小时前
海导科技navynav|GNSS测绘电台:在“复杂遮挡环境”的稳定方案
网络·科技
huainingning5 小时前
US226交换机首台web配置后第二台web无法登录问题解决方法
网络