為什麼tcp連接的傳輸速度慢,斷開重新連接後,傳輸速度就變快了呢?
12-28
經常會出現這種情況,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滑動窗口的發送窗口和接收窗口的說法正確嗎?