為什麼Udcast比Netcat快很多倍?

為什麼Udcast比Netcat快很多倍?

我偶爾會使用 Netcat 透過網路複製檔案或磁碟映像。雖然它完成了這項工作,但我總覺得無論使用 ssh、不使用 ssh、壓縮或不壓縮,它總是處於緩慢而緩慢的狀態。

我已經開始測試 udpcast (http://www.udpcast.linux.lu/cmd.html)並且看起來至少快了 5 倍(或更多)。使用壓縮管道的 Udpcast 有時會比不使用壓縮管道的 netcat 快很多倍。因為我的網路一般都是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 管道透過網路進行 udpcast 17.5 GiB

真實 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 發送/接收。

相關內容