zoukankan      html  css  js  c++  java
  • TCP超时重传、滑动窗口、拥塞控制、快重传和快恢复

    TCP超时重传

      原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止。
      影响超时重传机制协议效率的一个关键参数是重传超时时间RTO,Retransmission TimeOut)。RTO的值被设置过大过小都会对协议造成不利影响。
      (1)RTO设长了,重发就慢,没有效率,性能差。
      (2)RTO设短了,重发的就快,会增加网络拥塞,导致更多的超时,更多的超时导致更多的重发。
      连接往返时间(RTT,Round Trip Time),指发送端从发送TCP包开始到接收它的立即响应所消耗的时间。

    TCP滑动窗口

    作用:(1)提供TCP的可靠性;(2)提供TCP的流控特性

    TCP的滑动窗口的可靠性也是建立在“确认重传”基础上的。
    发送窗口只有收到对端对于本段发送窗口内字节的ACK确认,才会移动发送窗口的左边界。
    接收端可以根据自己的状况通告窗口大小,从而控制发送端的接收,进行流量控制。

    TCP拥塞控制

      拥塞控制是一个全局性的过程; 流量控制是点对点通信量的控制
      TCP拥塞控制4个核心算法:慢开始(slow start)、拥塞避免(Congestion Avoidance)、快速重传(fast retransmit)、快速回复(fast recovery)
      拥塞窗口(cwnd,congestion window),其大小取决于网络的拥塞程度,并且动态地在变化。
      
      慢开始算法的思路就是,不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小。

    为了防止cwnd增长过大引起网络拥塞,还需设置一个慢开始门限ssthresh状态变量。ssthresh的用法如下:
    当cwnd < ssthresh时,使用慢开始算法。
    当cwnd > ssthresh时,改用拥塞避免算法。
    当cwnd = ssthresh时,慢开始与拥塞避免算法任意。

    拥塞避免算法让拥塞窗口缓慢增长,即每经过一个往返时间RTT就把发送发的拥塞窗口cwnd加1,而不是加倍。

    无论是在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞,就把慢开始门限设置为出现拥塞时的发送窗口大小的一半。然后把拥塞窗口设置为1,执行慢开始算法。如下图:

    拥塞控制的具体过程如下:
    (1)TCP连接初始化,将拥塞窗口设置为1
    (2)执行慢开始算法,cwnd按指数规律增长,直到cwnd=ssthresh时,开始执行拥塞避免算法,cwnd按线性规律增长
    (3)当网络发生拥塞,把ssthresh值更新为拥塞前ssthresh值的一半,cwnd重新设置为1,按照步骤(2)执行

    快重传和快恢复

      快速重传(Fast retransmit)要求接收方在收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方),而不要等到自己发送数据时捎带确认。
      快重传算法规定,发送方只要一连收到3个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计数器时间到期。
      
      
      
      快速恢复(Fast Recovery)
      (1)当发送方连续收到三个重复确认,就执行“乘法减小”算法,把慢开始门限ssthresh减半。这是为了预防网络发生拥塞。请注意:接下去不执行慢开始算法。
    (2)由于发送方现在认为网络很可能没有发生拥塞,因此与慢开始不同之处是现在不执行慢开始算法(即拥塞窗口cwnd现在不设置为1),而是把cwnd值设置为慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。

    发送方窗口的上限值 = Min [ rwnd, cwnd ]
    当rwnd < cwnd 时,是接收方的接收能力限制发送方窗口的最大值。
    当cwnd < rwnd 时,则是网络的拥塞限制发送方窗口的最大值。
    

    http://www.frankyang.cn/2017/05/08/tcp1/

  • 相关阅读:
    diary and html 文本颜色编辑,行距和其它编辑总汇
    bash coding to changeNames
    virtualbox ubuntu 网络连接 以及 连接 secureCRT
    linux 学习6 软件包安装
    linux 学习8 权限管理
    vim 使用2 转载 为了打开方便
    ubuntu
    linux 学习15 16 启动管理,备份和恢复
    linux 学习 14 日志管理
    linux 学习 13 系统管理
  • 原文地址:https://www.cnblogs.com/yangjiannr/p/tcp1.html
Copyright © 2011-2022 走看看