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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部