physical - link - ethernet
02. 物理层、链路层与以太网
0. 本章先解决什么问题
网络最终要把 bit 从一台设备传到另一台设备。
物理层和链路层解决的是局部问题:
相邻设备之间如何传输一帧?
局域网里下一跳是谁?
帧是否损坏?
多个设备如何共享介质?
本章讲物理介质、网卡、MAC 地址、以太网帧、交换机、MTU、链路层错误和实际排障。
先看局域网里最关键的动作:ARP 找 MAC,交换机学习 MAC 到端口,然后转发以太网帧。
这张图怎么读
先从主机发包看起:应用只知道目标 IP,但同一局域网内真正能交付帧的是 MAC 地址,所以发送前要用 ARP 找到下一跳 MAC。
再看交换机:它不理解你的应用语义,只根据源 MAC 学习“这个地址在哪个端口”,再根据目的 MAC 决定转发、泛洪或丢弃。
最后看边界:ARP 广播只在本广播域内传播,跨网段以后要交给网关,帧头的源/目的 MAC 会随着每一跳重新变化。
1. 物理层:bit 如何变成信号
物理层关心:
- 电信号。
- 光信号。
- 无线信号。
- 编码和调制。
- 速率。
- 信道质量。
- 线缆、光纤、无线频段。
对程序员来说,不需要一开始掌握电路细节,但要知道:
物理层不可靠,会有噪声、衰减、干扰、误码、丢失。
上层协议要检测或容忍这些问题。
2. 链路层:相邻节点传输
链路层解决:
在同一个链路或局域网里,如何把一帧从一个设备发给另一个设备?
它不负责跨互联网路径选择。
跨网络由 IP 和路由负责。
链路层常见能力:
- 成帧。
- MAC 寻址。
- 差错检测。
- 介质访问控制。
- 局域网转发。
3. MAC 地址
MAC 地址是链路层地址,常用于局域网内标识网卡。
它回答:
这一帧在当前链路上发给哪个设备?
IP 地址回答:
目标主机在网络层是谁?
二者不同:
| 地址 | 作用范围 | 用途 |
|---|---|---|
| MAC | 当前链路或局域网 | 下一跳帧传输 |
| IP | 跨网络 | 主机寻址和路由 |
一个 IP 包跨越多个链路时,IP 源/目的通常不变,但每一跳的 MAC 头会变化。
4. 以太网帧
以太网帧大致包含:
目的 MAC
源 MAC
类型
payload
校验
payload 里通常装 IP 包。
接收方根据类型字段知道上层是什么协议。
校验用于检测传输中是否损坏。检测到错误通常丢弃,让上层处理重传或容错。
5. 交换机
交换机工作在链路层,负责局域网内转发帧。
它维护 MAC 地址表:
MAC -> 端口
当收到帧:
学习源 MAC 在哪个端口
查目的 MAC 应该从哪个端口发出
如果不知道目的 MAC,可能泛洪到多个端口。
交换机让局域网内设备不用共享一根总线,减少冲突,提高效率。
6. 广播和局域网
有些帧会广播到局域网内所有设备。
例如 ARP 请求:
谁拥有这个 IP?
请告诉我你的 MAC。
广播范围太大会带来负担。
所以网络通常划分广播域,例如使用 VLAN、路由器隔离。
7. MTU
MTU 是链路层一次能承载的最大 payload 大小。
常见以太网 MTU 是 1500 bytes,但实际路径可能不同。
如果上层包太大:
- 可能分片。
- 可能被丢弃。
- 可能触发路径 MTU 发现。
MTU 问题可能导致:
小请求正常,大请求失败
握手正常,传大数据卡住
反例:IP 看起来同网段,不代表二层一定互通
很多初学者会把“IP 在同一个网段”直接等同于“肯定能直接通信”。这只是主机本地路由判断的结果,不等于交换机、无线网络、VLAN、安全策略也允许帧过去。
考虑这个配置:
A: 192.168.10.21/24
B: 192.168.10.37/24
A 会判断 B 在本地网段,于是不会把包交给网关,而是先发 ARP:
Who has 192.168.10.37?
但如果 A 和 B 被放进不同 VLAN,或者无线 AP 开了客户端隔离,ARP 广播可能根本到不了 B。于是现象会变成:
| 表面现象 | 真正发生的事 |
|---|---|
| IP 配置看起来正确 | 主机只是在本地判断目标属于同网段 |
| ping 不通 | ARP 阶段可能已经失败 |
| 抓应用日志没有请求 | 请求从未进入上层协议 |
| 改 HTTP/TLS 没效果 | 帧交付边界还没成立 |
所以同网段排障的第一证据不是应用日志,而是:
是否有 ARP 请求
是否有 ARP 响应
响应 MAC 是否合理
交换机/无线侧是否允许这一帧跨过去
8. Wi-Fi 和有线的差异直觉
无线链路更容易受:
- 信号强度。
- 干扰。
- 距离。
- 共享信道。
- 重传。
- 漫游。
影响。
所以无线网络延迟和丢包更容易抖动。
有线通常更稳定,但也可能受线缆、端口、交换机、双工和速率协商问题影响。
9. 链路层常见问题
| 现象 | 可能方向 |
|---|---|
| 同网段设备不通 | ARP、交换机、VLAN、网卡 |
| 丢包只在局域网内发生 | 链路质量、交换机队列 |
| 小包通,大包不通 | MTU |
| 某设备偶发断开 | 网卡、线缆、无线信号 |
| 广播很多 | ARP 风暴、环路、配置错误 |
链路层问题通常需要看本地网络、网卡状态、ARP 表、交换机和抓包。
机制深挖:一次同网段访问的帧级时间线
假设主机 A 要访问同一网段的主机 B。应用层看到的是:
A 访问 B 的 IP
但链路层真正发生的是一串更细的动作:
| 阶段 | A 知道什么 | A 需要什么 | 链路层动作 | 失败时的典型现象 |
|---|---|---|---|---|
| 判断网段 | 自己 IP、掩码、目标 IP | 目标是否本地可达 | 用掩码判断是否同网段 | 网关配置错,明明近端却绕路 |
| 查 ARP 缓存 | 目标 IP | 目标 MAC | 命中则直接封装帧 | 缓存过期后第一次访问变慢 |
| 发 ARP 请求 | 目标 IP | 谁拥有这个 IP | 广播到本广播域 | VLAN 隔离时收不到响应 |
| 收 ARP 响应 | 目标 IP 和 MAC | 更新缓存 | 记录 IP -> MAC | ARP 欺骗会把包发错地方 |
| 发以太网帧 | 目标 MAC | 交换机转发 | 帧进入交换机端口 | MAC 表异常或环路导致丢包 |
| 交换机转发 | 源/目的 MAC | 出口端口 | 学习源 MAC,查目的 MAC | 未知目的会泛洪,广播域变吵 |
| B 收帧 | 目的 MAC 是自己 | 交给上层 | 校验通过后取出 IP 包 | 错误帧被丢弃,上层看不到 |
这条时间线里有一个很重要的边界:
IP 地址用于决定目标主机或下一跳
MAC 地址用于完成当前这一跳的帧交付
所以同网段不通时,不能只问“IP 对不对”。还要问:
- A 是否把 B 判断成本地目标?
- A 是否能拿到 B 的 MAC?
- 交换机是否知道 B 的端口?
- A 和 B 是否真的在同一个广播域?
- 本机防火墙是否在更上层丢掉了包?
故障指纹:链路层问题通常长什么样
| 症状 | 更可能的链路层方向 | 为什么 |
|---|---|---|
| 第一次访问慢,之后正常 | ARP 缓存未命中 | 第一次需要广播解析 MAC |
| 同一交换机部分机器可达,部分不可达 | VLAN、端口策略、MAC 学习 | 链路层隔离不一定体现在 IP 配置里 |
| 小包正常,大文件或大请求异常 | MTU、分片、错误帧 | 控制包小,数据包可能碰到路径大小限制 |
| Wi-Fi 下延迟突然抖动 | 重传、干扰、信号质量 | 无线介质共享且更容易丢帧 |
| 抓包能看到 ARP 请求,看不到响应 | 目标不在广播域、被策略拦截、目标离线 | ARP 是本地广播,跨不过三层边界 |
排查链路层要有一个原则:先证明“这一跳能交付帧”,再讨论 IP 路由和应用协议。否则你可能在 HTTP、TLS、业务日志里绕很久,实际问题只是 ARP、VLAN、网卡或 MTU。
10. 联系实际:为什么同一局域网也可能不通
两台机器在同一局域网,要通信仍需要:
- IP 配置在同一网段或有路由。
- ARP 能解析对方 MAC。
- 交换机能转发帧。
- VLAN 或安全策略允许。
- 网卡和链路正常。
- 防火墙没有拦截。
所以“同一个 Wi-Fi 下应该能通”不是绝对。还要看链路层和本机策略。
小实验:用局域网现象识别链路层问题
准备两台处在同一局域网的机器,或者用一台机器观察自己所在网络的邻居发现现象。不要先看应用,先做链路层三问:
| 问题 | 观察点 | 说明 |
|---|---|---|
| 网卡是否真正连上? | 链路状态、速率、双工模式、无线信号强度 | 物理层不稳定会让上层表现成随机慢或随机断 |
| 是否处在同一个广播域? | 是否能看到 ARP 请求/响应,网段和 VLAN 是否一致 | 同网段通信依赖本地 MAC 发现 |
| 帧是否可能被限制? | MTU、丢包、错误帧、交换机端口策略 | 小包能通不代表大包一定能通 |
如果你不能抓包,也可以做纸面推演:A 要访问同网段 B,A 已知 B 的 IP 但不知道 MAC。写出 A 会广播什么、B 如何回应、交换机如何学习端口。能把这个过程说清楚,很多“明明在一个网里为什么不通”的问题就不会被误判到应用层。
11. 学完本章你能解决什么问题
学完这一章,你应该能解决或开始分析这些问题:
- 物理层和链路层分别解决什么问题?
- MAC 地址和 IP 地址有什么区别?
- 以太网帧里大致有什么?
- 交换机如何根据 MAC 表转发?
- 广播为什么需要控制范围?
- MTU 为什么会造成小包正常、大包异常?
- Wi-Fi 为什么比有线更容易抖动?
- 同网段不通时如何从 ARP、交换机、VLAN、网卡排查?
链路层解决的是相邻设备之间的传输。只有这一跳通了,IP 才能谈跨网络转发。