12月 07, 2010

TCP 緩啟動 (slow start)

In Transmission Control Protocol (TCP), the congestion window is one of the factors that determines the number of bytes that can be outstanding at any time. Maintained on the sender, this is a means of stopping the link between two places from getting overloaded with too much traffic.

在 TCP 連線中,使用了 congestion window 來控制發送端的速度。
這個值是由 sender 來保管的。那 receiver 用什麼參數?! 聽說是叫 Advertise window

Initially:
cwnd = 1;
ssthresh = infinite;

New ack received:
if (cwnd < ssthresh)
cwnd = cwnd + 1; /* 每收到 1 個 ACK , cwnd 額度加 1 */
else
cwnd = cwnd + 1/cwnd; /* 每收到 1 個 ACK ,cwnd 額度加 1/cwnd */
/* 當 cwnd=32 時,送出 32 pkts,會收到 32 acks */
/* 這意味 NewCwnd= cwnd + 32 * 1/cwnd(=32) = 33 */
Timeout:
ssthresh = cwnd/2; /* 如果之前爆掉了 就把你原本的額度砍半*/
cwnd = 1; /* 並且讓你從頭來過,進行 slow start */

TCP 使用滑動視窗(sliding window)使得資料流傳輸更有效率。在滑動視窗協定中,將之定義為 window size ≦ min (cwnd,RAwnd),其中 cwnd 為 congestion window,限制封包傳送數率;RAwnd 為 Receiver Advertisment Window,接收端建議視窗的大小。ㄧ般來說,此值會大於 cwnd,因此 window size幾乎等於 cwnd。

緩慢啟動機制(Slow-Start)
起初發送端會分配 1 個 MSS 的額度量來發送資料,當在預期時間(Timeout)
內收到全部回覆時,發送端會分配為前次 cwnd 兩倍的量,接者都以2^n 指數形態成長。

壅塞避免機制(Congestion Avoidance)
當在預期時間內收到全部回覆時,發送端會將 cwnd 的值加 1 個 MSS,以線性的方式成長。

[Timeout]
設定 threshold = 當前 cwnd / 2
然後 cwnd = 1
重新進行 slow start

**

[TCP Tahoe]
TCP 早期的版本,Tahoe具備 TCP 基本架構,包括慢啟動、壅塞避免、重傳狀態。TCP 在 Tahoe 這版本中加入了快速重傳(Fast retransmit)的方法。快速重傳機制是依據重複(Duplicate) ACKs 作為重送封包的機制,當收到 3 個重複 ACKs,傳送端會將封包視為遺失,不需 Timeout 就進入重送機制(將 ssthresh 的值設為 cwnd 的 1/2,即 cwnd 的值設為 1),表示的確有個節段遺失,而不是因為順序混亂而引發重複 ACKs。

[TCP Reno]
Reno(RFC 2581)為目前最普遍的版本,修改 Tahoe 演算法並加入快速恢復
(Fast recovery)機制。Reno 以快速恢復取代 Tahoe在重傳遺失封包後就進入慢啟動狀態。在 Reno 版本中快速重傳機制在重傳遺失封包後,將 cwnd 設為偵測到遺失時的 1/2,並當每收到一個重複 ACKs 就繼續送出新的封包來提高頻寬利用率,可以更快達到 threshold 值,已進入壅塞避免階段。快速重傳及快速恢復都是使用計算重複 ACKs 的技巧,以維持節段號碼順序。

[TCP Vegas]
Brakmo 和 Peterson 提出採用觀察 RTT的變化量來控制 cwnd 的大小,以計
算預期的效能比較實際的效能來加以決定是否增加或減少 ssthresh 直,Vegas 修改了 Reno 的技術並重新設計了以下三種方法,如下介紹:
修改 slow-start ( Modified slow-start )
希望能更有效率的利用頻寬並且避免 cwnd 值上升太快而引發封包遺失情況。cwnd 值大約經過 2 個 RTT 時間(Round-Trip Time)後才會增加一倍,而非 Reno,每次的 RTT時間就會使得 cwnd 值改變。

沒有留言:

張貼留言