我注意到,在我办公室的网络上,使用“伪终端”方法的多跳 SSH 连接比使用“转发”方法的性能更好(见最后一条注释)。为什么会这样呢?
换句话说,为什么:
ssh -A -X -tt server1 ssh -X -tt server2 # pseudo-tty
性能比以下更好得多:
ssh -o ‘ProxyCommand=ssh -A -X -W %h:%p server1’ -X server2 # forwarding
?
其他说明:
- 我在我的笔记本电脑上,服务器 1 和服务器 2 具有相同的硬件。
- 我的笔记本电脑装有 Windows 7,带有 Cygwin 的 ssh 和 xwin。它有一个不错的处理器(i7 4610M 或类似型号)。
- server1和server2都是RHEL 6.5。
- 我没有测量比特率,但 X11 应用程序使用伪 tty 方法时速度明显更快(转发时有明显延迟)。
答案1
我认为您的第一个命令行将建立一个server1
针对交互式会话进行优化的连接(响应延迟低,但吞吐量较低),但转发方法将打开一个将 ToS 位设置为 的会话MaximizeTroughtput
,响应时间较长。因此,对交互式会话的优化程度较低。
这可能是因为 ssh 和 sshd 会根据 rfc1349 自动设置 ToS。交互式会话的默认设置是 lowdelay,非交互式会话的默认设置是 throughput(通常是 sftp、scp,在您的情况下是端口转发)。
摘录自man ssh_config
:
IPQoS Specifies the IPv4 type-of-service or DSCP class for connections. Accepted values are af11, af12, af13, af21, af22, af23, af31, af32, af33, af41, af42, af43, cs0, cs1, cs2, cs3, cs4, cs5, cs6, cs7, ef, lowdelay,
throughput, reliability, or a numeric value. This option may take one or two arguments, separated by whitespace. If one argument is specified, it is used as the packet class unconditionally. If two values are speci‐
fied, the first is automatically selected for interactive sessions and the second for non-interactive sessions. The default is lowdelay for interactive sessions and throughput for non-interactive sessions.
附言:你可以尝试:
ssh -o ‘ProxyCommand="ssh -A -X -W %h:%p -o IPQoS=lowdelay server1"’ -X server2