📚 第一章 网络基础知识
📄 一句话概括

电路交换先建一条独占通路,分组交换不建通路、一包一包扔。 分组交换赢在效率与共享,电路交换赢在可预测——今天的网络靠 QoS 折中。

📝 本节和前面几节的关系

1.7.1 讲的是「传之前握不握手」,这一节讲「底下那条路怎么用」。 1.3.5 已经算过分组的头开销,这里算的是时延。

一、两种思路

一个像打电话,一个像寄信:

对比项 电路交换 分组交换
建通路 先建,独占 不建,共享
带宽 恒定,空闲也占着 按需,谁有包谁用
时延 恒定 随排队长度变
故障 全断 可绕路

第一行决定了一切:建通路的时候就把沿途的时隙或频段占住了, 所以传输过程中不需要任何地址信息——路已经修好了,顺着走就行。 这也是电路交换的头部可以极小的原因。 第四行是分组交换被设计出来的初衷:ARPANET 的目标就是「部分节点被毁,剩下的还能通」, 而独占通路的电路交换做不到这一点——路一断,通话就断。 分组交换的每个包独立选路,天然能绕。

二、三笔账

用同一组假设算三次(1 Mbps 链路、4 段、每段传播 5 毫秒、建连一个往返):

第一笔:一个人传 1 MB。

方式 多了什么 总时延 ms
电路交换 建连 10 毫秒 8404
分组交换 存储转发 24 毫秒 8236

这一笔分组交换反而快了 168 毫秒:因为它省掉了建连,而存储转发只多花 24 毫秒。 所以「电路交换时延一定更低」这个印象是不准的——建连的成本往往比存储转发更贵。 第二笔:十个人各传 100 KB,共用一条链路。

方式 建连次数 总时延 ms
电路交换 10 次 8342
分组交换 0 次 8044

差距拉大到 298 毫秒:电路交换要建十次连、而且一次只服务一个人, 分组交换让十个人的包交错跑,谁有空谁上。 这就是「共享」带来的效率。 第三笔才是关键:时延抖动的来源不同。

方式 时延由什么决定 负载翻倍后
电路交换 带宽独占,恒定 不变
分组交换 排队长度,随负载涨 可能翻几倍

第二行那个「可能翻几倍」是分组交换的代价:链路利用率越高,队列越长,时延越不可预测。 这就是为什么语音电话当年坚持用电路交换——通话不怕慢几百毫秒,怕的是忽快忽慢。 三笔账合起来的结论:分组交换赢在效率与共享,电路交换赢在可预测。 今天的网络用折中办法兼顾两头: 给不同流量打标记、排队时优先放行实时语音——这就是 QoS(5.8.3 会讲)。

三、分组交换的代价落在谁身上

代价不会消失,只会转移:

代价 转移给谁 表现
排队时延 应用自己 时快时慢
丢包 上层协议 TCP 重传、UDP 丢弃
乱序 接收端 要缓冲重排

第一行是实时应用最头疼的:分组交换不保证时延,而语音、游戏恰恰对时延最敏感。 所以这类应用要自己做抖动缓冲——先攒一小段再播,用延迟换平滑。 这就是为什么 VoIP 会有「几十毫秒的固有延迟」。 第二行解释了 TCP 为什么那么复杂:因为底下那层不保证,所有保证都得在上面重建。 序号、确认、重传、拥塞控制,全是为了「在不保证的网络上做出保证」。 第三行常被忽略的是「缓冲」的代价:重排要占内存、要等,等多久不确定, 所以乱序严重时延迟会突然变大——表现就是「大部分时候很快,偶尔卡一下」。

四、动手 Demo:电路交换与分组交换,时延差在哪

用同一组假设参数算三笔账:单流、十人共享、时延抖动。 参数是假设的,算式是真的——这样才看得清差异从哪来。

BW = 1e6          # 1 Mbps
SEG = 4           # 经过 4 段链路
PROP = 0.005      # 每段传播 5 毫秒
RTT = 0.010       # 建连一个往返 10 毫秒

def circuit(nbytes, nflows):
    tx = nbytes * 8 / BW
    return (tx + PROP * SEG + RTT) * nflows * 1000

def packet(nbytes, nflows):
    tx = nbytes * 8 / BW
    return (tx + PROP * SEG + PROP * (SEG - 1)) * nflows * 1000

one = 1024 * 1024
print('单流 1 MB  电路 %.0f ms  分组 %.0f ms'
      % (circuit(one, 1), packet(one, 1)))
ten = 100 * 1024
print('十人 100 KB 电路 %.0f ms  分组 %.0f ms'
      % (circuit(ten, 10), packet(ten, 10)))
print('建连占比:%.1f%%' % (RTT / (one * 8 / BW) * 100))

实跑输出:

--------------------------------------------------------------------
电路交换与分组交换,时延差在哪
--------------------------------------------------------------------
**电路交换先建一条独占通路,再传;分组交换不建通路,一包一包扔。**
**下面用同一组假设参数算三笔账**:**1 Mbps 链路、4 段、每段传播 5 毫秒、建连一个往返。**

**第一笔:一个人传 1 MB。**

  方式         建连             多了什么                         总时延ms
  ------------------------------------------------------------------------
  电路交换     **一个往返**     **建连 10 毫秒**                 8404
  分组交换     没有             **每段存储转发 3×8=24 毫秒**     8236

**这一笔分组交换快了 168 毫秒**,**因为它省掉了建连,而存储转发只多花 24 毫秒。**
**所以「电路交换时延更低」这个印象是不准的**——**建连的成本往往比存储转发更贵。**

**第二笔:十个人各传 100 KB,共用一条 1 Mbps 链路。**

  方式         建连次数      链路怎么用               总时延ms
  -------------------------------------------------------------
  电路交换     **10 次**     **一次只服务一个人**     8342
  分组交换     0 次          **十个人的包交错跑**     8044

**这一笔差距拉大到 298 毫秒**,省的是十次建连加上十次串行。

**第三笔才是关键:时延抖动的来源不同。**

  方式         时延由什么决定             负载翻倍后
  -------------------------------------------------------
  电路交换     **带宽独占,恒定**         **不变**
  分组交换     **排队长度,随负载涨**     **可能翻几倍**

**第二行那个「可能翻几倍」是分组交换的代价**:**链路利用率越高,队列越长,时延越不可预测。**
**这就是为什么语音电话当年坚持用电路交换**——**通话不怕慢几百毫秒,怕的是忽快忽慢。**

**三笔账合起来的结论**:**分组交换赢在效率与共享,电路交换赢在可预测。**
**今天的网络用一个折中办法兼顾两头**:
**给不同流量打标记、排队时优先放行实时语音**——**这就是 QoS(5.8.3 会讲)。**

单流那一笔:电路 8404、分组 8236,分组反而快 168 毫秒,因为它省掉了建连的 10 毫秒, 而存储转发只多花 24 毫秒。 十人那一笔:电路 8342、分组 8044,分组快 298 毫秒,省的是十次建连加十次串行。 这两笔都说明「电路交换时延更低」是错的:建连的成本常常比存储转发更贵。 但电路的时延是恒定的,分组的不恒定——这才是真正的差别,也是最后一行要算「抖动」的原因。 注意这三笔账的参数是假设的(1 Mbps、4 段、5 毫秒): 现实里的链路由几十段组成、带宽也高得多,所以绝对值不能当真,能当真的是「差值的方向」。

30 秒实验

  1. 把 SEG 改成 10,看分组交换那一列的存储转发开销涨多少——跳数越多,分组越吃亏。
  2. 把 BW 改成 1 Gbps,看建连那 10 毫秒占多大比例——带宽越大,建连的相对成本越高。
  3. 想一下:为什么视频网站不怕时延抖动,直播连麦却很怕?

常见误区

  1. 以为电路交换时延一定更低。 建连要一个往返,短传输时这笔开销比存储转发更贵, 分组反而更快。
  2. 以为分组交换只是「省线路」。 它真正的代价是时延不可预测,负载一高队列就长, 实时业务受不了。
  3. 以为「共享」没有成本。 成本转移给了应用与上层协议:抖动缓冲、重传、乱序重排, 全得自己补。
自测三问(点开对答案) 1. 为什么单流传输时分组交换反而更快? —— **因为它省掉了建连的一个往返,而存储转发只多花 24 毫秒。**建连的成本往往比存储转发更贵。 2. 分组交换最大的代价是什么? —— **时延不可预测**:排队长度随负载涨,负载翻倍时延可能翻几倍。电路交换带宽独占,时延恒定。 3. 今天的网络怎么兼顾效率与可预测? —— **靠 QoS**:给不同流量打标记,排队时优先放行实时语音。既不放弃共享,也不让实时业务被挤死。

下一节换第三个角度:按接收端数量分——单播、广播、组播。

相关笔记