几个月来,我的 LAN 内部的 SSH 连接一直存在一个奇怪的问题。只有当我使用 Windows 10 设备连接到(准系统)Linux 机器时才会出现这种情况。
当我连接到 SSH 服务器时,就好像我的输入每秒只发送一次。如果我按住一个键,它会在一秒钟内不打印任何内容,而在那一秒之后,我会看到那段时间内我所做的每个击键。
它在工作服务器上的表现如下:
出现此问题的人的情况如下:
我测试过/发现的事情
- 更改 /etc/sshd 中的“UseDNS”设置无法解决问题
- Debian 上的 bash(和 zsh)(OpenSSH_7.4p1 Debian-10+deb9u6、OpenSSL 1.0.2r 2019 年 2 月 26 日)和 Alpine Linux 上的 Ash(OpenSSH_7.9p1、OpenSSL 1.1.1b 2019 年 2 月 26 日)都发生过这种情况
- 在 Alpine Linux OpenSSH_7.7p1、LibreSSL 2.7.4 上不会发生这种情况
- 这种情况不会发生在每台机器上,只是有些机器会发生(不取决于发行版)
- resolv.conf 正确
- 无论有没有 ClientAliveInterval 都会发生错误(在客户端和服务器上测试)
- 对设备进行 ping 操作总是很快(少于 1 毫秒),因此它只是 SSH
- 当我从 Windows 10 上的 Linux 子系统通过 ssh 连接以及使用 Putty 和 MobaXterm 时,它也会出现延迟
- 当我从 Linux 而不是 Windows 连接时没有问题
有人有什么线索或我可以尝试的方法吗?谢谢
答案1
通常这是一个迹象Nagle 算法,您可以关闭该套接字选项。
(我以前在其他情况下也看到过 Linux 和 Windows 之间类似的 TCP 延迟。在一种情况下,它是由 TCP Windows 大小和 PSH(推送)标志之间的交互引起的,这导致 Windows 确认延迟和/或重试。)