一、四种时延

一个分组从一台路由器到下一台路由器,会经历四种时延。任何网络性能题的第一步,都是把这四项分清楚。

        ┌──────────────── 路由器 A ────────────────┐
分组到达 →│ [1.处理] → [2.排队 …队列…] → [3.传输] │ →→→ [4.传播] →→→ 路由器 B
        └──────────────────────────────────────────┘

1️⃣ 节点处理时延 d_proc

检查分组头部、校验比特差错、决定输出端口所花的时间。

  • 典型值:微秒级或更低
  • 现代路由器由专用硬件完成,通常可忽略

2️⃣ 排队时延 d_queue

分组在输出队列里等待前面的分组被发送完的时间。

  • 典型值:微秒到毫秒,且方差极大
  • 这是四项中唯一随网络负载变化的一项
  • 它是本讲的重点,第三节详讲

3️⃣ 传输时延 d_trans

把分组的所有比特推到链路上所需的时间。

d_trans = L / R
  L = 分组长度(bit)
  R = 链路带宽(bps)
  • 链路速率分组长度有关
  • 与距离完全无关

4️⃣ 传播时延 d_prop

一个比特从链路这一端走到另一端所需的时间。

d_prop = d / s
  d = 链路物理长度(m)
  s = 信号传播速度(≈ 2×10⁸ m/s,约 2/3 光速)
  • 距离有关
  • 与链路速率、分组长度完全无关

⭐ 传输 vs 传播:全课最容易混的一对

这个区分每年都有大量学生在期中考试上丢分。

传输时延 d_trans 传播时延 d_prop
物理含义 把比特推出去要多久 比特在路上多久
决定因素 L 和 R d 和 s
加宽带宽会怎样 变小 不变
拉长距离会怎样 不变 变大
类比 收费站放行一队车要多久 一辆车开完这段高速要多久

收费站类比(KR 教材的经典比喻):一个车队 10 辆车,收费站每辆车放行 12 秒,两个收费站相隔 100 km,车速 100 km/h。

  • 「传输时延」= 收费站放完 10 辆车 = 120 秒
  • 「传播时延」= 一辆车开 100 km = 1 小时

📌 记忆锚点:**带宽决定「快不快」,距离决定「远不远」。加带宽治不了远。**从北京到纽约的单向传播时延约 60 ms,你把带宽提到 1 Tbps 也还是 60 ms。

节点总时延

d_node = d_proc + d_queue + d_trans + d_prop

二、排队时延与流量强度

排队时延是唯一「有脾气」的一项。它的行为不是线性的,而是在某个点突然爆炸

2.1 流量强度(Traffic Intensity)

定义三个量:

  • R = 链路带宽(bps)
  • L = 分组长度(bit)
  • a = 分组平均到达速率(分组/秒)

那么比特到达速率 = L·a,而链路的比特服务速率 = R。二者之比称为流量强度

流量强度 = L·a / R

2.2 三种情形

流量强度 会发生什么
La/R ≈ 0 到达很稀疏,几乎不排队,平均排队时延 ≈ 0
La/R → 1 到达速率逼近服务速率,排队时延急剧上升
La/R > 1 到达超过服务能力,队列无限增长 → 缓冲区溢出 → 丢包
平均排队时延
    ↑
    │                            │
    │                           ╱│
    │                        ╱   │
    │                    ╱       │
    │              ╱             │
    │      ╱                     │
    │ ────                       │
    └────────────────────────────┴──→ La/R
    0        0.5        0.8    1.0

2.3 这条曲线的工程含义

⚠️ **它不是线性的。**在 La/R = 0.5 时排队时延很小,到 0.9 时已经很大,到 0.95 时可能是 0.9 时的好几倍。

对 M/M/1 排队模型(到达为泊松过程,服务时间指数分布),平均排队时延有闭式解:

E[排队时延] = ρ / (μ(1−ρ))      其中 ρ = La/R 为利用率

分母里的 (1−ρ) 就是那条渐近线。ρ 从 0.9 到 0.99,(1−ρ) 从 0.1 变成 0.01,时延放大 10 倍

📌 实际工程结论:运营商通常把骨干链路利用率控制在 50%–70%。这不是浪费——是为突发留出余量。把利用率推到 95% 会让时延和抖动变得不可接受。

🎯 这条曲线解释了后面很多事:为什么 TCP 要主动降速(第 15 讲)、为什么大缓冲区反而有害(bufferbloat,第 16 讲)、为什么数据中心网络追求低利用率。


三、端到端时延与 traceroute

3.1 端到端时延公式

N−1 台路由器、N 条链路的路径上:

d_端到端 = N × (d_proc + d_trans + d_prop + d_queue)

(若各跳参数不同,则逐跳累加。)

3.2 traceroute 的原理

traceroute(Windows 上叫 tracert)能测出到目的地路径上每一跳的时延。它的实现极其巧妙:

向目的地发送 TTL = 1, 2, 3, … 的探测分组。TTL 归零时,那台路由器会回送一个 ICMP「超时」报文。收到它,就知道了第 n 跳是谁、往返用了多久。

每个 TTL 发 3 个探测包,所以输出里每行有三个时间。

$ traceroute www.example.com
 1  192.168.1.1        1.234 ms   1.102 ms   1.089 ms   ← 家里的路由器
 2  10.20.0.1         11.4  ms   9.8   ms  10.2   ms   ← ISP 接入
 3  * * *                                              ← 该路由器不回 ICMP
 4  72.14.234.1       24.7  ms  25.1  ms  24.3  ms
...

* * * 不代表丢包或故障,通常只是那台路由器被配置为不响应或对 ICMP 限速。这是学生最常见的误读。

(ICMP 的完整机制在第 22 讲。)

3.3 端系统内部的时延

课程讨论的时延还有一部分在主机里,容易被忘:

  • 接入共享介质的时延:WiFi 要等信道空闲(第 25 讲的 CSMA/CA)
  • 发送方缓存时延:TCP 因为拥塞控制或流量控制而不能立刻发(第 14、16 讲)

四、丢包

前面说过,队列容量有限。队列满时到达的分组被丢弃。

丢包之后会发生什么,取决于上层:

上层协议 丢包后
UDP 什么都不做,数据永久丢失
TCP 由前一跳节点或源端重传(第 13 讲)

📌 **性能度量应当同时看时延和丢包率。**只报时延的测量是不完整的:一条零丢包但排队严重的链路,和一条低时延但 5% 丢包的链路,对 TCP 应用来说后者往往更糟(因为丢包会触发拥塞控制降速)。


五、吞吐量(Throughput)

5.1 定义

吞吐量 = 单位时间内接收方收到的比特数(bps)。区分两种:

  • 瞬时吞吐量:某一时刻的速率(你下载时进度条旁边跳动的数字)
  • 平均吞吐量:传完 F 比特用了 T 秒,则平均吞吐量 = F/T

5.2 瓶颈链路

考虑一条经过多段链路的路径,各段速率为 R₁, R₂, …, Rₙ:

服务器 ──R₁──→ ──R₂──→ ──R₃──→ 客户端

端到端吞吐量 = min(R₁, R₂, …, Rₙ)

速率最小的那条链路叫瓶颈链路(bottleneck link)。

这是水管类比:一串粗细不同的水管串联,流量由最细的那一段决定。把其他段加粗毫无用处。

5.3 有竞争时的吞吐量

真实情况更复杂。设 10 个客户端同时从 10 台服务器下载,共享一条中间的骨干链路 R:

每个连接的吞吐量 = min(R_接入, R_服务器, R/10)

📌 实际观察:家庭宽带用户的瓶颈绝大多数时候在接入链路(你家那条线),而不是在核心网。核心网通常是过度配置的。这也是为什么升级家庭宽带确实有效,而抱怨「互联网太慢」通常抱怨错了对象。

5.4 带宽时延积(Bandwidth-Delay Product)

这是本讲最重要的一个量,也是第 12–14 讲的基础。

BDP = 带宽 R × 往返时延 RTT      (单位:bit)

它的物理意义是:在任一时刻,这条「管道」里最多能容纳多少比特

想象一根水管:带宽是管子的粗细,RTT 是管子的长度,BDP 是管子的容积。

:跨太平洋链路,R = 1 Gbps,RTT = 150 ms

BDP = 1×10⁹ bps × 0.15 s = 1.5×10⁸ bit = 18.75 MB

⚠️ 这意味着什么:如果发送方采用「发一个包、等一个确认」的停等方式(第 11 讲的 rdt3.0),每 150 ms 只能发 1 个包(约 1500 字节)。实际吞吐量:

1500 B × 8 / 0.15 s = 80 kbps

在一条 1 Gbps 的链路上,只用到了 0.008%。

这就是为什么必须有流水线滑动窗口——发送方必须始终保持「在途」数据量接近 BDP,才能填满管道。第 12 讲会把这一点变成公式,第 14 讲会看到 TCP 的接收窗口字段只有 16 位(最大 64 KB),在高 BDP 链路上不够用,因此需要窗口缩放选项

🎯 把这句话背下来要跑满一条链路,在途数据量必须 ≥ 带宽时延积。


六、例题(Worked Example)

题目:主机 A 通过两条链路向主机 B 发送一个 1 MB(= 8×10⁶ bit)的文件,中间有一台路由器 R。

  • 链路 A→R:速率 10 Mbps,长度 200 km
  • 链路 R→B:速率 100 Mbps,长度 20 km
  • 信号传播速度 2×10⁸ m/s,分组大小 10,000 bit,处理与排队时延忽略

求:(a) 每条链路的传播时延;(b) 端到端吞吐量;(c) 传完整个文件的总时间。

解答

(a) 传播时延与速率无关:

d_prop(A→R) = 200,000 m ÷ 2×10⁸ m/s = 1 ms
d_prop(R→B) =  20,000 m ÷ 2×10⁸ m/s = 0.1 ms
总传播时延 = 1.1 ms

(b) 端到端吞吐量 = min(10 Mbps, 100 Mbps) = 10 Mbps,瓶颈在第一条链路。

(c) 分组数 P = 8×10⁶ ÷ 10⁴ = 800 个

第一跳传输时延 L/R₁ = 10⁴ / 10⁷ = 1 ms;第二跳 L/R₂ = 10⁴ / 10⁸ = 0.1 ms。

由于第二跳更快,它永远不是瓶颈,整个流水线的节奏由第一跳的 1 ms 决定:

最后一个分组离开 A 的时刻   = 800 × 1 ms = 800 ms
它再经过 1 ms 传播 + 0.1 ms 传输 + 0.1 ms 传播
总时间 ≈ 800 + 1 + 0.1 + 0.1 = 801.2 ms

验证:8×10⁶ bit ÷ 10 Mbps = 800 ms,加上一点点管道填充时间,与瓶颈链路的估算完全一致 ✅。

📌 这个验证方法很有用:大文件传输的总时间 ≈ 文件大小 ÷ 瓶颈带宽 + 一个 RTT 量级的修正项。考试时可以用它检查答案是否离谱。


七、随堂自测

  1. 把一条链路的带宽从 100 Mbps 提升到 1 Gbps,四种时延分别怎么变?
  2. 某链路 R = 2 Mbps,分组长 2000 bit,平均到达率 a = 800 分组/秒。流量强度是多少?这条链路健康吗?如果到达率涨到 1000 分组/秒会怎样?
  3. traceroute 输出中某一跳显示 * * *,而后面的跳都正常,说明这一跳坏了吗?
  4. 一条 100 Mbps、RTT 20 ms 的链路,带宽时延积是多少字节?如果发送方的窗口只有 8 KB,能达到的最大吞吐量是多少?利用率多少?
  5. 「我的网速是 500 Mbps,但从这个网站下载只有 2 MB/s。」给出三种可能的解释。

八、本讲要点回顾

  • 四种时延:处理、排队、传输、传播
  • 传输时延 = L/R(看带宽和包长)传播时延 = d/s(看距离)。二者永远不要混。
  • 排队时延随流量强度 La/R 非线性上升,逼近 1 时爆炸。工程上把利用率压在 50–70%。
  • 丢包发生在队列溢出时。
  • 端到端吞吐量 = 瓶颈链路速率
  • 带宽时延积 = R × RTT 是管道容量。在途数据量必须 ≥ BDP 才能跑满链路——这是整个滑动窗口机制存在的理由。

九、自测答案

1. 传输时延变为 1/10(L/R 中 R 变大 10 倍);传播时延完全不变(只与距离和介质有关);处理时延基本不变;排队时延减小(因为服务速率 R 提高,流量强度 La/R 下降)。

2. 流量强度 = L·a/R = 2000×800 / 2×10⁶ = 0.8。这条链路已经不太健康:0.8 处于排队时延曲线开始陡峭上升的区域,抖动会明显。若 a = 1000,则 La/R = 1.0,队列理论上无限增长,实际表现为持续丢包和极高时延——链路饱和。

3. **不能说明它坏了。**极大概率是这台路由器被配置为不回送 ICMP 超时报文,或对 ICMP 做了速率限制。判据很明确:如果后续跳数正常返回,说明分组确实穿过了这一跳——它只是不肯自报家门。

4. BDP = 100×10⁶ bps × 0.02 s = 2×10⁶ bit = 250,000 字节 ≈ 250 KB。窗口 8 KB 时,每 RTT 只能发 8 KB:吞吐量 = 8192×8 / 0.02 = 3.28 Mbps,利用率 = 3.28/100 ≈ 3.3%。这正是需要 TCP 窗口缩放选项的原因(第 14 讲)。

5.瓶颈不在你家:服务器上行带宽或路径中某段链路更窄;② 单位混淆:500 Mbps = 62.5 MB/s,2 MB/s = 16 Mbps,确实慢,但注意 b 与 B 差 8 倍;③ TCP 窗口受限:高 RTT 下单条连接受 BDP 限制(这也是下载工具用多连接的原因);④ 服务器端限速、CDN 节点较远、或路径存在丢包导致 TCP 拥塞窗口无法增长。