零:前言

       1、网络堵塞的是指到达通信网络中某一部分的分组数量太多,使得该部分的网络来不及处理,以致这部分乃至整个网络性能下降的现象,严重时会导致网络通信业务陷入停顿,即:出现死锁现象。

       2、上述的解决方案就是堵塞控制,其针对于发送端。堵塞控制是调节 TCP 连接上单次发送的分组数量的算法,通过增减单次发送量逐步调整,使之逼近当前网络的承载量。上述所说的单次发送的分组数量就是堵塞窗口( Congestion Window ,简称:cwnd)。

一、答案

       慢开始(slow - start)

       堵塞避免(congestion avoidance)

       快重传(fast retransmit)

       快恢复(fast recovery)

二、过程分析

1、初始化阶段

TCP/IP —— 如何进行堵塞控制?


2、慢开始阶段
阶段(1)

TCP/IP —— 如何进行堵塞控制?


阶段(2)

TCP/IP —— 如何进行堵塞控制?


阶段(3)

TCP/IP —— 如何进行堵塞控制?


阶段(4)

TCP/IP —— 如何进行堵塞控制?


2、堵塞避免阶段

TCP/IP —— 如何进行堵塞控制?

       ssthresh:慢启动阈值。

       在该阶段,之所以由原来的指数增长变成了线性增长,那是因为在慢开始阶段,发送端每接收一个 ACK ,则说明单次发送量小于网络的承载量,则下一个回合,单次发送量 * 2。而在堵塞避免阶段,发送端每接收一个 ACK ,则说明单次发送量小于网络的承载量,则下一个回合,单次发送量 + 1。


3、拥塞调整阶段(快恢复)
阶段(1)

TCP/IP —— 如何进行堵塞控制?


阶段(2)

TCP/IP —— 如何进行堵塞控制?


阶段(3)
 

TCP/IP —— 如何进行堵塞控制?

三、拓展

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!)

相关文章:

  • 2021-11-28
  • 2021-08-03
  • 2022-12-23
  • 2021-12-15
  • 2021-10-14
  • 2021-06-19
  • 2021-05-18
  • 2022-12-23
猜你喜欢
  • 2021-07-21
  • 2022-12-23
  • 2021-04-28
  • 2019-07-31
  • 2021-10-11
  • 2021-11-03
  • 2021-07-28
相关资源
相似解决方案