dd over ssh 如何报告读取速度超过网络带宽?

dd over ssh 如何报告读取速度超过网络带宽?

我正在执行此命令来测试来自删除服务器的连接:

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,它不实现压缩、身份验证或类似功能,尽管出于这个原因我通常不建议将它用于现实世界的文件传输。

相关内容