16. 数据链路层

掌握数据链路层的核心概念:MAC 地址、以太网帧格式、交换机工作原理、VLAN 与 STP,理解链路层在数据传输中的关键作用。

1. 数据链路层职责

数据链路层负责相邻节点间的可靠数据传输,核心功能:

  • 成帧:将网络层分组封装成帧
  • 物理寻址:MAC 地址标识设备
  • 差错检测:CRC 校验
  • 介质访问控制:解决多设备共享信道冲突

2. 以太网帧格式

2.1 Ethernet II(最常用)

     6 bytes    6 bytes   2 bytes   46-1500 bytes  4 bytes
   ┌─────────┬─────────┬─────────┬──────────────┬─────────┐
   │ 目的 MAC │ 源 MAC  │  类型   │    数据       │   FCS   │
   │         │         │ 0x0800= │ (Payload +   │ (CRC32) │
   │         │         │ IPv4    │  Padding)    │         │
   └─────────┴─────────┴─────────┴──────────────┴─────────┘
   
   目标解析:
   - 目的 MAC = FF:FF:FF:FF:FF:FF → 广播帧(局域网内所有设备接收)
   - 目的 MAC 第一位为 1 → 组播帧

2.2 MAC 地址

格式:6 字节(48 位),冒分十六进制
      aa:bb:cc:dd:ee:ff
      
      ┌─────────────┬────────────────────┐
      │ OUI (24位)  │  设备唯一标识(24位) │
      │ (厂商编码)   │  (厂商分配)         │
      └─────────────┴────────────────────┘
      
广播地址:FF:FF:FF:FF:FF:FF

3. 交换机工作原理

3.1 MAC 地址表

交换机通过自学习建立 MAC 地址表:

初始:MAC 地址表为空

帧从端口 1 进入,源 MAC 为 A:
  → 学习:MAC A → 端口 1
  → 查找目的 MAC B:未知 → 泛洪(Flooding)到所有端口(除端口 1)

帧从端口 2 进入,源 MAC 为 B:
  → 学习:MAC B → 端口 2
  
后续 A → B 的帧:
  → 查找 MAC B → 端口 2 → 直接转发
MAC 地址表示例:
┌──────────────┬────────┬──────────┐
│   MAC 地址    │ 端口    │ 老化时间  │
├──────────────┼────────┼──────────┤
│ aa:bb:cc:11  │   1    │  280s    │
│ dd:ee:ff:22  │   2    │  295s    │
│ 11:22:33:44  │   3    │  120s    │
└──────────────┴────────┴──────────┘

老化机制:一段时间未收到某 MAC 的流量,表项自动删除(默认 300s)

3.2 交换机 vs 集线器 vs 路由器

特性集线器(Hub)交换机(Switch)路由器(Router)
工作层级物理层数据链路层网络层
转发依据无(广播)MAC 地址表路由表(IP)
冲突域一个每个端口独立每个端口独立
广播域一个一个(默认)隔离
带宽共享独享(全双工)独享
安全性极低中等

3.3 三种转发方式

方式机制延迟特点
存储转发收完整帧,校验 CRC 后转发可靠,可过滤错误帧
直通转发读到目的 MAC 即转发快速,不检查错误
无碎片转发收到 64 字节(最小帧长)后转发避免转发碎片帧

4. 介质访问控制

4.1 CSMA/CD(载波监听多路访问/冲突检测)

传统以太网(半双工)使用,全双工交换机网络无需 CSMA/CD。

工作流程:
1. 载波监听:发送前先监听信道是否空闲
2. 冲突检测:发送中同时检测是否发生冲突
3. 冲突处理:
   - 发送干扰信号(Jam Signal)
   - 二进制指数退避:等待随机时间后重试
     退避时间 = rand(0, 2^min(n, 10) - 1) × 时隙(51.2μs)
     n = 冲突次数,超过 16 次放弃发送

4.2 CSMA/CA(冲突避免)

无线网络(Wi-Fi)使用,因为无线难以冲突检测。

工作流程:
1. 信道空闲 → 等待 DIFS(分布式帧间间隔)
2. 随机退避 → 竞争窗口倒计时
3. 倒计时到 0 时发送
4. 收到 ACK → 发送成功
5. 未收到 ACK → 重传,竞争窗口加倍

5. VLAN(虚拟局域网)

5.1 为什么需要 VLAN

未划分 VLAN:
  所有端口在同一个广播域
  广播帧到达所有端口 → 广播风暴风险
  
划分 VLAN 后:
  VLAN 10: 端口 1,2,3 → 一个广播域
  VLAN 20: 端口 4,5,6 → 另一个广播域
  广播帧只在同 VLAN 内传播

5.2 VLAN 划分方式

方式依据优点缺点
基于端口交换机物理端口简单用户移动需改配置
基于 MAC终端 MAC 地址用户移动自动跟随配置工作量大
基于协议网络层协议类型自动识别处理开销
基于子网IP 子网与网络规划一致需查看三层信息

5.3 802.1Q VLAN 标签

标准以太网帧                     VLAN 标记帧
┌─────┬─────┬─────┬─────┐      ┌─────┬─────┬──────┬─────┬─────┐
│ DMAC│ SMAC│Type │Data │  →   │ DMAC│ SMAC│  TPID│ TCI │Data │
└─────┴─────┴─────┴─────┘      └─────┴─────┴──────┴─────┴─────┘
                                  0x8100
                                        
TCI(Tag Control Information,2 bytes):
  ┌─────────┬────────┬────────┐
  │ PCP(3b) │ CFI(1b)│ VID(12b)│
  └─────────┴────────┴────────┘
  
  PCP: 优先级(802.1p QoS)
  CFI: 规范格式指示
  VID: VLAN ID(1-4094,0 和 4095 保留)

5.4 Trunk 端口

交换机之间互联使用 Trunk 端口,传输多 VLAN 流量:

  VLAN 10 主机 ──→ [交换机 A] ──Trunk──→ [交换机 B] ──→ VLAN 10 主机
  VLAN 20 主机 ──→ [交换机 A] ──Trunk──→ [交换机 B] ──→ VLAN 20 主机
  
Trunk 端口发送帧时:
  - 帧属于本征 VLAN(Native VLAN,默认 VLAN 1)→ 不打标签
  - 帧属于其他 VLAN → 打 802.1Q 标签

接收时:
  - 无标签帧 → 归入 Native VLAN
  - 有标签帧 → 按标签 VLAN ID 处理

6. STP(生成树协议)

6.1 为什么需要 STP

交换机冗余链路会导致二层环路,引发广播风暴、MAC 地址表抖动、多帧重复。

环路导致的问题:

  交换机 A ─────── 交换机 B
     │    ╲      /    │
     │      ╲  /      │
     │       ╳        │  ← 环路!
     │      /  ╲      │
     │    /      ╲    │
  主机 X          主机 Y

广播帧在环路中无限循环,MAC 表每秒被更新数千次

6.2 STP 工作原理

通过阻塞冗余端口,将冗余拓扑修剪为无环树形结构。

STP 选举过程:

1. 选举根桥(Root Bridge)
   → 桥 ID(优先级 + MAC)最小的交换机
   
2. 每个非根桥选举根端口(Root Port)
   → 到达根桥路径开销最小的端口
   
3. 每个网段选举指定端口(Designated Port)
   → 该网段到达根桥最优的端口
   
4. 剩余端口阻塞(Blocking)
端口状态转换:

Blocking ──(20s)──→ Listening ──(15s)──→ Learning ──(15s)──→ Forwarding
                      不转发数据       学习 MAC 地址          正常转发
                      不学习 MAC
                      
 RSTP(快速生成树)将收敛时间从 30-50s 缩短到 1-2s

6.3 路径开销

带宽STP 开销(802.1D)RSTP 开销
10 Mbps1002,000,000
100 Mbps19200,000
1 Gbps420,000
10 Gbps22,000

7. ARP 详解

7.1 ARP 工作流程

主机 A(192.168.1.10,MAC_A)要发送给 192.168.1.1

1. 检查 ARP 缓存 → 没有 192.168.1.1 的条目

2. 发送 ARP Request(广播):
   ┌────────────────────────────────────────────┐
   │ 以太网帧头                                  │
   │   目的 MAC: FF:FF:FF:FF:FF:FF (广播)       │
   │   源 MAC: MAC_A                            │
   │                                            │
   │ ARP 报文                                    │
   │   硬件类型: 以太网 (1)                      │
   │   协议类型: IPv4 (0x0800)                   │
   │   操作码: Request (1)                       │
   │   发送方 MAC: MAC_A                         │
   │   发送方 IP: 192.168.1.10                   │
   │   目标 MAC: 00:00:00:00:00:00               │
   │   目标 IP: 192.168.1.1                      │
   └────────────────────────────────────────────┘

3. 局域网内所有主机接收,只有 192.168.1.1 回应

4. ARP Reply(单播):
   │   目的 MAC: MAC_A                          │
   │   源 MAC: MAC_GW (网关 MAC)                │
   │   发送方 MAC: MAC_GW                       │
   │   发送方 IP: 192.168.1.1                   │
   │   目标 MAC: MAC_A                          │
   │   目标 IP: 192.168.1.10                    │

5. 主机 A 收到后更新 ARP 缓存,后续直接通信

7.2 ARP 安全问题

攻击原理防御
ARP 欺骗伪造 ARP Reply,篡改 MAC-IP 映射静态 ARP 绑定、DARP
ARP 泛洪发送大量 ARP 报文填满交换表端口限速、动态 ARP 检查
# 查看 ARP 缓存
arp -a
ip neigh

# 静态 ARP 绑定
ip neigh add 192.168.1.1 lladdr aa:bb:cc:dd:ee:ff dev eth0

# 清除 ARP 缓存
ip neigh flush all

8. 链路层总结

数据链路层核心流程:

发送方:
  网络层分组 → 添加帧头(DMAC+SMAC+Type) + 帧尾(CRC) → 物理层比特流
       ↓
  如果知道目的 IP 的 MAC → 直接封装
  如果不知道 → 发送 ARP 请求获取

中间交换机:
  接收帧 → 学习源 MAC → 查找目的 MAC 端口 → 转发/泛洪

接收方:
  检查目的 MAC 匹配 → CRC 校验 → 剥离帧头帧尾 → 交给上层

参考文章

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「计算机基础」更多文章

  1. 15. 网络层与路由
  2. 14. 网络模型与协议
  3. 13. 死锁与同步