Nagle演算法和延遲ACK

2021-08-15 01:40:44 字數 919 閱讀 6312

nagle演算法

是為了減少廣域網上的小分組的數目,從而減少網路擁塞的出現。

該演算法要求乙個tcp連線上最多只能有乙個未被確認的未完成的小分組,在該分組ack到達之前不能傳送其他的小分組,tcp需要收集這些少量的分組,並在ack到來時以乙個分組的方式傳送出去,其中小分組的定義是小於mss的任何分組。

該演算法的優越之處在於它是自適應的,確認到達的越快,資料也就發哦送的越快;而在希望減少微小分組數目的低速廣域網上,則會傳送更少的分組;

延遲ack

如果tcp對於每個資料報都傳送乙個ack確認,那麼只是乙個單獨的資料報為了傳送乙個ack代價比較高,所以tcp會延遲一段時間,如果這段時間有資料傳送到對端,則捎帶傳送ack,如果在延遲定時器出發的時候發現ack尚未傳送,則立即單獨傳送。

延遲ack的好處:

(1)避免糊塗視窗症候群

(2)傳送資料的時候將ack捎帶傳送,不必單獨傳送ack

(3)如果延遲時間內有多個資料段到達,那麼允許協議棧傳送乙個ack確認多個報文段

關閉nagle演算法:

使用tcp套接字選項tcp_nodelay可以關閉套接字選項;

如下場景考慮關閉nagle演算法:

(1) 對端不向本端傳送資料,並且對延時比較敏感的操作;這種操作沒法捎帶ack;

(2) 如上寫-寫-讀操作;對於此種情況,優先使用其他方式,而不是關閉nagle演算法:

–使用writev,而不是兩次呼叫write,單個writev呼叫會使tcp輸出一次而不是兩次,只產生乙個tcp分節,這是首選方法;

–把兩次寫操作的資料複製到單個緩衝區,然後對緩衝區呼叫一次write;

–關閉nagle演算法,呼叫write兩次;有損於網路,通常不考慮;

TCP之Nagle演算法 延遲ACK

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

延遲確認和Nagle演算法

前篇文章介紹了三次握手和四次揮手,了解了tcp是如何建立和斷開連線的,文末還提到了抓包揮手時的乙個 異常 現象,當時無法解釋,特地查了資料,知道了資料傳輸中的延遲確認策略。何謂延遲確認策略?正是這個策略,讓圖中缺少了一次斷開連線的包,仔細看可以發現4405和4287之間時間也是差了200ms左右,為...

TCP IP延遲確認和Nagle演算法

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