网络传输协议基础:握手开销、拥塞控制与代理场景下的取舍
TCP 与基于 UDP 的新协议在握手轮次、拥塞控制和弱网表现上有实质差异。本文说明这些差异如何影响代理链路的实际体验。
代理链路的体验差异,很大一部分来自底层传输协议的选择。理解三件事——握手要几个来回、丢包时怎么反应、连接能不能迁移——就能解释大多数「为什么这条线在我这里特别难用」。
1. 握手轮次:建立连接的固定成本
每次新建连接都要先握手,握手期间不传数据。轮次越多,首字节到达越慢,而且这个成本与带宽无关——它由往返时延(RTT)决定。
| 组合 | 建立连接的往返次数 |
|---|---|
| TCP + TLS 1.2 | TCP 三次握手,再加 TLS 两轮 |
| TCP + TLS 1.3 | TCP 三次握手,TLS 压缩到一轮(RFC 8446) |
| QUIC | 传输层与加密握手合并,首次连接一轮(RFC 9000) |
| QUIC 会话恢复 | 支持 0-RTT,可随首包携带数据 |
这解释了一个常见现象:跨洲链路上,网页打开慢但下载速度不慢。下载测的是带宽,打开网页测的是握手加首字节——后者被 RTT 主导。
2. 拥塞控制:丢包时怎么反应
TCP 的经典拥塞控制把丢包视为拥塞信号(RFC 5681):一旦丢包,立刻大幅收缩发送窗口,然后缓慢恢复。
这个假设在有线网络里成立,在跨境链路和无线网络里经常不成立——那里的丢包大量来自链路本身的不稳定,而不是拥塞。结果是:链路明明还有余量,发送方却主动降速。
这是「明明带宽够,实际速度上不去」的常见成因。基于 UDP 的现代协议通常采用不同的拥塞判断方式,在弱网下表现更好——但这不是绝对的,链路质量本来就好时,两者差距可能很小。
3. 队头阻塞:一个丢包拖住全部
TCP 保证按序交付。前面的包丢了,后面已经到达的包也必须等它重传完成才能交给应用——这就是队头阻塞(head-of-line blocking)。
在单连接承载多路请求时这个问题会被放大:一个流的丢包会拖慢所有流。QUIC 在传输层实现多路复用,各流独立处理丢包(RFC 9000),因此不受此影响。
4. 连接迁移:换网络要不要重连
TCP 连接由「源 IP + 源端口 + 目的 IP + 目的端口」四元组标识。换 Wi-Fi、切到蜂窝网络,IP 变了,连接就断了,必须重新握手。
QUIC 用连接 ID 标识连接,IP 变化时连接可以延续。对移动设备而言这是实质差异:切换网络时不会出现明显中断。
5. 这些差异如何落到实际选择上
按你的网络状况判断,而不是按「哪个协议更新」:
- 链路质量好、延迟低 → 协议差异不明显,选客户端支持最好的那个。
- 跨境、延迟高 → 握手轮次的影响被放大,少一轮就是实打实的几十到几百毫秒。
- 移动网络、经常切换 → 连接迁移能力有实际价值。
- 丢包明显 → 拥塞控制的差异最显著。
6. 一个要避免的误解
协议不能突破物理带宽。 协议影响的是「在给定链路上能利用多少」,不是「链路本身有多宽」。
如果瓶颈是服务器出口带宽被超售、或晚高峰负载过高,换协议解决不了——那属于服务商的容量问题,不是技术选型问题。判断方法是在不同时段测同一条链路:只在特定时段慢,就是负载问题;全天都慢,才轮到协议与配置。
该记住的
- 握手成本由 RTT 决定,与带宽无关——跨境链路上尤其明显。
- 丢包不一定意味着拥塞,但经典 TCP 会这样假设并降速。
- 协议优化的是利用率,不是带宽上限——瓶颈在容量时,换协议没用。
可追溯事实与文献来源
- •RFC 9000 - QUIC: A UDP-Based Multiplexed and Secure Transport[TECHNICAL_RFC]
- •RFC 8446 - The Transport Layer Security (TLS) Protocol Version 1.3[TECHNICAL_RFC]
- •RFC 5681 - TCP Congestion Control[TECHNICAL_RFC]