物理层与数据链路层:从比特到帧的跨越
这一章,我们聊聊网络最底层的两兄弟——物理层和数据链路层。很多人觉得这两层太“硬”,没什么好讲的。但我做了十几年网络,踩过的坑有一半都跟这两层有关。说白了,上层协议再花哨,底层要是没搞定,一切都是空中楼阁。
物理层:信号是怎么跑起来的
物理层负责什么?就一件事:把比特变成信号,扔到线上去。反过来也一样,把线缆上的信号还原成比特。听起来简单,但这里面门道不少。
传输介质:铜缆、光纤与无线
常见的传输介质就三种:
- 双绞线(铜缆):最便宜,也最常用。Cat5e 支持千兆,Cat6 能跑万兆(短距离)。
- 光纤:单模传得远(几十公里),多模传得近(几百米)。抗干扰,带宽大。
- 无线:2.4GHz 穿墙好但干扰多,5GHz 速度快但衰减快。
我的经验:选介质别只看带宽。我曾经在一个工厂项目里全用了 Cat6 铜缆,结果电机一启动,丢包率直接飙到 30%。后来换成光纤,问题全没了。工业环境,能上光纤就别省那点钱。
物理层标准:RS-232、1000BASE-T 与 10GBASE-SR
物理层标准定义了接口形状、电压电平、编码方式。举个例子:
| 标准 | 介质 | 速率 | 最大距离 |
|---|---|---|---|
| RS-232 | 串口线 | 115.2 kbps | 15 米 |
| 1000BASE-T | Cat5e 双绞线 | 1 Gbps | 100 米 |
| 10GBASE-SR | 多模光纤 | 10 Gbps | 300 米 |
你想想看,1000BASE-T 能在四对线上同时收发,靠的是回波抵消和混合电路。这技术其实挺牛的,只是我们平时不太关注。
以太网协议:从共享总线到全双工
以太网是数据链路层最成功的协议。早期以太网用同轴电缆,所有设备共享一条总线。谁想发数据,先听一下线路上有没有人在发。没人发就发,有人发就等。这叫 CSMA/CD(载波监听多点接入/碰撞检测)。
但有个问题:如果两台设备同时检测到线路空闲,同时开始发,就会碰撞。碰撞之后,各自随机等一段时间再重试。这个机制在设备少的时候还行,设备一多,碰撞率指数级上升。
关键转折点:交换机的出现终结了共享总线时代。每个端口独享带宽,全双工通信,CSMA/CD 基本成了历史。现在你几乎看不到半双工的以太网了。
MAC 地址与帧结构
MAC 地址是数据链路层的“身份证”。48 位,前 24 位是 OUI(厂商代码),后 24 位是序列号。理论上全球唯一。
但注意,MAC 地址只在同一个广播域内有效。出了路由器,MAC 地址就变了。我见过不少新手问:“为什么 ping 百度,抓包看到的目标 MAC 不是百度的服务器?” 答案很简单:你看到的是网关的 MAC。
以太网帧结构
标准以太网帧长这样:
| 前导码 (7B) | 帧起始定界符 (1B) | 目标MAC (6B) | 源MAC (6B) | 类型/长度 (2B) | 数据 (46-1500B) | FCS (4B) |
几个要点:
- 前导码:用来同步时钟,接收端靠它锁定比特流。
- 类型/长度:0x0800 表示上层是 IPv4,0x0806 是 ARP。
- 数据:最少 46 字节,不够要填充。为什么?因为要保证帧长至少 64 字节,这样才能检测到碰撞。
- FCS:CRC 校验,检测传输错误。
避坑指南:我曾经遇到一个故障,某台设备发的帧总是小于 64 字节。交换机直接丢弃了这些“短帧”。查了半天,发现是网卡驱动 bug,填充字段没补全。嗯,这种问题抓包都看不到,因为网卡在驱动层就扔了。
交换机工作原理
交换机是数据链路层的核心设备。它做三件事:学习、转发、过滤。
MAC 地址表
交换机内部维护一张 MAC 地址表,记录 MAC 地址和端口的对应关系。这张表怎么来的?靠学习。
- 收到一个帧,提取源 MAC 和入端口。
- 查表,如果源 MAC 不在表里,就加进去。
- 查目标 MAC,如果在表里,只从对应端口转发(单播)。
- 如果不在表里,从所有端口广播(除了入端口)。
这个过程叫“泛洪”。泛洪是必要的,但也是安全风险的来源。
转发决策
交换机的转发模式有三种:
| 模式 | 延迟 | 错误检测 | 适用场景 |
|---|---|---|---|
| 存储转发 | 高 | 完整 CRC | 可靠性优先 |
| 直通转发 | 低 | 无 | 延迟敏感 |
| 无碎片转发 | 中 | 检查前 64 字节 | 折中方案 |
我个人习惯用存储转发。虽然延迟大一点,但能过滤掉错误帧。在数据中心里,这点延迟根本不算什么。
广播域与 VLAN
默认情况下,所有端口都在同一个广播域。一个广播帧会扩散到所有端口。如果网络里有环路,广播帧会无限循环,造成广播风暴。
解决办法有两个:
- STP(生成树协议):逻辑上阻断冗余链路,防止环路。
- VLAN(虚拟局域网):把一个物理交换机切成多个逻辑交换机,隔离广播域。
我的建议:VLAN 是现代网络的基本功。我见过一个客户,整个公司就一个扁平网络,2000 多台设备。一个 ARP 广播就能让全网卡 3 秒。划了 VLAN 之后,问题立刻解决。
本章知识体系
下面这张图把物理层和数据链路层的核心逻辑串起来了:
实践中的常见问题
最后分享几个我实际遇到过的坑:
- MAC 地址漂移:同一个 MAC 地址在不同端口之间跳变。通常是网络环路或者配置错误。用
show mac address-table排查。 - 巨型帧:MTU 超过 1500 的帧。如果链路上有设备不支持,就会丢包。我建议只在端到端可控的网络里用。
- 端口协商失败:两端速率或双工模式不匹配。表现为大量 CRC 错误。强制固定速率和双工模式往往比自动协商更可靠。
曾经有一次,我帮客户排查一个“间歇性断网”的问题。抓包发现大量 FCS 错误帧。换网线、换端口都没用。最后发现是机柜里的电源线跟网线绑在一起,电磁干扰导致的。把网线重新走线,问题消失。嗯,物理层的问题,有时候就是这么“物理”。