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

2023-05-28 22:38:08 +08:00
 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

7112 次点击
所在节点    程序员
78 条回复
weiqk
2023-05-28 22:43:19 +08:00
丢包 2%,能连上算你运气不错了,ssh 是 tcp 协议,有握手机制

顺便提一嘴,做任何互联网的程序,都必须模拟 2%丢包正常使用才算合格
nyxsonsleep
2023-05-28 22:51:00 +08:00
@weiqk #1 ping 也是 tcp 协议,那么为什么 ping 是 200ms ,ssh 是 600ms 呢?
mieq
2023-05-28 22:53:19 +08:00
@nyxsonsleep ping 是 tcp ?你先查查吧
yyzh
2023-05-28 22:55:22 +08:00
延迟不重要,丢包是最为致命的
blankmiss
2023-05-28 23:10:43 +08:00
@nyxsonsleep 那 icmp 协议是什么
ncepuzs
2023-05-28 23:16:06 +08:00
@nyxsonsleep 计网怎么学的
proxychains
2023-05-28 23:16:54 +08:00
@nyxsonsleep ping 是 tcp !
ixiumu
2023-05-28 23:35:45 +08:00
tcp udp icmp 是同级 都属于 tcp/ip
但是 ping 不是 op 理解的 tcp
tool2d
2023-05-28 23:37:14 +08:00
我 ssh 也卡,后来发现可以用代理,速度就好一些了。
totoro52
2023-05-28 23:54:27 +08:00
@mieq Ping 是工作在 TCP/IP 网络体系结构中 应用层 的一个服务命令, 主要是向特定的目的主机发送 ICMP ( Internet Control Message Protocol 因特网报文控制协议) Echo 请求报文,测试目的站是否可达及了解其有关状态
nyxsonsleep
2023-05-29 00:19:53 +08:00
@tool2d #9 我用代理似乎没效果。是这条指令吗,我看服务器的 ssh 登录日志里 ip 信息已经发生变化了。但是延迟没有改变。
ssh -o ProxyCommand="nc -X 5 -x localhost:7890 %h %p" username@cloudhost
akira
2023-05-29 00:21:59 +08:00
单程 200 ,来回 400 ,测出来 500 左右,这没啥问题啊。。
HeyEvan
2023-05-29 00:52:07 +08:00
试试 Cloudflare 的 Zero Trust ,作为备用方案
weiqk
2023-05-29 00:59:04 +08:00
@nyxsonsleep ip 和 icmp(ping)工作在网络层,udp 和 tcp 工作在传输层,除了 tcp 外另外三个是无状态不可靠协议,tcp 是可靠协议,有重传机制,所以你网络有丢包会特别慢


@akira icmp 没有时间戳,我猜 ping 的时间是往返时间,如果有时间戳两台机器时间不同步似乎要悲剧
bao3
2023-05-29 01:21:10 +08:00
居然有人说 Ping 是 tcp…… 自己拿 tcpdump 抓一下 ping 包,2 秒钟就验证出对错了……
nyxsonsleep
2023-05-29 01:31:24 +08:00
@akira #12 可以了解一下什么是 RTT
nyxsonsleep
2023-05-29 01:35:29 +08:00
@ncepuzs #6 我记得 icmp 在 ip 层,就是 tcp/udp 的下层。既然 ip 走的 tcp/udp ,那我就记成网络层都要走传输层的协议,不然这个网络层级的意义何在。。。谁知道这个 icmp 还要单独走。
leido
2023-05-29 01:37:21 +08:00
@nyxsonsleep icmp 和 tcp 同一层的
leaflxh
2023-05-29 01:37:42 +08:00
可以试试 tcping
flyqie
2023-05-29 02:32:22 +08:00
@nyxsonsleep #17

网络层都要走传输层的协议?你说反了吧。

不是传输层需要往下走网络层吗。。

tcp/ip 一共有四层,osi 有七层,无论在哪个模型里 icmp 都跟 ip 是同一层(网络 /网际)啊。。

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

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

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

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

© 2021 V2EX