跳到主要内容
预计阅读 25 分钟

物理层与数据链路层 — 网络世界的”基建工程”

高楼大厦需要坚固的地基,互联网的摩天大楼也不例外。物理层和数据链路层就是网络世界的”地基”——它们决定了数据如何在铜线、光纤和无线电波中传递,如何在局域网中精准地找到目标设备。

📋 开篇自测:你已经知道多少?

  1. 以太网帧的格式包含哪些字段?最大传输单元(MTU)是多少?
  2. ARP 协议的作用是什么?它的工作流程是怎样的?
  3. 交换机是如何学习 MAC 地址并建立转发表的?

一、物理层:比特的搬运工

1.1 物理层解决什么问题

物理层位于网络模型的最底层,它要解决的核心问题是:如何把 0 和 1 这些二进制数据,变成可以在物理介质上传播的信号

具体来说,物理层定义了以下四个方面的规范:

  • 机械特性:接口形状、引脚数量、针脚排列(比如 RJ-45 水晶头有 8 根引脚)
  • 电气特性:信号的电压范围(比如以太网使用差分信号,+1V 代表 1,-1V 代表 0)
  • 功能特性:每根引脚的用途(比如哪几根用于发送,哪几根用于接收)
  • 过程特性:信号传输的时序和流程

1.2 常见的物理传输介质

传输介质分类:

有线介质                               无线介质
├── 双绞线(Twisted Pair)              ├── Wi-Fi(2.4GHz / 5GHz / 6GHz)
│   ├── Cat5e: 千兆以太网              ├── 蓝牙(2.4GHz)
│   ├── Cat6:  万兆以太网(短距离)     ├── 5G/4G 蜂窝网络
│   └── Cat6a: 万兆以太网(长距离)     └── 卫星通信
├── 光纤(Optical Fiber)
│   ├── 单模光纤: 长距离(数十公里)
│   └── 多模光纤: 短距离(数百米)
└── 同轴电缆(Coaxial)-- 已基本淘汰

双绞线是最常见的网络线缆。为什么要”绞”在一起?因为两根线绞合后,外部电磁干扰会同时作用在两根线上,接收端可以通过差分计算消除干扰——这就是”差分信号”的原理。

光纤通过光信号传输数据,具有带宽大、损耗低、抗电磁干扰等优势。现在数据中心之间的骨干网几乎都使用光纤。

1.3 信号编码方式

物理层还需要把二进制数据编码成合适的信号形式。常见的编码方式包括:

曼彻斯特编码(传统以太网使用):

  1     0     1     1     0
+---+     +---+---+     +---+
|   |     |   |   |     |   |
+   +---+ +   +   +---+ +   +
    |   |     |       |     |
    +---+     +       +---+ +

每个比特周期中间都有一次跳变(IEEE 802.3 / 以太网标准):
- 低->高 表示 1
- 高->低 表示 0

> **注意**:曼彻斯特编码存在两种约定。上面是 IEEE 802.3(以太网)的定义,而 G.E. Thomas 的原始约定极性相反(高→低表示 1,低→高表示 0)。如果你在其他资料中看到相反的定义,不必困惑,只是约定不同。

现代高速以太网使用更高效的编码方式,如 4B/5B 编码、PAM-5 编码等,以提高传输效率。

1.4 带宽与速率

带宽(Bandwidth)指的是物理信道的最大传输能力,单位是 bps(bits per second)。

标准速率介质
10BASE-T10 MbpsCat3 双绞线
100BASE-TX100 MbpsCat5 双绞线
1000BASE-T1 GbpsCat5e 双绞线
10GBASE-T10 GbpsCat6a 双绞线
100GBASE-SR4100 Gbps多模光纤

🤔 想一想 你家里的宽带标称”千兆光纤”,但实际下载速度通常只有 100MB/s 左右,这是为什么?(提示:注意 Mbps 和 MB/s 的区别)


二、以太网:局域网的统治者

2.1 以太网的前世今生

以太网(Ethernet)诞生于 1973 年,由施乐公司的 Robert Metcalfe 发明。最初的以太网速率只有 2.94 Mbps,使用同轴电缆连接。

半个世纪过去了,以太网从 10 Mbps 发展到了 400 Gbps,传输介质也从同轴电缆演变为双绞线和光纤。但核心的帧格式设计思想一直延续至今,这正是好的协议设计的生命力。

如今,以太网占据了全球局域网市场 95% 以上的份额,是当之无愧的”LAN 之王”。

2.2 以太网帧格式

以太网帧(IEEE 802.3 标准)的结构如下:

+----------+-----+----------+----------+------+--------------------+-----+
| 前导码   | SFD  | 目的MAC  | 源MAC    | 类型  | 数据(载荷)         | FCS |
| 7字节    | 1字节| 6字节    | 6字节    | 2字节 | 46-1500字节         | 4字节|
+----------+-----+----------+----------+------+--------------------+-----+
|-- 不计入帧长 --|  |----- 帧头(14字节)------|---- 数据部分 ----|-- 校验 --|

注意:前导码(Preamble,7 字节 10101010 交替信号)用于时钟同步,帧起始定界符(SFD,1 字节 10101011)标记帧的正式开始。它们在物理层处理后剥离,通常不计入帧长度。

各字段说明:

  • 目的 MAC 地址(6 字节):接收方的硬件地址
  • 源 MAC 地址(6 字节):发送方的硬件地址
  • 类型(2 字节):标识上层协议。0x0800 = IPv4,0x0806 = ARP,0x86DD = IPv6
  • 数据(46~1500 字节):承载的上层数据(即 IP 数据包等)
  • FCS(4 字节):帧校验序列,使用 CRC-32 算法检测传输错误

2.3 MTU——最大传输单元

以太网帧的数据部分最大为 1500 字节,这就是 MTU(Maximum Transmission Unit)。

为什么是 1500?这是一个历史性的折衷——太小则效率低(头部占比太大),太大则出错重传的代价高。1500 字节在当时的技术条件下取得了最佳平衡。

以太网帧总大小计算:
  帧头(14) + 数据(最大1500) + FCS(4) = 最大 1518 字节

如果 IP 数据包超过 1500 字节,就需要进行分片(Fragmentation):

原始数据包 (3000字节IP负载):
+--------------------------------------------------+
|          IP头(20B) + 2980 字节的数据                 |
+--------------------------------------------------+
                    |
                    v  IP 层分片(每个分片需独立的 IP 头)
  +--------------------+ +--------------------+ +----------+
  | IP头(20) + 数据(1480)| | IP头(20) + 数据(1480)| | IP头(20) + 数据(20)|
  |    共 1500 字节      | |    共 1500 字节      | |   共 40 字节       |
  +--------------------+ +--------------------+ +----------+
  注: 每个分片的数据部分必须是 8 字节的整数倍(最后一片除外)

三、MAC 地址:网络设备的”身份证”

3.1 MAC 地址的结构

MAC(Media Access Control)地址是网络接口卡(网卡)的物理地址,在出厂时由厂商烧录,理论上全球唯一。

MAC 地址格式(6 字节 = 48 位):

  AA:BB:CC:DD:EE:FF
  |------|  |------|
  厂商标识    设备序列号
  (OUI)      (NIC)

  前 3 字节:组织唯一标识符(OUI),由 IEEE 分配给各厂商
  后 3 字节:设备序列号,由厂商自行分配

  示例:
  00:1A:2B:3C:4D:5E
  |-----|
  00:1A:2B = 某厂商的 OUI(比如可能是 Dell)

3.2 特殊的 MAC 地址

  • 广播地址FF:FF:FF:FF:FF:FF,发给局域网内所有设备
  • 组播地址:第一个字节的最低位为 1(如 01:00:5E:xx:xx:xx),发给特定的设备组
  • 全零地址00:00:00:00:00:00,表示地址未知或占位

3.3 MAC 地址 vs IP 地址

这是一个经典的面试问题:既然 MAC 地址全球唯一,为什么还需要 IP 地址?

MAC 地址就像身份证号:唯一标识一个人,但没有地理定位能力。你无法通过身份证号推断一个人在哪个城市。

IP 地址就像邮政地址:有层次结构(省/市/区/街道/门牌号),可以逐级定位。

MAC 地址: 扁平结构,无层次
  AA:BB:CC:DD:EE:FF  --> 无法判断在哪个网络

IP 地址: 层次结构,可路由
  192.168.1.100/24  --> 网络号 192.168.1.0 + 主机号 100
                        可以据此进行路由转发

跨网段通信时,MAC 地址在每一跳都会改变(换成下一个路由器的 MAC),而 IP 地址始终不变(始终记录源和目的)。

🤔 想一想 如果你把一台电脑从北京搬到上海,它的 MAC 地址变了吗?IP 地址呢?为什么?


四、ARP 协议:从 IP 到 MAC 的翻译官

4.1 ARP 的作用

当设备知道目标的 IP 地址但不知道其 MAC 地址时,就需要 ARP(Address Resolution Protocol)来完成”翻译”工作。

4.2 ARP 的工作流程

假设 PC-A(192.168.1.10)想发数据给 PC-B(192.168.1.20),但不知道 PC-B 的 MAC 地址:

步骤1:PC-A 广播 ARP 请求

PC-A                          交换机                     所有设备
  |  "谁的IP是192.168.1.20?" |                           |
  |  目标MAC: FF:FF:FF:FF:FF:FF                           |
  | -------> 广播到所有端口 ------> PC-B, PC-C, PC-D...   |
  |                                                        |

步骤2:PC-B 单播 ARP 应答

PC-A                          交换机                     PC-B
  |                            |                          |
  |  "我是192.168.1.20,       |  <----- 单播回复 ------  |
  |   我的MAC是 BB:BB:BB:BB:BB:BB"                       |
  |                            |                          |

步骤3:PC-A 更新 ARP 缓存表

PC-A 的 ARP 缓存:
+-----------------+---------------------+-------+
| IP 地址          | MAC 地址             | 状态   |
+-----------------+---------------------+-------+
| 192.168.1.20    | BB:BB:BB:BB:BB:BB   | 动态   |
| 192.168.1.1     | 11:11:11:11:11:11   | 动态   |
+-----------------+---------------------+-------+

4.3 ARP 缓存

为了避免每次通信都要广播 ARP 请求,操作系统会维护一个 ARP 缓存表。你可以通过以下命令查看:

# Linux / macOS
arp -a

# Windows
arp -a

# 输出示例
? (192.168.1.1) at 00:1a:2b:3c:4d:5e on en0 [ethernet]
? (192.168.1.20) at aa:bb:cc:dd:ee:ff on en0 [ethernet]

ARP 缓存条目有一个超时时间,不同操作系统差异很大:Linux 默认约 30 秒(base_reachable_time),Windows 默认约 2 分钟,Cisco 路由器默认 4 小时。过期后条目会被删除,下次通信时重新发起 ARP 请求。

4.4 跨网段的 ARP 行为

如果目标 IP 和自己不在同一子网,ARP 不会去广播查找目标主机的 MAC 地址,而是查找默认网关的 MAC 地址:

PC-A (192.168.1.10) 要访问 Server (10.0.0.50)

1. PC-A 判断: 10.0.0.50 不在 192.168.1.0/24 网段内
2. PC-A 发 ARP 请求: "谁是网关 192.168.1.1?"
3. 路由器回复: "我是 192.168.1.1,MAC 是 RR:RR:RR:RR:RR:RR"
4. PC-A 构造帧:
   +------------------+------------------+------ ------+
   | 目的MAC=路由器MAC | 源MAC=PC-A的MAC  | IP包         |
   | (RR:RR:RR:...)   | (AA:AA:AA:...)   | 目的IP=10... |
   +------------------+------------------+--------------+

关键:MAC 地址指向路由器(下一跳),IP 地址指向最终目的地

五、交换机的工作原理

5.1 MAC 地址表的学习过程

交换机出厂时 MAC 地址表是空的。它通过”源地址学习”来逐步建立转发表:

初始状态:MAC 地址表为空

步骤1:PC-A 从端口1发送帧
+----+-------+---------+
| 端口 | MAC    | 动作    |
+----+-------+---------+
| 1  | MAC-A | 学习     |  <-- 交换机记住: MAC-A 在端口1
+----+-------+---------+
因为不知道目的MAC在哪,所以向除端口1外的所有端口转发(泛洪)

步骤2:PC-B 从端口2回复
+----+-------+---------+
| 端口 | MAC    | 动作    |
+----+-------+---------+
| 1  | MAC-A | 已知     |
| 2  | MAC-B | 学习     |  <-- 交换机记住: MAC-B 在端口2
+----+-------+---------+
因为知道 MAC-A 在端口1,所以只向端口1转发

步骤3:后续 PC-A 再发给 PC-B
交换机查表发现 MAC-B 在端口2,直接精准转发,不再泛洪

5.2 交换机的三种转发行为

行为触发条件说明
转发(Forward)目的 MAC 在表中只发到对应端口
泛洪(Flood)目的 MAC 不在表中发到除源端口外的所有端口
丢弃(Discard)目的 MAC 在源端口上不需要转发

5.3 VLAN:虚拟局域网

在大型网络中,如果所有设备都在同一个广播域,一个 ARP 请求就会被发送给数百台设备,造成大量无用流量。

VLAN(Virtual LAN)通过在交换机上进行逻辑隔离,把一个物理网络划分成多个独立的广播域:

物理上是同一台交换机,但逻辑上隔离:

      +---------------------------+
      |        交换机              |
      | +--------+  +--------+   |
      | | VLAN 10|  | VLAN 20|   |
      | | 研发部  |  | 市场部  |   |
      | | 端口1-8 |  | 端口9-16|  |
      | +--------+  +--------+   |
      +---------------------------+

VLAN 10 的广播不会到达 VLAN 20
VLAN 20 的广播不会到达 VLAN 10
两个 VLAN 之间的通信必须经过路由器(三层设备)

VLAN 通过在以太网帧中插入 4 字节的 802.1Q 标签来标识 VLAN 号:

标准以太网帧:
+--------+--------+------+--------+-----+
| 目的MAC | 源MAC  | 类型  | 数据    | FCS |
+--------+--------+------+--------+-----+

带 VLAN 标签的帧 (802.1Q):
+--------+--------+----------+------+--------+-----+
| 目的MAC | 源MAC  | VLAN标签  | 类型  | 数据    | FCS |
|        |        | (4字节)   |      |        |     |
+--------+--------+----------+------+--------+-----+
                   |
                   v
          +------+-------+
          | TPID | TCI   |
          |0x8100| VID等  |
          +------+-------+
          VID: VLAN ID (0-4095)

六、冲突检测与介质访问控制

6.1 CSMA/CD:以太网的”交通规则”

早期的以太网使用共享介质(同轴电缆或集线器),多台设备共享同一条通信线路。为了解决”多人同时说话”的冲突问题,以太网采用了 CSMA/CD(载波侦听多路访问/冲突检测)机制:

CSMA/CD 工作流程:

1. 先听再说(Carrier Sense)
   设备发送前先监听信道,空闲才发送

2. 边说边听(Collision Detection)
   发送数据的同时监听信道,检测是否有冲突

3. 冲突处理
   如果检测到冲突:
   a. 立即停止发送
   b. 发送 JAM 信号通知所有站点
   c. 等待随机时间后重试(指数退避算法)

时序示意:
PC-A: 监听...空闲...发送数据-------*冲突!* 停止 等待随机时间 重试
PC-B: 监听...空闲...发送数据---*冲突!* 停止 等待随机时间 重试

6.2 全双工与半双工

使用交换机后,每个端口是独立的冲突域,设备可以同时发送和接收数据(全双工),CSMA/CD 实际上已经不再需要:

半双工(使用集线器):   同一时刻只能发或收
  PC-A <==> Hub <==> PC-B
  需要 CSMA/CD 解决冲突

全双工(使用交换机):   发送和接收同时进行
  PC-A <==双向==> Switch <==双向==> PC-B
  每个端口独立,无冲突,无需 CSMA/CD

七、章节小结

本章深入探讨了网络的物理基础和数据链路层的核心机制:

  1. 物理层负责将比特流转换为物理信号,定义了传输介质、信号编码和接口标准。
  2. 以太网帧是数据链路层的核心数据单元,包含 MAC 地址、类型、数据和校验字段,MTU 为 1500 字节。
  3. MAC 地址是网卡的物理标识,用于局域网内精确寻址,但不具备跨网段路由能力。
  4. ARP 协议负责将 IP 地址解析为 MAC 地址,使用广播请求和单播回复机制。
  5. 交换机通过学习源 MAC 地址建立转发表,实现帧的精准转发。
  6. VLAN在交换机上划分虚拟广播域,隔离广播流量,提高网络安全性和效率。

📝 结尾自测:检验你的收获

  1. 双绞线为什么要”绞合”?这种设计解决了什么问题?
  2. 以太网帧的 MTU 是 1500 字节,如果 IP 层要发送 3000 字节的数据怎么办?
  3. 请完整描述 ARP 协议的工作流程:当 PC-A 要向同网段的 PC-B 发数据,但不知道 PC-B 的 MAC 地址时,会发生什么?
  4. 交换机是如何逐步学习 MAC 地址表的?当收到一个目的 MAC 不在表中的帧时,它如何处理?
  5. VLAN 的作用是什么?它通过什么机制标识不同的虚拟局域网?

下一章预告:数据链路层解决了局域网内的通信问题,但要让数据跨越不同网络到达世界任何一个角落,就需要网络层的 IP 协议了。下一章我们将深入 IP 地址体系、子网划分、路由选路和 NAT 技术,理解互联网这个”全球邮政系统”是如何运作的。

购买课程解锁全部内容

网络通信第一课:10 章掌握计算机网络

¥29.90