我偶尔会使用 Netcat 通过网络复制文件或磁盘映像。虽然它能完成工作,但我总是觉得它总是比较慢,无论是使用 ssh、不使用 ssh、压缩还是不使用压缩。
我已经开始测试 udpcast (http://www.udpcast.linux.lu/cmd.html),而且似乎至少快了 5 倍(或更多)。带有压缩管道的 Udpcast 有时比没有压缩管道的 netcat 快很多倍。使用 Nc 的压缩在我的本地网络上通常会变慢,所以我通常避免使用它。因为我的网络通常以 1gbs 运行
下面是我使用的几个没有 ssh 也没有压缩的例子
dd if=somedisk |pv|nc -l -p 9999
nc networkaddr 9999|pv >./disk.img
udp-sender --full-duplex --file /dev/somedisk
udp-receiver --file ./disk.img
这些是我使用的一些基本示例。当然,我也使用压缩管道。在所有情况下,udpcast 的速度都会比 Netcat 快 5 倍,我想知道为什么会这样。
我甚至倾向于认为带有管道的 Udpcast 对于网络文件传输来说是很好的补充。
这里使用 tar 和 untar 管道通过网络进行 17.5 GiB 的 udpcast
实际 9m26.186s
用户 0m1.247s
系统 0m23.836s
下面是通过 Samba 从 Linux 到 Windows 的 cp 过程
real 9m17.729s
user 0m0.311s
sys 0m11.044s
是否可以使用 Netcat 捕获 Udpcast 性能?
我有时询问的原因是某些发行版现在可能提供 Udpcast。
答案1
nc
默认使用 TCP。
TCP 以较低的“窗口大小”开始,并在连接期间加速,因为最大窗口大小被确定为更大。此外,TCP 发送额外的流量来维持连接,即 ACK 数据包。这对于支持“连接”概念和可靠、有序的交付是必要的。
UDP 不支持连接或可靠传输,因此不存在任何额外的负担,因此速度更快。
我没有玩过udpcast
太多,但是如果它没有任何错误检测机制,那么如果您的网络决定丢弃数据包,您将面临无法获得传输内容的良好副本的风险。
nc
有一个-u
选项IIRC,使用UDP而不是TCP发送/接收。