3 運輸層(三)

6 擁塞控制原理

在實踐中,丟包一般是當網絡變得擁塞時由於路由器緩存溢出而引起的。分組重傳作爲網絡擁塞的徵兆,但是卻無法處理導致網絡擁塞的原因。因爲有大多的源想以過高的速率發送數據。爲了處理網絡擁塞,需要一些機制在面臨網絡擁塞時抑制發送方。

6.1 擁塞原因及代價

每連接的吞吐量(per-connection throughput):接收方每秒接收的字節數。

1)當分組的到達速率接近鏈路容量時,分組經歷巨大的排隊時延。

2)發送方必須執行重傳以補償因爲緩存溢出而丟棄的分組。

3)發送方在遇到大時延時所進行的不必要的重傳會引起路由器利用鏈路帶寬來轉發不必要的分組副本。

4)由於擁塞而丟棄分組的另一種代價:當一個分組沿一條路徑被丟棄時,每個上游路由器用於轉發分組到丟棄該分組而使用的傳輸容量最終被浪費掉了。

6.2 擁塞控制方法

根據網絡層是否爲運輸層擁塞控制提供顯示幫助開劃分:

1)端到端擁塞控制:網絡層沒有爲運輸層擁塞控制提供顯示支持。TCP必須通過端到端的方法解決擁塞控制,因爲IP層不會向端系統提供有關網絡擁塞的反饋信息。TCP報文段的丟失(通過超時或3次冗餘確認而得知)被認爲是網絡擁塞的一個跡象。

2)網絡輔助的擁塞控制:網絡層構件(即路由器)向發送方提供有關於網絡中擁塞狀態的顯示反饋信息。這一般有兩種形式,如下圖:

6.3 網絡輔助的擁塞控制:ATM ABR擁塞控制

ATM ABR中的擁塞控制算法,即一種採用網絡輔助方法解決擁塞控制的協議。ATM基本上採用一種面向虛電路(VC)的方法來處理分組交換。ABR被設計爲一種彈性數據傳輸服務,該服務方式使人聯想起TCP。當網絡輕載時,ABR服務會充分利用空閒可用帶寬;當網絡擁塞時,ABR服務會將其傳輸速率抑制爲某些預先確定的最小傳輸速率。

7 TCP擁塞控制

TCP爲運行在不同主機上的兩個進程之間提供了可靠傳輸服務和擁塞控制機制。TCP使用端到端擁塞控制(讓每一個發送方根據所感受到的網絡擁塞程度來限制其能向連接發送流量的速率。)而不是使用網絡輔助的擁塞控制,因爲IP層不向端系統提供顯示的網絡擁塞反饋。

本節主要解決3個問題:

1)一個TCP發送方如何限制它向其連接發送流量速率?

2)一個TCP發送方如何感知從它到目的地之間的路徑上存在擁塞?

3)當發送方感知到端到端的擁塞時,採用何種算法來改變其發送速率?

TCP連接的每一端包含:①一個接收緩存②一個發送緩存③幾個變量(LastByteRead,rwnd等)。另外,運行在發送方的TCP擁塞控制機制跟蹤一個額外的變量:擁塞窗口(congestion window,cwmd)

特別是,在一個發送方中未被確認的數據量不會超過cwmd和rwnd中的最小值。即LastByteSent – LastByteAcked ≤ min{cwnd, rwnd}

TCP發送方如何確定它們的發送速率,即使得網絡不會擁塞,於此同時又能充分利用所有可能可用的帶寬?

1)一個丟失的報文段意爲着擁塞,因此,當丟失報文段時應當降低TCP發送方的速率。

2)一個確認報文段指示該網絡正在向接收方交付發送方的報文段,因此,當對先前未確認報文段的確認達到時,能夠增加發送方的速率。

3)帶寬探測:TCP調節其傳輸速率的策略是增加其速率以響應達到的ACK,減小其速率以響應丟包事件。

TCP擁塞控制算法(TCP congestion control algorithm):①慢啓動;②擁塞控制;③快速恢復。慢啓動和擁塞避免是TCP的強制部分,兩者的差異在於對收到的ACK做出反應時增加cwnd長度的方式。慢啓動比擁塞避免能更快地增加cwnd的長度。快速恢復是推薦部分,對TCP發送方式非必須的。

7.1 慢啓動

當一條TCP連接開始,cwnd值通常初始置爲一個MSS較小值。這使得初始發送速率爲MSS/RTT。在慢啓動(slow-start)狀態,cwnd的值以1個MSS開始並且每當傳輸的報文段首次被確認就增加一個MSS。

何時結束慢啓動階段的指數增長呢?①如果存在一個由超時指示的丟包事件,TCP發送方將cwnd設置爲1並重新開始慢啓動過程。它還將第二個狀態變量的值ssthresh(慢啓動閾值)設置爲cwnd/2,即當檢測到擁塞時將ssthresh置爲擁塞窗口值的一半。②當檢測到擁塞時ssthresh設爲cwnd的一半,當到達或超過ssthresh的值時,結束慢啓動並且TCP轉移到擁塞避免模式。③如果檢測到3個冗餘ACK,這時TCP執行一種快速重傳並進入快速恢復狀態。

特點:指數增長。

7.2 擁塞避免

每個RTT只將cwnd的值增加一個MSS:對於TCP發送方無論何時到達一個新的確認,就將cwnd增加一個MSS(MSS/cwnd)字節。

例如,如果MSS是1460字節,並且cwnd是14 600字節,則在一個RTT內發送10個報文段。每個到達ACK增加1/10MSS的擁塞窗口長度,因此在收到對所有10個報文段的確認後,擁塞窗口的值將增加了一個MSS。

當出現超時時,TCP的擁塞避免與慢啓動階段一樣。

當出現丟包時,網絡繼續從發送方向接收方交付報文段,當接收到3個冗餘ACK時,將ssthresh的值置爲cwnd的一半,同時將cwnd的值減半加上3個MSS。

7.3 快速恢復

1)對收到的每個用冗餘ACK,cwnd值增加一個MSS。

2)當對丟失報文段的一個ACK到達時,TCP在降低cwnd進入擁塞避免狀態。

3)如果出現超時事件,執行如同慢啓動和擁塞避免中相同的動作後,遷移到慢啓動狀態。

下圖延時了Reno版TCP與Tahoe版TCP的擁塞控制窗口的演化情況。

7.4 TCP擁塞控制

TCP擁塞控制常被稱爲加性增、乘性減(Additove-Increase,Multiplicative-Decrease,AIMD)擁塞控制方式:假定丟包由3個冗餘的ACK而不是超時指示,TCP的擁塞控制是:每個RTT內cwnd線性增加1MSS,然後出現3個冗餘ACK事件時cwnd減半(乘性減)。

7.5 TCP吞吐量宏觀描述

TCP連接的吞吐量:即平均速率。在一個往返間隔內,TCP發送數據的速率是擁塞窗口(w字節)與當期RTT的函數(TCP發送速率大約是w/RTT)。

一條連接的平均吞吐量 = 0.75*W / RTT
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章