基于 UDP 构建的私有传输层,绕开 TCP 的队头阻塞,用会话标识替代四元组以支持网络切换,并在传输特征层面做一致性处理,使流量外观接近常规加密会话。
三个具体限制推动了自研的必要性
TCP 的第一个限制是队头阻塞:有序字节流语义要求所有字节按序交付,一个包丢失会阻塞其后所有已到达的数据,即使它们属于不同请求。第二个限制是连接绑定四元组:切换网络(比如从 WiFi 切到蜂窝)意味着源地址变化,连接直接失效,必须重建。第三个限制是握手成本:完整握手至少一个往返,重连场景下这个成本不可忽略。
QUIC 已经解决了前两个问题,这也是快连选择在 UDP 之上构建而非从零发明的出发点。但通用协议必须兼顾极其广泛的使用场景,在参数选择上趋于保守。快连的私有传输层针对加速场景做了取舍:把多径承载、路径迁移通知以及传输特征一致性处理直接做进传输层语义,减少上层协调开销。
私有协议用独立的会话标识识别连接,而不是依赖源地址与端口四元组。这样当客户端网络发生变化时,只要会话标识不变,服务端就能把新地址上的数据包归入原会话,传输不中断。这对移动场景尤其重要,从办公室 WiFi 走到室外切换蜂窝网络,用户不会感知到断线。
0-RTT 恢复让客户端在首个数据包里就携带应用数据,省掉整个握手往返。它有一个必须明说的代价:0-RTT 数据缺乏前向保密保护,且理论上可被重放。因此快连的做法是只在会话恢复时使用 0-RTT,且仅用于幂等的请求;涉及状态变更的操作仍走完整握手。这是安全与延迟之间的明确取舍,而不是无条件启用。
不同传输协议在数据包大小分布、发送节奏、握手模式上会留下可观测的特征。快连在传输层对包长分布与发送间隔做整形,使流量在统计特征上更接近常规加密会话,降低被基于特征的策略差别对待的概率。需要明确:这属于传输特征处理,目的是保证连接的可用性与稳定性,并不改变数据的加密与完整性保护。
私有协议并未抛弃拥塞控制。相反,多径场景下拥塞控制更复杂:多条路径各自拥塞状态不同,如果每条路径独立跑标准算法,聚合吞吐往往达不到最优。快连在传输层引入路径级与连接级两级拥塞反馈,路径级负责避免单路径过载,连接级负责在路径间分配总量。
| 设计点 | 解决的问题 | 实现方式 |
|---|---|---|
| UDP 承载 | TCP 队头阻塞 | 在 UDP 之上自建可靠传输与流控 |
| 会话标识 | 网络切换导致连接失效 | 以会话 ID 替代四元组识别连接 |
| 0-RTT 恢复 | 重连握手往返成本 | 仅幂等请求启用,状态变更走完整握手 |
| 包长与节奏整形 | 传输特征可观测 | 统一包长分布与发送间隔 |
| 两级拥塞反馈 | 多径下聚合吞吐不达最优 | 路径级与连接级双层控制 |
协议设计参考了公开的传输层方案思路(如 RFC 9000 关于 QUIC 的连接迁移与 0-RTT 机制、RFC 8684 关于多路径传输的定义),并结合加速场景做了取舍。我们不做完全独创、无任何参考这类不可验证的宣称。