程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 計算機網絡-nagle算法疑問 tcp/ip nagle 網絡

計算機網絡-nagle算法疑問 tcp/ip nagle 網絡

編輯:編程綜合問答
nagle算法疑問 tcp/ip nagle 網絡

最近在學習tcp/ip,在擁塞控制部分出現了nagle算法,網上看了一些資料
http://b.baidu.com/view/2468335.htm

Nagle算法的基本定義是任意時刻,最多只能有一個未被確認的小段。 所謂“小段”,指的是小於MSS尺寸的數據塊,所謂“未被確認”,是指一個數據塊發送出去後,沒有收到對方發送的ACK確認該數據已收到。
 Nagle算法的規則(可參考tcp_output.c文件裡tcp_nagle_check函數注釋):
(1)如果包長度達到MSS,則允許發送;
(2)如果該包含有FIN,則允許發送;
(3)設置了TCP_NODELAY選項,則允許發送;
(4)未設置TCP_CORK選項時,若所有發出去的小數據包(包長度小於MSS)均被確認,則允許發送;
(5)上述條件都未滿足,但發生了超時(一般為200ms),則立即發送。

問題:
關於nagle算法的第五點,假設有如下場景
client發送第一個字節package1(200ms超時)後,產生了第一個未確認ack,現假設網絡異常,client遲遲未收到對package1的ack,但同時client這邊產生了第二個字節需要發送,現在client端總共有2字節的待發送數據<mss(1500),經過一段時間後,package1的ack還未到達,但此時tcp緩沖區的2字節已經再次觸發條件5,現在client端會發送新的package嗎?如果發送後,未確認的ack數會變成2嗎(違反nagle算法)?或者是進行了 tcp重新分組後,即使發送了這個兩個字節的package未被確認ack仍然為1(怎麼感覺這就是答案呢)?求大神解答,3Q

最佳回答:


這個應該會觸發TCP重傳計時器超時而把第一個和第二個放在同一個包裡重新傳輸吧?

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved