tcp 擁塞控制引擎&狀態機


TCP核心:流量控制   擁塞控制

流量控制:滑動窗口來實現, 防止接收方能夠處理過來

擁塞控制:防止過多的包被發送到網絡中,避免出現網絡負載過大

說一說 擁塞控制:

擁塞控制狀態機的狀態有五種,分別是Open,Disorder,CWR,Recovery和Loss狀態

四個算法為慢啟動,擁塞避免,擁塞發生時算法和快速恢復。

 

 

 

Open狀態

Open狀態是擁塞控制狀態機的默認狀態。

這種狀態下,當ACK到達時,發送方根據擁塞窗口cwnd(Congestion Window)是小於還是大於慢啟動閾值ssthresh(slow start threshold),來按照慢啟動或者擁塞避免算法來調整擁塞窗口。

Disorder狀態

當發送方檢測到DACK(重復確認)或者SACK(選擇性確認)時,狀態機將轉變為Disorder狀態。在此狀態下,發送方遵循飛行(in-flight)包守恆原則,即一個新包只有在一個老包離開網絡后才發送,也就是發送方收到老包的ACK后,才會再發送一個新包。

CWR狀態

發送方接收到一個擁塞通知時,並不會立刻減少擁塞窗口cwnd,而是每收到兩個ACK(每隔一個新的ACK到達)就減少一個段,直到窗口的大小減半為止。當cwnd正在減小並且網絡中有沒有重傳包時,這個狀態就叫CWR(Congestion Window Reduced,擁塞窗口減少)狀態。CWR狀態可以轉變成Recovery或者Loss狀態。

Recovery狀態

 當發送方接收到足夠(推薦為三個)的DACK(重復確認)后,進入該狀態。在該狀態下,擁塞窗口cnwd每收到兩個ACK就減少一個段(segment),直到cwnd等於慢啟動閾值ssthresh,也就是剛進入Recover狀態時cwnd的一半大小。 發送方保持 Recovery 狀態直到所有進入 Recovery狀態時正在發送的數據段都成功地被確認,然后發送方恢復成Open狀態,重傳超時有可能中斷 Recovery 狀態,進入Loss狀態。

 Loss狀態

當一個RTO(重傳超時時間)到期后,發送方進入Loss狀態。所有正在發送的數據標記為丟失,擁塞窗口cwnd設置為一個段(segment),發送方再次以慢啟動算法增大擁塞窗口cwnd。

Loss 和 Recovery 狀態的區別是:Loss狀態下,擁塞窗口在發送方設置為一個段后增大,而 Recovery 狀態下,擁塞窗口只能被減小。Loss 狀態不能被其他的狀態中斷,因此,發送方只有在所有 Loss 開始時正在傳輸的數據都得到成功確認后,才能退到 Open 狀態。

 rfc文檔下載

rfc官方網站:http://tools.ietf.org
http://tools.ietf.org/html/rfc7230
僅僅要把URL最后的4位數字替換為你要下載的文檔的編號就能夠打開下載頁面,
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM