為什麼tcp連接的傳輸速度慢,斷開重新連接後,傳輸速度就變快了呢?

經常會出現這種情況,tcp連接的傳輸速度慢,斷開重新連接後,傳輸速度就變快了,這是因為擁塞控制嗎,如果是移動網路,是否還跟信道的分配有關呢


謝謝邀請。

TCP連接速度慢90%是由於丟包!

無線信號差,信號差就會造成波形失真,一旦失真基站或AP就無法將波形轉換為數據而丟棄,一旦丟棄,TCP兩端就會超時重傳丟失的包,同時將傳輸速率減半,如果重傳的包也被丟棄,再重傳,速率再減半,用戶的感覺就是傳輸速度很慢很慢,和蝸牛爬一樣。其實很多時候網路屬於虛假連接,手機顯示連接,信號差的幾乎不可用。

你說的情況就屬於這90%範圍內,重新綁定AP或者基站,綁定成功一般信號都比較好,這時你的TCP連接沒有丟包,感覺就會快很多。

另外10%伺服器過載,伺服器處理不過來直接就丟了,然後造成重傳,啟動傳輸速率減半機制。即然你說重啟連接就會很快,伺服器應該不會過載。

你說的流量控制不會造成傳輸速度低,流量控制是為了避免快速的一方傳輸速度太快,超出慢速的一方的處理能力而丟包,然後快速一方重傳,再被丟的惡性循環,所以流量控制是一種匹配雙方傳輸速度的機制,最終找到一個平衡點,既不快也不慢,剛剛好。


我也一直想知道為什麼,這個困惑來自兩個方面,一方面經常遇到別人的程序出現這個情況,另一方面自己的程序似乎沒有出現過這種情況,所以也沒法調試……


丟包導致等待,車小胖說的已經很明白了,個人認為還有心理作用,刷新後人們心理預期的時間比第一次打開的耐受時間有所延長


TCP Ack包丟失引起TCP窗口耗盡,RTO時間加倍重傳.
重建TCP連接可以Reset 擁塞控制演算法的參數,使速度稍微快一點.
嚴格來說,這個是Reno/New Reno演算法對於高誤碼率物理層兼容性差的鍋, 但是好像也很少有人會換成BIC或者CUBIC,當然這些好像也沒好多少.


根據不靠譜工程師猜測 可能是太多幀在等待ack 所以暫停發送了


推薦閱讀:

如何用Python寫一個分散式爬蟲?
為什麼網關與主機可以不在同一個網段?
ip地址是否可以取代mac地址,Fibre Channel over IP是否只使用ip地址進行通信?
TCP協議自2000年後有什麼變化?
tcp滑動窗口的發送窗口和接收窗口的說法正確嗎?

TAG:計算機 | 計算機網路 | TCPIP | TCP | 網路工程 |