一、核心问题:数据怎么穿过网络
端系统之间隔着一张由路由器和链路构成的网。数据要从源穿到目的,有两种根本不同的做法。
| 电路交换 | 分组交换 | |
|---|---|---|
| 思路 | 先预留一条专用通路,再传数据 | 数据切块,每块自己找路 |
| 资源 | 独占,端到端预留 | 按需使用,不预留 |
| 代表 | 传统电话网 | 互联网 |
这一讲要回答的问题是:互联网为什么选了后者?
二、分组交换(Packet Switching)
2.1 基本机制
应用要发的报文(message)被切成一段一段的分组(packet)。每个分组独立地在网络中传输,每经过一台路由器,就被转发一次。
关键机制叫存储转发:
路由器必须收完整个分组的所有比特,才能开始向下一条链路转发它。
为什么必须这样?因为路由器要读取分组头部才知道往哪转,而且要校验分组是否完整——半个分组没法做这两件事。
2.2 存储转发的时延代价
设分组长度 L 比特,链路速率 R bps。发送一个分组到链路上需要的时间是:
传输时延 t_trans = L / R (单位:秒)
单跳:源发出分组要 L/R,路由器收完后再发出去又要 L/R。
时刻 0 L/R 2L/R
|———源发送———|
|——路由器发送——|
↑ 分组到达目的
N 跳(即 N 条链路,N−1 台路由器),传输一个分组的端到端时延(忽略传播、排队、处理):
d_端到端 = N × (L / R)
P 个分组、N 跳(这是考试重点):由于流水线效应,不是 P·N·L/R,而是:
d = (N + P − 1) × (L / R)
理解方式:第一个分组走完全程要 N·(L/R),之后每个分组紧跟着,每隔 L/R 就到一个。
💡 这个公式说明了一件重要的事:把大文件切成小分组,反而更快。因为切得越细,流水线的「填充」代价越小。这是分组交换相对于「整个文件当一个分组发」的优势。
2.3 排队时延与丢包:分组交换的必然产物
路由器的每条输出链路都有一个输出缓冲区(output buffer)。
┌──────────── 路由器 ────────────┐
入链路1 ─┤ │
入链路2 ─┤ [分组][分组][分组] ————————→ 出链路 R bps
入链路3 ─┤ ↑ 输出队列 │
└───────────────────────────────┘
- 如果分组到达速率(比特/秒)超过输出链路速率 R,分组就在队列里排队 → 排队时延
- 如果队列满了,新到达的分组被丢弃 → 丢包(packet loss)
⚠️ **这不是 bug。**分组交换的定义就是「不预留资源」,那么资源争用就必然存在,排队和丢包就是争用的表现形式。
整个第 11–16 讲(可靠传输与拥塞控制)存在的唯一理由,就是应对这里产生的丢包和排队。
三、电路交换(Circuit Switching)
在通信开始前,沿路径预留一条端到端的通路,通信期间独占,通信结束才释放。
打电话就是这样:拨号时建立电路,接通后无论你说不说话,那条电路一直是你的。
3.1 两种复用方式
一条物理链路要承载多条电路,靠复用(multiplexing):
FDM(频分复用) —— 把频谱切成若干频带,每条电路占一个频带,时间上连续。
频率
↑
│ ████████████████ ← 电路 4
│ ████████████████ ← 电路 3
│ ████████████████ ← 电路 2
│ ████████████████ ← 电路 1
└──────────────────→ 时间
TDM(时分复用) —— 把时间切成帧,每帧再切成时隙,每条电路固定占用每帧的某一个时隙,占用时用满整个带宽。
频率
↑
│ █1█│█2█│█3█│█4█│█1█│█2█│█3█│█4█
└──────────────────────────────→ 时间
← 一帧 →
3.2 电路交换的速率计算
例:一条链路 1 Gbps,采用 TDM,每帧 24 个时隙。那么每条电路的速率是 1 Gbps ÷ 24 ≈ 41.67 Mbps,且这个速率是恒定保证的。
3.3 电路交换的优点与致命弱点
✅ 优点:性能有保证。速率恒定、时延恒定、无排队、无丢包。这对语音通话是理想的。
❌ 致命弱点:空闲时资源被浪费。你打电话时不说话的那几秒,你的时隙照样空转,别人也用不了。
这就引出了下一节。
四、为什么互联网选了分组交换
4.1 数据流量是突发的(bursty)
语音流量是恒定的:一旦开始通话,就以 64 kbps 稳定产生数据。
数据流量完全不同。你打开一个网页:瞬间下载 2 MB,然后读三分钟,一个字节都不产生。这种模式叫突发(bursty)。
对突发流量做资源预留,等于按峰值付费、按均值使用——极度浪费。
4.2 统计复用的定量论证(经典例题)
这道题几乎是每一门美国网络课的第一道计算题,必须会。
设定:
- 一条 1 Mbps 的链路
- 每个用户活跃时占 100 kbps
- 每个用户只有 10% 的时间是活跃的
电路交换能支持多少用户?
必须为每个用户预留 100 kbps:
1 Mbps ÷ 100 kbps = 10 个用户 ← 上限,硬性的
第 11 个用户会被拒绝接入,哪怕此刻前 10 个人全都在发呆。
分组交换能支持多少?
不预留。只要同时活跃的人数 ≤ 10,链路就够用。
设有 35 个用户,每人独立地以 p = 0.1 的概率处于活跃状态。活跃人数 X 服从二项分布 B(35, 0.1),E[X] = 3.5。
链路过载的概率 = P(X ≥ 11):
P(X ≥ 11) = 1 − Σ(k=0..10) C(35,k) × 0.1^k × 0.9^(35−k) ≈ 0.0004
结论:分组交换可以服务 35 个用户,而链路过载的概率只有约 0.04%——三倍半的容量,代价是万分之四的时间里可能变慢。
🎯 这就是统计复用(statistical multiplexing):不为每个人预留,而是赌「大家不会同时用」。整个互联网的经济性建立在这个赌注上,并且这个赌注在绝大多数时间里是赢的。
4.3 分组交换的代价
天下没有免费的午餐:
| 分组交换的收益 | 分组交换的代价 |
|---|---|
| 资源利用率高得多 | 时延不可预测(排队) |
| 无需建立连接,简单 | 可能丢包 |
| 支持任意速率的突发 | 不适合硬实时(需要在上层补偿) |
⚠️ 一个必须澄清的误区:分组交换并非在所有场景下都更优。对于恒定速率、对时延抖动敏感的业务(传统电话、专线电路),电路交换在工程上是更合适的。互联网选择分组交换,是因为它要承载的是突发型数据流量。
今天的现实是折中的:核心网的光传输层(OTN/波分)本质上仍是电路交换思想,IP 层跑在它上面。第 22 讲讲 MPLS 时会看到这种「在分组网上模拟电路」的混合形态。
五、转发 vs 路由:全课最重要的一对术语
这两个词在中文里都能被说成「路由」,但它们指两件完全不同的事。期中考试一定考。
| 转发(Forwarding) | 路由(Routing) | |
|---|---|---|
| 做什么 | 把一个分组从输入端口移到正确的输出端口 | 决定分组从源到目的应该走哪条路径 |
| 范围 | 单台路由器内部的局部动作 | 全网范围的分布式计算 |
| 时间尺度 | 纳秒级,每个分组都做一次 | 秒到分钟级,网络变化时才重算 |
| 实现 | 查转发表,硬件完成 | 运行路由算法(Dijkstra / Bellman-Ford / BGP) |
| 类比 | 在一个路口按路牌右转 | 出发前规划整条路线 |
| 对应 | 数据平面(第 17–19 讲) | 控制平面(第 20–22 讲) |
一句话记住:
路由算法算出转发表,转发使用转发表。
课程后半段的结构完全按这条线划分:Unit 4 讲数据平面(怎么转发),Unit 5 讲控制平面(表怎么来的)。
六、例题(Worked Example)
题目:源主机要把一个 8 Mbit 的文件发给目的主机,中间经过 2 台路由器(即 3 条链路),每条链路速率均为 2 Mbps。忽略传播时延、处理时延与排队时延。
(a) 若整个文件作为一个分组发送,端到端时延是多少? (b) 若切成 4000 个分组,每个 2000 bit(忽略头部开销),端到端时延是多少? (c) 解释为什么 (b) 更快。 (d) 分组切得越小越好吗?
解答:
(a) N = 3 跳,L/R = 8 Mbit ÷ 2 Mbps = 4 s
d = N × (L/R) = 3 × 4 s = 12 s
(b) L/R = 2000 bit ÷ 2 Mbps = 1 ms,P = 4000,N = 3
d = (N + P − 1) × (L/R) = (3 + 4000 − 1) × 1 ms = 4.002 s
(c) 因为流水线。方案 (a) 中,每台路由器都必须干等 4 秒收完整个文件,三段完全串行。方案 (b) 中,第一个分组到达路由器 2 时,源主机早已在发第 300 个分组了——三条链路同时在工作。时延从 3×(文件时间) 降到约 1×(文件时间) + 2×(一个分组的时间)。
(d) **不是。**分组越小,头部开销占比越高。若头部 40 字节(320 bit):
- 分组 2000 bit:开销 320/2320 ≈ 13.8%
- 分组 200 bit:开销 320/520 ≈ 61.5% —— 六成的带宽在传头部
此外,每个分组都要消耗路由器一次处理与查表,分组数增加会加重路由器负担。实际的以太网 MTU 1500 字节,正是这个权衡的工程结果(第 23 讲会回到这个数字)。
七、随堂自测
- 为什么路由器必须采用存储转发,而不能收到一个比特就立刻转发一个比特?
- 排队时延和丢包,是分组交换的设计缺陷还是必然结果?请论证。
- 一条 10 Mbps 链路,用户活跃时占 200 kbps、活跃比例 5%。电路交换能支持多少用户?如果要求过载概率低于 0.1%,分组交换大约能支持多少(给出估算思路即可)?
- 有人说:「5G 网络切片给每个业务预留带宽,这是回到电路交换了。」这个说法有道理吗?
- 判断并说明理由:「转发表是每个分组到达时现算出来的。」
八、本讲要点回顾
- 存储转发:路由器必须收完整个分组才能转发。P 个分组 N 跳的时延是
(N+P−1)·L/R。 - 排队与丢包是分组交换的必然结果,不是缺陷——它们是「不预留资源」的代价。
- 电路交换性能有保证但空闲浪费;分组交换利用率高但时延不确定。
- 统计复用:赌用户不会同时活跃。1 Mbps 链路,10% 活跃度,电路交换 10 人,分组交换 35 人。
- 转发是单台路由器的纳秒级局部动作;路由是全网的秒级分布式计算。
九、自测答案
1. 两个原因:① 路由器必须读完分组头部才知道输出端口,而在链路层还要读完整个帧才能校验 CRC(第 23 讲);② 转发一个残缺分组毫无意义,反而浪费下游带宽。(补充:确实存在"直通交换" cut-through switching,在数据中心里用于降低时延,代价是可能转发坏帧——这说明存储转发是权衡而非物理必然。)
2. **必然结果。**分组交换的定义就是「不预先预留资源」。只要多条流可以独立地、不受协调地向同一条输出链路发送,就存在瞬时到达速率 > 链路速率的可能,那么要么排队,要么丢弃,没有第三种选择。唯一能消除它的办法是回到资源预留(即电路交换),但那样就失去了统计复用的收益。
3. 电路交换:10 Mbps ÷ 200 kbps = 50 个用户。分组交换:需要 P(X ≥ 51) < 0.001,X ~ B(n, 0.05)。E[X] = 0.05n,取 n = 500 时 E[X] = 25,标准差 √(500×0.05×0.95) ≈ 4.87,51 距均值约 5.3 个标准差,概率远小于 0.1%。取 n = 700 时 E[X]=35,σ≈5.77,51 约在 2.8σ 处,概率约 0.3%,偏大。因此答案大致在 550–650 用户区间,约为电路交换的 12 倍。
4. **有道理,而且这正是网络切片的设计意图。**5G 切片为 URLLC(超可靠低时延)等业务预留资源,牺牲统计复用换取确定性。这不是「倒退」,而是承认:**当业务确实需要硬保证(工业控制、远程手术)时,电路交换的思想仍然是对的。**互联网从来不是「分组交换战胜电路交换」,而是两种思想按业务需求分层共存。
5. 错误。转发表由控制平面的路由算法提前计算好并下发到路由器(时间尺度:秒到分钟)。分组到达时只做一次查表(纳秒级)。如果每个分组都要现算最短路径,路由器每秒要处理上亿个分组,完全不可能。