为什么在 TCP 连接中需要流量控制和拥塞控制程序 - TCP 协议使用什么机制来实现这些?
为什么在 TCP 连接中需要流量控制和拥塞控制程序?
网络工程
拥塞
2021-07-09 15:27:10
2个回答
简而言之:流量控制确保接收器永远不会因它可以处理的更多数据而过载,而拥塞控制用于避免发送器和接收器之间的网络拥塞。
流控制:接收方发送给发送方的每个 ACK 都包含接收窗口的当前大小,它表明接收缓冲区中还有多少字节。这个过程称为滑动窗口协议。
拥塞控制:TCP引入后,发现流量过大导致所谓的网络拥塞:超出网络带宽时,并不是所有的包都能投递。TCP 实现通过再次发送这些数据包来对丢失的 ACK 做出反应,但这只会使情况变得更糟,因为网络变得更加拥挤。
这个问题的答案是拥塞控制。很复杂,但是基本上发生的事情是,一旦消息无法传递(当消息在一定超时后没有被确认时,则认为该消息无法传递),它是假设包因为网络拥塞而丢失,并且发送速率降低。这也是使用滑动窗口(拥塞窗口)来实现的。实际的算法比较复杂,现在包括慢启动、拥塞避免、快速重传和快速恢复算法。
在任何给定时刻,TCP 实现最多允许发送min(receive window, congestion window)
未确认的数据包,以遵守流量控制和拥塞控制。
流量控制用于帮助防止接收器因数据过多而过载。流量控制使用一个滑动窗口,在这个窗口中接收方说明他们能够接收和缓冲的数据量,这样发送方就不会发送太多数据。
拥塞控制或拥塞避免,用于帮助避免在数据包丢失时可能发生的拥塞;数据包丢失或数据包重新排序可能导致接收到重复的 ACK。拥塞控制使用类似于流量控制的窗口来限制发送的未确认数据包的数量。
其它你可能感兴趣的问题