深入理解数据链路层:以太网、MAC 地址与交换机
在计算机网络的分层体系中,网络层(IP)负责将数据包跨越无数个网络送到目的地,而数据链路层(Data Link Layer)则负责将这些数据包在相邻的两个节点之间进行可靠传输。
如果把网络通信比作寄快递,网络层(IP)决定了从北京到上海的宏观路线,而数据链路层则负责把包裹从你家送到北京的集散中心,以及从上海的集散中心送到收件人手里。
本文将详细总结数据链路层的核心概念、以太网帧格式、MAC 地址、ARP 协议以及交换机的工作原理。
一、数据链路层的核心定位与功能
数据链路层位于物理层之上、网络层之下。它的主要职责是:
- 封装成帧(Framing):在数据前后加上首部和尾部,构成一个数据帧。通过帧定界符,接收方才能知道哪里是一个完整的报文。
- 透明传输:无论数据部分出现什么比特组合,都能保证正确传输。如果数据部分刚好出现了与帧定界符相同的比特,通常使用**字节填充(转义字符)**来解决。
- 差错检测 :使用 CRC(循环冗余校验) 检测数据在传输过程中是否出现了比特差错(如 0 变成 1)。如果出错,直接丢弃该帧。
- 寻址与介质访问控制 :通过 MAC 地址 标识局域网中的设备,并在共享介质上协调谁可以发送数据(如 CSMA/CD 协议)。
二、以太网与 MAC 地址
以太网(Ethernet) 是目前最主流的局域网(LAN)技术。无论是插网线还是有线连接,基本都是以太网。
1. 什么是 MAC 地址?
- MAC 地址(物理地址/硬件地址):是烧录在网卡(NIC)上的全球唯一标识符。
- 格式 :长度为 48 位(6 个字节) ,通常用十六进制表示,如
00:1A:2B:3C:4D:5E。 - 前 24 位是厂商识别码,后 24 位是厂商自行分配的序列号。
- 广播 MAC 地址 :
FF:FF:FF:FF:FF:FF。当目的地址为全 F 时,局域网内的所有设备都会接收并处理该帧。
IP 地址 vs MAC 地址:
- IP 地址是逻辑地址,描述你所处的网络位置(像"小区门牌号"),会随着你连接不同网络而改变。
- MAC 地址是物理地址,标识你这台物理设备(像"身份证号"),不可更改。
三、以太网帧格式(Ethernet V2)
以太网的数据帧格式是理解局域网通信的基础。目前最通用的是 Ethernet V2 标准。
text
+----------+----------+--------+-------------------+----------+
| 目的地址 | 源地址 | 类型 | 数据(载荷) | FCS |
| (6字节) | (6字节) | (2字节)| (46 ~ 1500字节) | (4字节) |
+----------+----------+--------+-------------------+----------+
字段解析:
- 目的地址 / 源地址:即接收方和发送方的 MAC 地址。
- 类型(Type) :标识数据部分的协议类型。例如:
0x0800代表上层是 IP 协议,0x0806代表 ARP 协议。 - 数据 :上层的 IP 数据报。最小长度为 46 字节(如果不够,需要填充),最大为 1500 字节。
- FCS(帧检验序列):4 字节的 CRC 校验码,用于检测帧传输中是否发生错误。
重点:MTU(最大传输单元)
以太网帧中"数据"部分的最大长度是 1500 字节,这就是我们常说的 MTU。这解释了为什么在上一节 IP 协议中,如果 IP 数据报超过 1500 字节就需要进行 IP 分片。
为什么最小长度是 64 字节?以太网早期使用 CSMA/CD(载波监听多路访问/冲突检测)协议。如果帧太短,发送方可能在检测到冲突之前就已经发完了。为了确保发送方能收到冲突信号,帧必须有一个最小发送时间,换算下来就是 64 字节(6+6+2+46+4)。
四、ARP 协议(地址解析协议)
在发送数据时,我们需要构造以太网帧,这需要目的 MAC 地址 。但应用层通常只给我们目的 IP 地址 。如何通过 IP 找到 MAC?这就是 ARP(Address Resolution Protocol) 的工作。
ARP 工作流程:
假设主机 A 知道主机 B 的 IP,但不知道 B 的 MAC 地址。
- 查缓存:A 先查找本机的 ARP 高速缓存表,看是否有 B 的 IP-MAC 映射。
- 广播请求 :如果没有,A 会在局域网内广播一个 ARP 请求报文 (以太网目的地址为
FF:FF:FF:FF:FF:FF),内容大致是:"谁的 IP 是 xxx?请告诉我你的 MAC 地址。" - 单播响应 :局域网内所有主机都会收到该广播,但只有 IP 匹配的主机 B 会回应一个 ARP 响应报文(单播),告诉 A 自己的 MAC 地址。
- 更新缓存:A 收到响应后,将 B 的 IP-MAC 映射写入本地 ARP 缓存(通常有几分钟的生命周期)。
注意:如果目标 IP 不在同一局域网(跨网段通信),ARP 请求的将不是目标主机的 MAC,而是**默认网关(路由器)**的 MAC 地址。
五、交换机(Switch)的工作原理
在以太网中,连接多台设备的枢纽是交换机 。不同于早期的集线器(Hub,工作在物理层,无脑广播),交换机工作在数据链路层。
交换机如何转发数据?
交换机内部维护一张 MAC 地址表(转发表),记录了"MAC 地址 -> 对应交换机端口"的映射关系。
- 自学习(Source MAC) :当交换机的某个端口收到一个帧时,它会读取帧的源 MAC 地址,并把"该 MAC 地址与接收端口的对应关系"记录到 MAC 地址表中。
- 转发/过滤(Dest MAC) :
- 如果帧的目的 MAC 在表中有记录,交换机直接将帧从对应端口发出去(单播)。
- 如果目的 MAC 是广播地址 ,或者表中查不到 目的 MAC,交换机会将帧向除接收端口外的所有端口发送(泛洪/广播)。
交换机 vs 集线器
- 集线器(Hub) :物理层设备。所有端口同属一个冲突域 和广播域。同一时刻只能有一台设备发数据,否则会冲突。
- 交换机(Switch) :数据链路层设备。每个端口都是一个独立的冲突域 (支持全双工通信,无冲突),但所有端口默认同属一个广播域(除非划分了 VLAN)。
六、常见数据链路层协议扩展
- VLAN(虚拟局域网):通过在以太网帧中插入 4 字节的 VLAN 标签,将一个物理交换机逻辑上划分为多个广播域,隔离广播风暴,提高安全性。
- PPP(点对点协议):常用于拨号上网或路由器之间的广域网连接,不涉及 MAC 地址寻址。
七、总结
数据链路层解决了网络通信中**"相邻节点之间的数据传输"**问题:
- 以帧为单位传输数据,包含 MAC 地址和 FCS 校验。
- MAC 地址是局域网内寻址的物理标识。
- ARP 协议是连接网络层(IP)和数据链路层(MAC)的桥梁。
- 以太网默认 MTU 为 1500 字节,限制着上层协议的分片策略。
- 交换机依靠 MAC 地址表实现点对点的高速数据帧转发。
理解了数据链路层,你就能明白局域网内机器是如何互相发现的、为什么会有广播风暴,以及网络抓包时以太网帧里到底装了些什么。这为我们深入学习 HTTP、TCP 以及排查底层网络故障打下了坚实的基础。