← 返回题目列表

TCP 窗口扩大和时间戳选项有什么作用?为什么高带宽长延迟网络需要它们?

中等 第 23 / 30 题 更新于 2026/08/01
TCP窗口扩大时间戳高带宽延迟积

简化版

TCP 首部的窗口字段只有 16 位,最大只能表示 65535 字节。高带宽、高 RTT 网络中,飞行中的数据需要远大于 64KB,窗口扩大选项通过缩放因子把可用窗口放大。时间戳选项可用于更准确 RTT 测量,并帮助 PAWS 机制识别旧报文。

详细版

高吞吐 TCP 连接需要足够大的窗口:

带宽延迟积 BDP = 带宽 * RTT
如果 BDP = 100MB,窗口只有 64KB,就无法跑满链路

窗口扩大选项在握手阶段协商 scale factor,实际窗口 = 首部窗口值左移 scale 位。时间戳选项则在报文中携带发送时间相关值,帮助计算 RTT 和防止序列号回绕带来的旧包误收。

完整版教学

一、为什么窗口大小影响吞吐

TCP 滑动窗口限制了“未被确认但已经发送”的数据量。这个量如果太小,发送方发一小段就要等 ACK,链路会空闲。

最大吞吐近似 = 窗口大小 / RTT

RTT 越大,要跑满同样带宽,需要的窗口越大。

二、什么是带宽延迟积

带宽延迟积(BDP)表示链路上可以同时“在路上”的数据量。

带宽RTTBDP
100Mbps100ms1.25MB
1Gbps100ms12.5MB
10Gbps100ms125MB

记忆钩子:BDP 就像水管容量,窗口太小就像只开了一条细水流,管子装不满。

三、窗口字段为什么不够

TCP 固定首部中的 Window 字段是 16 位:

最大值 = 65535 字节

在现代高带宽长延迟链路上,64KB 远远小于 BDP,吞吐会受限。

四、窗口扩大选项如何工作

窗口扩大选项在三次握手阶段协商。双方约定一个缩放因子,报文首部里的窗口值需要左移若干位得到实际窗口。

实际窗口 = Window字段值 << scale

注意这个选项必须在握手时协商,连接建立后不能随意改变缩放因子。

五、时间戳选项用于什么

时间戳选项常见作用有两个:

更准确 RTT 测量
PAWS:防止序列号回绕后旧报文被误收

RTT 测量需要知道某个数据段是什么时候发出的。时间戳能让接收方回显发送方时间值,发送方据此估算 RTT。

六、为什么需要防旧包

高速网络中,TCP 序列号空间可能较快回绕。如果网络里还有旧报文迟到,单靠序列号可能产生歧义。PAWS 利用时间戳单调性,识别并丢弃过旧报文。

这在高吞吐长连接里尤其重要。

七、常见误区与追问

  • 误区:窗口扩大就是拥塞窗口变大。 它扩大的是首部通告窗口表达能力,不等于拥塞控制直接放开。
  • 误区:Window 字段本身可以表示任意大。 固定字段只有 16 位,需要缩放选项。
  • 误区:时间戳只用于打印时间。 它用于 RTT 测量和 PAWS 等协议机制。
  • 追问:什么是 BDP? 带宽乘 RTT,表示链路中可容纳的飞行数据量。
  • 追问:窗口扩大何时协商? 三次握手期间通过 TCP option 协商。
  • 追问:为什么高带宽长延迟网络需要大窗口? 否则未确认数据太少,链路无法被填满。

八、加强记忆

窗口扩大解决“16 位窗口不够大”,时间戳解决“RTT 测量和旧包识别”。高带宽长 RTT 先想到 BDP:管子越粗越长,窗口就要越大,否则 TCP 发不满。