延遲確認和Nagle演算法

2021-09-25 00:27:24 字數 617 閱讀 9332

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

何謂延遲確認策略?

正是這個策略,讓圖中缺少了一次斷開連線的包,仔細看可以發現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演算法的作用都是降低網路負擔,提高傳輸效率,但是未必能提公升網路效能。

TCP IP延遲確認和Nagle演算法

延遲確認 接收端收到資料之後,並不立即傳送ack確認收到資料,而是延遲傳送ack,等待一段時間,以期望和沿該方向傳送的資料一起傳送。nagle演算法 盡可能傳送大塊資料,避免使網路中充斥小分組,從而減少傳送包的個數來增加網路的利用率。nagle演算法要求在任意時刻,最多有乙個未被確認的分組,在收到確...

Nagle演算法和延遲ACK

nagle演算法 是為了減少廣域網上的小分組的數目,從而減少網路擁塞的出現。該演算法要求乙個tcp連線上最多只能有乙個未被確認的未完成的小分組,在該分組ack到達之前不能傳送其他的小分組,tcp需要收集這些少量的分組,並在ack到來時以乙個分組的方式傳送出去,其中小分組的定義是小於mss的任何分組。...

TCP之Nagle演算法 延遲ACK

1.nagle演算法 是為了減少廣域網的小分組數目,從而減小網路擁塞的出現 該演算法要求乙個tcp連線上最多只能有乙個未被確認的未完成的小分組,在該分組ack到達之前不能傳送其他的小分組,tcp需要收集這些少量的分組,並在ack到來時以乙個分組的方式傳送出去 其中小分組的定義是小於mss的任何分組 ...