?? rfc2861.txt
字號:
組織:中國互動出版網(http://www.china-pub.com/)
RFC文檔中文翻譯計劃(http://www.china-pub.com/compters/emook/aboutemook.htm)
E-mail:ouyang@china-pub.com
譯者:廖正軍(jerry.liao jerry.liao@163.net)
譯文發布時間:2001-7-5
版權:本中文翻譯文檔版權歸中國互動出版網所有。可以用于非商業用途自由轉載,但必須
保留本文檔的翻譯及版權信息。
Network Working Group M. Handley
Request for Comments: 2861 J. Padhye
Category: Experimental S. Floyd
ACIRI
June 2000
TCP 擁塞窗口檢驗
(TCP Congestion Window Validation)
本備忘錄的狀態
本文檔講述了一種Internet社區的實驗協議,它并沒有制定一種Internet標準,需要進
一步進行討論和建議以得到改進。本備忘錄的發布不受任何限制。
版權聲明
Copyright (C) The Internet Society (2001).
摘要
TCP 擁塞窗口控制網絡中一個TCP流的包的數目,然而,發送方長時間無響應或者由
于應用程序的限制會導致擁塞窗口的無效,此時,擁塞窗口不在反映網絡的當前狀況,本文
檔描述了對TCP擁塞控制算法的一種簡單修正,使得在發送后一段足夠長的時間后,擁塞
窗口。同時使用慢啟動決值來保存擁塞窗口以前的值。
當擁塞窗口在應用程序限制期間增加時,也會導致一個無效窗口,而原來擁塞窗口的值
可能從來沒有利用,我們建議在TCP發送方有應用程序限制時,不增加擁塞窗口的大小,
我們從采用模擬和FREEBSD中實現的實驗揭示了這些算法。
目錄
1 轉換和異義 2
2 介紹 2
3 描述 3
3.1 減小擁塞窗口的基本算法 4
3.2減小擁塞窗口的偽碼 4
4 模擬 5
5 實驗 5
6 結論 6
7 參考 6
8 安全性考慮 7
9. 作者地址 7
10. 版權說明 8
致謝 8
1 轉換和異義
關鍵字MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT,
RECOMMENDED, MAY, and OPTIONAL,出現在本文中時,參照[97]中的解釋。
2 介紹
TCP擁塞窗口控制網絡中一個TCP流中包的數量,擁塞窗口采用慢增快減(AIMD)的機
制來試探網絡帶寬,作動態調整了改善網絡狀態。AIMD機制在發送方有連續的數據發送時
工作良好,這對使用緩沖數據的TCP來說是很典型的。對于使用TCP的TELNET應用程序
來說,發送方只有很少的數據或沒有數據發送,發送速率也是由用戶產生數據的速率決定的,
隨著WEB的誕生,包括動態產生數據的TCP發送方和持續連接TCP的HTTP1.1的發展,
應用程序限制和網絡限制之間的交互變得越來越重要,更精確的說,我們把網絡限制期間定
義為發送者以滿窗口大小發送數據,
當發送者由于應用程序限制而造成時間太長會導致擁塞窗口的無效,在由于網絡限制期
間,由于窗口數據總是沒有丟失,擁塞窗口總是被檢驗有效,此時,總是有超時新數據的確
認輸入流給出網絡中最近可用的帶寬,與之相反,在由于應用程序限制期間,用擁塞窗口來
估計可用帶寬隨著時間流逝而準確性降低,特別的,被用來網絡限制的容量可能會被其他的
流量占用,
當前的TCP實現在一段時間的IDLE后,有一些啟動的措施,在IDLE的時間超過RTO
估計值(正如RFC2581和附錄[VJ88]所建議的)后,一些TCP實現采用慢啟動機制,而其他
的實現則并不降低它們的擁塞窗口,RFC 2581 中推薦:如果TCP在超過超時重發的間隔內
沒有數據發送,TCP應將窗口大小設置成不超過原來窗口大小,在[HTH98]中討論了在IDLE
后TCP慢啟動的建議,除了在TCP和IP環境中,擁塞信息的檢驗也在其他的環境中提到,
如在ATM網絡中的“或使用它,或丟棄它”的機制中。
在一段應用程序限制后,為了討論擁塞窗口的有限性,我們對TCP的擁塞控制算法作
了一點簡單的修改,使得在發送后擁塞窗口的大小從一段足夠長的應用程序限制退化到網絡
限制期間,特別的,在一段IDLE后,對于在每個數據流保持IDLE的RTT內,發送方都應
將它的擁塞窗口減半。
當擁塞窗口大小減小時,慢啟動的闋值保留為最近擁塞窗口的大小,特別的,在一段應
用程序限制之后,闋值從不降低,在窗口減小以前,闋值被設為它的當前最大值,這種闋值
的使用容許TCP發送方在一段應用程序限制后增加它的發送速率來加快慢啟動恢復擁塞窗
口的以前的值,更精確的,在一段應用程序限制后,擁塞窗口減小,如果闋值小于窗口大小
的3/4,那么闋值在擁塞窗口減小之前,闋值增加到窗口的3/4。
在應用程序限制期間,當擁塞窗口增大時,也會導致無效的擁塞窗口,而擁塞窗口原來
的值可能從來沒有使用,我們都知道,當有確認幀到達時,如果接收方的廣告窗口和滿啟動
及擁塞避免算法容許,沒有檢查擁塞窗口原來的值有沒有被使用,當前所有的TCP實現都
增加擁塞窗口大小, 本文建議在應用程序限制期間,并不激活窗口增加算法[MSML 99],
特別的,當TCP發送方在應用程序限制時,發送方并不增加擁塞窗口,這種限制防止擁塞
窗口的任意增加,以防止擁塞窗口不被網絡支持,在[MSML 99 SETION 5.2]中:“這種限制
保證只有在TCP實際上向網絡成功發送數據后,窗口大小才增加。”
在一段應用程序限制后保持一個大的擁塞窗口一個值得考慮的問題是在一段靜止期間
后,發送方突然有大量的數據要發送,可能立即發送一個滿窗口的包的數據,這種發送突發
大量包的問題可以被基于速率的方法(RBP, [VH97])有效的處理,或者最大發送數據控制
[FF96],即使使用限制包的發送機制,一個沒有充分使用的擁塞窗口不能被作為當前可用帶
寬的表示,
3 描述
當一個TCP發送者有足夠的數據來充分使用網絡容量時,窗口大小和闋值將被設置為與網
絡狀況相似的值,當TCP發送方停止發送數據時,流將停止采樣網絡狀況,并將導致擁塞
窗口的值不準確,我們相信,在這種環境下,對每個RTT內流不活動的狀況,將擁塞窗口
減半是一種正確的處理方法,減半的值是很保守的數值,這是建立在有丟包的情況下,倍減
將多快減小窗口的基礎上。
另一種可能是發送者并不停止發送,是由于應用程序限制而不是網絡限制,使得提供的數據
少于擁塞窗口容許發送的數據。在這種情況下,TCP流仍然采樣網絡狀況,但并不提供足
夠的流量來保證在網絡中有足夠的帶寬來以滿擁塞窗口來發送數據,在這些情況下,我們相
信,對發送方而言,在每個RTT中跟蹤擁塞窗口的最大值,并將擁塞窗口的值設為當前窗
口和曾經的最大值的均值,是一種正確的處理。
在擁塞窗口減小以前,闋值被設為當前值和窗口的3/4兩者之中的最大值,如果發送方
有比減小了的窗口大小有更多的數據發送,TCP將慢啟動窗口值到原來窗口的值。
窗口的3/4可以理解為擁塞窗口的最近一段時間內的保守估計值,且TCP 應能慢啟動
到這個值,每次擁塞窗口達到某個最大值,TCP 降低其擁塞窗口的大小,當處于這種穩定
狀況,擁塞窗口的平均值為最大值的3/4,當連接變為應用程序限制時,窗口大小將變為最
大值的3/4,在這種情況下,窗口大小本身代表了擁塞窗口大小的平均值,然而,當窗口等
于最大值時,如果連接變為應用程序限制,那么擁塞窗口的平均值為窗口的3/4。
有一種可能性是將闋值設為當前闋值和窗口原來大小兩者之間的最大值,容許TCP慢
啟動至窗口的原來大小,對于闋值的設置,可以做更進一步的實驗來評估這兩種選擇。
在對于一個確認幀的回應時,對于擁塞窗口的增加的各種情況,我們相信,當確認幀到
達時,只要窗口是滿的,增加擁塞窗口都是正確的處理方法。
我們把這種改進稱為TCP擁塞窗口校驗(CWV),因為這總是保證擁塞窗口總反映當前
的網絡狀況,
3.1 減小擁塞窗口的基本算法
在CWV算法中,一個關鍵的問題是在應用程序限制的流中,對每一個往返時間內,如
何將這些原則應用于降低擁塞窗口中去,我們使用TCP 的重發超時器作為往返時間的合理
上限,并在每一個重發超時內迅速降低擁塞窗口大小。
基本算法在TCP中可按如下進行實現:當TCP發送一個新包時,它檢查自從前一包發
送后,是否已過了一個重發超時,如果是,則闋值設為窗口的3/4和當前闋值兩者之間的最
大值,然后,自從前一包發送后過一個重發超時,則將擁塞窗口減半,另外,T_prev被設
置為當前時間,而W_used被重置為0,T_prev被用來決定自從發送的上一次網絡限制或在
一段IDLE已經減小了窗口后的流逝的時間,當發送方是應用程序時,W_used保留自從發
送方為上一次網絡限制來的被使用的最大擁塞窗口值。
在最近IDLE時間內決定RTO的數目的機制可以通過一個計時器來實現,計時器在最
后一次的包發送后的每一個RTO內超時,而不是檢查每一個包,在不同操作系統上的效率
將表現那一個更容易實現。
在TCP發送一個包以后,它會檢查這個包是否填滿了擁塞窗口,如果是,發送者是受
網絡限制的,并把T_prev的值設為當前TCP的時鐘,W_used被置為0。
當TCP發送一個沒有填滿擁塞窗口的包時,并且TCP發送隊列為空時,發送者是受應
用限制的,發送方檢查未確認的幀是否比W_used大,如果是,W_used被置為未確認的幀
數,另外,TCP檢查自從T_prev以來流逝的時間是否大于RTO,如果是,TCP在一個RTO
間隔內,但小于兩個RTO內是應用程序限制,而不是網絡限制的,在這種情況下,TCP將
闋值設為窗口的3/4和當前闋值兩者之間的最大值,并將其擁塞窗口減小到(cwnd+W_used)/2.
W_used被置為0,T_prev的值設為當前的時鐘,這樣直到另一個RTO流逝,才會進一步減
小擁塞窗口,因此,在應用程序限制時,CWV算法每個RTO減低擁塞窗口的大小。
3.2減小擁塞窗口的偽碼
Initially:
T_last = tcpnow, T_prev = tcpnow, W_used = 0
After sending a data segment:
If tcpnow - T_last >= RTO
(The sender has been idle.)
ssthresh = max(ssthresh, 3*cwnd/4)
For i=1 To (tcpnow - T_last)/RTO
win = min(cwnd, receiver's declared max window)
cwnd = max(win/2, MSS)
T_prev = tcpnow
W_used = 0
T_last = tcpnow
If window is full
T_prev = tcpnow
W_used = 0
Else
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -