5.3.3 计算机网络传输层之TCP拥塞控制(慢开始与拥塞避免、快重传和快恢复)
文章目錄
- 1.什么是擁塞控制?
- 2.擁塞控制與流量控制的區(qū)別
- 3.擁塞控制的4種算法
- (1)慢開始與擁塞避免
- (2)快重傳和快恢復(fù)
1.什么是擁塞控制?
- 所謂擁塞控制,是指防止過多的數(shù)據(jù)注入網(wǎng)絡(luò),保證網(wǎng)絡(luò)中的路由器或鏈路不致過載。出現(xiàn)擁塞時(shí),端點(diǎn)并不了解到擁塞發(fā)生的細(xì)節(jié),對(duì)通信連接的端點(diǎn)來說,擁塞往往表現(xiàn)為通信時(shí)延的增加。當(dāng)然,擁塞控制和流量控制也有相似的地方,即它們都通過控制發(fā)送方發(fā)送數(shù)據(jù)的速率來達(dá)到控制效果。
2.擁塞控制與流量控制的區(qū)別
- 擁塞控制是讓網(wǎng)絡(luò)能夠承受現(xiàn)有的網(wǎng)絡(luò)負(fù)荷,是一個(gè)全局性的過程,涉及所有的主機(jī)、所有的路由器,以及與降低網(wǎng)絡(luò)傳輸性能有關(guān)的所有因素。
- 流量控制往往是指點(diǎn)對(duì)點(diǎn)的通信量的控制,即接收端控制發(fā)送端,它所要做的是抑制發(fā)送端發(fā)送數(shù)據(jù)的速率,以便使接收端來得及接收。
例如: - 某個(gè)鏈路的傳輸速率為10Gb/s,某巨型機(jī)向一臺(tái)PC以1Gb/s的速率傳送文件,顯然網(wǎng)絡(luò)的帶寬是足夠大的,不存在擁塞問題,但如此高的發(fā)送速率將導(dǎo)致PC可能來不及接收,因此必須進(jìn)行流量控制。
- 但若有100萬臺(tái)PC在此鏈路上以1Mb/s的速率傳送文件,則現(xiàn)在的問題就變?yōu)榫W(wǎng)絡(luò)的負(fù)載是否超過了現(xiàn)有網(wǎng)絡(luò)所能承受的范圍。就像我們上網(wǎng)一樣,有時(shí)候加載會(huì)很慢,提示訪問請(qǐng)求過多,請(qǐng)稍后再試,就是網(wǎng)絡(luò)產(chǎn)生了擁塞,帶寬小,一下不能支持給多個(gè)請(qǐng)求終端發(fā)送數(shù)據(jù)。
為了更好地對(duì)傳輸層進(jìn)行擁塞控制,因特網(wǎng)建議標(biāo)準(zhǔn)定義了以下4種算法:慢開始、擁塞避免、快重傳、快恢復(fù)。
3.擁塞控制的4種算法
(1)慢開始與擁塞避免
(1)慢開始算法
- 在TCP剛剛連接好并開始發(fā)送TCP報(bào)文段時(shí),先令擁塞窗口cwnd= 1,即一個(gè)最大報(bào)文段長度MSS.每收到一個(gè)對(duì)新報(bào)文段的確認(rèn)后,將cwnd加1,即增大一個(gè) MSS.用這樣的方法逐步增大發(fā)送方的擁塞窗口cwnd,可使分組注入網(wǎng)絡(luò)的速率更加合理。
例如,A向B發(fā)送數(shù)據(jù),發(fā)送時(shí)A的擁塞窗口為2,那么A一次可以發(fā)送兩個(gè)TCP報(bào)文段,經(jīng)過一個(gè)RTT后(也稱一個(gè)傳輸輪次),A收到B對(duì)剛才兩個(gè)報(bào)文的確認(rèn),于是把擁塞窗口調(diào)整為4,下一次發(fā)送時(shí)就可一次發(fā)送4個(gè)報(bào)文段。
- 使用慢開始算法后,每經(jīng)過一個(gè)傳輸輪次(即往返時(shí)延RTT),擁塞窗口cwnd就會(huì)加倍,即cwnd的大小指數(shù)式增長。這樣,慢開始一直把擁塞窗口cwnd增大到一個(gè)規(guī)定的慢開始門限ssthresh(閾值),然后改用擁塞避免算法。
(2)擁塞避免算法
- 擁塞避免算法的做法如下:發(fā)送端的擁塞窗口cwnd每經(jīng)過- -一個(gè)往返時(shí)延RTT就增加一個(gè)MSS的大小,而不是加倍,使cwnd按線性規(guī)律緩慢增長(即加法增大),而當(dāng)出現(xiàn)一次超時(shí)(網(wǎng)絡(luò)擁塞)時(shí),令慢開始門限ssthresh等于當(dāng)前cwnd的一半(即乘法減小)。
- 根據(jù)cwnd的大小執(zhí)行不同的算法,可歸納如下:
●當(dāng)cwnd < ssthresh時(shí),使用慢開始算法。
●當(dāng) cwnd > ssthresh時(shí),停止使用慢開始算法而改用擁塞避免算法。
●當(dāng)cwnd = sthresh時(shí),既可使用慢開始算法,又可使用擁塞避免算法(通常做法)。
(3)網(wǎng)絡(luò)擁塞的處理
- 網(wǎng)絡(luò)出現(xiàn)擁塞時(shí),無論是在慢開始階段還是在擁塞避免階段,只要發(fā)送方檢測(cè)到超時(shí)事件的發(fā)生(未按時(shí)收到確認(rèn),重傳計(jì)時(shí)器超時(shí)),就要把慢開始門限ssthresh設(shè)置為出現(xiàn)擁塞時(shí)的發(fā)送方的cwnd值的一半(但不能小于2)。
然后把擁塞窗口cwnd重新設(shè)置為1,執(zhí)行慢開始算法。這樣做的目的是迅速減少主機(jī)發(fā)送到網(wǎng)絡(luò)中的分組數(shù),使得發(fā)生擁塞的路由器有足夠時(shí)間把隊(duì)列中積壓的分組處理完。 - 擁塞避免并不能完全能避免擁塞。利用以上措施要完全避免網(wǎng)絡(luò)擁塞是不可能的。擁塞避免是指在擁塞避免階段把擁塞窗口控制為按線性規(guī)律增長,使網(wǎng)絡(luò)比較不容易出現(xiàn)擁塞。
在慢開始和擁塞避免算法中使用了“乘法減小”和“加法增大”方法。
- “乘法減小”是指不論是在慢開始階段還是在擁塞避免階段,只要出現(xiàn)一次超時(shí)(即很可能出現(xiàn)了網(wǎng)絡(luò)擁塞),就把慢開始門限值ssthresh設(shè)置為當(dāng)前擁塞窗口值的一半。網(wǎng)絡(luò)頻繁出現(xiàn)擁塞時(shí),ssthresh 值就下降得很快,以大大減少注入網(wǎng)絡(luò)的分組數(shù)。
- “加法增大”是指執(zhí)行擁塞避免算法后,在收到對(duì)所有報(bào)文段的確認(rèn)后(即經(jīng)過一個(gè) RTT),就把擁塞窗口cwnd增加一個(gè)MSS大小,使擁塞窗口緩慢
增大,以防止網(wǎng)絡(luò)過早出現(xiàn)擁塞。
(2)快重傳和快恢復(fù)
快重傳和快恢復(fù)算法是對(duì)慢開始和擁塞避免算法的改進(jìn)。
(1)快重傳
- 在TCP可靠傳輸機(jī)制中,快重傳技術(shù)使用了冗余ACK來檢測(cè)丟包的發(fā)生。同樣,冗余ACK也用于網(wǎng)絡(luò)擁塞的檢測(cè)(丟了包當(dāng)然意味著網(wǎng)絡(luò)可能出現(xiàn)了擁塞)。快重傳并非取消重傳計(jì)時(shí)器,而是在某些情況下可更早地重傳丟失的報(bào)文段。
當(dāng)發(fā)送方連續(xù)收到三個(gè)重復(fù)的ACK報(bào)文時(shí),直接重傳對(duì)方尚未收到的報(bào)文段,而不必等待那個(gè)報(bào)文段設(shè)置的重傳計(jì)時(shí)器超時(shí)。
(2)快恢復(fù)
- 快恢復(fù)算法的原理如下:
- 發(fā)送端收到連續(xù)三個(gè)冗余ACK (即重復(fù)確認(rèn))時(shí),執(zhí)行“乘法減小”算法,把慢開始門限ssthresh 設(shè)置為出現(xiàn)擁塞時(shí)發(fā)送方cwnd的一半。
- 與慢開始(慢開始算法將擁塞窗口cwnd設(shè)置為1)的不同之處是,它把cwnd的值設(shè)置為慢開始門限ssthresh改變后的數(shù)值,然后開始執(zhí)行擁塞避免算法(“ 加法增大”),使擁塞窗口緩慢地線性增大。
- 由于跳過了cwnd從1起始的慢開始過程,所以被稱為快恢復(fù)。
快恢復(fù)算法的實(shí)現(xiàn)過程如圖所示,作為對(duì)比,虛線為慢開始的處理過程。
- 在流量控制中,發(fā)送方發(fā)送數(shù)據(jù)的量由接收方?jīng)Q定,而在擁塞控制中,則由發(fā)送方自己通過檢測(cè)網(wǎng)絡(luò)狀況來決定。
- 實(shí)際上,慢開始、擁塞避免、快重傳和快恢復(fù)幾種算法應(yīng)是同時(shí)應(yīng)用在擁塞控制機(jī)制之中的
- 當(dāng)發(fā)送方檢測(cè)到超時(shí)的時(shí)候,就采用慢開始和擁塞避免,
- 當(dāng)發(fā)送方接收到冗余ACK時(shí),就采用快重傳和快恢復(fù)。
注意: 發(fā)送方發(fā)送窗口的實(shí)際大小由流量控制和擁塞控制共同決定。
因此,當(dāng)題目中同時(shí)出現(xiàn)接收端窗口(rwnd) 和擁塞窗口(cwnd) 時(shí),發(fā)送方實(shí)際的發(fā)送窗口大小是由rwnd和cwnd中較小的那一個(gè)確定的。
總結(jié)
以上是生活随笔為你收集整理的5.3.3 计算机网络传输层之TCP拥塞控制(慢开始与拥塞避免、快重传和快恢复)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5.3.2 计算机网络传输层之TCP流量
- 下一篇: 详解:面向对象与面向过程的比较 类之间