我正在执行此命令来测试来自删除服务器的连接:
ssh -l user $IP "dd if=/dev/zero count=3500 bs=1M status=progress" > /dev/null
这显示了表单的进度报告
3145728000 bytes (3,1 GB, 2,9 GiB) copied, 276,047 s, 11,4 MB/s
显然,dd
读取速度为每秒 11mb。然而,已知网络带宽上限低于约 20mbits,因此这不可能是实际接收到的数据量。
iftop
接收机器上显示的吞吐量约为 300 kbits,这比可能的情况要少得多,但更现实。
问题:dd
当通过 ssh 连接进行管道传输时, 的进度状态实际上意味着什么?当接收端跟不上时数据会丢失吗?究竟发生了什么?
答案1
SSH 可以作为压缩协议运行,并且根据您的结果判断,它在您的发行版或配置中默认启用(或者您正在使用ssh -C
)。因此,从您的读数来看,您的零流可以很好地压缩为更紧凑的内容,压缩比约为 300:最终结果约为原始大小的 0.3%。因此,它并不是测试网络速度的最佳选择,因为它只需要很少的网络带宽就可以在接收器上产生巨大的结果。
-o Compression=no
您可以在命令行上按需关闭压缩,也可以通过Compression no
在 SSH 客户端配置中指定来永久关闭连接的压缩。
另一种选择是使用更基本的东西,例如netcat
,它不实现压缩、身份验证或类似功能,尽管出于这个原因我通常不建议将它用于现实世界的文件传输。