當microsoft tcp棧接收到乙個資料報時,會啟動乙個200毫秒的計時器。為了提公升應用程式的傳輸效能,microsoft tcp棧使用了下面的策略來決定什麼時候傳送ack確認資料報:
1、如果在200毫秒的計時器超時之前,接收到下乙個資料報,則立即傳送ack確認資料報。
2、如果當前恰好有資料報需要發給ack確認資訊的接收端,則把ack確認資訊附帶在資料報上立即傳送。
3、當計時器超時,ack確認資訊立即傳送。
阻塞模式下,後兩種好理解,令人困惑的是第一種,因為第一種意味著傳送端在沒有得到前乙個包確認的情況下,就傳送下乙個資料報,好像違反了阻塞規則。
這是因為nagle演算法的例外情況。microsoft tcp棧預設啟用了nagle演算法,這個演算法能夠將應用程式多次呼叫send傳送的資料拼接起來,當收到前乙個資料報的ack確認資訊時,一起傳送出去。下面是nagle演算法的例外情況:
1、如果microsoft tcp棧拼接起來的資料報超過了mtu值,這個資料會立即傳送,而不等
待前乙個資料報的ack確認資訊。在乙太網中,tcp的mtu(maximum transmission unit)
值是1460位元組。
2、如果設定了tcp_nodelay選項,就會禁用nagle演算法,應用程式呼叫send傳送的資料
包會立即被投遞到網路,而沒有延遲。
在以上兩種情況下,傳送方就可以不必等待ack就傳送下乙個包。
Nagle演算法和延遲ACK
nagle演算法 是為了減少廣域網上的小分組的數目,從而減少網路擁塞的出現。該演算法要求乙個tcp連線上最多只能有乙個未被確認的未完成的小分組,在該分組ack到達之前不能傳送其他的小分組,tcp需要收集這些少量的分組,並在ack到來時以乙個分組的方式傳送出去,其中小分組的定義是小於mss的任何分組。...
TCP連線中的ACK與ack
在tcp協議三報文握手建立連線的過程中,tcp請求報文段中存在ack和ack兩個數值。要搞清楚這兩個數值的含義,得了解tcp報文段的首部格式 1 tcp報文段的首部格式 tcp報文段分為首部與資料部分兩大部分,首部存放tcp報文段相關資訊,資料部分存放tcp報文段資料內容。首部按順序存在20個固定位...
TCP之Nagle演算法 延遲ACK
1.nagle演算法 是為了減少廣域網的小分組數目,從而減小網路擁塞的出現 該演算法要求乙個tcp連線上最多只能有乙個未被確認的未完成的小分組,在該分組ack到達之前不能傳送其他的小分組,tcp需要收集這些少量的分組,並在ack到來時以乙個分組的方式傳送出去 其中小分組的定義是小於mss的任何分組 ...