主要區別:流量控制解決的是發送方和接收方速率不匹配的問題;擁塞控制解決的是避免網路資源被耗盡的問題。流量控制是透過滑動視窗來實現的;擁塞控制是透過擁塞視窗來實現的。
本教學操作環境:windows7系統、Dell G3電腦。
相關推薦:《程式設計教學》
#流量控制與擁塞控制的差異
TCP的流量控制和壅塞控制看起來是兩個比較相近的概念,容易產生混淆。但事實上,他們在期望的目標和使用的方法是完全不同的。
流量控制解決的是發送方和接收方速率不匹配的問題,發送方發送過快接收方就來不及接收和處理。採用的機制是滑動視窗的機制,控制的是發送了但未被Ack的包數量。
壅塞控制解決的是避免網路資源被耗盡的問題,透過大家自律的採取避讓的措施,來避免網路有限資源被耗盡。當出現丟包時,控制發送的速率達到降低網路負載的目的。
流量控制
視窗大小在特定的一次連線通訊過程中,大小是不變的。而滑動視窗是一種機制,滑動視窗的大小在發送端代表的是可發送的資料大小,在接收端代表的是可接收的資料大小,它們是動態變化的。
擁塞控制
壅塞避免階段時超過限定大小之後線性增加的過程,以及發現丟包後將壅塞視窗改為1,並把限定大小減半的過程。
擴充資料
#流量控制是端對端的控制,例如A透過網路給B發數據,A發送的太快導致B沒法接收(B緩衝視窗過小或處理過慢),這時候的控制就是流量控制,原理是透過滑動視窗的大小改變來實現。
壅塞控制是A與B之間的網路發生阻塞導致傳輸過慢或丟包,來不及傳輸。防止過多的資料注入網路中,這樣可以使網路中的路由器或連結不至於過載。擁塞控制是一個全局性的過程,涉及所有的主機、路由器,以及與降低網路效能有關的所有因素。
流量控制機制:
設主機A傳送資料到主機B。雙方決定的視窗值是400.再設每一個報文段為100位元組長,序號的初始值為seq=1,大寫ACK表示首部中的卻認為為ACK,小寫ack表示確認欄位的值。
接收方的主機B進行了三次流量控制。第一次把視窗設定為rwind=300,第二次減少到rwind=100最後減到rwind=0,也就是不允許傳送者再發送過資料了。這種使發送方暫停發送的狀態將持續到主機B重新發出一個新的視窗值為止。
假如,B向A發送了零視窗的訊息段後不久,B的接收快取又有了一些儲存空間。於是B向A發送了rwind=400的報文段,然而這個報文段在傳送中遺失了。 A一直等待收到B發送的非零視窗的通知,而B也一直等待A發送的資料。這樣就死鎖了。為了解決這種死鎖狀態,TCP為每個連線設有一個持續計時器。只要TCP連線的一方收到對方的零視窗通知,就啟動持續計時器,若持續計時器設定的時間到期,就發送一個零視窗偵測封包文段(僅攜帶1位元組的資料),而對方就在確認這個探測封包時給了現在的視窗值。
壅塞控制機制:
慢速開始與壅塞避免
#發送封包速率的決定,既要根據接收端的接收能力,又要從全局考慮不要使網路發生擁塞,這由接收視窗和擁塞視窗兩個狀態量確定。接收端視窗(Reciver Window)又稱通知視窗(Advertised Window),是接收端依據目前的接收快取大小所許諾的最新視窗值,是來自接收端的流量控制。擁塞視窗cwnd(Congestion Window)是發送端根據自己估計的網路擁塞程度而設定的視窗值,是來自發送端的流量控制。
慢啟動原理:
1)當主機開始傳送資料時,如果立即將較大的傳送視窗的全部資料位元組都注入到網路中,那麼由於不清楚網路的情況,有可能引其網路擁塞
2)比較好的方法是試探一下,即從小到達逐漸增加發送端的擁塞控制視窗數值
#3)通常在剛開始發送封包段時可先將壅塞視窗cwnd設定為一個最大封包的MSS的數值。在每收到一個對新報文段確認後,將擁塞窗口增加至多一個MSS的數值,當rwind足夠大的時候,為了防止擁塞窗口cwind的增長引起網絡擁塞,還需要另一個變量—慢開始門限ssthresh
壅塞控制具體過程為:
1)TCP連線初始化,將壅塞視窗設為1
#2)執行慢開始演算法,cwind按指數規律增長,知道cwind == ssthress開始執行擁塞避免演算法,cwnd按線性規律增長
3)當網絡發生擁塞,把ssthresh值更新為擁塞前ssthresh值的一半, cwnd重新設定為1,依照步驟(2)執行。
快重傳和快恢復
一條TCP連線有時會因為等待重送計時器的逾時而空閒較長的時間,慢開始和擁塞避免無法很好的解決這類問題,因此提出了快重傳和快速恢復的擁塞控制方法。
快重傳演算法並非取消了重傳機制,只是在某些情況下更早的重傳遺失的封包段(如果當發送端接收到三個重複的確認ACK時,則斷定分組遺失,立即重傳遺失的報文段,而不必等待重傳計時器逾時)。慢開始演算法只是在TCP建立時才使用。
快恢復演算法有以下兩個重點:
1)當發送者連續收到三個重複確認時,就執行「乘法減少」演算法,把慢開始閘限減半,這是為了預防網路發生壅塞。
2)由於發送方現在認為網路很可能沒有發生擁塞,因此現在不執行慢開始演算法,而是把cwnd值設定為慢開始閘限減半後的值,然後開始執行擁塞避免演算法,使擁塞視窗的線性增大。
總結:
沒有發生擁塞之前使用前兩種演算法,發生擁塞之後(即三次重複確認)使用後兩種演算法。
想要查閱更多相關文章,請造訪PHP中文網! !
以上是流量控制和擁塞控制的最主要差異是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!