图来自小林Conding(版权意识强强的我)嘻嘻嘻嘻
TCP流量控制和拥塞控制的区别
分析
控制的层面不一样、流量控制是端到端、拥塞控制是网络层面的控制。
参考回答
这两个机制都是 TCP 协议实现可靠传输的因素、主要区别在于:
流量控制:这是一个端到端的控制机制、目的是防止发送方发送的数据过快、导致接收方处理不过来。这通过滑动窗口机制实现、接收方在ACK报文中告诉发送方自己的接收窗口大小、这样就告诉了发送方可接收的最大数据量。
拥塞控制:这是一个网络层面的控制机制、目的是防止过多的数据包同时在网络中传输、导致网络拥塞。TCP 有拥塞控制的机制、通过慢启动、拥塞避免、超时重传、快速重传和快速恢复等算法调整发送速率来避免网络拥塞。当网络出现拥塞时、TCP 会降低发送速率、以减少网络负载、保证数据的可靠传输。
所以流量控制关注的是保护接收方不被淹没
而拥塞控制关注的是保护网络传输不被过载。
面试参考回答:
TCP协议的拥塞控制主要通过五个算法来实现:
慢启动、拥塞避免、超时重传、快速重传和快速恢复。
TCP拥塞控制根据检测到拥塞的方式、以及采取的应对措施、可以分为两种主要情况:
1.慢启动阶段:
发送方开始时设置一个较小的拥塞窗口大小、初始时拥塞窗口 (cwnd) 设置为 1。每收到一个新的报文段的确认后、每当成功发送跟拥塞窗口大小等量的数据后、拥塞窗口大小就会翻倍、以指数方式增长、直到拥塞控制窗口达到慢启动门限。比如说2 然后到4 然后到6直到到达慢启动门限
这个慢启动门限是固定的
2.拥塞避免阶段:
当窗口大小达到慢启动门限后、就进入拥塞避免阶段、每当成功发送跟拥塞窗口大小等量的数据后、拥塞窗口大小就会增加一个报文段的大小、以线性方式增长。
3.拥塞发生:
随着发送速率慢慢增长、可能网络会出现拥塞、发生了数据包丢失、这时候就需要重传数据
重传机制主要有两种:一个是超时重传和快速重传。
3.1 超时重传情况下的拥塞控制:
- 当发生了超时重传、慢启动门限会设置为拥塞窗口的一半、并且将拥塞窗口重置为初始值1
- 接着就重新开始慢启动进入慢启动阶段、拥塞窗口从1开始增长、发送速率大幅下降)。然后这里就是一个线性增长。直到达到新的慢启动门限
3.2 快速重传和快速恢复情况下的拥塞控制:
- 当发送方连续收到三个重复确认时、就认为发生了丢包
- 这时候拥塞窗口会减少到原来的一半、然后慢启动门限设置为减少后的拥塞窗口大小 、这个时候的慢启动门限和拥塞窗口相等。
- 然后进入到快速恢复阶段、这时候会把拥塞控制窗口+3、3的意思是确认有3个数据包被收到了、然后重传丢失的报文
- 如果收到重传丢失报文的ACK后、将拥塞窗口设置为慢启动门限、这样就直接进入拥塞避免、继续增大发送速率。
这些拥塞控制算法、可以让TCP协议能够根据网络状况动态调整发送速率、避免因为过大的流量导致网络拥塞。
滑动窗口怎么设计的 解决什么问题
分析
需要分别说明发送窗口和接收窗口的优势 滑动窗口这个概念的核心就在于 动态调整发送窗口和接收窗口。
参考回答
发送方和接收方在内核各自都有一个缓冲区、发送缓冲区和接收缓冲区上都各有一个窗口
发送方的窗口表示可发送的最大数据量、接收方的窗口表示可接收的最大数据量。
发送方有了发送窗口后、那么发送方可以不用等待已发送数据的确认报文、就可以继续发送下一批数据、提高了发送的速率。
接收方有了接收窗口后、可以实现流量控制、把接收方的接收窗口告诉给发送方、让发送方按自己的接收情况来发送数据、避免发送方发送的数据过快、导致接收方处理不过来。
分析:
1.提高传输效率:
- 问题: 在没有滑动窗口的情况下、发送方每发送一个数据包、必须等待接收方确认后才能发送下一个数据包(如图片所示的一问一答模式)。这种方式在网络延迟较高的情况下效率非常低、因为发送方大部分时间都在等待。
- 解决方案: 滑动窗口允许发送方在收到确认之前发送多个数据包。发送方可以连续发送窗口大小的数据、而无需等待每个数据包的确认。这大大提高了传输效率、尤其是在高延迟网络中。
2.进行流量控制:
- 问题: 如果发送方发送数据的速度超过了接收方的处理能力、接收方可能会丢弃数据包、导致重传、降低效率。
- 解决方案: 接收方通过通告窗口大小来告知发送方自己能够接收的最大数据量。发送方根据接收方的窗口大小来调整发送速率、避免发送过多的数据导致接收方拥塞。
那么有了窗口、就可以指定窗口大小、窗口大小就是指无需等待确认应答、而可以继续发送数据的最大值