物理层与数据链路层:从比特流到可靠帧

这一章,我们聊聊网络最底层的两兄弟——物理层和数据链路层。很多人觉得这两层太“硬”,没什么好学的。但我做了十几年网络,发现大部分线上故障,追根溯源都栽在这两层上。

说白了,物理层管的是“怎么把比特发出去”,数据链路层管的是“怎么让这些比特在相邻设备间可靠地传递”。咱们一层层剥开看。

物理层介质与信号:比特的“运输工具”

物理层不关心你发的是什么数据,它只负责把0和1变成能在介质上传输的信号。常见的介质就三种:铜缆、光纤、空气(无线)。

双绞线(铜缆)——我最熟悉的介质。记得早年做机房布线,一根五类线能跑100Mbps就觉得很快了。现在Cat6A已经能跑到10Gbps。它靠电压变化表示比特:+5V代表1,-5V代表0。但有个坑——信号会衰减,100米是极限。

光纤——用光脉冲表示比特。有光=1,无光=0。单模光纤传输距离几十公里,多模光纤几百米。我在数据中心见过因为光纤弯曲半径太小导致信号丢包的事故,嗯,物理层的问题往往最隐蔽。

无线——通过电磁波调制。2.4GHz和5GHz频段最常见。无线有个特点:信号会反射、折射、衰减,所以物理层设计要考虑纠错机制。

关键概念:物理层不保证传输的正确性,它只保证“我发了”。至于发对了没有,那是上面一层的事。

以太网帧结构:数据链路层的“信封”

数据链路层把物理层的比特流组织成“帧”(Frame)。就像你寄快递,不能光把东西扔给快递员,得有个信封写上地址。以太网帧就是这个信封。

标准的以太网帧长这样(我习惯记成“前目标源类型数校”):

字段 长度(字节) 说明
前导码 7 同步时钟,101010...交替
帧起始定界符 1 10101011,标识帧开始
目标MAC地址 6 接收方网卡地址
源MAC地址 6 发送方网卡地址
类型/长度 2 上层协议类型(如0x0800=IP)
数据载荷 46~1500 上层数据包(IP包)
帧校验序列 4 CRC32校验,检测传输错误

避坑指南:我曾经遇到一个案例,某台服务器间歇性丢包,排查了三天。最后发现是网卡驱动把前导码字段处理错了,导致帧同步失败。物理层的问题,往往要从帧结构开始查。

这里有个细节——数据载荷最小46字节。如果上层数据不够,要填充。为什么?因为以太网要求帧长至少64字节(从目标MAC到FCS),这是为了冲突检测机制(CSMA/CD)能正常工作。虽然现在全双工链路很少用CSMA/CD了,但这个约束保留了下来。

MAC地址与ARP协议:谁是谁?

MAC地址是网卡的“身份证”,48位,前24位是厂商代码(OUI),后24位是序列号。理论上全球唯一。但别太当真——我见过虚拟机克隆后MAC地址冲突的惨案。

MAC地址有三种类型:

  • 单播:第一个字节最低位为0,指向特定设备
  • 广播:FF-FF-FF-FF-FF-FF,发给所有人
  • 组播:第一个字节最低位为1,发给一组设备

ARP协议——地址解析协议。它的作用很简单:已知目标IP,问“这个IP对应的MAC地址是什么?”

ARP的工作流程:

  1. 主机A广播ARP请求:“谁的IP是192.168.1.2?告诉我你的MAC。”
  2. 主机B收到请求,发现IP是自己,回复单播ARP响应:“我是192.168.1.2,我的MAC是AA:BB:CC:DD:EE:FF”
  3. 主机A收到响应,把映射关系写入ARP缓存

注意:ARP协议没有认证机制。任何人都可以伪造ARP响应。这就是ARP欺骗攻击的原理——我曾经在渗透测试中利用这个漏洞,成功截获了同网段的所有流量。

ARP缓存有老化时间(通常2~4分钟)。为什么?因为设备可能更换网卡,IP可能重新分配。缓存太久会导致通信故障。

交换机工作原理:智能的“转发器”

交换机是数据链路层的核心设备。它不像集线器(Hub)那样无脑广播,而是根据MAC地址表智能转发。

交换机的三个核心功能:

  • MAC地址学习:收到帧时,记录源MAC和入端口
  • 帧转发/过滤:查MAC表,知道目标MAC在哪个端口就只发那个端口
  • 环路避免:通过生成树协议(STP)防止广播风暴

我画了一张图,帮你理解交换机的工作流程:

交换机工作原理流程图 交换机帧处理流程 接收以太网帧 学习源MAC → 端口映射 查找目标MAC表项 表项存在? 是 单播转发到对应端口 否 广播到所有端口(除入端口) 💡 关键点:交换机通过MAC地址学习建立转发表,避免不必要的广播 广播帧(目标MAC=FF:FF:FF:FF:FF:FF)始终广播,不查表

交换机的转发模式有三种:

模式 延迟 可靠性 适用场景
直通转发 低(~10μs) 低(不校验) 内部高速网络
存储转发 高(接收完整帧) 高(CRC校验) 企业网、广域网
无碎片转发 中 中(检查前64字节) 较少使用

实战经验:我建议生产环境用存储转发模式。虽然延迟稍高,但能过滤掉错误帧。曾经有个客户频繁出现网络闪断,最后发现是某台交换机的直通转发模式把CRC错误的帧也转发过去了,导致上层协议不断重传。

总结一下

物理层把比特变成信号发出去,数据链路层把这些比特组织成帧,用MAC地址标识设备,用ARP协议解析地址,用交换机实现智能转发。这三块知识是网络排障的基础——很多“莫名其妙”的网络问题,查到最后都在这一层。

嗯,下一层我们就要进入网络层了,那里有更精彩的路由世界。但先把这两层吃透,后面的路才好走。