物理层与数据链路层:从比特到帧的跨越
说实话,很多刚入行的朋友总觉得这两层太"底层",不够酷。我当年也这么想——直到有一次在数据中心排障,折腾了三天才发现是光纤接头脏了。嗯,从那以后我再也不敢小看物理层了。
这两层的关系,说白了就是:物理层负责把比特流扔出去,数据链路层负责让这些比特流别跑偏。咱们一层层拆开看。
物理层介质与信号
物理层解决的是最原始的问题:怎么把 0 和 1 变成能在介质上传输的信号?
常见的传输介质
| 介质类型 | 典型速率 | 最大距离 | 我踩过的坑 |
|---|---|---|---|
| 双绞线(Cat5e/6/6A) | 1Gbps / 10Gbps | 100m | 超过 100 米必丢包,别信"差不多" |
| 多模光纤(OM3/OM4) | 10Gbps ~ 100Gbps | 300m ~ 550m | 弯曲半径太小会直接断信号 |
| 单模光纤(OS2) | 100Gbps+ | 10km ~ 80km | 熔接工艺差,损耗能翻三倍 |
| 同轴电缆 | 10Mbps ~ 100Mbps | 500m | 现在基本淘汰,老机房还能见到 |
信号编码与调制
物理层不关心你传的是什么数据,它只负责把比特变成电信号或光信号。常见的编码方式有:
- NRZ(不归零编码):1 高电平,0 低电平。简单,但连续相同比特会丢失时钟同步。
- 曼彻斯特编码:每个比特中间有跳变,自带时钟。以太网早期用过,现在基本退役了。
- 4B/5B 编码:每 4 位数据映射成 5 位,保证足够多的跳变。100Base-TX 就在用。
你想想看,如果连续发 32 个 0,接收端怎么知道这是 32 个 0 还是 16 个 0?这就是编码要解决的问题。
数据链路层功能
数据链路层在物理层上面搭了个"架子"。它的核心职责就三个:封装成帧、差错控制、流量控制。
封装成帧
物理层只管比特流,数据链路层得把这些比特切成一个个"帧"。帧就像快递包裹——你得告诉别人包裹从哪来、到哪去、里面装了什么、有没有损坏。
帧的通用结构:
+----------+----------+----------+-----------+----------+
| 帧首定界符 | 目的地址 | 源地址 | 类型/长度 | 数据 | 帧校验序列 |
+----------+----------+----------+-----------+----------+
关键点:帧首定界符(SFD)告诉接收端"帧开始了"。我曾经见过一个项目,因为芯片的 SFD 检测逻辑有 bug,导致整批设备无法互通——最后只能换方案。
差错控制
信号在介质上传输,难免受干扰。数据链路层用 CRC(循环冗余校验) 来检测错误。以太网帧尾部有 4 字节的 FCS(帧校验序列),接收端算一遍 CRC,对不上就直接丢帧。
流量控制
发送方不能一股脑地发,得考虑接收方能不能接住。数据链路层的流量控制有两种方式:
- 停等协议:发一帧,等确认,再发下一帧。效率低,但简单。
- 滑动窗口协议:连续发多帧,接收方告诉发送方"我还能收多少"。效率高,现代网络都在用。
MAC 地址与帧结构
MAC 地址是数据链路层的"身份证"。48 位,前 24 位是 OUI(厂商代码),后 24 位是厂商分配的序列号。
| MAC 地址类型 | 特征 | 用途 |
|---|---|---|
| 单播 | 第一个字节最低位为 0 | 点对点通信 |
| 多播 | 第一个字节最低位为 1 | 组播通信(如 ARP 请求) |
| 广播 | 全 F(FF:FF:FF:FF:FF:FF) | 广播到所有设备 |
以太网帧结构(IEEE 802.3):
+--------+--------+--------+--------+--------+--------+--------+
| 前导码 | SFD | 目的MAC | 源MAC | 长度/类型 | 数据 | FCS |
| 7字节 | 1字节 | 6字节 | 6字节 | 2字节 | 46-1500| 4字节 |
+--------+--------+--------+--------+--------+--------+--------+
避坑指南:我曾经遇到过一台交换机 MAC 表满了,新设备直接不通。查了半天才发现是 MAC 泛洪攻击。后来我习惯在接入层配 MAC 地址限制,每个端口只学固定数量的 MAC。
以太网协议详解
以太网是数据链路层的事实标准。从 10Mbps 到 400Gbps,底层原理没变过。
CSMA/CD(载波监听多点接入/碰撞检测)
早期以太网是共享介质——所有设备连在同一根线上。CSMA/CD 的规则很简单:
- 先听再说:发之前先听介质上有无信号。
- 边发边听:发的时候也监听,看有没有冲突。
- 冲突就停:检测到冲突,发一个阻塞信号,然后随机等一段时间再重试。
现在全双工以太网已经不需要 CSMA/CD 了,但理解它有助于你明白为什么早期以太网效率那么低。
全双工与半双工
| 模式 | 特点 | 适用场景 |
|---|---|---|
| 半双工 | 同一时间只能一方发 | 集线器、老式无线 |
| 全双工 | 双方可以同时发 | 交换机直连、现代网络 |
我的经验:全双工模式下,两端必须协商一致。如果一端是全双工,另一端是半双工,会出现大量冲突和丢包。我排查过这种"双工不匹配"的问题,症状就是网络时断时续,特别坑。
交换机工作原理
交换机是数据链路层的核心设备。它不像集线器那样无脑转发,而是"聪明"地根据 MAC 地址做决策。
三大核心功能
- MAC 地址学习:收到帧时,记录源 MAC 地址和入端口。
- 帧转发/过滤:查 MAC 表,知道目的 MAC 在哪个端口就只往那个端口发。
- 环路避免:用 STP(生成树协议)防止广播风暴。
转发决策流程
收到帧 → 学习源MAC → 查目的MAC表
├─ 找到 → 单播转发到对应端口
├─ 没找到 → 泛洪(除入端口外所有端口)
└─ 目的MAC是广播/多播 → 泛洪
SVG:交换机工作原理流程图
总结一下
物理层和数据链路层是网络通信的基石。物理层管介质和信号,数据链路层管帧和寻址。交换机是这两层结合的典型产物——它读懂物理层的信号,再根据数据链路层的 MAC 地址做转发决策。
我个人习惯在排障时先看物理层:线缆通不通?光功率够不够?端口有没有 err-disable?这些搞定了,再往上查 MAC 表、ARP 表。很多时候问题就出在最底层,别一上来就抓包分析,那是最后的手段。