为什么Udcast比Netcat快很多倍?

为什么Udcast比Netcat快很多倍?

我偶尔会使用 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发送/接收。

相关内容