计算机网络第六讲复习博客:链路层与局域网
课程主题:The Link Layer and LANs
关键词:链路层、帧、差错检测、海明码、CRC、多路访问、ALOHA、CSMA/CD、MAC 地址、ARP、以太网、交换机、VLAN、MPLS、数据中心网络
适合用途:期末复习、博客发布、作业回顾、快速查漏补缺
目录
- [0. 第六讲一句话总览](#0. 第六讲一句话总览)
- [1. 链路层到底管什么?](#1. 链路层到底管什么?)
- [2. 成帧:为什么要把比特流切成帧?](#2. 成帧:为什么要把比特流切成帧?)
- [3. 差错控制:传输中 bit 错了怎么办?](#3. 差错控制:传输中 bit 错了怎么办?)
- [4. 海明距离:检错和纠错能力的核心](#4. 海明距离:检错和纠错能力的核心)
- [5. 海明码:如何定位 1 位错误?](#5. 海明码:如何定位 1 位错误?)
- [6. 奇偶校验、二维奇偶校验与 CRC](#6. 奇偶校验、二维奇偶校验与 CRC)
- [7. 多路访问:多人共用信道时谁先发?](#7. 多路访问:多人共用信道时谁先发?)
- [8. 信道划分:TDMA 与 FDMA](#8. 信道划分:TDMA 与 FDMA)
- [9. 随机访问:ALOHA、时隙 ALOHA、CSMA](#9. 随机访问:ALOHA、时隙 ALOHA、CSMA)
- [10. CSMA/CD:经典以太网的碰撞检测](#10. CSMA/CD:经典以太网的碰撞检测)
- [11. 轮流访问:Polling 与 Token Passing](#11. 轮流访问:Polling 与 Token Passing)
- [12. MAC 地址:局域网里的硬件地址](#12. MAC 地址:局域网里的硬件地址)
- [13. IP 地址和 MAC 地址的区别](#13. IP 地址和 MAC 地址的区别)
- [14. ARP:知道 IP,怎么找到 MAC?](#14. ARP:知道 IP,怎么找到 MAC?)
- [15. 以太网 Ethernet](#15. 以太网 Ethernet)
- [16. 交换机和路由器的区别](#16. 交换机和路由器的区别)
- [17. VLAN:一个物理交换机切成多个逻辑局域网](#17. VLAN:一个物理交换机切成多个逻辑局域网)
- [18. EVPN/VXLAN:把二层网络拉长](#18. EVPN/VXLAN:把二层网络拉长)
- [19. MPLS:用标签转发](#19. MPLS:用标签转发)
- [20. 数据中心网络](#20. 数据中心网络)
- [21. 一次 Web 请求如何串起第六讲?](#21. 一次 Web 请求如何串起第六讲?)
- [22. 作业重点回顾](#22. 作业重点回顾)
- [23. 小测题与答案](#23. 小测题与答案)
- [24. 常见 QA](#24. 常见 QA)
- [25. 拓展理解](#25. 拓展理解)
- [26. 期末复习抓手](#26. 期末复习抓手)
- [27. 最后总结](#27. 最后总结)
0. 第六讲一句话总览
第六讲讲的是:
当网络层已经决定"下一跳是谁"之后,链路层如何把 IP 数据报封装成帧,并在当前这一段链路上把它送到相邻节点。
网络层关心的是:
text
这个 IP 数据报最终要去哪?下一跳往哪个方向走?
链路层关心的是:
text
在当前这一小段物理链路上,怎么从一个网卡送到另一个网卡?
比如你访问一个网站,数据可能经过:
text
你的电脑 → 家里路由器 → 运营商设备 → 骨干网路由器 → 服务器
每一个箭头都是一段 link。链路层只负责其中的一跳。
整章主线可以压成:
text
IP 数据报
↓
封装成链路层帧 Frame
↓
检测/纠正传输错误
↓
如果多人共享信道,要决定谁先发
↓
在局域网中用 MAC 地址和 ARP 找到下一跳
↓
交换机根据 MAC 地址转发帧
↓
用 VLAN、MPLS、数据中心网络把链路层思想扩展到更大规模
1. 链路层到底管什么?
1.1 三个基本概念
| 概念 | 英文 | 人话解释 |
|---|---|---|
| 节点 | node | 主机、路由器、交换机等网络设备 |
| 链路 | link | 相邻节点之间的通信通道,可以是有线、无线、局域网等 |
| 帧 | frame | 链路层的数据单位,用来封装网络层 datagram |
网络层的数据单位通常叫 datagram,数据报 ;链路层的数据单位叫 frame,帧。
链路层会把 IP 数据报装进帧里:
text
[链路层头部 | IP 数据报 | 链路层尾部]
链路层头部一般包含源 MAC 地址、目的 MAC 地址、类型字段等;链路层尾部常常包含 CRC 校验码。
1.2 链路层的主要服务
链路层主要提供这些功能:
- 成帧 framing:把连续比特流划分成一帧一帧。
- 链路访问 link access:如果多台设备共享一个信道,决定谁可以发。
- 差错检测 error detection:发现传输中 bit 是否出错。
- 差错纠正 error correction:在某些情况下定位并修正错误 bit。
- 相邻节点可靠传输 reliable delivery:在高误码链路上可能会做局部重传。
- 流量控制 flow control:避免发送方把接收方压垮。
- 半双工/全双工:决定双方是否可以同时发送。
注意,链路层的很多功能由 NIC,Network Interface Card,网卡 实现。网卡不只是"插网线的东西",它里面会做帧封装、MAC 地址处理、CRC 检查等很多链路层工作。
2. 成帧:为什么要把比特流切成帧?
物理层看到的是一串连续比特:
text
010101101010111000101010...
接收方必须知道:
text
一帧从哪里开始?
一帧到哪里结束?
哪一段数据该交给上层?
这就是 framing,成帧。
2.1 字节计数法 Byte Count
最朴素的方法是在帧头写一个长度字段:
text
[长度字段 | 数据内容]
比如长度字段写着 100,接收方就读后面 100 字节。
问题是:
如果长度字段本身传错了,后面所有帧的边界可能都会跟着乱掉。
所以字节计数法简单,但抗差错能力不强。
2.2 字节填充 Byte Stuffing
规定一个特殊字节作为帧边界,例如:
text
FLAG = 01111110 = 0x7E
一帧长这样:
text
FLAG | Payload | FLAG
问题是:如果 Payload 里本来就有 FLAG 怎么办?
解决方法是加转义字节 ESC:
text
Payload 中出现 FLAG → 发送 ESC FLAG
Payload 中出现 ESC → 发送 ESC ESC
接收方看到 ESC,就知道后面的字节是普通数据,不是控制符。
这和编程语言里的字符串转义很像:想在字符串中表示引号,就写 \"。
2.3 比特填充 Bit Stuffing
比特填充用特殊比特模式作为帧边界:
text
01111110
发送方规则:
数据部分中只要出现连续 5 个 1,就自动插入一个 0。
接收方规则:
收到连续 5 个 1 后,如果下一位是 0,就删除这个 0。
例如发送方看到:
text
11111
就变成:
text
111110
这样就避免数据内容被误认为帧结束标志。
2.4 物理层编码违例 Physical Layer Coding Violations
有些物理层编码中,某些信号模式在正常数据中不会出现。于是可以把这些"不可能出现"的信号作为帧边界。
比如某些编码要求正常信号周期中间必须有跳变,那么持续高电平或持续低电平就可以作为违例码,用来标记帧边界。
3. 差错控制:传输中 bit 错了怎么办?
链路上会出错,尤其是无线链路、长距离链路、噪声较强的链路。
常见错误包括:
| 错误类型 | 含义 |
|---|---|
| 单比特错误 | 只有 1 个 bit 翻转 |
| 突发错误 | 一段连续区域内多个 bit 出错 |
| 丢失帧 | 整个帧没到达 |
| 损坏帧 | 帧到了,但里面有 bit 错了 |
处理错误有两种思路:
text
检错:知道它错了,但不一定知道怎么改。
纠错:不仅知道它错了,还知道哪一位错了,并把它改回来。
4. 海明距离:检错和纠错能力的核心
4.1 什么是海明距离?
两个码字之间不同 bit 的个数,叫 Hamming distance,海明距离。
例如:
text
0000000000
0000011111
后 5 位不同,所以海明距离是 5。
4.2 为什么检测 s 个错误需要距离 s+1?
如果两个合法码字之间的最小距离是 d d d,那么最多能检测 d − 1 d-1 d−1 个 bit 错误。
原因是:只要错误还没有把一个合法码字变成另一个合法码字,接收方就能发现"这个码字不合法"。
所以若想检测出 s s s 个 bit 错误,需要:
d ≥ s + 1 d \ge s+1 d≥s+1
人话版:
合法码字之间要隔得足够远。只要错误还没跨到另一个合法码字,接收方就能发现不对劲。
4.3 为什么纠正 t 个错误需要距离 2t+1?
纠错比检错更难。
检错只需要判断"不对";纠错要判断"原来应该是谁"。
如果要纠正 t t t 个错误,每个合法码字周围半径为 t t t 的错误范围不能重叠。因此两个合法码字之间至少要有:
t + t + 1 = 2 t + 1 t+t+1=2t+1 t+t+1=2t+1
所以:
d ≥ 2 t + 1 d \ge 2t+1 d≥2t+1
人话版:
纠错要求每个合法码字周围的"错误影响范围"互不重叠。否则收到一个错误码字时,就不知道该改回谁。
5. 海明码:如何定位 1 位错误?
海明码把校验位放在编号为 2 的幂的位置:
text
位置:1 2 3 4 5 6 7 8 9 10 11
内容:r1 r2 d r4 d d d r8 d d d
其中:
text
d = data bit,数据位
r = redundant bit / check bit,校验位
5.1 r1、r2、r4、r8 分别检查什么?
规则是:
某个位置编号可以拆成哪些 2 的幂,它就由哪些校验位检查。
例如:
text
3 = 1 + 2 → 第 3 位由 r1、r2 检查
5 = 1 + 4 → 第 5 位由 r1、r4 检查
6 = 2 + 4 → 第 6 位由 r2、r4 检查
7 = 1 + 2 + 4 → 第 7 位由 r1、r2、r4 检查
10 = 2 + 8 → 第 10 位由 r2、r8 检查
11 = 1 + 2 + 8 → 第 11 位由 r1、r2、r8 检查
因此检查范围是:
| 校验位 | 检查的位置 |
|---|---|
| r1 | 1, 3, 5, 7, 9, 11 |
| r2 | 2, 3, 6, 7, 10, 11 |
| r4 | 4, 5, 6, 7 |
| r8 | 8, 9, 10, 11 |
5.2 为什么 r1、r2、r4 错,r8 对,就说明第 7 位出错?
接收方重新校验后,如果发现:
text
r1 错
r2 错
r4 错
r8 对
说明真正出错的那一位同时属于 r1、r2、r4 的检查范围,但不属于 r8 的检查范围。
于是错误位置为:
1 + 2 + 4 = 7 1+2+4=7 1+2+4=7
所以第 7 位出错。
注意:
r1 错不是说第 1 位一定错,而是 r1 负责检查的那一组校验不通过。
普通海明码默认只纠正 1 位错误。如果多位同时出错,普通海明码可能误判。
6. 奇偶校验、二维奇偶校验与 CRC
6.1 单个奇偶校验位
偶校验要求:数据加校验位之后,1 的个数为偶数。
它能检测奇数个 bit 错误,但不能检测偶数个 bit 错误。
例如两个 bit 同时翻转,奇偶性可能不变,接收方就发现不了。
6.2 二维奇偶校验
把数据排成矩阵,对每一行和每一列都加奇偶校验位。
如果只有一个 bit 出错:
text
某一行校验失败
某一列校验失败
行和列交叉的位置就是错误 bit。
所以二维奇偶校验可以纠正单比特错误。
6.3 CRC 循环冗余校验
CRC 是链路层最常见、最重要的检错方法之一。
核心思想:
发送方和接收方约定一个生成多项式 G。发送方用数据除以 G,把余数作为校验码贴在后面。接收方收到后再除以 G,如果余数不是 0,就认为出错。
设数据为 D D D,生成多项式对应的比特串为 G G G, G G G 的阶为 r r r。
发送方:
text
1. 在 D 后面补 r 个 0
2. 用 G 做模 2 除法
3. 得到 r 位余数 R
4. 发送 D + R
接收方:
text
1. 收到 D + R
2. 用同一个 G 做模 2 除法
3. 余数为 0:未检测到错误
4. 余数不为 0:检测到错误
CRC 的特点:
- 检测突发错误能力强。
- 硬件实现简单。
- 被以太网、WiFi 等广泛使用。
- 比普通 checksum 更适合链路层。
7. 多路访问:多人共用信道时谁先发?
如果一条链路只有两端,比如:
text
电脑 --- 交换机
问题比较简单。
但如果很多设备共享同一个介质,比如早期以太网、WiFi、卫星链路,就会有碰撞:
text
A 在发
B 也在发
信号撞在一起
接收方听不清
所以需要 MAC 协议,Multiple Access Control,多路访问控制协议。
MAC 协议分三大类:
| 类型 | 思想 | 代表 |
|---|---|---|
| 信道划分 | 提前把资源切开 | TDMA、FDMA |
| 随机访问 | 谁有数据谁尝试发,撞了再恢复 | ALOHA、时隙 ALOHA、CSMA、CSMA/CD |
| 轮流访问 | 大家按顺序来 | Polling、Token Passing |
8. 信道划分:TDMA 与 FDMA
8.1 TDMA
TDMA 按时间分信道。
text
时隙 1 给 A
时隙 2 给 B
时隙 3 给 C
优点:不会碰撞。
缺点:如果 B 没数据,它的时隙也浪费了。
8.2 FDMA
FDMA 按频率分信道。
text
A 用频段 1
B 用频段 2
C 用频段 3
优点:不会碰撞。
缺点:如果某个用户没数据,它占的频段也闲置。
9. 随机访问:ALOHA、时隙 ALOHA、CSMA
9.1 纯 ALOHA
纯 ALOHA 的规则很粗暴:
有数据就直接发,撞了就等随机时间后重发。
如果一个帧的发送时间是 T T T,A 在 t 0 t_0 t0 开始发送,那么其他节点只要在下面这个范围内开始发送,就会和 A 碰撞:
t 0 − T , t 0 + T \] \[t_0-T,\\ t_0+T\] \[t0−T, t0+T
所以纯 ALOHA 的易碰撞时间是:
2 T 2T 2T
最大效率约为:
1 2 e ≈ 18.4 % \frac{1}{2e}\approx 18.4\% 2e1≈18.4%
9.2 时隙 ALOHA
时隙 ALOHA 要求所有节点只能在时隙开头发送。
一个时隙里:
text
0 个节点发送 → 空闲
1 个节点发送 → 成功
2 个或以上节点发送 → 碰撞
假设有 N N N 个节点,每个节点在某时隙发送的概率是 p p p。
一个时隙成功的概率是:
η ( p ) = N p ( 1 − p ) N − 1 \eta(p)=Np(1-p)^{N-1} η(p)=Np(1−p)N−1
当:
p = 1 N p=\frac{1}{N} p=N1
效率最大:
η max → 1 e ≈ 36.8 % \eta_{\max}\to \frac{1}{e}\approx 36.8\% ηmax→e1≈36.8%
所以时隙 ALOHA 最大效率约为 37%。
9.3 为什么时隙 ALOHA 比纯 ALOHA 碰撞时间少一半?
纯 ALOHA 中,别人可以在任意时间开始发。别人早一点发会撞你,晚一点发也会撞你。
所以危险窗口是:
2 T 2T 2T
时隙 ALOHA 中,所有节点只能在时隙开头发。别人不会在你发到一半时突然插进来。
所以危险窗口只剩当前时隙:
T T T
因此,时隙 ALOHA 的碰撞窗口比纯 ALOHA 少一半。
9.4 吞吐量和发送概率不是一回事
发送概率表示:
text
我尝试发送的概率
吞吐量表示:
text
我成功发送的平均数量
两个节点 A、B 中:
S A = p A ( 1 − p B ) S_A=p_A(1-p_B) SA=pA(1−pB)
S B = p B ( 1 − p A ) S_B=p_B(1-p_A) SB=pB(1−pA)
因为 A 成功不仅要求 A 发送,还要求 B 不发送。
所以:
发送概率高不等于吞吐量一定高。发了但撞了,也不算成功吞吐量。
10. CSMA/CD:经典以太网的碰撞检测
10.1 CSMA:先听再说
CSMA 的思想像人类聊天:
说话前先听听别人是不是正在说。
如果信道空闲,就发送。
如果信道忙,就等待。
但由于传播时延存在,CSMA 仍然可能碰撞。
10.2 CSMA/CD:边发边听,撞了就停
CSMA/CD 是经典共享以太网使用的协议。
流程:
text
1. 发送前监听信道
2. 信道空闲则发送
3. 发送过程中继续监听
4. 如果检测到碰撞,立即停止发送
5. 发送 jam signal
6. 随机退避后重发
退避采用二进制指数退避:
碰撞次数越多,等待范围越大。
10.3 为什么以太网有最小帧长?
CSMA/CD 要求:发送方必须在自己还没发完帧之前,就能检测到最远端的碰撞。
设单程传播时延为 τ \tau τ。
最坏情况下,碰撞信号返回发送方需要:
2 τ 2\tau 2τ
帧的发送时间是:
帧长 速率 \frac{\text{帧长}}{\text{速率}} 速率帧长
其中:
text
帧长 / 速率 = 发送完整个帧所需时间,也叫传输时延。
为了检测碰撞,需要:
帧长 速率 ≥ 2 τ \frac{\text{帧长}}{\text{速率}} \ge 2\tau 速率帧长≥2τ
也就是:
最小帧长 ≥ 2 τ × 速率 \text{最小帧长} \ge 2\tau \times \text{速率} 最小帧长≥2τ×速率
11. 轮流访问:Polling 与 Token Passing
11.1 Polling 轮询
一个中心节点挨个问:
text
A,你要发吗?
B,你要发吗?
C,你要发吗?
优点:不会碰撞。
缺点:中心节点可能成为单点故障,轮询也有额外开销。
11.2 Token Passing 令牌传递
网络里有一个 token,谁拿到 token 谁能发。
优点:没有中心控制器。
缺点:token 丢失、节点故障都会造成麻烦。
12. MAC 地址:局域网里的硬件地址
MAC 地址通常是 48 位,写成 6 组十六进制数:
text
AA:BB:CC:DD:EE:FF
也可以写成:
text
AA-BB-CC-DD-EE-FF
课程作业里通常用冒号或短横线都可以。
12.1 MAC 地址写法要求
- 一共 6 组。
- 每组 2 位十六进制。
- 十六进制字符只能是 0-9、A-F。
- 不同接口不能重复。
- 不要把
FF:FF:FF:FF:FF:FF分配给普通主机,因为它是广播地址。 - MAC 地址没有
/24,/24是 IP 地址的子网掩码写法。
合法例子:
text
AA:AA:AA:AA:AA:AA
12:34:56:78:9A:BC
00:1A:2B:3C:4D:5E
非法例子:
text
GG:GG:GG:GG:GG:GG // G 不是十六进制
AA:BB:CC // 只有 3 组,不够 6 组
192.168.1.1 // 这是 IP 地址,不是 MAC 地址
AA:BB:CC:DD:EE:FF/24 // MAC 地址不能写 /24
13. IP 地址和 MAC 地址的区别
| 对比 | IP 地址 | MAC 地址 |
|---|---|---|
| 层次 | 网络层 | 链路层 |
| 作用范围 | 跨网络、端到端 | 本地局域网、当前一跳 |
| 是否随网络变化 | 会变 | 通常不变 |
| 用途 | 路由选择 | 局域网内帧交付 |
| 例子 | 192.168.1.1 | AA:BB:CC:DD:EE:FF |
一句话:
IP 地址负责最终目的地,MAC 地址负责当前这一跳。
14. ARP:知道 IP,怎么找到 MAC?
ARP 解决的问题是:
已知本地 IP 地址,如何得到对应 MAC 地址?
14.1 同一子网内通信
A 和 B 在同一子网,A 想给 B 发数据。
A 广播 ARP 请求:
text
谁是 192.168.1.2?请告诉 192.168.1.1。
B 单播回复:
text
我是 192.168.1.2,我的 MAC 是 BB:BB:BB:BB:BB:BB。
A 把映射写入 ARP 表:
text
192.168.1.2 → BB:BB:BB:BB:BB:BB
14.2 不同子网之间通信
如果 E 要发给 B,但 B 不在 E 的子网里,E 不会 ARP 查询 B 的 MAC。
原因是:ARP 广播只在本地局域网里传播,跨不过路由器。
此时 E 会 ARP 查询默认网关的 MAC:
text
谁是 192.168.3.254?
然后把数据先交给默认网关。
口诀:
text
同子网:ARP 查询目标主机 MAC。
不同子网:ARP 查询默认网关 MAC。
15. 以太网 Ethernet
以太网是最常见的局域网技术。
以太网帧大致包含:
text
Preamble | Destination MAC | Source MAC | Type | Data | CRC
| 字段 | 作用 |
|---|---|
| Preamble | 前导码,用于同步 |
| Destination MAC | 目的 MAC |
| Source MAC | 源 MAC |
| Type | 指明上层协议,如 IP、ARP |
| Data | 承载的数据,通常是 IP 数据报 |
| CRC | 差错检测 |
以太网通常不保证可靠传输。检测到坏帧后一般直接丢弃,可靠性主要交给 TCP 等上层协议。
16. 交换机和路由器的区别
16.1 一句话区分
text
交换机:看 MAC 地址,转发以太网帧。
路由器:看 IP 地址,转发 IP 数据报。
| 对比 | 交换机 | 路由器 |
|---|---|---|
| 工作层次 | 链路层,第 2 层 | 网络层,第 3 层 |
| 看什么地址 | MAC 地址 | IP 地址 |
| 数据单位 | Frame,帧 | IP Datagram,IP 数据报 |
| 连接范围 | 同一局域网内部 | 不同子网之间 |
| 是否隔离广播域 | 默认不隔离 | 隔离 |
16.2 交换机怎么转发?
交换机靠自学习建立转发表:
text
MAC 地址 → 端口
收到帧后:
text
1. 看源 MAC,学习这个 MAC 在哪个端口。
2. 看目的 MAC。
3. 如果目的 MAC 已知,只转发到对应端口。
4. 如果目的 MAC 未知,泛洪到其他端口。
5. 如果目的 MAC 是广播地址,也泛洪。
16.3 广播为什么仍然需要交换机?
广播不是凭空扩散。
如果 A 和 B 都插在交换机上:
text
A → 交换机 → B
A 发 ARP 广播时,广播帧先到交换机。交换机再把它泛洪到其他端口,B 才能收到。
所以:
广播仍然需要交换机参与,只是交换机做的是二层泛洪,不是三层路由。
16.4 路由器转发时 IP 和 MAC 怎么变化?
假设 E 要发给 B,中间经过路由器。
IP 地址表示端到端通信,通常不变:
text
源 IP = E
目的 IP = B
MAC 地址只负责当前这一跳,所以每一跳都会变:
text
第一跳:E MAC → 路由器右接口 MAC
第二跳:路由器左接口 MAC → B MAC
路由器每转发一跳都会:
text
拆掉旧链路层帧头
查看 IP 目的地址
重新封装新的链路层帧头
17. VLAN:一个物理交换机切成多个逻辑局域网
VLAN 是 Virtual LAN,虚拟局域网。
假设一个交换机上连接两个部门:
text
端口 1-8:计算机系
端口 9-16:电子系
如果不用 VLAN,它们都在同一个广播域。
用了 VLAN 后:
text
端口 1-8 属于 VLAN 10
端口 9-16 属于 VLAN 20
效果是:
一个物理交换机被切成多个逻辑交换机。
不同 VLAN 之间通信需要路由器或三层交换功能。
17.1 Trunk 与 802.1Q
如果 VLAN 跨多个交换机,需要 trunk 链路。
trunk 链路上的帧必须携带 VLAN ID,告诉对端这个帧属于哪个 VLAN。
802.1Q 就是在以太网帧中插入 VLAN tag。
这个 tag 中包含:
text
VLAN ID
优先级字段
Tag Protocol Identifier
18. EVPN/VXLAN:把二层网络拉长
普通 VLAN 通常用于一个局域网或数据中心内部。
但在云计算、数据中心互联场景中,可能需要把不同地点的二层网络逻辑上连起来。
VXLAN/EVPN 的思路是:
text
把 Ethernet frame 装进 IP datagram 里面
也就是:
text
Ethernet frame 外面再套一层 IP
这样就能在三层网络上"模拟"一个二层网络。
19. MPLS:用标签转发
普通 IP 路由器转发时,要看目的 IP 地址,做最长前缀匹配。
MPLS 的思路是:
给数据包贴一个固定长度标签,后面的设备只看标签转发。
普通 IP 转发:
text
看目的 IP → 查路由表 → 找下一跳
MPLS 转发:
text
看 label → 查标签表 → 换 label / 转发
MPLS 的好处:
- 标签固定长度,查找快。
- 支持流量工程。
- 可以让到同一目的地的不同流走不同路径。
- 可以预先计算备份路径,实现快速重路由。
人话比喻:
IP 路由像看完整地址找路;MPLS 像进入高速公路后看路牌编号走专用车道。
20. 数据中心网络
数据中心里有大量服务器,结构通常类似:
text
服务器 → ToR 交换机 → 汇聚交换机 → 核心交换机 → 边界路由器
数据中心网络要解决的问题包括:
- 主机数量巨大。
- 东西向流量很多。
- 不能有单点故障。
- 需要高带宽、低延迟。
- 需要负载均衡。
- 需要快速故障恢复。
常见技术包括:
text
多层交换结构
负载均衡器
SDN 控制
ECN
DCTCP
RDMA/RoCE
Clos / Fat-tree 架构
数据中心网络的重点不是"会不会连通",而是:
text
能不能低延迟、高吞吐、可扩展、可故障恢复地连通。
21. 一次 Web 请求如何串起第六讲?
假设你打开浏览器访问:
text
www.google.com
整个过程大致如下。
21.1 DHCP 获取网络配置
电脑刚接入网络,不知道自己的 IP、默认网关、DNS 服务器。
它会发送 DHCP 请求,获得:
text
自己的 IP 地址
默认网关地址
DNS 服务器地址
子网掩码
DHCP 请求本身会被封装:
text
DHCP → UDP → IP → Ethernet → Physical
因为一开始还不知道服务器在哪里,所以常用广播发送。
21.2 ARP 获取默认网关 MAC
访问外网时,目标服务器不在本地子网。
电脑需要先把数据交给默认网关,所以要 ARP 查询默认网关的 MAC 地址。
21.3 DNS 查询域名对应 IP
浏览器要先知道:
text
www.google.com 对应哪个 IP?
所以电脑向 DNS 服务器发送 DNS 查询。
21.4 TCP 三次握手
知道服务器 IP 后,浏览器与服务器建立 TCP 连接:
text
SYN
SYN-ACK
ACK
21.5 HTTP 请求与响应
TCP 连接建立后,浏览器发送 HTTP 请求:
text
GET / ...
服务器返回 HTTP 响应,浏览器显示网页。
这个过程串起了很多层:
text
HTTP → TCP → IP → Ethernet → Physical
第六讲重点在于:
text
每一次本地链路传输都要封装成帧。
ARP 帮你找到本地下一跳的 MAC。
交换机在局域网内转发帧。
路由器跨子网转发 IP 数据报。
22. 作业重点回顾
22.1 时隙 ALOHA 最大效率
成功概率:
η ( p ) = N p ( 1 − p ) N − 1 \eta(p)=Np(1-p)^{N-1} η(p)=Np(1−p)N−1
最大时:
p = 1 N p=\frac{1}{N} p=N1
最大效率:
η max = 1 e ≈ 36.8 % \eta_{\max}=\frac{1}{e}\approx 36.8\% ηmax=e1≈36.8%
22.2 纯 ALOHA 最大效率
纯 ALOHA 的碰撞窗口是时隙 ALOHA 的 2 倍,所以最大效率为:
1 2 e ≈ 18.4 % \frac{1}{2e}\approx 18.4\% 2e1≈18.4%
22.3 两节点时隙 ALOHA 吞吐量
A 的发送概率为 p A p_A pA,B 的发送概率为 p B p_B pB。
A 成功:A 发送且 B 不发送。
S A = p A ( 1 − p B ) S_A=p_A(1-p_B) SA=pA(1−pB)
B 成功:B 发送且 A 不发送。
S B = p B ( 1 − p A ) S_B=p_B(1-p_A) SB=pB(1−pA)
总吞吐量:
S = p A ( 1 − p B ) + p B ( 1 − p A ) S=p_A(1-p_B)+p_B(1-p_A) S=pA(1−pB)+pB(1−pA)
发送概率不是吞吐量。吞吐量是成功发送的平均数量。
22.4 不同子网通信时 ARP 查询谁?
text
同子网:ARP 查询目标主机 MAC。
不同子网:ARP 查询默认网关 MAC。
22.5 交换机替换路由器后发生了什么?
路由器隔离广播域,交换机不隔离广播域。
所以如果把某个路由器换成交换机,原本分开的两个二层网络可能变成同一个广播域。
但广播仍需要交换机参与:
text
A 发广播帧 → 交换机收到 → 交换机泛洪 → B 收到
23. 小测题与答案
题 1:链路层的数据单位叫什么?
A. Segment
B. Datagram
C. Frame
D. Message
答案:C。 链路层的数据单位是 frame,帧。
题 2:链路层主要负责什么范围内的数据传输?
A. 应用到应用
B. 进程到进程
C. 相邻节点之间
D. 全球网络之间
答案:C。 链路层负责相邻节点之间的一跳传输。
题 3:MAC 地址通常是多少位?
A. 16 位
B. 32 位
C. 48 位
D. 64 位
答案:C。 常见 MAC 地址是 48 位。
题 4:下面哪个是合法 MAC 地址?
A. 192.168.1.1
B. AA:BB:CC:DD:EE:FF
C. GG:11:22:33:44:55
D. AA:BB:CC
答案:B。 MAC 地址是 6 组十六进制数。
题 5:FF:FF:FF:FF:FF:FF 表示什么?
答案:广播 MAC 地址。
题 6:ARP 的作用是什么?
答案:已知本地 IP 地址,查询对应 MAC 地址。
题 7:A 和 B 不在同一个子网,A 要发给 B,A 会 ARP 查询谁?
答案:默认网关的 MAC 地址,而不是 B 的 MAC 地址。
题 8:交换机根据什么地址转发?
答案:MAC 地址。
题 9:路由器根据什么地址转发?
答案:IP 地址。
题 10:跨路由器通信时,IP 地址和 MAC 地址如何变化?
答案:IP 源/目的地址通常端到端不变;MAC 源/目的地址每一跳都会变化。
题 11:时隙 ALOHA 的最大效率是多少?
答案:
1 e ≈ 36.8 % \frac{1}{e}\approx 36.8\% e1≈36.8%
题 12:纯 ALOHA 的最大效率是多少?
答案:
1 2 e ≈ 18.4 % \frac{1}{2e}\approx 18.4\% 2e1≈18.4%
题 13:为什么纯 ALOHA 效率比时隙 ALOHA 低?
答案: 纯 ALOHA 可以在任意时间发送,碰撞窗口是 2 T 2T 2T;时隙 ALOHA 只能在时隙开头发送,碰撞窗口是 T T T。因此纯 ALOHA 更容易碰撞。
题 14:两个节点 A、B,A 的发送概率为 p A p_A pA,B 的发送概率为 p B p_B pB,A 的吞吐量是多少?
答案:
S A = p A ( 1 − p B ) S_A=p_A(1-p_B) SA=pA(1−pB)
题 15:发送概率和吞吐量是一回事吗?
答案:不是。 发送概率表示尝试发送;吞吐量表示成功发送的平均数量。发送了但撞了,不算成功吞吐量。
题 16:CSMA/CD 中为什么有最小帧长?
答案: 因为发送方必须在发送完最短帧之前检测到最远端的碰撞。要求:
帧长 速率 ≥ 2 τ \frac{\text{帧长}}{\text{速率}} \ge 2\tau 速率帧长≥2τ
题 17:海明码中 r1、r2、r4、r8 是什么?
答案: 它们是校验位,用于帮助定位出错 bit 的位置。
题 18:海明码校验发现 r1、r2、r4 错,r8 对,哪一位出错?
答案:
1 + 2 + 4 = 7 1+2+4=7 1+2+4=7
所以第 7 位出错。
题 19:VLAN 的作用是什么?
答案: 把一个物理局域网划分成多个逻辑局域网,实现广播域隔离和管理隔离。
题 20:交换机会转发广播帧吗?
答案:会。 交换机会把广播帧泛洪到同一 VLAN 中除入端口外的其他端口。
24. 常见 QA
Q1:r1 错是不是说明第 1 位一定错?
不是。r1 错表示 r1 负责检查的那一组校验不通过,不代表第 1 位本身一定错。
Q2:为什么 r1、r2、r4 都错不是第 3 位和第 6 位也错?
普通海明码默认只纠正 1 位错误。每个出错位置都有唯一报警组合。
text
第 3 位出错 → r1、r2 报警
第 6 位出错 → r2、r4 报警
第 7 位出错 → r1、r2、r4 报警
所以 r1、r2、r4 同时报警,对应第 7 位出错。
Q3:吞吐量和概率是一回事吗?
严格来说不是。
吞吐量是单位时间成功传输的数据量;概率是事件发生的可能性。
但在时隙 ALOHA 题中,一个时隙最多成功传 1 帧,所以"成功概率"可以理解为"归一化吞吐量"。
Q4:重传概率和发送概率是一回事吗?
不完全是。
重传概率通常指碰撞失败后,在后续时隙再次尝试发送的概率。发送概率是某个时隙尝试发送的概率。
在 ALOHA 简化模型中,它们常常都用 p p p 表示,因为最终关心的是该节点在这个时隙是否尝试发送。
Q5:为什么广播还需要交换机?
广播不是凭空扩散。A 的网线连接到交换机,广播帧必须先到交换机,再由交换机泛洪到其他端口。
所以:
text
A → 交换机 → B
广播仍然需要交换机参与。
Q6:交换机会改 MAC 地址吗?
一般不会。交换机只是根据目的 MAC 转发帧,不会重新封装链路层头部。
Q7:路由器会改 MAC 地址吗?
会。路由器每转发一跳都会拆掉旧链路层帧,再重新封装新的链路层帧,所以 MAC 地址每一跳都会变。
Q8:同一个路由器为什么有多个 MAC?
因为路由器有多个接口,每个接口都像一块网卡。每个接口都有自己的 IP 地址和 MAC 地址。
Q9:交换机和 Hub 有什么区别?
Hub 收到帧后无脑转发到所有端口;交换机会学习 MAC 地址,并尽量只转发到目标端口。
Q10:VLAN 和子网是一回事吗?
不是。
VLAN 是二层概念,用来划分广播域。
子网是三层 IP 概念,用来划分 IP 网络。
实际部署中,通常一个 VLAN 对应一个 IP 子网,但二者不是同一个概念。
25. 拓展理解
25.1 为什么现代以太网基本不用 CSMA/CD?
经典以太网使用共享总线,多台设备可能同时发送,所以需要 CSMA/CD。
现代以太网大多是交换式全双工:
text
每个主机单独连接交换机端口
发送和接收可以同时进行
没有共享冲突域
因此基本不再需要 CSMA/CD。
不过最小帧长、碰撞检测、传播时延这些思想仍然非常重要。
25.2 为什么 WiFi 用 CSMA/CA,而不是 CSMA/CD?
有线以太网可以一边发送一边监听碰撞。
WiFi 很难做到碰撞检测,原因包括:
- 自己发送信号太强,难以同时听到别人的弱信号。
- 存在隐藏终端问题。
- 无线信号衰减和干扰复杂。
所以 WiFi 使用 CSMA/CA:
text
Collision Avoidance,尽量避免碰撞
而不是碰撞后再检测。
25.3 CRC 和 checksum 有什么区别?
checksum 常用于网络层/传输层,例如 IP、UDP、TCP。
CRC 常用于链路层,例如以太网、WiFi。
CRC 对突发错误的检测能力更强,也更适合硬件实现。
25.4 为什么要有 VLAN?
如果一个大型交换网络里所有人都在同一个广播域,那么 ARP 广播、未知目的 MAC 泛洪等流量会影响所有人。
VLAN 可以把一个大广播域切成多个小广播域,提高隔离性、安全性和管理性。
25.5 数据中心为什么特别强调链路层技术?
数据中心内部服务器之间通信非常频繁,东西向流量巨大。
这要求链路层和交换网络提供:
text
高带宽
低延迟
多路径
快速故障恢复
精细拥塞控制
所以数据中心网络中会大量用到交换机、VLAN/VXLAN、ECN、RDMA/RoCE、负载均衡等技术。
26. 期末复习抓手
复习第六讲时,可以按下面这条线走:
text
链路层负责一跳
↓
一跳传输单位是帧
↓
帧需要成帧和检错
↓
多人共享链路需要 MAC 协议
↓
局域网内用 MAC 地址交付
↓
ARP 负责 IP 到 MAC 的解析
↓
交换机根据 MAC 地址转发帧
↓
路由器根据 IP 地址跨子网转发
↓
VLAN/MPLS/数据中心网络是更大规模下的扩展
最重要的五句话:
- 链路层负责相邻节点之间的一跳传输。
- 链路层传输单位是 frame,帧。
- CRC 是链路层最常用的检错方法。
- MAC 地址负责本地一跳,IP 地址负责端到端路径。
- 交换机看 MAC,路由器看 IP。
27. 最后总结
第六讲看起来知识点很多,但本质上都围绕一个问题:
IP 数据报已经知道下一跳是谁了,那它怎么在本地链路上真正送过去?
于是我们需要:
text
帧:承载 IP 数据报
成帧:确定帧边界
CRC/海明码:发现或纠正传输错误
MAC 协议:解决多人共享信道时谁先发
MAC 地址:标识本地网卡
ARP:把本地 IP 映射到 MAC
以太网:最常见的局域网技术
交换机:根据 MAC 地址转发帧
VLAN/MPLS/数据中心网络:在更大规模下组织链路层通信
掌握这条主线,第六讲就不再是零散知识点,而是一整套"本地一跳如何可靠、高效交付"的机制。