當使用nc
, scp
,wget
在專用 2Mbps 鏈路上的兩台機器之間傳輸文件時,我獲得的速度在 0.5 到 1 Mbps 之間。然而,當我使用iperf -c 10.0.1.4 -t 20 -P 12
(例如)時,我可以最大限度地提高連結速度(獲得穩定的 2Mbps)。
有沒有辦法進行單流傳輸(例如由 完成的傳輸scp
)以利用全部/大部分連結?某種 tcp 設置,或 iptables...?
答案1
首先,我們承認您正在比較蘋果和橘子。
nc
,scp
並且wget
通常使用單一 TCP 套接字進行傳輸。但是,當您使用 時iperf -P 12
,您正在使用十二並行 TCP 套接字。這是一個重要的區別。並行連線越多,頻寬消耗就越大。實際上,speedtest.net
使用多個並行 TCP 流來可靠地測量頻寬容量,即使您的鏈路存在嚴重的資料包遺失,導致單一 TCP 套接字出現問題;我見過它們使鏈路飽和,損失為 1.5%(這會大幅降低普通 TCP 套接字上的吞吐量)。
單套接字 TCP 傳輸次佳的主要原因是封包遺失和延遲/抖動。您需要識別並糾正您的連結是否有任何持續的資料包丟失...我通常使用mtr
或者winmtr
為了這...
mpenning@mpenning-T61:~$ mtr -n <destination_ip>
HOST: mpenning-T61 Loss% Snt Last Avg Best Wrst StDev
1. 10.239.84.1 0.0% 407 8.8 9.1 7.7 11.0 1.0
2. 66.68.3.223 0.0% 407 11.5 9.2 7.1 11.5 1.3
3. 66.68.0.8 0.0% 407 19.9 16.7 11.2 21.4 3.5
4. 72.179.205.58 0.0% 407 18.5 23.7 18.5 28.9 4.0
5. 66.109.6.108 5.2% 407 16.6 17.3 15.5 20.7 1.5 <----
6. 66.109.6.181 4.8% 407 18.2 19.1 16.8 23.6 2.3
7. 4.59.32.21 6.3% 407 20.5 26.1 19.5 68.2 14.9
8. 4.69.145.195 6.4% 406 21.4 27.6 19.8 79.1 18.1
9. <destination_ip> 6.8% 406 22.3 23.3 19.4 32.1 3.7
如果您看到隨著時間的推移不斷丟失資料包的躍點,和它後面的躍點正在丟失資料包,那麼您需要修復導致資料包遺失的任何原因。我通常會測量至少五到十分鐘……如果我沒有立即發現問題,通常會測量幾個小時。
另一種情況是延遲......您需要透過有關端到端延遲的具體資訊以及來源/目標作業系統資訊進一步量化問題,然後才能有人對此做出回應。
所以你有一些選擇......要么:
- 找出導致你效能下降的原因
- 將您的傳輸分成多個檔案並並行傳輸它們(以克服現在降低吞吐量的任何因素)