xSend Logo xSend

舍弃 QUIC 拥抱 TCP?xSend 的极速局域网架构反思

为什么在最先进的广域网中使用了 QUIC,在条件极佳的局域网内却退回了最原始的 TCP 加解密?聊聊 xSend 背后违背直觉的架构设计哲学。

在网络工程的长河里,QUIC (HTTP/3 的底座) 绝对是近年来最耀眼的明星。它基于 UDP 重构了传输层,自带 0-RTT 极速握手、无队头阻塞能力,甚至能在你从 Wi-Fi 切换到蜂窝网络时,保持连接不断开。

理所当然地,xSend 的桌面客户端在广域网 (WAN) 直连模式中,全面拥抱了 QUIC,为无数跨国、跨网络的长距离连接提供了极其抗丢包的隧道。

但是,如果你去阅读 src/lan.rs 的源码,你会发现一个奇怪的现象:我们在环境最好、速度最快的局域网(LAN)直连里,竟然抛弃了高大上的 QUIC,倒车退回了最原始的 TCP

这是一个极其反直觉的技术切面,但却是我们经过深思熟虑后做出的最“务实”的架构权衡。

1. 荒唐的天花板:当 CPU 成为网卡的瓶颈

在千兆(1Gbps)乃至万兆(10Gbps)局域网下,物理带宽早已大得惊人,此时真正的考场在主机的 CPU 系统调用和环境切换开销

QUIC 是一个在 用户态 (User-Space) 模拟整个拥塞控制、滑窗和丢包重传的协议簇。 在互联网等高延迟网络中,这一点也不慢。但当局域网的传输速度飙升到了 100MB/s,甚至 300MB/s 时,你会发现传输的瓶颈根本不在网线里,而是:处理网络栈的 CPU 单核被 100% 打满了。

而 TCP 呢?TCP 是实打实刻在 操作系统内核态 (Kernel-Space) 的基建。现代网卡硬件甚至自带了 TCP 卸载(TCP Offload Engine, TOE),网卡可以在不惊动 CPU 的情况下,把滑窗和校验和算得明明白白。

在零丢包、低延迟(< 1ms)的完美局域网里,TCP 就是绝对的吞吐量王者

2. 屠龙之技:QUIC 的抗丢包特性在局域网成了累赘

让我们回顾一下 QUIC 吹爆的三个特性:

  • 0-RTT 握手:因为中美之间 Ping 值要 200ms,省一次握手就是省 200ms。但在路由器旁边,Ping 值只需要 0.5ms,省 1 毫秒感知为零。
  • 无队头阻塞:因为广域网链路长、节点多,很容易丢包。可如果你拿两根千兆网线插在靠谱的交换机上,丢包率往往是惊人的 0.000%
  • 连接迁移:局域网传文件通常是坐定在工位上,谁会一边传 50G 的 4K 视频一边从内网切换到 5G 呢?

在局域网里,QUIC 精心设计的算法和巨大的封包 Header 开销,全部沦落为纯纯的性能拖累。

3. TCP 的极简防弹衣:ChaCha20-Poly1305

如果不用 QUIC 的 TLS 1.3,我们在内网的安全性怎么保证?

xSend 给出的答案是一种**“暴力的极简美学”**:

  1. 双方建立干净的 TCP 长连接。
  2. 迅速通过 X25519 交换算出对称密钥。
  3. 接着,我们将数据切成固定的大块(例如 2MB),抛弃多路复用,直接在内核 TCP 上运行 ChaCha20-Poly1305 加密。
  4. 每块数据加密、贴上长度头,直接塞进 TCP Stream 里死命发送(write_all)。

整个底层收发核心极度精简,卸去了所有“重装甲”,将用户态代码对底层内核的干扰降至最低,只为换取榨干每一丝网卡性能的极限吞吐。

4. 绕开“局域网老管家”的 UDP 封锁

这是一个非常有中国特色的痛点:在众多的校园网、大型企业内网,甚至是部分家用宽带极客路由器上,管理员对 流量策略 (QoS) 卡得很紧。

对于未知的高频 UDP 流量(特别是单连接占满跑出几百兆带宽),无数路由器的防火墙第一反应是:“这肯定是某个流氓 PCDN 或者内网里的 DDoS 攻击!”,然后直接进行熔断、限速甚至丢包。

而 TCP 则“温和”得多。xSend 的 TCP 的长连接被市面上 99% 的路由器温柔以待,识别为常规的业务稳定流。


总结:架构,即是务实

优秀的架构不是在每个缝隙都塞满最新、最酷的轮子。

广域网(WAN)面临的是险恶的外部世界,路面坑洼、节点掉线。我们祭出 QUIC,用稍高的 CPU 开销换越野性能,保证隧道无论多恶劣都极其稳定。

局域网(LAN)是在自己家的双向十车道高速公路。我们要做的就是把所有多余的减震器、厚重的全地形轮胎通通扔出窗外,装上 TCP 加速引擎,踩到底,体验推背感。

xSend 的底层正是通过这样看似“割裂”,实则完美的二元结合,才做到了在任何网络下,都比别人“快挺多的”。