1. 擁塞原因與代價
- 擁塞的代價
- 當分組的到達速率接近鏈路容量時,分組經歷巨大的排隊時延。
- 傳送方必須執行重傳以補償因為快取溢位而丟棄的分組。
- 傳送方在遇到大時延時進行的不必要重傳會引起路由器利用其鏈路頻寬來轉發不必要的分組副本。
- 當一個分組沿一條路徑被丟棄時,每個上游路由器用於轉發該分組到丟棄該分組而使用的傳輸容量最終被浪費掉了。
- 運輸層向網路層中傳送報文段(含有初始資料或重傳資料)的速率用
表示,它有時被稱為網路的供給載荷。
2. 擁塞控制方法
- 端到端的擁塞控制:網路層沒有為運輸層提供顯示幫助,即使網路中存在擁塞,端系統也必須通過對網路行為的觀察來推斷。TCP採用端到端的方法來解決擁塞控制問題,因為IP層不會向端系統提供有關網路擁塞的反饋資訊。
- 網路輔助的擁塞控制:伺服器向傳送方提供關於網路中用色狀態的顯示反饋資訊。還有一些更復雜的網路反饋比如ATM可用位元率擁塞控制機制(伺服器顯示地通知傳送方伺服器能支援的最大主機發送速率)。網路輔助的擁塞控制有兩種反饋擁塞資訊的形式。
- 第一種是直接反饋,資訊由路由器傳送給傳送方,這種方式採用了一種阻塞分組的形式。
- 第二種是路由器標記或更新從傳送方流向接收方的分組中的某個欄位來指示擁塞的產生。
3. TCP擁塞控制
TCP所採用的方法是讓每一個傳送方根據所感知到的網路擁塞程度來限制其能向連線傳送流量的速率。
TCP傳送方跟蹤一個擁塞視窗cwnd,它對一個TCP傳送方能向網路中傳送流量的速率進行了限制。在一個傳送方中未被確認的資料量不會超過 cwnd 和 rwnd(接收視窗) 中的最小值,即滿足以下公式。
LastByteSent - LastByteAcked ≤ min{cwnd,rwnd}
注意rwnd是流量控制中的概念。在下面的討論中,我們將接收方快取視為無限大,這樣來討論擁塞控制而避免流量控制的問題。
在每個RTT的起始點,上面的限制條件允許向連線傳送cwnd個位元組的資料,在RTT結束時傳送方接收對資料的確認報文。因此傳送方的傳送速率大概是
cwnd/RTT
位元組/秒。通過調節cwnd的值,實際上調節了傳送方向連線傳送資料的速率。
我們將一個TCP傳送方的丟包事件定義為:要麼出現超時,要麼收到來自接收方的三個冗餘ACK。而丟包事件在傳送方看來,是路徑上出現了擁塞的一種指示。
因為TCP使用確認來觸發(或增大)它的視窗調節長度,TCP被稱為自計時的。
TCP遵從下列指導性原則以令傳送方確定它應當傳送的速率
- 一個丟失的報文段意味著阻塞,因此丟失報文段時應當適當降低TCP傳送方的速率。
- 一個確認報文段指示著一種順利的訊號,因此當對先前未確認報文段的確認到達時,應當增加發送方的速率。
- 頻寬探測,TCP傳送方的行為是一個試探的過程,假如增加/降低了傳送方的速率,TCP傳送方會接著進行探測,從而考慮是否進行進一步的增加/降低。
慢啟動
TCP連線開始時,cwnd 的值通常被設為一個 MSS 的較小值,這使得初始傳送速率大約為 MSS/RTT。但對於 TCP 傳送方而言,可用頻寬可能遠大於 MSS/RTT,因此 TCP 傳送方希望儘可能快地找到可用頻寬的數量。
在慢啟動狀態,cwnd 的值以一個 MSS 開始並且每當傳輸的報文段首次被確認就增加一個 MSS。這樣一來,每經過一個 RTT,傳送速率就翻倍。TCP 傳送速率呈現指數級增長。
- 每有一個報文被首次確認,就增加一個MSS。這導致了每一個RTT內cwnd都會翻倍。
- 每有一個報文被首次確認,就增加一個MSS。這導致了每一個RTT內cwnd都會翻倍。
有下列三種改變狀態的情況
如果存在超時指示的丟包事件,將 cwnd 置為 1 並重新開始慢啟動過程。還將第二個狀態變數的值 ssthresh(慢啟動閾值)設定為 cwnd/2。
相當於用ssthresh標記一下可能快要出現超時的位置
當 cwnd 的值等於 ssthresh 時,結束慢啟動並令 TCP 轉移到擁塞避免模式。
如果檢測到三個冗餘 ACK,TCP 反應相對不那麼劇烈,而是將 cwnd 的值減半,再為三個冗餘 ACK 加上三個 MSS。再將 ssthresh 的值記錄為 cwnd 的一半。最終進入快速恢復狀態。
擁塞避免
- 進入擁塞避免說明 cwnd 的值是上次遇到擁塞的值的一半,這意味著我們距離擁塞並不遠。因此 TCP 不再選擇每過一個 RTT 將 cwnd 的值翻番,而是每次只將 cwnd 的值增加一個 MSS。
- 注意是一個RTT增加一個MSS。
- 有下列兩種改變狀態的情況
- 當出現超時丟包時,與慢啟動情況一樣,cwnd 的值置為一個 MSS,ssthresh 的值被更新為 cwnd 值的一半。最終進入慢啟動狀態。
- 當出現三個冗餘 ACK 事件的丟包時,TCP 反應相對不那麼劇烈,而是將 cwnd 的值減半,再為三個冗餘 ACK 加上三個 MSS。再將 ssthresh 的值記錄為 cwnd 的一半。最終進入快速恢復狀態。
- 進入擁塞避免說明 cwnd 的值是上次遇到擁塞的值的一半,這意味著我們距離擁塞並不遠。因此 TCP 不再選擇每過一個 RTT 將 cwnd 的值翻番,而是每次只將 cwnd 的值增加一個 MSS。
快速恢復
- 進入快速恢復階段後,對收到的每個冗餘 ACK,cwnd 的值增加一個 MSS。最終當丟失報文段的第一個 ACK 到達時,TCP 在降低 cwnd 後進入擁塞避免狀態。
- 如果出現超時事件,與慢啟動和擁塞避免一樣,cwnd 的值置為一個 MSS,ssthresh 的值被更新為 cwnd 值的一半。最終進入慢啟動狀態。
TCP擁塞控制的FSM描述
TCP連線大多數情況下都處於擁塞避免狀態,這個時候的cwnd增長是一種線性增長。而無論是發生了超時還是快速回復,cwnd的下降都是以減半為基礎的。所以我們稱之為****
對 TCP 吞吐量的巨集觀描述
- 當視窗長度是 w 位元組,且當前往返時間是 RTT 秒時,則 TCP 的傳送速率大約是
w/RTT
。 - 假設丟包事件後的視窗長度保持在 W 附近,根據一系列推導我們可知,一條連線的平均吞吐量為
0.75W/RTT
。
- 當視窗長度是 w 位元組,且當前往返時間是 RTT 秒時,則 TCP 的傳送速率大約是
現有丟包率L,往返時間RTT,最大報文段長度MSS,可推匯出一條連線的平均吞吐量
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-5nJOsao0-1628833752541)(G:\markdown\計算機網路\3 運輸層\image-20210627223055720.png)]
4. 公平性
- 假設每條連結都在傳輸一個大檔案,而且無UDP流量通過該瓶頸鍊路。如果每條連線的平均傳輸速率接近
R/K
,即每條連線都得到相同份額的鏈路頻寬,則認為該擁塞控制機制是公平的。 - 實踐中,TCP顯然是不公平的,具有較小RTT的連線能更好地搶到更大的頻寬。
5. 明確擁塞通告:網路輔助擁塞控制
- 對於IP和TCP的擴充套件方案已經提出並實現和部署,該方案允許網路明確像TCP傳送方和接收方發出擁塞訊號。這種形式的網路輔助擁塞控制稱為明確擁塞通告。