时延带宽积 · 往返时间 · 利用率#
计算机网络的性能指标 · 第三讲 视频讲解 https://www.bilibili.com/video/BV1zanb6iExi/
一句话#
前两讲讲的是「多快」和「多久」,这一讲讲的是链路这根管子有多长、跑一个来回有多久、塞得多满——以及塞满之后时延为什么会爆炸。
一、时延带宽积#
1.1 定义#
时延带宽积 = 传播时延 × 带宽
单位是比特。教材对它的解释最关键:
「链路可以看成是一个管道,管道的长度就是传播时延,管道的截面积就是带宽。因此,时延带宽积就表示管道中可以容纳多少个比特。」
所以时延带宽积还有个别名:以比特为单位的链路长度。
1.2 算例#
一条 1 Gbit/s 的链路,传播时延 5 ms:
时延带宽积 = 5 ms × 1 Gbit/s
= 5 × 10⁻³ s × 10⁹ bit/s
= 5 × 10⁶ bit
= 5 Mbit(≈ 625 KB)
这 5 兆比特意味着什么? 发送端把第一个比特发出去,等它跑到终点时,发送端已经发完 5 Mb 了——这些比特全部「在路上」,既不在起点,也还没到终点。
1.3 它回答什么问题#
| 问题 | 用什么指标 |
|---|---|
| 链路每秒能吐多少比特? | 带宽(bit/s) |
| 一个比特从这头到那头要多久? | 传播时延(s) |
| 链路上同时「装着」多少比特? | 时延带宽积(bit) |
这个量在工程上很实际:TCP 的窗口要开多大才能「填满」一条链路,答案就是时延带宽积。窗口小于它,链路就永远跑不满。
注意别和上一讲的「发送时延」混:时延带宽积用的是传播时延,不是发送时延。
二、往返时间 RTT#
2.1 定义#
RTT(Round-Trip Time):从发送方发送数据开始,到发送方收到来自接收方的确认,总共经历的时间。
RTT = 去程 + 回程 + 中间结点的处理、排队、转发时间
教材特别指出:在互联网中,RTT 不只包含两段传播时延,还包括沿途每个路由器的处理时延、排队时延和转发时的发送时延。用卫星链路时,RTT 会明显偏大。
2.2 一个必须纠正的误解#
很多教材和资料上写:
RTT ≈ 2 × 传播时延
这是近似,不是定义。 它成立的前提是:发送时延、处理时延、排队时延都可以忽略。
- 发一个小确认包(几十字节):发送时延在微秒级,相比几十毫秒的传播时延可以忽略 → 近似成立
- 发一个大文件(几 MB):发送时延可能到几十毫秒,和传播时延同量级 → 近似失效
RTT = 2 × 传播时延 (仅当其余各项可忽略)
2.3 RTT 为什么会拖垮速率#
教材给的有效数据率公式,是这一节最有用的一条:
有效数据率 = 数据长度 ÷ (发送时延 + RTT)
= L ÷ (L/R + RTT)
算例——停止等待协议,一条 1 Gbit/s 的链路,RTT = 100 ms,每次发 1000 字节:
L = 1000 字节 = 8000 bit
发送时延 = 8000 bit ÷ 10⁹ bit/s = 8 μs
有效数据率 = 8000 bit ÷ (8 μs + 100 ms)
≈ 8000 bit ÷ 0.1 s
= 80 kbit/s
只有带宽的 8%。 带宽买到了,可绝大部分时间在等回话。
这就是为什么真实的传输协议不能「发一个等一个」:TCP 用滑动窗口,一次发很多个再统一确认;窗口大小要够大,才能把「等回话」的时间用数据填满——填满一条链路所需的窗口,正好就是它的时延带宽积。
两讲在这里接上了:时延带宽积告诉你链路能装多少比特,RTT 告诉你等一个来回要多久。窗口 = 带宽 × RTT,就是让链路不空转的条件。
三、利用率#
3.1 两个层次#
| 定义 | 看什么 | |
|---|---|---|
| 信道利用率 | 某信道有百分之几的时间是被利用的(有数据通过) | 一条链路 |
| 网络利用率 | 全网络的信道利用率的加权平均值 | 整个网络 |
信道利用率 = 有数据通过的时间 ÷ 总时间
完全空闲的信道,利用率是零。
3.2 利用率不是越高越好#
这是本节最反直觉的一点。教材的原话:
「根据排队论的理论,当某信道的利用率增大时,该信道引起的时延也就迅速增加。」
原因在上一讲提过:利用率高意味着队列经常非空,排队时延这一项开始暴涨。
四、利用率与时延的关系#
D = D₀ ÷ (1 − U)
D₀:网络空闲时的时延D:网络当前的时延U:利用率(0 ~ 1)
| 利用率 U | 时延 D | 倍数 |
|---|---|---|
| 0 | D₀ | 1 倍 |
| 0.5 | 2 D₀ | 2 倍 |
| 0.8 | 5 D₀ | 5 倍 |
| 0.9 | 10 D₀ | 10 倍 |
| → 1 | → ∞ | 趋于无穷 |
曲线不是线性的:从 0 到 0.5,时延只翻了一倍;从 0.8 到 0.9,只多了 0.1 的利用率,时延就从 5 倍跳到 10 倍。越接近满载,涨得越凶。
所以工程上链路不会跑到满载,总要留余量。这也解释了为什么网络一「忙」起来体感就断崖式变差——不是带宽不够,是排队把时延推上去了。
教材还提到一个反向操作:一些 ISP 通过限制 P2P 流量、或对用户流量做分级收费,来压住峰值利用率,本质都是在给
1 − U留余量。
五、三个指标合起来看#
| 指标 | 公式 | 单位 | 回答的问题 |
|---|---|---|---|
| 时延带宽积 | 传播时延 × 带宽 | bit | 链路上同时装着多少比特 |
| 往返时间 RTT | 一去一回 + 中间结点开销 | s | 等一次回话要多久 |
| 利用率 | 有数据的时间 ÷ 总时间 | 百分比 | 链路有多忙 |
三者串起来是一条完整的因果链:
链路有多长(时延带宽积)
↓ 决定
窗口要开多大才能填满
↓ 结合
等一个来回要多久(RTT)
↓ 决定
实际能跑出多少吞吐量
↓ 而一旦
利用率逼近 1
↓ 则
排队时延按 1/(1−U) 爆炸
六、整个系列收口#
| 组 | 指标 | 回答 |
|---|---|---|
| 有多快 | 速率 · 带宽 · 吞吐量 | 每秒能过去多少比特 |
| 要等多久 | 时延四兄弟 · 时延带宽积 · RTT | 一个比特要花多久、一个来回要多久 |
| 有多忙 | 利用率 · D = D₀/(1−U) | 链路被用到什么程度、还能不能再塞 |
这就是衡量一条链路的三把尺子。
依据表#
| 片中表述 | 依据 | 备注 |
|---|---|---|
| 时延带宽积 = 传播时延 × 带宽 | 谢希仁 7 版 §1.6.5 | 原文公式 |
| 「管子」比喻:长度 = 传播时延,截面积 = 带宽 | §1.6.5 | 原文比喻 |
| 时延带宽积 = 以比特为单位的链路长度 | §1.6.5 | 原文表述 |
| 5 ms × 1 Gbit/s = 5 Mbit ≈ 625 KB | 由公式计算 | 教材例子数值不同,算法一致(1 字节 = 8 bit,5×10⁶ ÷ 8 = 625 000) |
| RTT = 从发出到收到确认的时间 | §1.6.6 | 原文定义 |
| RTT 还包含中间结点的处理、排队、转发时间 | §1.6.6 | 原文补充 |
| 有效数据率 = L ÷ (L/R + RTT) | §1.6.6 | 原文公式 |
| 8000 bit ÷ 0.1 s = 80 kbit/s | 由公式计算 | 8 μs 相对 100 ms 可忽略 |
| 80 kbit/s 是 1 Gbit/s 的 8% | 80000 ÷ 10⁹ | 换算 |
| 信道利用率 = 有数据通过的时间 ÷ 总时间 | §1.6.7 | 原文 |
| 网络利用率 = 全网络信道利用率的加权平均 | §1.6.7 | 原文 |
| 「利用率增大时,时延迅速增加」 | §1.6.7 | 原文引用 |
| D = D₀ ÷ (1 − U) | §1.6.7 | 原文公式 |
| U = 0.5 → 2 倍,U = 0.8 → 5 倍,U = 0.9 → 10 倍 | 由公式计算 | 教材只点了 0.5 和 0.9 两档 |
| 窗口中「发 8 μs、等 100 ms」的时间轴 | 教学示意 | 未按真实比例,真实比例下 8 μs 只有 0.1 像素;画面已注明 |
| 窗口「链路 1/2/3 分别为 100%/55%/82%,加权平均 79%」 | 教学示意 | 非教材数值,只为说明「加权平均」的含义 |
说明:第 2 幕画面里画了 16 个方块,不表示链路上真的只有 16 个比特(实际是 5 兆个);方块只是「比特正在路上」的示意,画多了反而看不清。