Stanford CS144 学习笔记 (三):分组交换与网络延迟的数学之美

导语:如果说前两单元是告诉我们网络分层的规则,那么本单元我们将真正深入互联网的“发动机”内部。现代互联网完全建立在分组交换 (Packet Switching) 的基础之上。数据包在路由器中是如何排队的?网络延迟到底由哪些物理部分组成?交换机硬件是如何工作的?让我们一探究竟。

在这里插入图片描述


1. What the Internet is? (互联网是什么:简史)

要理解现代网络为什么长这样,我们需要快速回顾一下人类通信的发展史。

1.1 History (古代与近代的通信)

  • 1000 BC (物理与光学通信):利用烽火台、飞鸽传书、驿站快马(Horse Relays)甚至挥舞旗帜(Flag)进行通信。携带信息量极少,且受物理距离和天气严重限制。
  • 1800 AD (电信号通信):电报 (Telegraph) 时代开启,人类首次实现了将信息转化为“编码(摩斯密码)”进行通信。重点是:在这个时期,错误处理、流量控制、同步、加密等网络协议的雏形就已经萌生了。

1.2 Today (现代互联网的诞生)

  • 1960s:首次提出“网络”概念,进行了早期的计算机通信实验。
  • 1970s:无线电网络(如 ALOHAnet)出现,孕育了共享信道的概念。
  • 1980s - 1990s:统治当今世界的 TCP/IP 协议族正式确立,万维网(浏览器)横空出世,互联网正式成型。

2. Packet Switching - Background (分组交换的背景)

在分组交换统治世界之前,人类通信使用的是电路交换 (Circuit Switching)

2.1 Circuit Switching (电路交换)

  • Example (老式电话):当你拨打电话时,电话局的交换机会在你们两人之间物理地“接通”一条专属铜线。
  • 机制:发起通信 -> 告诉中心目标 -> 沿交换机链路建立物理连接 -> 通话 -> 挂断并释放线路。这本质上是建立了一条端到端的物理管道。
  • Problem (致命缺陷)
    • 效率低下 (Inefficient):一旦线路建立,无论你们是在说话还是在沉默,这条线都被死死独占,别人无法使用。
    • 应对突发流量能力差 (Diverse Rate):现代网络应用(打字、看视频)的频率是极其不均匀的(Bursty),用固定带宽的电路来传数据是极大的浪费。
    • 状态管理灾难 (State Management):网络核心必须维护成千上万个连接的“建立/拆除”状态,一旦核心交换机宕机,所有通话全部中断。

2.2 Packet Switching (分组交换)

  • 数据包 (Packet):数据被切分成小块,每个小块同时携带着数据 (Payload) + 目标地址 (Header),成为一个自包含的独立单元。
  • 传输方式:逐跳传输 (Hop-by-hop),多条数据流共享同一条物理链路。
  • 缓冲机制:交换机内部带有缓存 (Buffers)。如果瞬间涌来的包太多,先放在缓存里排队,这就解决了速率不匹配的问题。

2.3 为什么互联网选择分组交换?

  1. 高效使用昂贵的链路:把线路视为稀缺资源,谁有数据谁就用,极致压榨带宽(统计多路复用)。
  2. 极强的抗打击能力 (Resilience to failure):不需要建立固定线路。如果中间某台路由器炸了,后续的数据包可以立刻绕道其他链路,保证了传输的可靠性。

3. Packet Switching - End to End Delay (端到端延迟)

分组交换虽然灵活,但引入了复杂的网络延迟。端到端延迟 (End-to-End Delay) 由三个核心物理分量组成,务必明确区分,切勿混淆!

3.1 Propagation Delay (传播延迟)

  • 定义:1 个 bit 从链路的一端(A)像光一样飞到另一端(B)所需的绝对物理时间。
  • 公式t=l/ct = l / ct=l/clll 为物理链路长度,ccc 为介质中的光速)。
  • 特点:完全取决于距离,你无法通过升级千兆宽带去缩短从中国到美国的传播延迟。

3.2 Packetization / Transmission Delay (分组/发送延迟)

  • 定义:网卡将一个数据包从第一个 bit 到最后一个 bit 全部“推”到网线上所需的时间。
  • 公式t=p/rt = p / rt=p/rppp 为数据包大小/ bits,rrr 为链路带宽速率 bps)。
  • 特点:取决于包有多大以及你的网速(带宽)有多快。

3.3 End-to-End Delay (端到端延迟总和)

端到端延迟 = 传播延迟 + 分组延迟 + 💥 排队延迟 (Queuing Delay)

  • 排队延迟 Q(t)Q(t)Q(t):因为多条数据流共享链路,数据包必然会在路由器的 Buffer 中排队等待。这是延迟公式中唯一的可变部分 (Variable)
  • Ping 命令:我们在电脑上用 Ping 测出来的延迟(RTT, 往返时间),实际上就是上述三种延迟往返累加的结果。

💡 跳跃累加 (Example)
假设路径是 A→S1→S2→BA \to S_1 \to S_2 \to BAS1S2B
S1S_1S1 必须等待整个数据包接收完毕(存储-转发),查表后再发给 S2S_2S2。因此,每经过一个路由器,都要重新计算一次“分组延迟”和“排队延迟”。


4. Packet Switching - Playback Buffer (播放缓冲区)

排队延迟 Q(t)Q(t)Q(t) 是不断波动的,这导致了网络中到达的数据包会有抖动 (Jitter / Packet Delay Variation)

4.1 Example (流媒体应用)

  • Why and What:YouTube 或 Netflix 等流媒体绝不能依赖网络的“实时到达”,因为网络抖动会导致视频疯狂卡顿。
  • 解决方案:在客户端引入 Playback Buffer (播放缓冲区)
  • 原理 (Reader-Writer Problem):网络(Writer)以极其不规律、波动的速度把数据包塞进 Buffer;而视频播放器(Reader)以平滑、线性的固定速度从 Buffer 中读取画面。
  • 总结:Buffer 的伟大之处在于,它通过“提前囤货”,吸收了网络延迟的可变性,将现实中非线性的到达数据,重新熨平为线性的连续流。

5. Packet Switching - Queue Models (队列模型)

5.1 Simple Model of a Router Queue (路由器队列简单模型)

  • A(t)A(t)A(t):到时刻 ttt 为止,总共到达 (Arrive) 路由器的包裹数量。
  • D(t)D(t)D(t):到时刻 ttt 为止,总共离开 (Depart/处理完毕) 路由器的包裹数量。
  • Q(t)Q(t)Q(t):当前时刻排队的占用量,公式极其简单:Q(t)=A(t)−D(t)Q(t) = A(t) - D(t)Q(t)=A(t)D(t)
  • FIFO 系统:最基础的模型假设所有数据包遵循先入先出 (First-In-First-Out)。这是一种剔除随机性的简单确定性队列模型 (Simple Deterministic Queue Model),可以用来初步计算平均队列长度。

5.2 Small Packets Reduce End to End Delay (小包减少延迟)

为什么不把 1GB 的文件直接塞进一个巨大无比的数据包里发送?

  • 因为路由器是“存储-转发”机制。一个巨大的包在每一跳都要耗费极长的时间去接收(分组延迟巨大),这会导致整条链路被严重阻塞。
  • 切分成多个小包后,包可以像“流水线”一样,在多个路由器之间并行传输 (Pipelining),显著降低整体端到端延迟,并增加信道利用率。

5.3 Statistical Multiplexing Gain (统计复用增益)

  • 定义:根据多个数据流的瞬间流量需求,动态共享一条链路的带宽。
  • 原理:假设 10 个人共享 100M 带宽。如果你用电路交换,每人固定分 10M,哪怕 9 个人在睡觉,你最多也只能用 10M。而在分组交换的统计复用下,如果其他人没发数据,你可以独享 100M。这就是增益!

6. Packet Switching - Useful Queue Properties (队列的数学特性)

现实中的队列往往是一个随机过程 (Random Process)。

6.1 突发性增加延迟 (Burstiness Increases Delay)

哪怕平均速率相同,数据包如果是“一阵一阵”扎堆涌来,排队延迟会急剧飙升。

6.2 确定性减少延迟 (Determinism Minimizes Delay)

如果数据包像节拍器一样极其规律、等间隔地到达,那么队列几乎不会发生拥堵,排队时间趋近于零。

6.3 Little’s Result (利特尔法则)

排队论中最优雅的公式:L=λ×WL = \lambda \times WL=λ×W
只要知道平均到达率 (λ\lambdaλ) 和平均排队时间 (WWW),就能直接算出系统里的平均顾客/数据包数量 (LLL),反之亦然。无论队列内部多复杂,这个宏观定律永远成立。

6.4 The Poisson Process (泊松过程)

  • 我们常用泊松分布来对数据包的“随机到达”进行数学建模。
  • 警告 (Be Warned):真正的互联网流量其实并不是严格的泊松分布,而是极其具有突发性的(分形/自相似特征)。但泊松模型 M/M/1 队列作为一种理论工具,依然能帮我们很好地理解系统的稳定边界。

7. Packet Switching - How a Packet Switch Works (1) (交换机工作原理上)

7.1 Generic Packet Switch (通用动作)

任何交换机收到包后都要做几件事:查找目的地址 →\to 更新头部 (如校验和) →\to 丢入对应端口的输出队列。

7.2 Ethernet Switch (二层以太网交换机)

  • 查 MAC 地址表。如果找不到,采取最笨但有效的办法:广播 (Flooding)。所有端口全发一份,等目标回应后,交换机就“学习”到了该地址。

7.3 Internet Router (三层互联网路由器)

处理 IP 地址,比以太网交换机复杂得多:

  1. 减少 TTL:防止死循环。
  2. 判断:如果 TTL 减到了 0,丢弃该包并发回 ICMP 报错。
  3. 更新:由于 TTL 变了,必须重新计算 Header Checksum。
  4. 查找转发表:决定下一跳设备的 MAC 地址。

7.4 Basic Operations: Lookup Address (核心操作:地址查找)

  • 以太网 (Ethernet):精确匹配 (Exact Match)。
  • 路由器 (IP)最长前缀匹配 (Longest Prefix Match)。例如 65.14.24.120 会匹配路由表中前缀最详细的那一项(如 65.0.0.0/8)。
  • 硬件实现黑科技:TCAM
    普通 CPU 查表太慢了。工业界使用 TCAM (Ternary Content Addressable Memory,三态内容寻址存储器)。除了 0 和 1,它还能识别“Don’t Care(无所谓)”状态。数据包丢进去,TCAM 能在 1 个时钟周期内硬件并发比对所有路由条目,瞬间出结果!

8. Packet Switching - How a Packet Switch Works (2) (交换机工作原理下)

8.1 Input Queued Packet Switch (输入队列交换机)

  • Head-of-Line Blocking (队头阻塞):假设队列最前面的数据包要去出口 A(但出口 A 拥堵),即使排在它后面的数据包想去完全空闲的出口 B,也被前面这个包死死挡住出不去。这就是要命的队头阻塞现象。
  • 解决方案 (VOQ, Virtual Output Queues):在输入端为每个输出端口维护一个独立的虚拟队列,想去哪儿就排哪个队,彻底解决互相挡道的问题。

8.2 Properties of OQ Switches (输出队列交换机)

现代高性能交换机致力于追求 OQ (Output Queued) 架构。它具备三大神级特性:

  1. 工作保存 (Work-conserving):只要输出链路上还有包没发完,交换机绝不休息,绝不浪费哪怕 1ms 的带宽。
  2. 吞吐量最大化:单位时间内压榨出硬件的处理极限。
  3. 延迟最小化:利用上述两点,将所有数据包的排队等待时间降到最低。

9. Packet Switching - Strict Priorities and Guaranteed Flow Rates (优先级与速率保证)

纯粹的 FIFO 队列存在一个大问题:遇到不讲理的“带宽恶霸”(疯狂发包),其他正常流量会被彻底淹没。

9.1 FIFO is a free for all (FIFO 的灾难)

先进先出意味着谁抢到位置谁先走。视频流和下载流混在一起,会导致重要的视频流被下载包卡死。我们需要在输出端设计调度器。

9.2 Strict Priorities (严格优先级)

  • 机制 (如 IP ToS 字段):高优先级队列有包,就一直发高优先级的包,直到发空为止,才去看一眼低优先级队列。
  • 致命缺陷 (饥饿现象 Starvation):如果高优先级包源源不断,低优先级的包就会被“饿死(Killed/Dropped)”,永远没有出头的日子。

9.3 Weighted Priorities (加权公平调度)

  • 为了解决饥饿,我们给不同队列分配权重 (Weight)。比如 High 的权重是 2,Low 的权重是 1。
  • 调度器采取轮询遍历 (Round-Robin) 的策略:每次从 High 发两个包,再从 Low 发一个包。这样不仅保证了 VIP 客户的体验,也让普通流量有路可走。

9.4 A practical way to do it (工业界实用做法: WFQ)

Weighted Fair Queuing (加权公平队列):调度器会根据数据包的到达时间、大小和预设权重,精确计算每个数据包的“理想完成时间”,并根据这个时间排序发送,从而实现极其平滑的流量调度。


10. Packet Switching - Guaranteed Delay (如何提供延迟保证)

10.1 Intuition (直觉思考)

回到端到端延迟公式,传播延迟和发送延迟是物理固定的,唯一波动的只有 Q(t)Q(t)Q(t) 排队延迟。如果我们能控制排队延迟的上限,就能给客户提供“确保延迟不超过多少毫秒”的服务质量保证 (QoS)。

10.2 Constraining Traffic (约束流量:漏桶模型)

如果不限制输入,队列迟早会溢出。数学家们引入了 (σ,ρ)(\sigma, \rho)(σ,ρ) 受限到达模型,也叫漏桶/令牌桶调节器 (Leaky-bucket regulator)

  • ρ\rhoρ (Rho, 平均速率):约束数据流在长期观测下的平均发送速度不能超过 ρ\rhoρ
  • σ\sigmaσ (Sigma, 最大突发量):约束数据流在极短时间内,瞬间爆发的数据量不能超过 σ\sigmaσ

结论:只要发送方承诺遵守 (σ,ρ)(\sigma, \rho)(σ,ρ) 的流量约束,网络服务商结合路由器的 Buffer Size,就能从数学上精确计算出 Q(t)Q(t)Q(t) 的最大值,从而向用户拍胸脯保证:你的数据包延迟绝对不会超过这个极值!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值