X11 转发上的 TCP 连接速度奇怪地变慢

X11 转发上的 TCP 连接速度奇怪地变慢

我有一台家用电脑 H(Linux)、一台工作电脑 W(Mac OS X)和一台公共服务器 S(与 H 相同的 Linux),IP 为 11.22.33.44。

由于 H 和 W 都在 NAT 后面,我使用 autossh 将它们连接到 S 并通过隧道相互通信:

# From H to S
ssh -R :8822:127.0.0.1:22 [email protected]
# From W to S
ssh -R :7722:127.0.0.1:22 [email protected]

当我在办公室时,我经常通过 SSH 连接到 H 并将 X11 转发回来:

# on W
ssh -X -p 8822 [email protected]
xterm
...

H 和 W 到 S 的延迟都非常低(ping 大约 2-5 毫秒),所以一切都很顺利,直到我的办公室搬家并且 ISP 发生变化。从 W 到 S 的 ping 仍然很低,在 X 转发启动之前一切都仍然很快。每当我尝试通过 X11 转发从 H 启动 xterm 时,通过它的 TCP 连接都会变得非常慢。但是,从 W 到 H 的其他 SSH 会话(没有转发)仍然很快。在 Ctrl-C 不响应的 xterm 之后,转发 SSH 会话立即恢复响应。

感觉就像有人在监视 SSH 会话,并且每当进行 X11 通信时都会减慢其速度。为了找出哪个部分出了问题,我做了如下测试:

# on W
ssh -R 11.22.33.44:6010:127.0.0.1:6000 [email protected]
# on S
DISPLAY=11.22.33.44:10 xterm  # works fine!
# on H
DISPLAY=11.22.33.44:10 xterm  # unresponsive

奇怪的是,如果 xterm 在 S 上启动,则一切正常;如果从 H 启动,则会停滞,不是 H→S 部分,而是 W→S SSH 会话,因为在其上输入变得非常慢。按 Ctrl-C 挂起的 xterm 后,它立即恢复。

这似乎不是网络问题,因为 H→S 和 W→S 都很好(无论是延迟还是带宽方面)。通过隧道,W 和 H 之间的 scp 很快;lftp fish://H从 W 也可以正常工作。

由于这是在 ISP 切换之后发生的,我在想 ISP 是否限制了任何流量,但 X11 转发在 W 和 S 之间或 H 和 S 之间的任何方向都可以正常工作。只是 W 和 H 之间的任何 X11 流量,以任何我能想到的方式,都会减慢进行转发的 SSH 连接的速度。

我对这个烂摊子深感困惑。有人能帮我找出我应该研究哪个部分吗?

相关内容