TCP/IP拥塞控制复习
...
什么是擁塞
我們都知道計算機網絡中的資源是有限的。某段時間內網絡中對資源的需求超過了網絡中的可用部分,而導致網絡性能下降的情況就是擁塞。
通俗點說就是發送的數據包太多網絡中的設備處理不過來,而導致網絡性能下降的情況。
TCP為什么要進行擁塞控制
網絡中的路由器會有一個數據包處理隊列,當路由器接收到的數據包太多而一下子處理不過來時,就會導致數據包處理隊列過長。此時,路由器就會無條件的丟棄新接收到的數據封包。
這就會導致上層的TCP協議以為數據包在網絡中丟失,進而重傳這些數據包,而路由器又會丟棄這些重傳的數據包,如此以往,就會導致網絡性能急劇下降,引起網絡癱瘓。
因此,TCP需要控制數據包發送的數量來避免網絡性能的下降。
擁塞控制與流量控制的區別
引用書上的答案:
擁塞控制就是防止過多的數據注入到網絡中,這樣可以防止網絡中的路由器或鏈路不致過載。擁塞控制所要做的都有一個前提,就是網絡能夠承受現有的網絡負荷。擁塞控制是一個全局性的過程,涉及到所有的主機、所有的路由器,以及與降低網絡傳輸性能有關的所有因素。
流量控制往往指點對點通信量的控制,是個端到端的問題。流量控制所要做的就是抑制發送端發送數據的速率,以便使接收端來得及接收。
擁塞控制的方法
慢開始
擁塞窗口
擁塞窗口(cwnd)是指發送方維護的一個根據網絡狀況動態變化的窗口。一般來說,發送方會讓自己的發送窗口等于擁塞窗口的大小。
如果考慮到流量控制的話,發送窗口也有可能小于擁塞窗口的大小。
傳輸輪次
一個傳輸輪次是指發送方把自己的發送窗口內的數據全部發送出去并收到對最后一個字節的確認。
例如,A將自己的發送窗口內的數據全部連續發送給了B,而B收到這些數據后向A發送了對這些數據的確認,A收到這個確認后,一個傳輸輪次就算是完成了。
慢開始算法
慢開始算法中的主要方法就是有小到大逐漸增大發送窗口。
那么,具體是怎么增大的呢?
簡單來說就是每個傳輸輪次后將cwnd大小加倍。
舉個例子:
首先,發送方設置cwnd=1(為方便理解,這里用報文段的個數作為窗口大小的單位),在收到接收方發來的確認后(也就是下個傳輸輪次),設置cwnd=2,然后將發送窗口的數據發送出去。在一次收到接收方發來的確認后,發送方設置cwnd=4,再講發送窗口中的數據發送出去。然后再重復上面的過程。
這里就應該清楚,慢開始算法中的慢不是說cwnd增長的慢,而是相對一下子發送大量數據而言,這種一次先發送少量的數據包的方式要慢許多。
當然,cwnd的大小肯定不可能一直以這種指數的方式增長下去,要不然很快就會增長到引起網絡癱瘓的程度了。
所以,經過一定時間或條件,我們就要換成擁塞避免算法來發送數據。
擁塞避免
慢開始門限 ssthresh
像上面所說,不能任由慢開始算法中的cwnd任意增長,所以我們引入一個慢開始門限(ssthresh)的閾值來控制cwnd的增長。
具體作用如下:
cwnd < ssthresh ,使用慢開始算法
cwnd = ssthresh , 使用慢開始算法或擁塞避免算法都可以
cwnd > ssthresh , 使用擁塞避免算法呢
還有一個問題就是這個ssthresh是怎么設置的呢?
TCP/IP中規定無論是在慢開始階段還是在擁塞避免階段,只要發現網絡中出現擁塞(沒有按時收到確認),就要把ssthresh設置為此時發送窗口的一半大小(不能小于2)。
擁塞避免過程
擁塞避免算法也是逐漸的增大cwnd的大小,只是采用的是線性增長而不是像慢開始算法那樣的指數增長。
具體來說就是每個傳輸輪次后將cwnd的大小加一(加法增大),如果發現出現網絡擁塞的話就按照上面的方法重新設置ssthresh的大小(乘法減小)并從cwnd=1開始重新執行慢開始算法。
如下面的圖片所示:
(圖片來源于網絡)
快重傳
前面復習到過,TCP的可靠傳輸的原理就是超時重傳機制。配合上面的慢開始和擁塞避免使用就是發送發發送完數據后設置一個定時器,如果在定時器時間內沒有收到對接收方發來的確認的話就去執行上述的乘法減小過程并重新開始慢開始算法。
而快重傳則是允許發送方再連續收到3個重復的確認后就可以開始執行乘法減小過程而不必再等待所設置的重傳計時器到時。
這就需要接收方沒收到一個失序的報文段就立即發出重復確認以讓發送發及早知道有報文段丟失,而不是等待自己發送數據的時候進行捎帶確認。
快恢復
快恢復算法是與快重傳算法配合使用的一個算法。
使用了快恢復算法后與原來不同的一點是當發現網絡出現擁塞并執行了乘法減小過程后,并不是設置cwnd=1并重新開始執行慢開始算法,而是讓cwnd=乘法減小后的ssthresh并開始執行擁塞避免算法。
因為此時發送發能連續接收到三個重復的確認就可以認為此時網絡很可能沒有發生擁塞。
使用了快重傳和快恢復的擁塞避免過程如下:
(圖片來源于網絡)
TCP的發送窗口到底是多大
發送窗口的上限值 = Min{rwnd, cwnd}
rwnd:接收方接收窗口
cwnd:發送方擁塞窗口
總結
以上是生活随笔為你收集整理的TCP/IP拥塞控制复习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2015 ICL, Finals, Di
- 下一篇: 由IP和掩码计算广播地址