多个 SOCKS 连接可以共用一条 SSH 传输
ssh -D 在 SSH 通道上多路复用目标数据流;一条外层 TCP 连接仍可能成为它们的共同瓶颈。
一个 ssh -D 进程可以同时服务多个网站连接。要分层来计算:
| 层 | 它承载什么 |
|---|---|
| 应用到 SOCKS 监听器 | 各自独立的应用连接和 SOCKS 请求 |
| SSH 通道 | 独立寻址的数据流,带通道级流控 |
| SSH 传输 | 多路复用的通道数据,通常跑在一条底层 TCP 连接上 |
| 网关到网站 | 由网关打开的各自独立的目标连接 |
因此,看到一条加密的 SSH 套接字,并不等于每个网站请求都被串行化进一条目标连接。动态转发会中继流数据并打开新连接;它与把应用原始 TCP 报文和 IP 头封装进另一条 TCP 连接的报文隧道不同。
共用传输仍然重要。容量、调度、加密开销以及传输丢包或延迟都可能同时影响多条通道。单条目标停滞本身并不能证明存在单通道上限。
如果多个应用同时变慢,先检查它们是否共用同一个 SSH 会话和网关路径,再比较它们实际的工作负载。统计本地 SOCKS 端口既测不出吞吐,也测不出独立路由。多路复用本身并不承诺提速,也不承诺为每条数据流提供独立的公网出口。