我注意到,当我通过慢速链接 SSH 到远程计算机时,在传输相对大量的数据后,SSH 似乎会“粘住”。
例如,通过链接输入文本没问题,但运行ls /etc
会使连接冻结几分钟。
我会理解延迟是否是因为我最大限度地提高了连接速度,并且在数据传输后它恢复正常,但连接冻结的时间远远超出了您对实际涉及的数据量的预期。
奇怪的是,如果我在同一台机器上打开两个 SSH 连接,当其中一个已冻结时,另一个仍然可以正常工作。所以我不能最大化连接速度,否则它们会同时冻结。
两个盒子或(据我所知)之间的路由器上都没有活动的流量整形,因此不应该丢弃数据包以将平均传输速度保持在一定范围内。
任何人都可以提出任何可能导致这种行为的建议,或者进一步检查的内容吗?
scp
和也会发生同样的事情sshfs
,scp
报告巨大的传输速率(许多 MB/秒,然后速度慢慢回落到stalled
几分钟,然后如果我幸运的话,它会重复直到文件完成传输。) sshfs
可以工作,但是通常(并非总是)在保存文件后,安装点会在几分钟内无响应,从而暂时阻止任何尝试访问该文件的程序。
编辑:我尝试使用iperf
并获得一些有趣的统计数据:
Local: 0.0- 0.9 sec 256 KBytes 2.25 Mbits/sec
Remote: 0.0- 7.0 sec 256 KBytes 302 Kbits/sec
Local: 0.0-15.9 sec 1.00 MBytes 529 Kbits/sec
Remote: 0.0-16.0 sec 1.00 MBytes 524 Kbits/sec
看起来在一定数量的数据以下,本地端发送的速度比远程接收的速度快得多。我想这毕竟不是 SSH 问题。我将研究一些可能会对此进行调整的 TCP 设置,但如果有人确切知道,请告知!
答案1
您的 SSH 连接超出了客户端和服务器之间某处的 MTU 大小,并且路径最大传输单元发现不管用。 (这是以安全的名义全面阻止 ICMP 流量的几个原因之一。)
进一步阅读
答案2
我有一个类似的问题:
- ssh 连接保持已建立状态
- 终端反复冻结和解冻
- 当终端冻结时,数据包在 SEND-Q 中可见
- 冷冻时间约2-4分钟
- 解冻约30秒
原来我的路由器固件已经过时了!
- 修复了固件更新的问题