1 .流量控制1.1什么是流量控制? 流量控制的目的? 如果发件人发送的数据太快,收件人无法接收,则会发生丢包。 为了避免丢包,流量控制是控制发送者的发送速度使得接收方能够接收。 流量控制的根本目的是防止丢包,是构成TCP可靠性的一个方面。
1.2如何实现流量控制? 主要方式是在接收方返回的ACK中包括接收方窗口的大小,并利用大小来控制发送方的数据发送。
1.3通过流量控制进行死锁? 如何避免死锁的发生? 当发送者接收到窗口0的响应时,发送者停止发送并等待接收者的下一个响应。 然而,如果该窗口在传输过程中丢失了非零响应,则发送者将继续等待,并且接收者将以为发送者已接收到响应而等待新数据的接收,并且两者将相互等待,从而发生死锁。
为了避免流量控制导致的死锁,TCP使用了持续定时器。 每次发件人收到零窗口响应时启动计时器。 到了时间就主动发送消息,询问收件人的窗口大小。 如果收件人仍返回到零窗口,请重置计时器并继续等待。 如果窗口不为0,则表示响应消息已丢失,通过在重置发送窗口后开始发送来避免死锁的发生。
2 .拥塞控制2.1慢启动、拥塞避免拥塞控制整体流程如下图所示。
)1)拥塞窗口cwnd初始化为一个消息段,慢启动阈值的初始值为16
)2)运行慢启动算法,在指数增长到第四回合时,即cwnd=16=ssthresh,改为执行拥塞避免算法,然后线性增长拥塞窗口
)3)假设cwnd=24时,网络超时(拥塞),则将更新后的ssthresh=12、cwnd复位为1,执行慢启动算法。 如果cwnd=12=ssthresh,则改为运行拥塞避免算法
2.2快速重传、快速恢复发送端连续收到三个重复确认时,执行“乘法减少”算法,将ssthresh阈值减半。 但是,之后不运行慢启动算法
考虑到如果网络发生拥塞,则不会多次收到重复的确认,发送方认为当前网络可能没有发生拥塞。 因此,在这种情况下,不执行慢启动算法,而是将cwnd设定为ssthresh减半的值,执行拥塞避免算法,逐渐增大cwnd。 下图: TCP Reno版本是目前使用最广泛的版本。
注:如果使用快速恢复算法,则仅在建立TCP连接和网络超时时使用慢速启动算法
3 .拥塞控制与流量控制的区别拥塞控制:拥塞控制作用于网络,它可以防止过多的数据注入网络,避免网络负载过大; 常用的方法是: (1)慢慢开始,避免拥挤,)快重发,快恢复。 流量控制:流量控制作用于接收者,控制发送者的发送速度,使接收者能及时接收,防止丢包。