目录
窗口分为:滑动窗口和拥塞窗口
滑动窗口:用来告知发送端->接收端的缓存大小,从而达到流量控制的目的。(接收端使用)
拥塞窗口:指在一个RTT内最多可发送的数据包数。(发送端使用)
一、滑动窗口
见我的博文:https://blog.csdn.net/qq_37768971/article/details/96771315
二、拥塞控制
1.作用:
防止过多的数据注入网络,可以时网络中的路由器或链路不至过载。
拥塞控制是一个全局性的过程,涉及到所有主机、路由器、以及与降低网络传输性能有关的所有因素。
2.拥塞控制方法:
slow-start:慢开始
congestion avoidance :拥塞避免
fast retransmit :快重传
fast recovery:快恢复
3.慢开始和拥塞避免
(1)慢开始:
刚开始发送报文段时,先把拥塞窗口cwnd设置为一个最大报文段MSS的数值。
每收到一个对新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值(2^n)
ssthresh 慢开始阈值
目的:为了防止拥塞窗口cwnd增长过快引起网络拥塞
当 cwnd < ssthresh 时,使用上述的慢开始算法。
当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞控制避免算法。
(2)拥塞避免算法:
每经过一个RTT就把拥塞窗口cwnd+1,而不是加倍
使cwnd线性缓慢增长
(3)出现拥塞的处理
出现拥塞(即没有收到确认),将ssthresh设置为当前拥塞窗口值的一半
将cwnd重新设置为1,执行慢开始算法。
图示:
注:
慢开始的”慢“不是指增长慢,而是值初始值小,试探性增长。
拥塞避免并不是完全避免了拥塞,而是将拥塞窗口控制为线性增长,使网络比较不容易出现拥塞
4.快重传和快恢复
(1)快重传:
要求:接收方每收到一个失序报文段就立即发出重复确认
步骤:
1.接收方收到了M1和M2后都分别发出了确认。
2.假定接收方未收到M3的,但收到了M4、M5、M6。
3.接收方不能确认这三个报文,因为他们是失序报文。
4.按照快重传算法规定,接收方需要发送对M2的重复确认,才能让发送方知道M3未到达。
5.快重传算法还规定,发送方只要一连收到三个重复确认,就要立即重传丢失报文段M3
(前面共发送了四次M2报文的确认,其中后三个都是重复确认)
6.这样就不必等待M3设置的超时重传计时器到齐,提高网络吞吐量。
(2)快恢复算法:
1.发送方收到三个重复确认后,执行“乘法减小”算法,ssthresh减半。
请注意:接下去不执行慢开始算法
2.将cwnd值设置为ssthresh减半后的数值,然后执行拥塞避免算法,线性增大。
原因:发送方认为网络很可能没有发生拥塞
注:
采用了快恢复算法后,慢开始算法只在TCP简历连接和网络出现超时时才使用。
除了拥塞窗口的限制,从接收方对发送方的流量控制角度考虑,发送方的发送窗口不能超过接收窗口rwind。
发送方窗口的上限值 = Min [ rwnd, cwnd ]
当rwnd < cwnd 时,是接收方的接收能力限制发送方窗口的最大值。
当cwnd < rwnd 时,则是网络的拥塞限制发送方窗口的最大值。
三、滑动窗口和拥塞控制的比较
相同:提高网络性能
不同:
1.流量控制:
在TCP连接上实现对发送流量的控制,考虑端对端之间对通信量的控制
即:控制发送端的数据发送速率,使接收端可以合理接收,保证网络高效稳定运行
2.拥塞控制:
处理网络拥塞现象,需要考虑网络能够承受现有的网络负荷,涉及到所有路由器、主机以及各种降低网络传输性能有关的因素。
防止过多数据注入到网络,确保通信子网有效为主机传递分组。