天天看点

运输层(二)

运输层(二)

5.5、TCP的拥塞控制

概念

运输层(二)

网络拥塞往往是由许多因素引起的。例如:

  1. 点缓存的容量太小
  2. 链路的容量不足
  3. 处理机处理的速率太慢
  4. 拥塞本身会进一步加剧拥塞

拥塞控制的一般原理

  • 拥塞控制的前提:网络能够承受现有的网络负荷
  • 实践证明,拥塞控制是很难设计的,因为它是一个动态问题
  • 分组的丢失是网络发生拥塞的征兆而不是原因
  • 在许多情况下,甚至正是拥塞控制本身成为引起网络性能恶化、甚至发生死锁的原因

开环控制和闭环控制

运输层(二)

监测网络的拥塞

主要指标有:

  1. 由于缺少缓存空间而被丢弃的分组的百分数
  2. 平均队列长度
  3. 超时重传的分组数
  4. 平均分组时延
  5. 分组时延的标准差,等等

上述这些指标的上升都标志着拥塞的增长。

拥塞控制的算法

运输层(二)
运输层(二)
真正的发送窗口值 = Min (接收方窗口值,拥塞窗口值)

下图的实例横纵坐标的意思

传输轮次:

  • 发送方给接收方发送数据报文段后,接收方给发送方发回相应的确认报文段。
  • 一个传输轮次所经历的时间其实就是往返时间,往返时间并非是恒定的数值。
  • 使用传输轮次是为了强调把拥塞窗口所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个报文段的确认。

拥塞窗口:

  • 它会随网络拥塞程度,以及所使用的拥塞控制算法动态变化。

慢开始

慢开始(slow-start)

  • 目的:用来确定网络的负载能力或拥塞程度。
  • 算法的思路:由小到大逐渐增大拥塞窗口数值。
  • 两个变量:
  • 拥塞窗口(cwnd):初始拥塞窗口值:2 种设置方法。窗口值逐渐增大。
  • 1 至 2 个最大报文段 (旧标准)
  • 2 至 4 个最大报文段 (RFC 5681)
  • 慢开始门限(ssthresh):防止拥塞窗口增长过大引起网络拥塞
运输层(二)
运输层(二)
运输层(二)
运输层(二)
运输层(二)
运输层(二)
运输层(二)

图中swnd是发送窗口

每经过一个传输轮次,拥塞窗口cwnd就加倍

窗口大小按指数增加,2的n-1次方

拥塞避免(congestion avoidance)

  • 思路:让拥塞窗口 cwnd缓慢地增大,避免出现拥塞
  • 每经过一个传输轮次,拥塞窗口cwnd = cwnd + 1
  • 使拥塞窗口 cwnd 按线性规律缓慢增长
  • 在拥塞避免阶段,具有 “加法增大” (Additive Increase) 的特点
运输层(二)
运输层(二)
运输层(二)
运输层(二)
运输层(二)
  • 如果在发送过程中出现部分报文段丢失,这必然会造成发送方对这些丢失报文段的超时重传
运输层(二)
运输层(二)
运输层(二)
  • 这个时候又回到了慢开始
运输层(二)
运输层(二)
  • 当慢开始算法执行到拥塞窗口值增大到新的慢开始门限值时,就停止使用慢开始算法。转而执行拥塞避免算法。
运输层(二)

两个算法完整示意图

运输层(二)

快重传和快恢复

运输层(二)
运输层(二)

快重传(fast retrasmit)

运输层(二)

快恢复(fast recovery)

运输层(二)

改进后的整体算法的示意图

运输层(二)
练习
运输层(二)

慢开始算法是指数增长的,16的时候拥塞了,说明在16之前就开始执行拥塞避免算法了,所以慢开始门限一开始应该是8。

5.6、TCP 超时重传时间的选择

运输层(二)
如果超时重传时间​

​RTO​

​​ 的值设置得比往返时间RTT0的值​

​小很多​

​,这会引起报文段不必要的重传,使网络负荷增大。
运输层(二)
如果超时重传时间​

​RTO​

​​ 的值设置得​

​远大于​

​往返时间RTT0的值,这会使重传推迟的时间太长,使网络的空闲时间增大,降低传输效率。
运输层(二)
运输层(二)
运输层(二)

RFC6298 建议使用下式计算超时重传时间RTO

运输层(二)

往返时间RTT的测量比较复杂

运输层(二)
运输层(二)

TCP 超时重传时间RTO的计算

运输层(二)
运输层(二)
注意:新的RTTD的计算公式中的RTTs指的是上一次计算出来的RTTs,而不是本次的RTTs。

总结

继续阅读