日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

網(wǎng)絡(luò)流量控制 網(wǎng)絡(luò)流量監(jiān)控工具( 三 )

擁塞控制算法由于滑動窗口僅考慮接收方的接收能力不考慮網(wǎng)絡(luò)因素,網(wǎng)絡(luò)帶寬是共享的,網(wǎng)絡(luò)延時是抖動的,網(wǎng)絡(luò)的變化帶來的問題勢必會造成整個系統(tǒng)的崩潰,這就像兩個火車站運輸貨物,僅考慮火車站的容納量,不考慮火車軌道的承載能力,火車車次發(fā)的再多可能也是堵在軌道上,還可能導(dǎo)致軌道系統(tǒng)癱瘓 。
擁塞控制算法是發(fā)送方根據(jù)當(dāng)前網(wǎng)絡(luò)情況調(diào)整發(fā)包速率的流量控制機制,TCP中擁塞控制算法發(fā)展至今,從經(jīng)典的reno到google近年來提出的bbr,期間不斷有新的擁塞控制算法提出來,擁塞控制也形成了如下RFC 。
RFC5681
https://datatracker.ietf.org/doc/html/rfc5681
以linux內(nèi)核為例,最新的內(nèi)核版本內(nèi)部實現(xiàn)了十多種擁塞控制算法實現(xiàn),包括一些比較新的算法實現(xiàn)(比如bbr),linux較早版本內(nèi)核使用reno,linux 2.6.8以后默認采用bic算法,linux 2.6.19以后又默認使用了cubic算法,目前l(fā)inux 5.x依然默認使用cubic算法,windows同樣也是支持多種擁塞控制算法的,目前windows11默認也是使用cubic算法 。
擁塞算法原理(reno為例)TCP擁塞算法整體框架基本一致,以經(jīng)典的TCP reno擁塞控制算法(教科書通常講的版本)進行簡要介紹,TCP擁塞控制RFC5681規(guī)定都包含慢啟動、擁塞避免、快重傳、快恢復(fù)階段,這又涉及到幾個基本參數(shù)(cwnd、ssthresh),cwnd指擁塞窗口的大小,決定了一次發(fā)送多少數(shù)據(jù)包,ssthresh指慢啟動閾值 。

  • 慢啟動
慢啟動階段分為兩種,一種是流剛開始cwnd<ssthresh時cwnd初始為1MSS(隨著硬件更新,Linux最新內(nèi)核初始為10MSS)并隨著RTT呈指數(shù)增長,一種是重傳超時cwnd恢復(fù)初始值重新進入慢啟動,慢啟動并不表示發(fā)送速率增長慢(指數(shù)級增長),個人理解是指從比較低的起始速率來試探網(wǎng)絡(luò)能力,針對慢啟動有提出了ABC(Appropriate Byte Count)算法對慢啟動突發(fā)而造成超越網(wǎng)絡(luò)承載能力進行修復(fù),如下兩篇關(guān)于ABC的RFC 。
RFC3465
https://datatracker.ietf.org/doc/html/rfc3465
RFC3742
https://datatracker.ietf.org/doc/html/rfc3742
首次慢啟動最初初始ssthresh都是設(shè)置為一個很大的值,這樣直到丟包才會進入擁塞避免,后又出現(xiàn)了hystart優(yōu)化(混合慢啟動),比如預(yù)測出理想的ssthresh,從而讓首次慢啟動不至于丟包才進入擁塞避免(丟包代價太大) 。
  • 擁塞避免
當(dāng)cwnd>=ssthresh時會進入擁塞避免階段,cwnd會隨著RTT呈線性增長,這個起始是比較保守地試探最大網(wǎng)絡(luò)能力,不至于網(wǎng)絡(luò)崩潰 。
  • 快重傳
【網(wǎng)絡(luò)流量控制 網(wǎng)絡(luò)流量監(jiān)控工具】擁塞避免階段當(dāng)收到3個連續(xù)ACK,表明可能出現(xiàn)了丟包,表明網(wǎng)絡(luò)出現(xiàn)輕微擁堵,這個時候會進入快重傳階段,ssthresh會設(shè)置為0.5 * cwnd,cwnd會設(shè)置為ssthresh+3MSS,進行數(shù)據(jù)包重傳進入快恢復(fù)階段 。
  • 快恢復(fù)
快恢復(fù)階段如果重傳數(shù)據(jù)包后如果依然收不到新數(shù)據(jù)包ACK而且RTO超時了,表明網(wǎng)絡(luò)并沒有恢復(fù),就會重新進入慢啟動階段,ssthresh會設(shè)置為0.5 * cwnd,cwnd會設(shè)置為初始值,如果收到了新數(shù)據(jù)的ACK包,表明網(wǎng)絡(luò)已恢復(fù),cwnd會設(shè)置為ssthresh,進入擁塞避免階段 。
reno擁塞控制算法狀態(tài)圖如下

網(wǎng)絡(luò)流量控制 網(wǎng)絡(luò)流量監(jiān)控工具



網(wǎng)絡(luò)流量控制 網(wǎng)絡(luò)流量監(jiān)控工具


reno算法iperf打流wireshark抓包io圖如下:

網(wǎng)絡(luò)流量控制 網(wǎng)絡(luò)流量監(jiān)控工具


擁塞算法對比擁塞控制算法主要是基于網(wǎng)絡(luò)丟包和延遲(RTT)來實現(xiàn),所以有的算法丟包敏感,有的算法延遲敏感,有的結(jié)合丟包和延遲,不同的算法主要的區(qū)別可能在于擁塞避免階段如何去擬合理想發(fā)送速率曲線又不至于丟包,如下

推薦閱讀