TCp擁塞控制機制

2021-07-04 08:26:58 字數 1955 閱讀 4317

tcp本身的可靠性是利用確認機制,超時重發來保證的,這些不說了,網上資料很多。不過以前一直沒有仔細學習過tcp的網路擁塞控制,現在記錄下一些總結吧。

什麼是擁塞?

一圖勝千言,看上面的圖,上面是負載-吞吐量,下面是負載-延遲,問題很明顯了,受限於網路節點的物理承受能力,負載顯然不可能和吞吐量成線性關係,當負載在knee點的時候,吞吐量在乙個較高的水平,同時資料報的延遲也較小,網路處於乙個較好的狀態,knee點到cliff點,吞吐量增長緩慢,延遲確增長很快,網路效能已經開始下降,而cliff點就是該網路的最大負荷點,吞吐量達到最大,再往後網路就崩潰了。擁塞控制包括擁塞預防,和擁塞恢復兩部分,前者使得網路盡可能在knee點,後者在網路處於不良或是崩潰狀態後盡可能恢復。

為什麼擁塞控制相當困難?

困難源於複雜,如果是**網路這種電路交換網路,顯然就沒這問題。但是網際網路是基於報文交換的,沒有中心節點,無法做出統一的管理。沒有連線,使得任何節點不可能獲得完整的資訊。同時控制協議本身的流量又必需要盡可能的少。這都使得擁塞控制非常難於實現。

下面的談論,為了方便期間,假定每個tcp包文都按照mss來傳送。

擁塞控制的物件?

擁塞的原因是負載過大,控制的物件自然是傳送者的流量,tcp中用於控制流量的是滑動視窗協議。視窗的大小取決於對端通告的接收視窗(rwnd)和擁塞控制視窗,即真正的傳送視窗=min(rwnd, cwnd)

慢啟動?

最初的tcp在連線建立成功後會向網路中傳送大量的資料報,這樣很容易導致網路中路由器快取空間耗盡,從而發生擁塞。因此新建立的連線不能夠一開始就大量傳送資料報,而只能根據網路情況逐步增加每次傳送的資料量,以避免上述現象的發生。具體來說,當新建連線時,cwnd初始化為1個最大報文段(mss)大小,傳送端開始按照擁塞視窗大小傳送資料,每當有乙個報文段被確認,cwnd就增加1個mss大小。這樣cwnd的值就隨著網路往返時間 (round trip time,rtt)呈指數級增長,事實上,慢啟動的速度一點也不慢,只是它的起點比較低一點而已。我們可以簡單計算下: 

開始           --->     cwnd = 1 

經過1個rtt後   --->     cwnd = 2*1 = 2 

經過2個rtt後   --->     cwnd = 2*2= 4 

經過3個rtt後   --->     cwnd = 4*2 = 8 

如果頻寬為w,那麼經過rtt*log2w時間就可以佔滿頻寬

擁塞避免?

從慢啟動可以看到,cwnd可以很快的增長上來,從而最大程度利用網路頻寬資源,但是cwnd不能一直這樣無限增長下去,一定需要某個限制。tcp使用了乙個叫慢啟動門限(ssthresh)的變數,當cwnd超過該值後,慢啟動過程結束,進入擁塞避免階段。對於大多數tcp實現來說,ssthresh的值是 65536(同樣以位元組計算)。擁塞避免的主要思想是加法增大,也就是cwnd的值不再指數級往上公升,開始加法增加。此時當視窗中所有的報文段都被確認時,cwnd的大小加1,cwnd的值就隨著rtt開始線性增加,這樣就可以避免增長過快導致網路擁塞,慢慢的增加調整到網路的最佳值。

如何檢測擁塞? 

首先來看tcp是如何確定網路進入了擁塞狀態的,tcp認為網路擁塞的主要依據是它重傳了乙個報文段。上面提到過,tcp對每乙個報文段都有乙個定時器,稱為重傳定時器(rto),當rto超時且還沒有得到資料確認,那麼tcp就會對該報文段進行重傳,當發生超時時,那麼出現擁塞的可能性就很大,某個報文段可能在網路中某處丟失,並且後續的報文段也沒有了訊息,在這種情況下,tcp反應比較「強烈」: 

1.把ssthresh降低為cwnd值的一半 

2.把cwnd重新設定為1 

3.重新進入慢啟動過程。 

從整體上來講,tcp擁塞控制視窗變化的原則是aimd原則,即加法增大、乘法減小。可以看出tcp的該原則可以較好地保證流之間的公平性,因為一旦出現丟包,那麼立即減半退避,可以給其他新建的流留有足夠的空間,從而保證整個的公平性。

TCP擁塞控制機制

產生的原因 對資源的需求 可用資源 對資源的需求 可用資源 sum 對資源的需求 可用資源 注意單純的增加網路資源無法解決問題 例如 把結點的儲存空間擴大,更換更高速率的鏈路,提高結點處理機的運算速度,不僅不能解決問題,而且可能使網路效能更壞。原因 網路擁塞是許多因素引起的,單純的解決乙個可能會使上...

TCP擁塞控制機制

對 資源的需 可用資源 對資源的需求 可用資源 注意單純的增加網路資源無法解決問題 例如 把結點的儲存空間擴大,更換更高速率的鏈路,提高結點處理機的運算速度,不僅不能解決問題,而且可能使網路效能更壞。原因 網路擁塞是許多因素引起的,單純的解決乙個可能會使上述情況得到一些緩解,但是會把擁塞轉移到其他地...

TCP擁塞機制

原文 你還在為 tcp 重傳 滑動視窗 流量控制 擁塞控制發愁嗎?看完 就不愁了 為什麼要有擁塞控制呀,不是有流量控制了嗎?前面的流量控制是避免 傳送方 的資料填滿 接收方 的快取,但是並不知道網路的中發生了什麼。一般來說,計算機網路都處在乙個共享的環境。因此也有可能會因為其他主機之間的通訊使得網路...