physical - link - ethernet

02. 物理层、链路层与以太网

0. 本章先解决什么问题

网络最终要把 bit 从一台设备传到另一台设备。

物理层和链路层解决的是局部问题:

相邻设备之间如何传输一帧?
局域网里下一跳是谁?
帧是否损坏?
多个设备如何共享介质?

本章讲物理介质、网卡、MAC 地址、以太网帧、交换机、MTU、链路层错误和实际排障。

先看局域网里最关键的动作:ARP 找 MAC,交换机学习 MAC 到端口,然后转发以太网帧。

以太网、ARP 与交换机转发

这张图怎么读

先从主机发包看起:应用只知道目标 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 -> MACARP 欺骗会把包发错地方
发以太网帧目标 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. 联系实际:为什么同一局域网也可能不通

两台机器在同一局域网,要通信仍需要:

  1. IP 配置在同一网段或有路由。
  2. ARP 能解析对方 MAC。
  3. 交换机能转发帧。
  4. VLAN 或安全策略允许。
  5. 网卡和链路正常。
  6. 防火墙没有拦截。

所以“同一个 Wi-Fi 下应该能通”不是绝对。还要看链路层和本机策略。

小实验:用局域网现象识别链路层问题

准备两台处在同一局域网的机器,或者用一台机器观察自己所在网络的邻居发现现象。不要先看应用,先做链路层三问:

问题观察点说明
网卡是否真正连上?链路状态、速率、双工模式、无线信号强度物理层不稳定会让上层表现成随机慢或随机断
是否处在同一个广播域?是否能看到 ARP 请求/响应,网段和 VLAN 是否一致同网段通信依赖本地 MAC 发现
帧是否可能被限制?MTU、丢包、错误帧、交换机端口策略小包能通不代表大包一定能通

如果你不能抓包,也可以做纸面推演:A 要访问同网段 B,A 已知 B 的 IP 但不知道 MAC。写出 A 会广播什么、B 如何回应、交换机如何学习端口。能把这个过程说清楚,很多“明明在一个网里为什么不通”的问题就不会被误判到应用层。

11. 学完本章你能解决什么问题

学完这一章,你应该能解决或开始分析这些问题:

  1. 物理层和链路层分别解决什么问题?
  2. MAC 地址和 IP 地址有什么区别?
  3. 以太网帧里大致有什么?
  4. 交换机如何根据 MAC 表转发?
  5. 广播为什么需要控制范围?
  6. MTU 为什么会造成小包正常、大包异常?
  7. Wi-Fi 为什么比有线更容易抖动?
  8. 同网段不通时如何从 ARP、交换机、VLAN、网卡排查?

链路层解决的是相邻设备之间的传输。只有这一跳通了,IP 才能谈跨网络转发。

延伸阅读