-
TCP擁塞控制的程序,(四個狀態都要解釋清楚)-
在某段時間里,對網路中某一資源的需求超過可用范圍,也就是供不應求,網路性能就會下降,這種狀況,就是
擁塞 -
研究的前提
- 資料是單方向傳送的,另一個方向只傳送確認
- 接收方總是有足夠大的快取空間,因而發送方發送視窗的大小由網路的擁塞程度來決定
- 以最大報文段MSS的個數為討論問題的單位,而不是以位元組為單位
-
若出現擁塞而不控制,整個網路的吞吐量將隨輸入負荷的增大而下降

-

-
發送方要維護一個
擁塞視窗cwnd的狀態變數,其值取決于網路的擁塞程度,并且動態變化- 擁塞視窗
cwnd的維護原則:只要網路沒有出現擁塞,擁塞視窗就在增大一些;只要出現擁塞,擁塞視窗就減小一些 - 判斷出現
網路擁塞的依據:沒有按時收到應當到達的確認報文(即發生超時重傳)
- 擁塞視窗
-
發送方將擁塞視窗作為發送視窗swnd,即swnd=cwnd
-
維護一個
慢開始門限ssthresh狀態變數:- 當cwnd<ssthresh時,使用慢開始演算法
- 當cwnd>ssthresh時,停止使用慢開始演算法而改用擁塞避免演算法
- 當cwnd=ssthresh時,既可以使用慢開始演算法,也可以使用擁塞避免演算法
-
四種擁塞控制演算法:慢開始(slow-start)、擁塞避免(congestion avoidance)、快重傳(fast retransmit)、快恢復(fast recovery)
-

-
若重傳計時器超時,則判斷網路可能出現擁塞:
- 將ssthresh值更新為發生擁塞時cwnd的一半
- 將cwnd值減小為1,并重新開始慢開始演算法
-
慢開始
- 慢開始演算法下,擁塞視窗數量隨著傳播輪次指數增長,不斷翻倍
- 慢開始是指一開始的報文段少,而不是擁塞視窗增長速度滿
-
擁塞避免
- 擁塞避免演算法下,擁塞視窗數量隨著傳播輪次,不斷+1,線性增長
- 擁塞避免演算法無法完全避免擁塞,只是讓擁塞視窗線性增長,網路不容易出現擁塞
---------------慢開始和擁塞避免演算法是最開始出現的---------------
有時個別報文段丟失會被誤認為發送擁塞,錯誤減小擁塞演算法,降低效率,為了解決這個問題,增加了后兩個演算法
-
快重傳
-
快重傳演算法
可以讓發送方盡快知道發生了個別報文段的丟失 -
快重傳就是讓
發送方盡快開始重傳,而不是等待超時重傳計時器超時再重傳- 要求接收方不要等待發送資料時才進行稍待確認,而是要
立即確認, - 即使收到了失序的報文段也要立即發出對已收到的報文段的
重復確認, - 發送方一旦受到了三個連續的重復確認,就將相應的報文段
立即重傳,而不是等待該報文段的超時重傳計時器超時再重傳 - 快重傳可以使整個網路的吞吐量提高20%

- 要求接收方不要等待發送資料時才進行稍待確認,而是要
-
-
快恢復
- 發送端收到了
三個重復確認,就知道現在只是丟失了個別報文段,啟動快恢復演算法, 發送方將慢開始門限ssthresh值和擁塞視窗cwnd值調整為當前視窗的一半;開始執行擁塞避免演算法- 也有的快恢復實作十八恢復開始時二點擁塞視窗值cwnd增大一些,也就是ssthresh+3
- 既然發送方收到3個重復確認,表面有3個資料報文段已經離開了網路
- 這三個報文段不再消耗網路資源而是停留在接收快取中
- 所以現在的網路不是堆積了報文段,而是減少了,可以把視窗擴大些
- 發送端收到了
-

-
-
TCP的流量控制-
流量控制說白了就是讓發送方不要傳的那么快,太快了來不及接收
-
利用
滑動視窗可以很方便地在TCP連接上實作對發送方的流量控制 -

seq=1 DATA:seq取值1,表示TCP報文段資料載荷的第一個位元組的序號是1DATA表示該報文段為TCP資料報文段
-

ACK:TCP報文段首部中的標志位,取值1表示這是TCP確認報文段ack:TCP報文段首部中的確認號欄位,取值201表示序號201以前都正確接受,等待接受201后的資料rwnd:TCP報文段首部中的視窗欄位,取值300表示,接受視窗改為300
-
只要TCP連接的一方,收到對方的
零視窗通知,就啟動一個持續計時器,若超時,就發送一個零視窗探測報文(只攜帶1位元組資料),接收方在收到探測報文段時,給出自己的接收視窗值,若依然是0,就重啟計時器, -
事實上,TCP規定,即使接收視窗為0,也必須接收
零視窗探測報文段、確認報文段、帶有緊急資料的報文段, -
零視窗探測報文段也有重傳計時器,超時就重傳,
-
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/271861.html
標籤:其他
上一篇:OpenCV 之 平面單應性
