延遲確認和Nagle算法


前篇文章介紹了三次握手和四次揮手,了解了TCP是如何建立和斷開連接的,文末還提到了抓包揮手時的一個“異常”現象,當時無法解釋,特地查了資料,知道了數據傳輸中的延遲確認策略。

何謂延遲確認策略?

WIKI:TCP delayed acknowledgment is a technique used by some implementations of the Transmission Control Protocol in an effort to improve network performance. In essence, several ACK responses may be combined together into a single response, reducing protocol overhead. However, in some circumstances, the technique can reduce application performance.即接收方收到包后,如果暫時沒有內容回復給發送方,則延遲一段時間再確認,假如在這個時間范圍內剛好有數據需要傳輸,則和確認包一起回復。這種也被稱為數據捎帶。延遲確認只是減輕網絡負擔,未必可以提升網絡性能,有些情況下反而會影響性能。

正是這個策略,讓圖中缺少了一次斷開連接的包,仔細看可以發現4405和4287之間時間也是差了200ms左右,為什么是200ms?根據TCP/IP詳解卷一里面的描述是絕不大部分平台的時延是按200ms來實現的,但是不允許超過500ms。

談到延遲確認就必須再談談Nagle算法,兩者的作用都是減輕網絡負擔,Nagle算法起源於John Nagle在RFC896的提議,所以命名為Nagle算法。Nagle在描述The small-packet problem時提到TCP在傳輸1字節有用信息時必須傳輸41字節的數據,其中20字節的TCP頭,20字節的IP頭,4000%的開銷在低負載網絡是可以容忍的,但是在重負載網絡,這種開銷是會導致網絡擁塞,進而導致重傳和數據丟失。這里暫時先不用關注擁塞、重傳等,后面再討論。重點關注下Nagle算法的實現原理,即在發送的數據在未被確認前,如果有新的小數據生成,那就把小數據收集起來,等湊足一個MSS或者收到確認后再發送。

說到這,我們就清楚了提到的延遲確認和Nagle算法的作用都是降低網絡負擔,提高傳輸效率,但是未必能提升網絡性能。

參考資料:

https://en.wikipedia.org/wiki/TCP_delayed_acknowledgment

https://www.rfc-editor.org/rfc/pdfrfc/rfc896.txt.pdf

https://en.wikipedia.org/wiki/Nagle%27s_algorithm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM