首頁 > 常見問題 > 流量控制和擁塞控制的最主要差異是什麼

流量控制和擁塞控制的最主要差異是什麼

青灯夜游
發布: 2023-01-13 00:28:18
原創
41733 人瀏覽過

主要區別:流量控制解決的是發送方和接收方速率不匹配的問題;擁塞控制解決的是避免網路資源被耗盡的問題。流量控制是透過滑動視窗來實現的;擁塞控制是透過擁塞視窗來實現的。

流量控制和擁塞控制的最主要差異是什麼

本教學操作環境:windows7系統、Dell G3電腦。

相關推薦:《程式設計教學

#流量控制與擁塞控制的差異

TCP的流量控制和壅塞控制看起來是兩個比較相近的概念,容易產生混淆。但事實上,他們在期望的目標和使用的方法是完全不同的。

流量控制解決的是發送方和接收方速率不匹配的問題,發送方發送過快接收方就來不及接收和處理。採用的機制是滑動視窗的機制,控制的是發送了但未被Ack的包數量。

壅塞控制解決的是避免網路資源被耗盡的問題,透過大家自律的採取避讓的措施,來避免網路有限資源被耗盡。當出現丟包時,控制發送的速率達到降低網路負載的目的。

流量控制

  • 流量控制是透過滑動視窗來實現的。滑動視窗分為發送端視窗和接收端視窗。
  • 視窗有大小限制,視窗大小是接收端用來告訴發送端目前接收端能接收的最大位元組數。
  • 視窗的大小在TCP協定頭裡,大小為16位元。然而在TCP協定的可選項裡,還可以定義視窗的比例因子,因此實際的視窗大小可以超過64KB。視窗的意義其實就是接收緩衝區的大小。
  • 發送視窗維護了發送端發送的已被接收端ACK的序號,以及已經發送的最大序號,這樣就可以知道還能發送多少的新資料。
  • 接收視窗維護了已經ACK的序號,以及所有接收到的套件序號。
  • 視窗大小在特定的一次連線通訊過程中,大小是不變的。而滑動視窗是一種機制,滑動視窗的大小在發送端代表的是可發送的資料大小,在接收端代表的是可接收的資料大小,它們是動態變化的。

擁塞控制

  • 的擁塞控制是透過擁塞視窗來實現的。擁塞視窗指發送端在一個RTT內可以最多發送的資料包數。
  • 壅塞控制一般包括慢啟動、擁塞避免兩個階段。
  • 慢啟動階段是從1開始指數成長到限定大小的過程。
  • 壅塞避免階段時超過限定大小之後線性增加的過程,以及發現丟包後將壅塞視窗改為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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板