12.2 擁塞控制簡介

12.1.1 擁塞控制的作用

       網絡的帶寬是有限的,如果到達通信子網中某一部分的包數量過多,使得該部分網絡來不及處理,以致引起這部分乃至整個網絡性能下降的現象,嚴重時甚至會導致網絡通信業務陷入停頓, 這種現象就是網絡擁塞。如果把網絡中的數據傳輸比作交通運輸的話,擁塞就是交通堵塞。交通堵塞是無法徹底避免的,但可以減少和緩解。遵守交通規則是減少交通堵塞的有效方法,而擁塞控制算法則是網絡通信中的“交通規則”。擁塞控制算法的基本原則是:數據發送者需要監控網絡中的擁塞狀態,一旦發現擁塞則需要減小向網絡中注入數據的速度。這就要求實現了擁塞控制的協議具備犧牲精神——犧牲自己,成全大家。但這樣也會使一些沒有擁塞控制的協議(如UDP)佔據了更多的帶寬。

12.1.2 流量控制與擁塞控制

        流量控制是指點對點通信量的控制,要求是抑制發送端發送數據的速率,以便使接收端來得及接收,這是通過滑動窗口實現的(詳見6.2 TCP滑動窗口)。擁塞控制的主要功能是防止過多的數據注入到網絡中,這樣可以使網絡中的路由器或鏈路不致過載。擁塞控制是一個全局性的過程,涉及到所有的主機、路由器,以及與降低網絡傳輸性能有關的所有因素。

12.1.3 擁塞控制算法分類

        擁塞控制算法判斷擁塞發生的方法有間接和直接兩種。間接方法是通過判斷收到的重複ACK(即ack_seq相同)的數量和重傳定時器的超時實現的;直接方法是數據接收端或路由器使用顯示擁塞通告(Explicit Congestion Notification, ECN)直接告知數據發送端發生了擁塞,發送端可以立即執行擁塞控制來減小數據發生速率而不必等待多個重複的ACK。按照實施階段和條件的不同擁塞控制算法可以分爲:慢啓動(slow start)、擁塞避免(congestion avoidance)、快速重傳(fast retransmit)和快速恢復(fast recovery)4種。通常情況下慢啓動和擁塞避免一起使用,快速重傳和快速恢復一起使用。

12.1.4 算法原理

        擁塞控制算法爲數據發生者增設了一個“擁塞窗口(congestion window,cwnd)”,一次發送數據的字節數不能大於這個cwnd。慢啓動和擁塞避免就是用來控制cwnd的:算法設置了一個慢啓動閾值(slow start threshold, ssthresh),當cwnd <= ssthresh時執行慢啓動,即比較快速地增大cwnd;如果cwnd > ssthresh則進入擁塞避免,即比較慢的增加cwnd。一旦發現擁塞發生則減小ssthresh,重新進行慢啓動。

        當TCP數據發送者收到多個重複ACK時需要使用快速重傳算法來重傳數據而不必等到重傳定時器超時,因爲收到多個重複ACK往往意味着出現了數據丟失。快速恢復算法負責傳輸新數據直到收到不重複的ACK,這時意味着正常的數據傳輸已經恢復。

        ECN可以分爲基於IP的和基於TCP的兩大類,二者通常是配合使用的。當路由器得知擁塞發生時(隊列已滿並出現丟包),一個IP包的ECN域被路由器設置爲11時,接收端而非發送端被通知路徑上發生了擁塞。ECN使用TCP頭部的ece和crw標誌位通知數據發送端發生擁塞。當發送端主機接收到設置了ECE標誌的ACK時,與收到重複ACK一樣,開始減少擁塞窗口,執行慢啓動過程和擁塞避免算法。

       

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章