L2 与 L3 网络基础

从 MAC、ARP 到 IP、路由,把链路层和网络层串起来

Posted by Yvain Zhang on August 18, 2022 主题:技术

做网络相关工作时,L2 和 L3 这两个词几乎躲不过去。很多问题表面上看像“网不通”,往下一拆,最后都还是要回到这两层:

  • L2:数据链路层
  • L3:网络层

如果这两层没理顺,抓包、排障、驱动适配和协议分析都会很容易散。

1. L2 在解决什么问题

L2 最核心解决的是:

  • 同一链路上的节点怎么互相识别
  • 帧怎么封装
  • 一帧能否被正确送到邻居节点

它关心的是“这一跳”。

典型内容包括:

  • MAC 地址
  • 以太网帧
  • Wi-Fi 帧
  • VLAN
  • ARP
  • FCS / CRC

2. L3 在解决什么问题

L3 更关注的是“跨网段怎么走”和“最终目的地怎么到”。

它主要处理:

  • IP 地址
  • 子网划分
  • 路由
  • 分片与重组
  • TTL
  • ICMP

也就是说,L2 更像在处理本地邻居关系,L3 在处理全局路径选择。

3. MAC 地址和 IP 地址为什么不能混为一谈

很多新手会把两者都看成“设备地址”,但它们服务的层次不同:

  • MAC 地址:链路层地址,用于本地二层转发
  • IP 地址:网络层地址,用于跨网络寻址

当一台主机要发包时,通常会同时需要这两层信息:

  • L3 决定目标 IP 和下一跳是谁
  • L2 决定当前这一帧的目的 MAC 是谁

4. ARP 为什么总在排障时出现

ARP 的作用很直接:

  • 已知对方 IP
  • 想知道当前链路上该把帧发给谁

所以它是在帮 L3 地址找到当前链路上的 L2 落点。

如果设备 ping 不通网关,第一反应经常就是先看:

  • ARP 表里有没有网关 MAC
  • ARP 请求有没有发出去
  • ARP 应答有没有回来

因为很多“IP 不通”问题,根子其实先卡在 L2 邻居解析上。

5. 交换机和路由器在这里分别做什么

可以先用最朴素的方式理解:

  • 交换机主要看 MAC
  • 路由器主要看 IP

交换机靠 MAC 地址表学习和转发。路由器则根据路由表决定下一跳。

所以:

  • 同网段通信更多落在交换机和 L2
  • 跨网段通信必须经过 L3 路由决策

6. Wi-Fi 为什么也属于 L2 重点

很多人一提 L2 只想到以太网,但 Wi-Fi 同样是典型 L2 领域,而且复杂度通常更高。

它在链路层会涉及:

  • 认证和关联
  • 管理帧 / 控制帧 / 数据帧
  • CSMA/CA
  • 重传
  • 聚合和分片

所以无线问题排查里,经常虽然表象是“网络不好”,但实际卡点仍然在 L2。

7. L3 常见重点为什么总绕不开路由

L3 的灵魂其实就是路由选择。

主机或路由器面对一个目标 IP 时,通常要做:

  1. 查路由表
  2. 找到最匹配前缀
  3. 决定下一跳
  4. 再交给 L2 去发这一跳

所以很多网络问题最后会落到:

  • 默认路由没配
  • 更长前缀覆盖了预期路径
  • NAT 或策略路由把路径改了

8. NAT、QoS、ICMP 为什么也常被归到 L3 讨论

因为这些机制都跟 IP 层处理密切相关。

NAT

本质是地址和端口的改写,用来解决地址复用或发布服务等问题。

QoS

很多时候会结合 DSCP、优先级、队列调度去影响不同流量的处理策略。

ICMP

它虽然不传用户业务数据,但对网络控制和排障非常重要,比如:

  • ping
  • traceroute
  • 错误报告

9. L2 和 L3 是怎么协作的

如果把一条数据包真正发出去,可以先简化理解成:

  1. 应用层产生数据
  2. TCP/UDP 封装
  3. IP 层决定目标 IP 与下一跳
  4. 链路层封装 MAC 头
  5. 物理层发出去

所以 L2 和 L3 从来不是独立工作的。
L3 决定“往哪走”,L2 决定“这一跳怎么发”。

10. 排障时怎样按层次拆问题

网络问题最怕一上来就把所有概念揉在一起。更稳的做法通常是分层查。

先看 L2

  • 链路是否 up
  • 是否关联成功
  • ARP 是否正常
  • MAC 层是否有明显丢包 / 错帧

再看 L3

  • IP 地址是否正确
  • 路由是否正确
  • NAT / 防火墙是否影响流向
  • ICMP 是否可达

这种顺序很有效,因为很多问题并不是“协议栈全坏了”,而是某一层根本没打通。

11. 面试里更值得怎么讲

如果只是背“L2 是数据链路层,L3 是网络层”,其实价值很低。更好的表达通常是:

  • L2 负责本地链路上的帧传递
  • L3 负责跨网络的寻址和路由
  • 真正发包时 L3 选路,L2 落地

如果再能顺手举一个例子,比如“主机 ping 网关”或“跨网段访问服务”的封装过程,理解就会更完整。

12. 总结

L2 和 L3 最值得记住的,不是教科书定义,而是它们在实际系统里的分工:

  • L2:邻居、帧、链路
  • L3:地址、路由、跨网段

把这层关系想清楚之后,不管是排障、抓包、做驱动适配还是看协议栈代码,都会更容易找到问题到底落在哪一层。