二層交換的傳輸鏈路,天津-貴陽長途傳輸,100M帶寬,TCP跑到三四十M就不行了,UDP測試沒問題。?
延時對TCP協議的影響原理是什麼?
TCP有一個傳輸效率的公式:
Delivery Rate = CWND / RTT
CWND:擁塞窗口大小,以位元組為單位。
* 在沒有出現擁塞時,CWND = 對端通告window大小
* 出現擁塞時,CWND 受本端擁塞演算法控制,原則上&<=帶寬最大值*RTT
RTT:TCP報文一來一去的延遲,以秒為單位。
如果想充分利用100M帶寬,需要儘可能增加CWND大小,而在沒有擁堵時,等於對端advertised window (對端緩存)的大小,假定RTT時間是基本不變的。
為何TCP多線程可以充分利用帶寬?
變相增加對端的緩存大小。為何UDP可以充分利用帶寬?因為UDP沒有擁塞機制,應用程序發送的速率 = 鏈路的最大帶寬。窗長設計的有問題?如果線路質量好,沒有明顯的丟包,不會出現這種情況。不知道你的測試方法是怎樣的……如果測試軟體支持的話看一眼顯示的window size。tcp好比一根管道,長途的tcp是一根很長的管道,要讓它高效運轉需要隨時把它灌滿,因此需要比較大的窗長。linux支持window_scale,可以查一下兩端的配置。
清晨手機碼字有,簡短為主。
這個問題重點就是TCP的擁塞控制(congestion control)。延遲,丟包對傳輸速度的影響不同的演算法有不同的考量,具體演算法有基於丟包的reno,cubic;基於延遲的ledbat;以及16年Google發布的基於擁塞的BBR(請參我之前的回答:https://www.zhihu.com/question/53559433/answer/136002384?utm_source=qqutm_medium=social);等等...
bing查一下
tcp吞吐量計算公式 - 國內版 Bing
大神已經回答了窗口問題,我要補充一個,有可能是運營商模塊壞了,在應用層看不出來,當時我們公司一條電路專線出問題,速度正常但是跑某些應用就會有延時和丟包。以前我在管控中心待過,我就問他能不能試試換一下我們那個電口的核心模塊,這是最快的方案,果不其然,業務重新上線後就正常了。我估計這個是模塊內部邏輯電路板出現了問題導致。
不請自答…題主所說的,『到了三四十M就不行』的意思是『流量無法突破40M』還是『流量能突破40M但是丟包』?如果是『流量無法突破40M』,建議確認TCP數據包的大小。數據包都有開銷,開銷固定,數據包越小,傳輸率越低——建議用大包測試。如果是『流量到了40M開始出現丟包/其他問題』,建議考慮『buffer』的因素,但也和線路供應商設備性能相關,最好控制變數進行測試。目前在一家ISP當運維工程師,處理故障時有遇到上述類似問題,有一點經驗,僅供參考。
本地buffer要大於帶寬時延積
https://www.switch.ch/network/tools/tcp_throughput/
Understanding Throughput and TCP Windows
等大神來回答。。
用過一條移動的IEPL北京至香港的,基本都是TCP ,一般到能跑滿,但是到90M左右,網路會出現不穩定(延遲,輕微丟包)因為只是傳輸數據,沒有做QOS,流量採集的間隔時間長,不排除是流量突發造成的。
有哥們也跟我說過他們有類似的情況,也是北京到香港採用的是聯通的專線,小文件同步,流量也是一直跑不上去,找過運營商檢查說是沒有問題。不請自來,也不清楚鏈路兩端的介面和設備。之前有一個笨辦法不妨試一下。先重新做水晶頭,再換設備上的光模塊,還不成把中途鏈路跳接點的跳纖也換了。每次都認真做標記,拍照,做記錄。不然無法恢復初始物理形態。
我所遇到的傳輸網出現過的類似的問題,可能的原因:
1,傳輸設備的MTU值設定不合理;這個要根據用戶的數據包特性來確定合適的值;
2,傳輸設備的業務板卡緩存大小,直觀上就是設備型號問題。比如都利用的華為傳輸設備,OSN500和SBS1500的差別有時非常大,大帶寬的電路基本不會選500設備;
3,傳輸通路時延。不過國內的長途電路時延較大的也就30ms左右,基本沒出現過因為時延造成丟包問題。
其實我是進來向車小胖等專家學習的。
這是TCP/IP在廣域網上的正常現象
TCP發完一段數據要等收端應答的,收到應答後才會繼續發後續的數據。收發端之間的長距離傳輸時間會造成應答延遲,所以傳輸的吞吐率上不去。這就好比你給女朋友發簡訊討論去哪兒開房,她回簡訊有拖延症的話你們兩個一天聊不上幾句。UDP不需要等接受端的確認,所以吞吐率可以接近專線帶寬最高。這好比你單相思騷擾一個姑娘,手有多快你就能發多快。
解決方法:
想不花錢就把傳輸協議從TCP改成UDP,但是就沒有流控和重傳機制了。不缺錢的話買一對廣域網加速設備在天津和貴州各放一台做TCP應答騙騙發端,兼實時壓縮數據和去重,調試好了會有很大驚喜。這類設備國產有深信服,國外有riverbed, cisco,citrix二層交換機TCP協議非數據報文過多
BBR可以解決你的問題!丟包和延時都會影響TCP的速度!
有個不成熟的想法,題主測一下鏈路丟包情況。丟包對 TCP 的速度有影響。。
推薦閱讀:
※有哪些TCP通信的應用層的開源項目值得學習?
※關於 python gevent 架框 作為 TCP伺服器 的 代碼問題 , 每個 socket 的 消息 接收 是否有使用 事件監聽回調的方法呢?
※如何學習 TCP/IP 協議?
※在TCP的四次分手當中,被動關閉方是如何知道數據已經接收完了?
※DNS解析的過程是什麼,求詳細的?