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

各位好,欢迎来到第二章。上一章我们聊了TCP/IP的整体架构,今天咱们往下挖一层,看看最底层的物理层和它上面的数据链路层。

说实话,很多搞网络的人对这两层不太上心,觉得不就是线缆和MAC地址嘛。但我得说,这两层恰恰是网络通信的基石。你想想看,没有物理层,比特流怎么传?没有数据链路层,数据在局域网里怎么找到正确的机器?

好,咱们开始。

2.1 物理层传输介质:信号走的路

物理层干的事很简单——把比特变成信号,扔到介质上传输。介质选不对,上层协议再牛也白搭。我这些年见过太多因为网线质量差导致的诡异故障了。

2.1.1 双绞线

双绞线是咱们最常见的传输介质。说白了,就是几对互相缠绕的铜线。为什么要绞在一起?为了抵消电磁干扰。每对线绞距不同,抗干扰效果也不同。

双绞线分两类:

  • STP(屏蔽双绞线):外面包了金属屏蔽层,抗干扰强,但贵、难施工。我在数据中心见过不少,机房环境用没问题。
  • UTP(非屏蔽双绞线):没屏蔽层,便宜、灵活,家用和办公环境的主力。咱们平时说的网线,基本就是UTP。

双绞线按性能分了好几个类别,我整理了个表:

类别 最高频率 典型速率 常见场景
Cat 5e 100 MHz 1000 Mbps 老旧网络,现在基本淘汰了
Cat 6 250 MHz 1 Gbps / 10 Gbps(短距) 企业办公,目前主流
Cat 6a 500 MHz 10 Gbps 数据中心,要求高
Cat 7 600 MHz 10 Gbps 特殊场景,家用没必要
我的经验:别在Cat 5e上跑千兆,尤其是长距离。我曾经帮一个客户排查网络慢的问题,查了半天发现是用了30米的Cat 5e线跑千兆,丢包率感人。换了Cat 6立马解决。

2.1.2 光纤

光纤用光信号传数据,速度更快、距离更远、抗干扰能力极强。它分两种:

  • 单模光纤:芯径细(约9μm),用激光光源,传输距离几十公里。适合骨干网、长途干线。
  • 多模光纤:芯径粗(50μm或62.5μm),用LED光源,距离几百米到几公里。适合数据中心内部、楼宇布线。

我个人习惯,数据中心内部用多模,省钱;跨楼宇或园区骨干,必须上单模。别为了省钱在多模上跑长距离,衰减会让你怀疑人生。

2.1.3 同轴电缆

同轴电缆现在用得少了,但历史上很重要。它由内导体、绝缘层、金属屏蔽网和外皮组成。抗干扰比双绞线好,但比光纤差。

以前以太网用粗缆(10Base5)和细缆(10Base2),现在基本被双绞线和光纤取代了。不过有线电视网络还在用同轴电缆,这个大家应该不陌生。

注意:同轴电缆的阻抗匹配很重要。我记得刚入行时,有次帮人接监控,用了不同阻抗的线缆和接头,结果信号反射严重,画面全是雪花。后来换了匹配的75Ω线缆和BNC接头,问题才解决。

2.2 数据链路层功能:让比特流变得可靠

物理层只管传比特,但比特流在传输过程中可能出错、丢失、乱序。数据链路层就是来解决这些问题的。它把比特流封装成帧,提供差错检测,还负责介质访问控制。

2.2.1 封装成帧

数据链路层从网络层拿到IP数据报,给它加上头部和尾部,形成一个帧。帧的结构大致如下:

+----------+----------+----------+----------+----------+
| 帧首部   | 目的地址 | 源地址   | 类型/长度| 数据     | 帧尾部(FCS) |
+----------+----------+----------+----------+----------+

帧首部和尾部用来定界,告诉接收方“一个帧从这儿开始,到那儿结束”。

封装成帧的关键是帧定界。以太网用前导码和帧起始定界符来同步,然后用帧间距来区分不同帧。但有些协议用特殊字符做定界符,比如PPP协议用0x7E。

2.2.2 透明传输

透明传输的意思是:不管上层传什么数据,数据链路层都能原样传过去,不丢数据、不乱改数据。

问题来了:如果数据里恰好出现了帧定界符怎么办?比如PPP用0x7E做定界符,数据里也有0x7E,接收方就会误以为帧结束了。

解决办法是字符填充或比特填充:

  • 字符填充:发送方在数据中的定界符前加一个转义字符(如0x7D),接收方看到转义字符就知道后面的定界符是数据,不是帧结束。
  • 比特填充:HDLC协议用连续5个1后插入一个0的方法,避免数据中出现连续的6个1(帧结束标志)。
核心理解:透明传输保证了数据链路层对上层是“透明”的——上层不用关心底层怎么处理定界符冲突,数据链路层自己搞定。

2.2.3 差错检测

物理层传比特,难免出错。数据链路层需要检测这些错误,把坏帧丢掉(或者要求重传)。

最常用的差错检测方法是循环冗余校验(CRC)。发送方把数据当成一个二进制数,除以一个约定的生成多项式,余数就是FCS(帧检验序列),放在帧尾部。接收方用同样的多项式除整个帧(包括FCS),如果余数为0,说明没出错;否则帧有错,直接丢弃。

CRC的检错能力很强,能检测出几乎所有常见的错误模式。以太网用的是CRC-32,生成多项式是:

x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1

嗯,这个多项式看着复杂,但硬件实现起来很快。网卡芯片里都有专门的CRC计算电路。

避坑指南:我曾经遇到过一个案例,某台交换机的端口CRC错误计数一直在涨,但链路看起来是通的。排查后发现是网线接头接触不良,导致偶尔有比特翻转。换了根成品网线,CRC错误归零。所以,看到CRC错误别急着怀疑硬件故障,先检查物理层。

2.3 MAC地址与以太网协议

以太网是数据链路层最主流的协议,几乎统治了局域网。它的核心就是MAC地址和CSMA/CD(现在主要是CSMA/CA)。

2.3.1 MAC地址

MAC地址是网卡的硬件地址,48位,通常写成6组十六进制数,比如00:1A:2B:3C:4D:5E。前24位是厂商代码(OUI),后24位是厂商分配的序列号。

MAC地址有几个特点:

  • 全球唯一:理论上每个网卡的MAC地址都是唯一的。但别太迷信,现在很多网卡允许修改MAC地址。
  • 工作在数据链路层:MAC地址只在同一个广播域内有效,跨路由器就要靠IP地址了。
  • 分单播、组播、广播:第一个字节的最低位为0是单播,为1是组播,全1是广播(FF:FF:FF:FF:FF:FF)。
注意:别把MAC地址和IP地址搞混。MAC地址是“你是谁”,IP地址是“你在哪”。同一个MAC地址可以配不同的IP,同一个IP也可以对应不同的MAC(比如热备切换时)。

2.3.2 以太网帧格式

以太网帧有两种主流格式:Ethernet II(DIX)和IEEE 802.3。咱们最常见的是Ethernet II,结构如下:

+--------+--------+--------+--------+--------+--------+
| 前导码 | 目的MAC| 源MAC  | 类型   | 数据   | FCS    |
| 8字节  | 6字节  | 6字节  | 2字节  | 46-1500| 4字节  |
+--------+--------+--------+--------+--------+--------+
  • 前导码:7字节的10101010模式 + 1字节的10101011(帧起始定界符),用于同步时钟。
  • 目的MAC和源MAC:6字节的MAC地址。
  • 类型:标识上层协议,比如0x0800是IP,0x0806是ARP。
  • 数据:最少46字节,最多1500字节(MTU)。如果数据不够46字节,要填充。
  • FCS:4字节的CRC校验值。

IEEE 802.3帧把“类型”字段改成了“长度”,然后用LLC头部来标识上层协议。不过现在基本都用Ethernet II了。

2.3.3 CSMA/CD与CSMA/CA

以太网是共享介质的,多台机器同时发数据就会冲突。怎么解决?

  • CSMA/CD(载波监听多点接入/冲突检测):先听再发,边发边听。如果检测到冲突,发一个拥塞信号,然后随机等待一段时间再重试。这是传统以太网(半双工)用的方法。
  • CSMA/CA(载波监听多点接入/冲突避免):无线网络(Wi-Fi)用的。因为无线环境很难检测冲突,所以干脆先监听,如果信道空闲,再等一个随机时间后发送,尽量避开冲突。

现在的以太网基本都是全双工(用交换机的),CSMA/CD基本用不上了。但理解它有助于你理解以太网的历史和设计思想。

2.4 本章知识体系图

下面这张图把物理层和数据链路层的核心知识点串起来了,方便你建立整体认知:

物理层与数据链路层知识体系 物理层 传输介质 双绞线 光纤 同轴电缆 信号编码 数据链路层 核心功能 封装成帧 透明传输 差错检测 MAC地址 以太网协议:帧格式 + CSMA/CD + MAC寻址 关键理解 物理层负责比特流的传输,数据链路层负责帧的可靠交付 MAC地址是数据链路层的寻址方式,工作在同一个广播域内 CRC差错检测是数据链路层保证数据完整性的核心手段

2.5 小结

这一章咱们聊了物理层的三种传输介质——双绞线、光纤、同轴电缆,各自的特点和适用场景。然后深入数据链路层的三大功能:封装成帧、透明传输、差错检测。最后讲了MAC地址和以太网协议。

说实话,这些知识看起来基础,但实际工作中经常遇到。我见过太多人因为不懂物理层特性,布线时乱用线缆导致网络不稳定;也见过因为不理解MAC地址和IP地址的区别,排查故障时走弯路。

下一层咱们要往上走了,聊聊网络层的核心——IP协议和路由。但今天的内容,建议你好好消化。基础打牢了,后面才能走得稳。