自顶向下 | TCP拥塞控制

我们知道分组交换机在做分组转发也是需要时间的,所以在分组交换机中也有相应的缓存,用于存储到达的分组。很明显分组交换机中的缓存大小是有限的,那么当网络中的分组过多时,分组交换机中的缓存满,就会导致分组丢失。

网络拥塞的代价:

  • 当分组到达速率接近链路容量时,分组经历巨大的排队时延。、
  • 发送方必须执行重传以补偿因为缓存溢出而丢失的分组。
  • 发送方在遇到大时延时所进行的不必要重传会引起路由器利用其链路带宽来转发不必要的分组副本。
  • 当一个分组沿一条路径被丢失时,每个上游路由器用于转发该分组而使用的传输容量最终被浪费掉了。

TCP提供了端到端拥塞控制,端系统通过对网络行为的观察,判断网络的拥塞。

端到端拥塞控制指网络层不能为运输层拥塞控制提供显式帮助,反之称为网络辅助的拥塞控制。

如何限制发送速率?

类似TCP流量控制,发送方维护了一个变量,称为拥塞窗口,通过控制LastByteSent - LastByteAcked <= min(cwnd, rwnd),即已发送未被确认数据量小于拥塞窗口和接收窗口,来限制发送速率。

忽略rwnd(接收窗口)的情况下,通过调节cwnd(拥塞窗口)的值,调整发送方向连接发送数据的速率。

如何感知网络拥塞?

我们将一个TCP发送方的丢包事件定义为:要么出现超时,要么收到来自接收方的3个冗余ACK。也就是说没有丢包事件发生,则网络良好;出现丢包事件,则网络拥塞。

如何调节发送速率?

TCP发送方希望以尽量高的速率发送而不会使网络拥塞。

  • 一个丢包事件意味着拥塞,因此当丢失 报文段时应当降低发送速率。
  • 一个先前未确认报文段的确认到达时,能够增加发送方的速率。
  • 发送方会试探拥塞开始出现的速率,并从该速率后退,继续开始试探。

TCP拥塞控制算法

TCP拥塞控制算法包括三个部分:①慢启动;②拥塞避免;③快速恢复。

慢启动以一个低速率开始,进行指数增长,如果快要到拥塞发生的速率了(通过慢启动阈值感知,即ssthresh变量),就进入拥塞避免,停止指数增长,转为线性增长。

且TCP拥塞控制算法对待超时和收到3个冗余ACK的态度是不一样的,虽然他们都标识着分组丢失,但是超时会比收到3个冗余ACK意味着更大的网络拥塞,因此超时都会重新开始慢启动,而收到3个冗余ACK则会进入快速恢复。

在快速恢复中,会探测是不是轻度拥塞(不需要把速率打到低谷),因此每收到一个冗余ACK会指数增加发送速率,直到超时(重度拥塞,重新开始慢启动)或收到新的ACK(轻度拥塞,拥塞解除了,进入拥塞避免线性增加发送速率)。

整个拥塞控制用一句话总结就是:TCP发送方希望以尽量高的速率发送而不会使网络拥塞。因此发送方的发送速率会随着时间呈现锯齿状。


作者:李素晴
链接:https://juejin.cn/post/6888258656341606408
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页