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 Mbps | 100 | 2,000,000 |
| 100 Mbps | 19 | 200,000 |
| 1 Gbps | 4 | 20,000 |
| 10 Gbps | 2 | 2,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 校验 → 剥离帧头帧尾 → 交给上层
参考文章
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。