TCP---拥塞控制

  • 在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况称之为拥塞
  • 若出现拥塞而不进行控制,整个网络的吞吐量将随着输入负荷的增大而下降
  • TCP采用的方法是:让每一个发送方根据所感知到的网络拥塞程度来限制其能向连接发送流量的速率。

TCP---拥塞控制_第1张图片

TCP的拥塞控制算法( 慢启动,拥塞避免,快重传,快恢复

  • 发送方维护了一个叫做拥塞窗口cwnd的状态变量,其值取决于网络的拥塞程度,并且动态变化
    • 拥塞窗口cwnd的维护原则:只要网络没有出现阻塞,拥塞窗口就再增大一些;但只要网络出现拥塞,拥塞窗口就减小一些。
    • 判断出现网络拥塞的依据:没有按时收到应当到达的确认报文(即发送超时重传)
  • 发送方将拥塞窗口作为发送窗口swnd,即swnd = cwnd。
  • 维护一个慢开始门限ssthresh状态变量
    • 当cwnd < ssthresh时,使用慢开始算法;
    • 当cwnd > ssthresh时,停止使用慢开始算法而改用拥塞避免算法;

慢启动

在慢启动的时候,cwnd的值以一个MSS开始并且每当传输的报文段首次被确认就增加1个MSS(有两个被确认就增加两个,成指数增长)。这个过程每过一个RTT,发送速率就成倍增长。所以在慢开始阶段以指数增长。

结束指针增长的情况、

  • 存在一个由超时指示的丢包时间,TCP发送方将cwnd设置为1并重新开始慢启动过程,并且还将慢开始门限值ssthresh设置为ssthresh设置为cwnd/2。
  • 当cwnd到达或者超过ssthresh的值时,会结束慢启动,转移到拥塞避免模式。
  • 如果检测到三个冗余ACK,TCP执行快速重传并进入快速回复状态。

拥塞避免

因为在这个状态下,cwnd的值大约是上次遇到拥塞状态时的值的一半,所以每个RTT只是将cwnd的值加一个MSS。

结束拥塞避免的情况

  • 出现超时重传,TCP发送方将cwnd设置为1并重新开始慢启动过程,并且还将慢开始门限值ssthresh设置为ssthresh设置为cwnd/2。
  • 当收到三个冗余的ACK,TCP将cwnd的值减半,将ssthresh的值记录为cwnd的值的一半。

TCP---拥塞控制_第2张图片

快速恢复

发送方收到三个重复确认,就知道现在只是丢失了个别的报文段,于是开始启动快速回复算法。

  • 发送方将慢开始门限值ssthresh值和拥塞窗口cwnd值调整为当前窗口的一半,开始执行拥塞避免算法
  • 也有将cwnd的值再增大一些,加上三个ACK,所以为ssthresh+3;

TCP---拥塞控制_第3张图片

你可能感兴趣的:(爱学习的狗,tcp/ip,网络,网络协议)