一,流量控制
1,什么是流量控制?
TCP根据接收端接受缓冲区的大小,来决定发送数据的快慢,这个机制叫做流量控制。
2,为什么有流量控制?
任何一个接受端接受的能力都是有限的,如果接受缓冲区满了,而发送端依然发送数据,就会导致丢包,而引起超时重传。
这对资源是一种浪费。
3,怎样实现流量控制?
接收端每次都会将自己的缓冲区的大小放入TCP报头的 ‘ 窗口大小’字段, 通过ACK确认应答的来通知发送端。
如果发送端得知接受端的缓冲区很小了,就会减慢发送的频率。
如果得知缓冲区满了,发送端就不再发送数据了,但是会定期(持续计时器)发送一个零窗口探测数据段,
来得知是否可以接受数据了。
二,拥塞控制
1,什么是拥塞控制
在某段时间内,堆网络中某一资源的的需求,超过了该资源所能提供的可用部分,网络性能就要变坏,这叫作拥塞。
TCP 在不知网络的状况时,先发送少量数据进行检查,也就是为之后的大量发送数据探探路,
并根据网络状况逐渐提高传送速率,这就是 慢启动。
2,为什么有拥塞控制
当网络状况非常的拥堵,而发送方贸然发送大量的数据时,就会造成更加严重的拥堵。
3,怎样实现拥塞控制
1,拥塞窗口:
发送方维持一个叫做拥塞窗口的状态变量,拥塞窗口的大小取决于网络的拥塞情况。
2,慢开始:
算法思路:
在刚开始发送报文时,先把拥塞窗口置为1(单位字节),每收到一次ACK应答,拥塞窗口就加1,
那第一次收到1个ACK应答,窗口大小+1等于2,那么第二次就会收到两个ACK应答,窗口大小+2等于4。
这样窗口的大小就是指数增长了。
3,拥塞避免:(加法增大)
算法思路:
让拥塞窗口缓慢的增大,每经过一个往返时间RTT就是把拥塞窗口增加一个,而不是加倍。
这样拥塞窗口是按线性增长规律缓慢增长的。
4,慢开始门限:
发送方维持一个叫做慢开始门限的状态变量,慢开始门限的大小取决于网络的拥塞情况。
TCP 启动时慢开始门限的大小是
当窗口大小>慢开始门限,使用慢开始算法。
当窗口大小>慢开始门限,停止使用慢开始算法,而是使用拥塞避免的算法。
5,出现拥塞(超时重传)处理方法:
把慢开始门限改为出现拥塞时的发送方发送窗口的大小的一半(乘法减小),将拥塞窗口改为1。
重新开始慢启动。
6,快重传:
算法思想:
要求接收方每次收到一个失序的报文段就立即发出重复确认信息(和上次的有序数据报确认信息一样,所以重复)
一旦发送方收到3个重复确认信息(不包含第一次有序的数据报的确认信息),就要立即重传丢失的数据,
而不要等到自己发送数据时才捎带应答。
7,快恢复:
算法思想:
与块重传相互配合,当发送方收到3个重复的确认信息时,就执行 乘法减小 算法,把慢开始门限减为一半,
因为这时快速收到3个重复确认包,所以会认为网络并不是太拥堵,所以不必要执行慢开始,将窗口置为1,
将窗口大小置为减半后的慢开始门限。(然后开始执行拥塞避免算法就行)
8,总结:
慢开始和快恢复是针对网络拥堵情况不同的两种应对措施,慢开始由超时重传触发(网络拥塞情况糟糕),
快恢复由3次重复确认触发(网络拥塞情况还能接受),这样分而治之,能提高拥塞控制的效率。
三,流量控制和拥塞控制的联系
1,发送窗口的大小= Min [拥塞窗口 , 接受窗口 ]
2,拥塞控制是防止过度数据注入网络,使网络中的路由器和链路不至于过载,拥塞控制是面向全局的过程。
具体来说,一旦迟迟未收到确认消息,就会采取应对的措施,而不会去找是哪个网络部分出现了 问题。
3,流量控制往往关心点对点的通信量的控制。