TCP 流量控制和拥塞控制

TCP 流量控制和拥塞控制

流量控制

假如TCP以一个MSS为单位,每发一个段进行一次确认应答的处理,包的往返时间越长,通信性能就越低。因此,TCP引入窗口的概念。确认应答不再是以每个分段,而是以更大的单位进行确认。
窗口大小是发送端无需等待确认应答而可以继续发送数据的最大值,由接收端向发送端通知窗口大小。
TCP 流量控制和拥塞控制

在传输数据过程中,可能会出现丢包,所以发送端需要设置缓存保留这些数据,直到收到他们的确认应答。
收到确认应答后,将窗口滑动到确认应答的***位置,这就是滑动窗口控制
当接收端收到自己应该接收的***以外的数据时,每个确认应答返回的是应该接收的***;当发送端连续收到3次相同***的确认应答,就会重发该***的数据。这种机制被称为高速重发机制,比超时重发更快速。
对于接收端来说,窗口可以防止出现因高负荷无法接收任何数据,丢弃应该接收的数据,导致触发重发机制,浪费网络资源的情况。
流量控制可以让发送端根据接收端的接收能力控制发送数据量。接收端向发送端传送的窗口大小通知可能会丢失,所以发送端会时不时发送一个窗口探测的数据段,以获取最新的窗口值。

拥塞控制

如果网络中的一个计算机突然发送一个较大的数据,可能会导致网络的瘫痪,所以TCP刚开始通信时,会通过慢启动算法控制发送的数据量。
为了在发送端调节所要发送的数据量,定义了拥塞窗口的概念。
在慢启动的时候,设置拥塞窗口大小为1MSS,之后每收到一次确认应答,拥塞窗口大小就+1。每轮拥塞窗口大小都会扩大两倍,以指数增长,可能又会导致网络拥堵。为了防止这种情况,引入了慢启动阈值的概念。当拥塞窗口的值超出这个阈值,就会按照以下公式扩大拥塞窗口:(1MSS的字节数 * 1MSS的字节数) / 拥塞窗口(字节数)
TCP刚开始通信时,并没有设置慢启动阈值,而是在超时重发时,才会设置为当前拥塞窗口的一半。
当因3次重复确认应答触发高速重发机制时,慢启动阈值被设置为当前实际已发送但未收到确认应答的数据量的一半。然后拥塞窗口的大小设置为慢启动阈值+3MSS

参考
https://blog.csdn.net/dangzhangjing97/article/details/81008836
https://blog.csdn.net/yechaodechuntian/article/details/25429143