优化数据传输速度 | AI生成和翻译

Home 2026.05

把它想象成一条数据供应链:

== 旧的 SSH 路径 ==

git (工厂)
  ↓ 产生字节流
ssh (运输公司)
  ↓ 包裹进 SSH 加密
ncat (中转仓库)
  ↓ 接收、拆包、重新打包
SOCKS5 (报关行)
  ↓ 协议协商
mihomo (货运代理)
  ↓ 路由到隧道
Hysteria2 (集装箱船)
  ↓ 跨越大洋
DMIT LA (港口)
  ↓
GitHub (目的地)

每一站都会增加成本。ncat 处在中间,除了从一个套接字接收字节再写入另一个套接字之外,什么有用的事都不做——它就是一个只会重新打包箱子的仓库。

== 新的 HTTPS 路径 ==

git (工厂)
  ↓ 产生字节流,包裹进 TLS
mihomo (货运代理)
  ↓ 打开隧道,然后退到一边
Hysteria2 (集装箱船)
  ↓ 跨越大洋
DMIT LA (港口)
  ↓
GitHub (目的地)

mihomo 收到 HTTP CONNECT 请求,建立到 GitHub 的 TCP 连接,回复“200 OK,请继续”,然后数据就直接流过。就像一个货运代理只负责打开大门,让卡车直接开过去。

== 额外跳数的三种成本 ==

  1. 系统调用开销。ncat 使用 select() + read() + write() 循环,缓冲区大小为 8KB。每个数据块:内核从套接字 A 拷贝数据到用户空间(ncat),然后内核再拷贝到套接字 B。每个数据块都要经过两次内核到用户空间的拷贝。而用 mihomo 的 HTTP 代理,数据在内核空间中停留时间更长——拷贝更少。

  2. 进程调度。ncat 是一个独立进程。操作系统需要在 ssh、ncat 和 mihomo 之间进行上下文切换。每次切换:保存寄存器、刷新 TLB、切换页表、恢复寄存器。在高吞吐量下,这种切换每秒发生成千上万次。HTTP 路径上竞争 CPU 时间的进程更少。

  3. TCP 拥塞控制。SSH 的 TCP 栈在努力填满它的发送窗口。SOCKS5 的 TCP 栈也在努力填满它的发送窗口。两者相互独立——当其中一个检测到丢包时,它会退避,但另一个不知道,继续发送,导致更多丢包。就像两个司机想并入同一条车道却看不到对方。HTTP 路径只有一个端到端的 TCP 流——一个司机,一条车道,没有协调问题。

== 初创公司类比 ==

大公司(SSH 路径): 工程师 → 团队主管 → 总监 → 副总裁 → CTO → 副总裁 → 总监 → 团队主管 → 工程师

每个人读取消息,理解它,用自己的话重写,再传递下去。信息退化,延迟累积。

初创公司(HTTPS 路径): 工程师 → 工程师

直接沟通。相同语言。没有翻译损耗。

协议栈越“扁平”,层与层之间的翻译越少,信息流动就越快。这就是为什么移除 ncat(一个只复制字节的中继)和 SOCKS5 层(一个额外的协议协商)能带来如此巨大的差异。


Back Donate