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