物理与链路层:从线缆到交换机
0. 元信息
- 主题路径:
docs/topics/network/subtopics/physical-and-link-layer/README.md - 父主题:
network - 适合对象:会用命令行,了解 IP、端口和基本 Linux 网络操作
- 建议周期:3~4 周,每周 6~8 小时
- 前置知识:无额外前置;直接前置为空
- 最终目标:能画出一条以太网帧的转发路径,配置 VLAN 和静态 ARP,并用
tcpdump/Wireshark 解释抓包
1. 学习路线
信号、双绞线与光纤
→ Ethernet 帧与 MAC 地址
→ 交换机学习、转发与环路
→ VLAN、Trunk 与 STP
→ ARP 与 IPv4 局域网通信
→ Wi-Fi 关联、信道与 802.11 帧
→ tcpdump/Wireshark 验证
每一步都是下一步的前置。别一上来背字段,先抓一帧再看字段。
2. 阶段周数分配
| 阶段 | 12 周方案 | 16 周方案 | 备注 |
|---|---|---|---|
| 1. 物理介质 | 0.5 周 | 0.75 周 | 速率、双工、衰减 |
| 2. Ethernet 与 MAC | 1 周 | 1.25 周 | 帧格式和 FCS |
| 3. 交换机 | 1 周 | 1.25 周 | MAC table 与广播 |
| 4. VLAN/STP | 1 周 | 1.25 周 | Trunk、环路 |
| 5. ARP | 0.75 周 | 1 周 | 缓存与欺骗风险 |
| 6. Wi-Fi | 0.75 周 | 1 周 | 802.11 管理帧 |
| 7. 抓包项目 | 1 周 | 1.5 周 | 证据和排障 |
合计约 6~8 周的主题学习强度;若每周投入更多,可压缩到 3~4 周。
3. 九阶段表
| 阶段 | 核心知识 | 实践产出 | 可观察学会标准 |
|---|---|---|---|
| 1. 物理介质 | 双绞线、光纤、速率、编码、半/全双工 | 记录网卡链路参数 | 能解释协商失败、丢包和 CRC 错误的区别 |
| 2. Ethernet | MAC、帧头、Type/Length、FCS、广播 | 解析一份 .pcap | 能指出目的 MAC、源 MAC、EtherType |
| 3. 交换机 | 学习、泛洪、过滤、老化、CAM 表 | 两主机互 ping 并观察转发 | 能预测未知单播、广播如何走 |
| 4. VLAN | Access、Trunk、802.1Q、native VLAN | 创建两个 VLAN 并验证隔离 | 能解释 tagged/untagged 进出端口 |
| 5. STP | BPDU、根桥、端口角色、阻塞 | 画出三交换机拓扑 | 能定位环路和根桥变化 |
| 6. ARP | request/reply、缓存、gratuitous ARP | 抓取一次 ARP 解析 | 能从抓包判断网关 MAC |
| 7. Wi-Fi | SSID、BSSID、Beacon、认证、信道 | 抓取管理帧 | 能区分 Beacon、Probe、Data |
| 8. 工具 | ip, ethtool, tcpdump, Wireshark | 过滤并导出证据 | 能用过滤器缩小问题范围 |
| 9. 综合项目 | 局域网故障定位、报告、复现 | pcap + 拓扑图 + 报告 | 第三方能按步骤复现结论 |
复杂度陷阱:交换机查表通常近似 O(1),但广播扩散是 O(端口数);抓包过滤先做,别把全量包塞进脑子。
4. 第一周任务
| 日 | 任务 | 当天交付 |
|---|---|---|
| Day 1 | 安装 iproute2、ethtool、tcpdump、Wireshark;统一用 ip -br link 查看接口 | 一份接口和链路参数记录 |
| Day 2 | 学 Ethernet II 帧;查看本机 MAC、MTU、默认路由 | 画一帧字段图 |
| Day 3 | 用两个 network namespace 互联;运行 ping 和 tcpdump | 保存 ARP + ICMP 抓包 |
| Day 4 | 读交换机学习/泛洪过程;用 namespace 模拟桥 | 一张 MAC table 变化图 |
| Day 5 | 读 802.1Q 和 VLAN;记录 tagged/untagged | VLAN 端口表 |
| Day 6 | 读 ARP 和 Wi-Fi Beacon;用 Wireshark 过滤 | 5 条过滤表达式 |
| Day 7 | 步骤 A:用一个 namespace 对另一个 namespace ping,保存 tcpdump -ni any -e arp or icmp 输出;步骤 B:补测空接口、错误接口、不同 MTU、ARP 缓存为空四类边界 | pcap、命令、预期与实际结果 |
Day 1 运行约定:Linux shell,命令默认在 root 或具备抓包权限的环境执行。Day 7 的步骤 B 完成后,再加更严格的权限和错误检查。
5. 阶段通用验收
- 不看答案画出 Ethernet II、802.1Q、ARP、802.11 基本帧;
- 用自己的话解释每个字段解决什么问题;
- 测试空缓存、未知 MAC、广播、MTU 边界和错误接口;
- 准备至少 3 组抓包并贴出实际过滤结果;
- 记录帧大小、MTU、广播范围等量化结果;
- 能修改拓扑或 VLAN 配置并预测变化;
- 能从抓包而不是猜测定位问题。
6. 最终验收
- 独立解释 Ethernet、802.1Q、ARP、STP、802.11 Beacon;
- 完成至少 12 个实验:帧解析 3 个、VLAN/STP 3 个、ARP 2 个、Wi-Fi 2 个、工具排障 2 个;
- 完成一个局域网故障定位项目,包含 pcap、拓扑、命令和结论;
- 能用 15 分钟讲清楚“主机发包到交换机转发”的全过程。
7. 综合项目
首选:局域网抓包与故障定位实验(必做:两个 namespace、Linux bridge、ARP/ICMP 抓包)。 备选:VLAN 隔离实验 / Wi-Fi Beacon 分析。
任何综合项目必须包含:
- 需求说明;
- 拓扑和字段选择理由;
- 转发与抓包步骤;
- 可重复命令;
- 空缓存、MTU、权限和错误接口测试;
- 环境与清理说明;
- README;
- 复现记录。
项目内交付物放在项目仓库 notes/:design.md、test.md、retrospective.md。
本主题贡献
本主题沉淀以太网帧、交换机 MAC 学习、VLAN/802.1Q、ARP 与 802.11 链路层的可观测实践,所有结论都能在两个 Linux network namespace + bridge 上用 tcpdump -e + Wireshark 重现。
职责(3 项)
- 解析 Ethernet II 帧(目的/源 MAC、EtherType、FCS)与 802.1Q TCI(TPID 0x8100 + PCP/DEI/VID),能用
bridge fdb看 MAC table 学习与老化,区分未知单播泛洪与广播扩散; - 用两个 namespace 互联后抓 ARP request/reply,验证 ARP 缓存与 gratuitous ARP 行为,能从抓包判断默认网关 MAC 是否被欺骗,以及 ARP 缓存为空时的重传间隔;
- 配 Linux bridge + VLAN Access/Trunk 端口,用
tcpdump -e -vv对照 tagged/untagged 帧进出端口的差异,能解释 native VLAN、BPDU 在 STP 防环中的作用,以及 802.11 Beacon 与 Ethernet Beacon 的对应关系。
交付物(4 项)
- 一份带目的/源 MAC、EtherType、FCS 标注的 Ethernet II 帧 pcap(
tcpdump -ni any -e arp or icmp),含 5 条 Wireshark display filter(eth.addr == ...、vlan.id == 10、arp、wlan.fc.type_subtype == 8); - 两 namespace 互 ping 的 ARP + ICMP 抓包(含 ARP 缓存为空、错误接口、不同 MTU、空接口四类边界);
- VLAN 拓扑图(两个 VLAN + Trunk 端口)与 802.1Q tagged/untagged 帧对比记录(
tcpdump -ni veth0 -e vlan); - Wi-Fi Beacon 抓包(
wlan.fc.type_subtype == 8)含 SSID、BSSID、Beacon Interval、能力字段标注。
指标(3 项)
- MAC table 收敛时间 ≤ 5 秒(清 FDB 后首个 ping 触发学习);
- VLAN 间隔离率 100%(同 Trunk 不同 VID 的 namespace 互 ping 必须不通);
- ARP 抓包命中率 ≥ 95%(首 ping 抓不到 ARP 是 namespace 或 offload 问题)。
8. 推荐开源资料
| 角色 | 资料 | 链接 | 用法 |
|---|---|---|---|
| 入门 | Computer Networking: A Top-Down Approach 配套资料 | https://gaia.cs.umass.edu/kurose_ross/ | 先理解协议行为 |
| 查阅 | Wireshark User’s Guide | https://www.wireshark.org/docs/wsug_html/ | 查过滤器和字段 |
| 工具 | tcpdump 手册 | https://www.tcpdump.org/manpages/tcpdump.1.html | 以命令验证 |
| 实现 | Linux bridge 文档 | https://docs.kernel.org/networking/bridge.html | 对照内核行为 |
| 练习 | Mininet | https://mininet.org/ | 构造可重复拓扑 |
| 源码 | Linux wireless 文档 | https://wireless.docs.kernel.org/ | 看 Wi-Fi 驱动生态 |
复制开源代码前先读 LICENSE。Mininet 为 BSD-3-Clause;Wireshark 为 GPL-2.0-or-later;Linux 文档按内核文档许可证执行。
9. 学习资料汇聚(v0.3 自包含)
9.1 背景与动机
局域网通信离不开两件事:信号怎样到达,帧怎样转发。Ethernet 把一串比特装进 MAC 帧,交换机再按 MAC table 决定端口。说白了,IP 还没出门,链路层已经做了大量工作。
ARP、VLAN、Wi-Fi 都在解决“同一局部网络里怎么找到并交付对方”。抓包能把抽象协议变成证据。这一点很多人栽过:只看 ping 成功,不看中间发生了什么。
9.2 概念地图
flowchart LR
Signal[信号/介质] --> NIC[网卡]
NIC --> Frame[MAC 帧]
Frame --> Switch[交换机 MAC table]
Switch --> VLAN[VLAN/802.1Q]
VLAN --> STP[STP 防环]
Host[IP 主机] --> ARP[ARP]
ARP --> Frame
WiFi[802.11/Wi-Fi] --> Frame
Frame --> Capture[tcpdump/Wireshark]
关系很直接:介质承载信号,网卡封装帧,交换机查 MAC;VLAN 切广播域,STP 防二层环路,ARP 把 IP 找到 MAC,工具负责观察。
9.3 基础知识讲解
经典论文
- A Protocol for Packet Network Intercommunication:Cerf 与 Kahn,理解分层和互联网络背景。
- Ethernet: Distributed Packet Switching for Local Computer Networks:Metcalfe 等,Ethernet 的早期设计。
- The LANMAN Standards:IEEE 802.3 演进资料入口,配合标准阅读。
经典书籍
- 《Computer Networks》:Kurose 与 Ross,先建立分层和协议行为。
- 《Computer Networks》:Andrew S. Tanenbaum,查 Ethernet、交换和无线网络背景。
- 《802.11 Wireless Networks: The Definitive Guide》:Matthew S. Gast,深入 Wi-Fi 帧与安全上下文。
优秀博客
- Julia Evans: Networking:图解直白,适合拆开陌生概念。
- Cloudflare Learning Center:查 ARP、Ethernet、网络层边界。
- Cisco Networking Basics:查交换机、VLAN、Wi-Fi 的工程术语。
核心人物
- Bob Metcalfe:Ethernet 共同发明者,理解共享介质和局域网设计。
- David D. Clark:推动 Internet 分层架构,帮助理解链路层边界。
- Vic Hayes:IEEE 802.11 工作的重要推动者,了解 Wi-Fi 标准化历史。
开发方法
- tcpdump man page:先过滤,再保存,再解释。
- Wireshark Display Filter Reference:按字段验证,不靠猜。
- Linux network namespaces:用隔离拓扑复现实验,删 namespace 时清理接口。
9.4 经典问题与经典案例
| 问题 | 为什么重要 | 最简答案 |
|---|---|---|
| MAC table 怎么来 | 解释交换机为何不总是广播 | 交换机从入方向源 MAC 学习,按目的 MAC 转发 |
| 未知单播会怎样 | 是排障时常见的“多端口都收到” | 在同一 VLAN 内泛洪,入端口除外 |
| 广播域与冲突域区别 | VLAN 和旧式 Hub 容易混淆 | VLAN 划分广播域;交换端口通常各自隔离冲突 |
| 802.1Q 标签放哪 | Trunk 配错就互不通 | 标签插在源 MAC 与 EtherType 之间 |
| ARP 为什么不是 IP 包 | 解释抓包里 EtherType 0x0806 | ARP 直接封装在 Ethernet 帧中 |
| MTU 与帧大小关系 | 大包丢失不一定是应用问题 | IP payload 受 MTU 限制,Ethernet 还有头和 FCS |
| STP 为什么阻塞端口 | 二层环路会广播风暴 | 用 BPDU 选根桥并阻塞冗余路径 |
| Wi-Fi Beacon 是什么 | 扫描时会看到大量管理帧 | AP 周期发送 Beacon 宣告 SSID、能力和参数 |
| CRC 错误说明什么 | 区分链路质量和上层重传 | FCS 校验失败,优先查线缆、接口、双工和硬件 |
| tcpdump 看不到包 | 工具本身可能没问题 | 查接口、权限、offload、过滤表达式和 namespace |
9.5 学习难点
- 概念难点:MAC 地址不是永久“主机身份证”,它是接口级标识;交换机学习的是源 MAC 所在端口。突破路径:清空 bridge FDB,再逐包观察。
- 概念难点:VLAN tag 不等于 IP 子网。突破路径:画端口、tag、广播域三张对应关系图。
- 思维难点:抓包按时间顺序看容易迷路。突破路径:先标出发送者、接收者、入接口、出接口,再解释字段。
- 思维难点:Wi-Fi 不是“无线 Ethernet 原样搬运”。突破路径:对比 802.11 三地址/四地址和 Ethernet 二地址帧。
- 工程难点:虚拟拓扑残留会污染实验。突破路径:每次实验保存创建命令和删除命令,退出时执行清理。
- 工程难点:硬件 offload 让校验和看起来错误。突破路径:对照网卡 offload 设置,并在另一端或 Wireshark 复核。
9.6 技术标准与接口
9.6.1 Entity
| 名称 | 版本 | 发布组织 | 状态 | 许可证 / 可访问性 |
|---|---|---|---|---|
| IEEE 802.3 Ethernet | 2022/持续修订 | IEEE 802.3 | 正式标准 | IEEE 文档部分收费 |
| IEEE 802.1Q VLAN | 2022 | IEEE 802.1 | 正式标准 | IEEE 文档部分收费 |
| IEEE 802.1D/802.1w STP | 历史并入 802.1Q | IEEE 802.1 | 机制并入 | IEEE 文档部分收费 |
| IEEE 802.11 Wi-Fi | 2020/持续修订 | IEEE 802.11 | 正式标准 | IEEE 文档部分收费 |
| RFC 826 ARP | 1982 | IETF | Internet Standard/历史核心 | RFC 免费公开 |
| Linux netlink / bridge API | 随内核更新 | Linux kernel | 事实接口 | GPL-2.0 文档/源码 |
9.6.2 Scope
- 802.3 定义有线 MAC、物理层和帧格式;不定义 IP 路由。
- 802.1Q 定义 VLAN 标识和桥接行为;不等于 DHCP 或子网配置。
- 802.11 定义无线 MAC、PHY 和管理帧;射频合规还受地区法规约束。
- ARP 将 IPv4 地址解析为链路地址;不适用于 IPv6,IPv6 使用 Neighbor Discovery。
- Linux bridge/netlink 是操作系统接口,不代表所有交换机 ASIC 的实现方式。
9.6.3 Structure
必须掌握:目的 MAC、源 MAC、EtherType/Length、802.1Q TPID/TCI、payload、FCS;ARP 的 HTYPE、PTYPE、HLEN、PLEN、OPER、SHA/SPA、THA/TPA;802.11 的 Frame Control、Duration、地址字段、Sequence Control。
常用 Linux 接口:ip link、ip addr、ip neigh、bridge fdb、ethtool、tcpdump -e。Wireshark 过滤器示例:eth.addr == aa:bb:cc:dd:ee:ff、arp、vlan.id == 10、wlan.fc.type_subtype == 8。
9.6.4 Ecosystem
交换机实现包括 Linux bridge、Open vSwitch、Cisco IOS、Juniper Junos 和各类 ASIC。抓包工具包括 tcpdump/libpcap、Wireshark、tshark。NetworkManager、systemd-networkd 和厂商 CLI 都能配置链路,但默认行为不同。802.3/802.11 是标准本身;某厂商的 VLAN 命令、私有 TLV 和硬件 offload 是生态扩展。
9.6.5 Depth Tiers
| 层级 | 本子主题要求 |
|---|---|
| L0 | 知道 PHY、MAC、Ethernet、VLAN、ARP、Wi-Fi 是不同概念 |
| L1 | 能看懂 MAC 帧、ARP request/reply、VLAN tag、Beacon 示例 |
| L2 | 能用 ip、bridge、tcpdump 配置/观察简单链路,能过滤抓包 |
| L3 | 能解释 MAC 学习、广播泛洪、VLAN 隔离、ARP 缓存、STP 阻塞,并定位常见链路故障 |
| L4 | 能设计带 VLAN/STP/Wi-Fi 互通的实验拓扑,评估 MTU、offload、硬件交换和安全边界 |
本子主题目标:完成综合项目达到 L3;能扩展拓扑时向 L4 迈进。
9.6.6 Source
- IEEE 802.3 工作组:https://www.ieee802.org/3/
- IEEE 802.1 工作组:https://www.ieee802.org/1/
- IEEE 802.11 工作组:https://www.ieee802.org/11/
- RFC 826:https://www.rfc-editor.org/rfc/rfc826
- Linux bridge 文档:https://docs.kernel.org/networking/bridge.html
引用版本快照日期:2026-07-30。IEEE 正式全文可能需要购买;RFC 与 Linux 文档可公开访问。
10. 常见误区
- 把 MAC 地址当成路由地址;MAC 只在链路局部有效。
- 以为交换机按目的 IP 转发;普通二层交换机先查 MAC table。
- 把 VLAN 当成加密;VLAN 只提供逻辑隔离,不能替代安全控制。
- 把 Access 端口收到的帧也当成 tagged;端点通常看到 untagged 帧。
- 认为 ARP 是 TCP/IP 的“可靠协议”;ARP 没有认证,缓存可被欺骗。
- 看到 Wireshark 红色校验和就断定线坏了;先查 checksum offload。
- 只看 ping 结果,不看 ARP 和 ICMP 的时间线。
- 抓包过滤写错却认为网络没包;先用
tcpdump -ni any做宽过滤。 - 忽略 MTU、双工和速率协商;小包通、大包不通常要查这些。
- 手工 namespace 实验不清理;残留 bridge、veth 会让下一次结果失真。
- 把 802.11 Beacon 当成数据帧;它是管理帧。
- 认为 STP 会让所有链路同时转发;它正是为了阻塞冗余路径。
11. 所有知识点分类(统一规则)
- 编程语言
- 数据结构与算法
- 计算机基础
- 工程技术
- Web 与后端
- 前端与客户端
- 数据与人工智能
- 项目与职业能力
本计划归属:计算机基础主;辅助方向为网络工程与系统排障。