为什么 ssh 的延迟能有 ping 的 3 倍?

355 天前
 nyxsonsleep

甲骨云圣何塞的服务器。ssh 打字有延迟,快要到 0.7s 的程度。基本上都是在盲打了。

ssh 192.*.*.*@username 用的 rsa 验证登录的。

ping 出来的延迟在 200ms 左右,丢包 2%。

在 powershell 中登录,然后录屏,利用一个屏幕显示按键的软件结合进行计算延迟,延迟大概在 0.6s 的样子。

用 xshell 连接之后,延迟相同,根据右下的上传下载标志符号进行录像,延迟大致在 0.5s 的样子。

试了用代理登录,延迟基本不变,甚至可能变高了。查看 ssh 日志,登录 ip 已经发生变化。

然后用了 python 的 paramiko 模块进行 ssh 登录,计算延迟,每条指令大概在 0.5-0.7s 之间的样子。都是几乎不消耗资源的指令。

import paramiko
import time
key = paramiko.RSAKey.from_private_key_file(r'C:\Users\username\.ssh\id_rsa')
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('hostname', username='username', pkey=key)

t1=time.time()
# ssh.exec_command('cd ..')
stdin, stdout, stderr = ssh.exec_command('ls -l')
t2=time.time()
print(t2-t1)
print(stdout.readlines())

ssh.close()

usedns no #GSSAPIAuthentication no

6574 次点击
所在节点    程序员
78 条回复
Soo0
355 天前
ping 和 tcp 有的时候走的路径都不一样,tcping 看看 丢包 延迟高 受不了找个代理或者中转吧
kokutou
354 天前
装个 mosh 。。。
mrzx
354 天前
@nyxsonsleep 你确定 ping 是 tcp 协议?明明是 ICMP

我是网络专业的出生,别骗我。

网络最大的危害不是延迟,也不是丢高,而是网络抖动

而且很多 VPS 提供商,对 ping 做了单独特殊 qos 优化(让你感觉延迟不高,无抖动,不丢包)。。。而对任何 TCP 协议进行流量整形。
mrzx
354 天前
19 楼的哥们是对的,用 tcping 就立刻得知真相了。
salmon5
354 天前
ssh https 应该都有干扰
feedcode
354 天前
1 楼已经给了答案了,了解下
https://en.wikipedia.org/wiki/TCP_delayed_acknowledgment
https://news.ycombinator.com/item?id=34179426
以及 tcp_autocorking (default true)
ssh 在交互状态下会关掉 Nagle’s algorithm ,但是你的代理默认不会关,所以延迟会增加
feedcode
354 天前
dayudayupao
354 天前
@weiqk 丢包 tcp 不是有自动重发功能吗,也没有不合格吧,有点危言耸听的感觉,想听听你更详细的见解,纯交流
tmux123
354 天前
不得不说这是 v2 上见过的最低质量的讨论……
nyxsonsleep
354 天前
@leaflxh #19 依然是 200ms 的延迟


sudo hping3 -c 4 -S -p port hostip
HPING hostip (ens33 hostip): S set, 40 headers + 0 data bytes
len=46 ip=hostip ttl=128 id=19791 sport=port flags=SA seq=0 win=64240 rtt=192.4 ms
len=46 ip=hostip ttl=128 id=19792 sport=port flags=SA seq=1 win=64240 rtt=215.1 ms
len=46 ip=hostip ttl=128 id=19793 sport=port flags=SA seq=2 win=64240 rtt=190.0 ms
len=46 ip=hostip ttl=128 id=19794 sport=port flags=SA seq=3 win=64240 rtt=197.9 ms
nyxsonsleep
354 天前
@mrzx #24

依然是 200ms 的延迟


sudo hping3 -c 4 -S -p port hostip
HPING hostip (ens33 hostip): S set, 40 headers + 0 data bytes
len=46 ip=hostip ttl=128 id=19791 sport=port flags=SA seq=0 win=64240 rtt=192.4 ms
len=46 ip=hostip ttl=128 id=19792 sport=port flags=SA seq=1 win=64240 rtt=215.1 ms
len=46 ip=hostip ttl=128 id=19793 sport=port flags=SA seq=2 win=64240 rtt=190.0 ms
len=46 ip=hostip ttl=128 id=19794 sport=port flags=SA seq=3 win=64240 rtt=197.9 ms
nyxsonsleep
354 天前
@kokutou #22 装了 mosh ,udp 延迟似乎低一些?体验接近正常了。

不过为什么命令提示符号之前的部分有时候能被删掉,然后又重新显示出来,这正常吗?
nyxsonsleep
354 天前
@Soo0 #21 依然是 200ms 的延迟


sudo hping3 -c 4 -S -p port hostip
HPING hostip (ens33 hostip): S set, 40 headers + 0 data bytes
len=46 ip=hostip ttl=128 id=19791 sport=port flags=SA seq=0 win=64240 rtt=192.4 ms
len=46 ip=hostip ttl=128 id=19792 sport=port flags=SA seq=1 win=64240 rtt=215.1 ms
len=46 ip=hostip ttl=128 id=19793 sport=port flags=SA seq=2 win=64240 rtt=190.0 ms
len=46 ip=hostip ttl=128 id=19794 sport=port flags=SA seq=3 win=64240 rtt=197.9 ms
nyxsonsleep
354 天前
@Soo0 #21 问下如果架设成一个网站再套在 cfcdn 能加速 ssh 吗?(不了解这方面)
nyxsonsleep
354 天前
@salmon5 #25 应该和 https 没什么关系吧
leaflxh
354 天前
可能一条命令回显的耗时不仅需要一个 RTT

尝试抓了下包,发现一条命令执行的时候会有好几个 TCP 包

ssh.exec_command('ls -l')
ssh.exec_command('ls -l')
ssh.exec_command('ls -l')
ssh.exec_command('ls -l')
ssh.exec_command('ls -l')

#方便抓包,设置 sleep
print("wating...")
time.sleep(5)
t1=time.time()
ssh.exec_command('echo dick')
t2=time.time()
print(t2-t1)
time.sleep(5)

ssh.close()

输出 0.358 秒,服务器 ping 延迟在 180ms 左右

Actrace
354 天前
主要是怕丢包。不丢包的情况下,实际的延迟应该还行。丢一个包翻倍,基本没得玩。
话说这种情况可以用微林的服务来改善的。
Masoud2023
354 天前
海外机子别指望有什么正常的 SSH 体验了,基本 GFW 都在干扰。我韩国日本甲骨文,ping 也就 100 上下,ssh 上去要么卡死要么几秒断,导致我现在只能拿美国机器当跳板连上去,能 ping 通只代表这个链路可能是通的,不代表上层协议没有被重点关照。
AreYou0k
354 天前
@weiqk #1 顺便问一嘴, 怎么模拟 2%丢包啊.
nyxsonsleep
354 天前
@weiqk #14 用 hping 尝试了一下 tcp 的延迟,依然是 200ms 的延迟

sudo hping3 -c 4 -S -p port hostip
HPING hostip (ens33 hostip): S set, 40 headers + 0 data bytes
len=46 ip=hostip ttl=128 id=19791 sport=port flags=SA seq=0 win=64240 rtt=192.4 ms
len=46 ip=hostip ttl=128 id=19792 sport=port flags=SA seq=1 win=64240 rtt=215.1 ms
len=46 ip=hostip ttl=128 id=19793 sport=port flags=SA seq=2 win=64240 rtt=190.0 ms
len=46 ip=hostip ttl=128 id=19794 sport=port flags=SA seq=3 win=64240 rtt=197.9 ms

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/943686

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX