TCP/IP / 如何进行堵塞控制?
零、前言
? ? ? ?1、網(wǎng)絡(luò)堵塞的是指到達通信網(wǎng)絡(luò)中某一部分的分組數(shù)量太多,使得該部分的網(wǎng)絡(luò)來不及處理,以致這部分乃至整個網(wǎng)絡(luò)性能下降的現(xiàn)象,嚴重時會導(dǎo)致網(wǎng)絡(luò)通信業(yè)務(wù)陷入停頓,即:出現(xiàn)死鎖現(xiàn)象。
? ? ? ?2、上述的解決方案就是堵塞控制,其針對于發(fā)送端。堵塞控制是調(diào)節(jié) TCP 連接上單次發(fā)送的分組數(shù)量的算法,通過增減單次發(fā)送量逐步調(diào)整,使之逼近當前網(wǎng)絡(luò)的承載量。上述所說的單次發(fā)送的分組數(shù)量就是堵塞窗口( Congestion Window?,簡稱:cwnd)。
一、答案
? ? ? ?慢開始(slow - start)
? ? ? ?堵塞避免(congestion avoidance)
? ? ? ?快重傳(fast retransmit)
? ? ? ?快恢復(fù)(fast recovery)
二、過程分析
1、初始化階段
2、慢開始階段
階段(1)
階段(2)
階段(3)
階段(4)
2、堵塞避免階段
? ? ? ?ssthresh:慢啟動閾值。
? ? ? ?在該階段,之所以由原來的指數(shù)增長變成了線性增長,那是因為在慢開始階段,發(fā)送端每接收一個 ACK ,則說明單次發(fā)送量小于網(wǎng)絡(luò)的承載量,則下一個回合,單次發(fā)送量是 cwnd?* 2。而在堵塞避免階段,發(fā)送端每接收一個 ACK ,則說明單次發(fā)送量小于網(wǎng)絡(luò)的承載量,則下一個回合,單次發(fā)送量 cwnd?+ 1。
3、擁塞調(diào)整階段(快恢復(fù))
階段(1)
階段(2)
階段(3)
?
三、拓展
1、上述堵塞控制過程分析中,快恢復(fù)啟動的原因就是接收端收到了失序的報文。發(fā)送端如何感知呢?有以下兩種方法:
(1)ACK 超時(超時發(fā)送)
? ? ? ?發(fā)送端對滑窗內(nèi)每一個 segment 都設(shè)置了定時器,若有一個 segment 沒有在規(guī)定時間內(nèi)收到 ACK,則認為當前網(wǎng)絡(luò)有堵塞,執(zhí)行快恢復(fù)。
(2)重復(fù) ACK(快重傳)
? ? ? ?假設(shè)當前接收端收到的 segment 7、8、9,當接收端接收到失序 segment 11時,接收端會發(fā)送 ACK = 10 給發(fā)送端,告訴發(fā)送端 seq = 10 的包丟失了。之后接收端連續(xù)收到 seq = 12、13,每次接收端都會告訴發(fā)送端 seq = 10 的包還沒有到,總共三次,那么發(fā)送端就暫停了定時器,直接發(fā)送 seq = 10 的包。
2、截至到現(xiàn)在,我們知道了三個窗口:滑動窗口、TCP 頭中的 Window Size(用于流量控制)、堵塞窗口。
(1)滑動窗口
? ? ? ?A、發(fā)送端,滑動窗口記錄了任意時刻可以連續(xù)發(fā)送的 segment,包括 Sent not receive Ack 和 Being sent?。其大小是堵塞窗口和 TCP 頭中 Window Size 的最小值。
? ? ? ?B、接收端,滑動窗口記錄了任意時刻 Received ACKed Not Sent to Proc、Received not ACKed 和 Not Received?。
(2)TCP 頭中 Window Size?
? ? ? ?接收端將自身的 Advertised Window ,即:可用的接收緩沖區(qū),告訴發(fā)送端。發(fā)送端會根據(jù)該值調(diào)整自己的滑窗大小。
(3)堵塞窗口
? ? ? ?其相當于發(fā)送端的流量控制,與 Window Size 協(xié)同控制發(fā)送端的滑動窗口。
?
參考:
? ? ? ?https://www.cnblogs.com/vamei/archive/2013/01/05/2824748.html
? ? ? ?https://blog.csdn.net/dangzhangjing97/article/details/81008836
?
(SAW:Game Over!)
總結(jié)
以上是生活随笔為你收集整理的TCP/IP / 如何进行堵塞控制?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TCP/IP / 如何进行流量控制( f
- 下一篇: TCPIP / 粘包和拆包的定义以及解决