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

337 天前
 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

6518 次点击
所在节点    程序员
78 条回复
weiqk
337 天前
丢包 2%,能连上算你运气不错了,ssh 是 tcp 协议,有握手机制

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


@akira icmp 没有时间戳,我猜 ping 的时间是往返时间,如果有时间戳两台机器时间不同步似乎要悲剧
bao3
337 天前
居然有人说 Ping 是 tcp…… 自己拿 tcpdump 抓一下 ping 包,2 秒钟就验证出对错了……
nyxsonsleep
337 天前
@akira #12 可以了解一下什么是 RTT
nyxsonsleep
337 天前
@ncepuzs #6 我记得 icmp 在 ip 层,就是 tcp/udp 的下层。既然 ip 走的 tcp/udp ,那我就记成网络层都要走传输层的协议,不然这个网络层级的意义何在。。。谁知道这个 icmp 还要单独走。
leido
337 天前
@nyxsonsleep icmp 和 tcp 同一层的
leaflxh
337 天前
可以试试 tcping
flyqie
337 天前
@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