一、引言

对于每个TCP连接,TCP管理4个不同的定时器

  1. 重传定时器用于当希望收到另一端的确认。
  2. 坚持 (persist) 定时器使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口。
  3. 保活 (keepalive) 定时器可检测到一个空闲连接的另一端何时崩溃或重启。
  4. 2MSL定时器测量一个连接处于TIME_WAIT状态的时间。

二、往返时间测量

TCP超时与重传中最重要的一部分是对一个给定连接,如何测量往返时间 (RTT)。由于路由器和网络流量均会变化,因此我们认为这个时间会经常变化,TCP应该跟踪这些变化并相应改变其超时时间。

2.1 方法一:根据估测RTT来确定重传时间

首先,TCP必须测量在发送一个带有特别序号的字节和接收到包含此字节的确认之间的RTT,用\(M\)表示所测量到的RTT。
最初TCP规范是TCP使用一个低通滤波器来更新一个被平滑的RTT估计器,记为\(R\)。
\[R \leftarrow \alpha R + (1-\alpha)M\]
这里\(\alpha\)是一个推荐值为0.9的平滑因子。RFC 793推荐重传超时时间RTO (Retransmission TimeOut) 的值如下:
\[RTO = R\beta\]
这里的\(\beta\)是一个推荐值为2的时延离散因子。
综上,整个过程如下\[RTT\xrightarrow\alpha R \xrightarrow\beta RTO\]
当RTT变化范围很大时,这种方法无法跟上这种变化,从而引起不必要的重传。

2.2 跟踪RTT的方差和均值来计算重传时间

Jacobson指出,可以用均值偏差对标准偏差做逼近,并提出下面用于每个RTT测量\(M\)的公式。\[Err=M-A \\ A \leftarrow A+gErr\\ D \leftarrow D + h(|Err|-D \\ RTO=A+4D\]
其中\(A\)是被平滑的RTT,即均值的估计其,而\(D\)是被平滑的均值方差。\(A\)和\(D\)均被用于计算下一个重传时间 (RTO)。增量\(g\)起到平均作用,取值为1/8。偏差的增益是\(h\),取值为0.25。
当RTT变化较大时,较大的偏差增益将使得RTO快速上升。

2.3 Karn算法

当一个超时和重传发送时,在重传数据的确认最后达到时,不能更新RTT估计器,因为我们不知道ACK对应哪次传输。

2.4 RTT测量的一个例子

在时间10、14、21处的间隔是由在这些时刻附近发生重传引起的。Karn算法在另一个报文段被发送和确认事前组织我们更新估计器。

三、拥塞举例

用起始序号报文段发送时间做图,是一种较好的数据传输的可视化方法。如下图,可以看出在时刻10、14和21附近的3个重传。我们还可以看到在这3个点中只进行了一次报文段的重传,因为只有一个点下垂低于向上的斜率。

四、拥塞避免算法

拥塞避免算法是一种处理丢失分组的方法。
假定:分支收到损坏引起的丢失是非常少的(远小于1%),因此分组丢失意味着源主机和目的主机之间的某处网络发生了故障。
分组丢失的两种指示:发生超时以及收到重复的确认。
当拥塞发生时,拥塞避免算法希望降低分组进入网络的速率,于是调用慢启动来做到这一点。
拥塞避免算法和慢启动算法对每个连接维持两个变量:拥塞窗口\(cwnd\)和慢启动门限\(ssthresh\),工作过程如下:

  1. 对于给定的链接,初始化\(cwnd\)为1个报文段,\(ssthresh\)为65535字节
  2. TCP输出例程的输出不能超过\(cwnd\)和接收方通告窗口大小
  3. 拥塞发生时(超时或收到重复确认),\(ssthresh\)设置为当前窗口大小(\(cwnd\)和接收方通告窗口的最小值)的一半。此外,如果超时引起了拥塞,则\(cwnd\)被设置为1个报文段(这就是慢启动)。
  4. 新的数据被对方确认是,就增加\(cwnd\)。增加的方法依赖于是否进行慢启动或拥塞避免。
    如果\(cwnd\)小于或等于\(ssthresh\),则认为在执行慢启动,慢启动一直持续到我们回到当拥塞发生时所处的位置一半时停止。慢启动算法初始设置\(cwnd\)为1个报文段,此后每收到一个确认就加1。这会使窗口按指数方式增长。
    否则,正在进行拥塞避免,每收到一个确认将\(cwnd\)增加\(1/cwnd\),这是一个加性增长。

    五、快速重传与快速恢复算法

    如果一连串收到3个或3个以上重复的ACK,就非常可能是一个报文段丢失了。于是我们就重传丢失的数据报文段,而无需等待超时定时器溢出。这就是快速重传算法。
    接下来执行的不是慢启动算法而是拥塞避免算法,这就是快速重传算法。不执行慢启动的原因是重复的ACK不仅仅告诉我们一个分组丢失了。由于接收方只有收到另一个报文段时才会产生重复的ACK,此时这个报文段已经离开了网络并进入了接收方缓存。也就是说在收发两端之间仍然有流动的数据,因此不想执行慢启动来减少数据流。
    算法流程如下:

    1. 收到第3个重复的ACK时,把\(ssthresh\)设置为当前拥塞窗口\(cwnd\)的一半。重传丢失的报文段。设置\(cwnd\)为\(ssthresh\)加上3倍的报文段大小。
    2. 每次收到另一个重复的ACK时,\(cwnd\)增加一个报文段大小并发送一个分组(如果新的cwnd运行发送)。
    3. 收到下一个确认新数据ACK到达时,设置\(cwnd\)为\(ssthresh\)(第一步设置的值)。这一步采用的是拥塞避免,因为分组丢失时,我们把当前的速率减半。

TCP的超时与重传的更多相关文章

  1. 【TCP/IP详解 卷一:协议】第二十一章 TCP的超时与重传

    作为TCP的重头戏,本章节涉及了许多关于计算方面的内容,使用了大量的例子来指明一些观点. 我使用的理解方法是:通过别人的博客,以及实例结合进行理解,不然会很吃力. 21.1 引言 reliable T ...

  2. TCP之超时和重传

    RTT:往返时间:  RTO:Retransmission Timeout即超时重传时间: 关键点在于:超时和重传间隔的策略,即怎样确定超时间隔和重传间隔: TCP中的四个定时器:2MSL定时器:重传 ...

  3. 13.TCP的超时与重传

    TCP提供可靠的运输层.它使用的方法之一就是确认从另一端收到的数据.但数据和确认都有可能会丢失.TCP通过在发送时设置一个定时器来解决这种问题.如果当定时器溢出时还没有收到确认,它就重传该数据. 对于 ...

  4. TCP/IP详解 卷1 第二十一章 TCP的超时与重传

    21.1 引言 可靠性的保证之一就是超时重传 前面两个超时重传的例子 1)  ICMP端口不能到达时,TFTP客户使用UDP实现了一个简单的超时和重传机制,假定5s是一个适当是时间间隔,并每隔5s进行 ...

  5. TCP/IP协议--TCP的超时和重传

    TCP是可靠传输.可靠之一体现在收到数据后,返回去一个确认.但是不能完全避免的是,数据和确认都可能丢失.解决这个办法就是,提供一个发送的重传定时器:如果定时器溢出时还没收到确认,它就重传这个报文段. ...

  6. 《TCP/IP具体解释》读书笔记(21章)-TCP的超时与重传

    TCP提供可靠的运输层. 它使用的方法之中的一个就是确认从还有一端收到的数据.但数据和确认都有可能会丢失.TCP通过在发送时设置一个定时器来解决这样的问题.假设当定时器溢出时还没有收到确认,它就重传该 ...

  7. 【TCP】超时与重传

    在TCP连接中假设发送方一开始便向网络发送多个报文段,直到达到接收方通告的窗口大小为止.当发送方和接收方处于同一个区域网段时,这种方式是可以的.但是如果发送方和接收方之间存在多个路由器和速率较慢的链路 ...

  8. TCP/IP详解学习笔记(12)-TCP的超时与重传

    超时重传是TCP协议保证数据可靠性的另一个重要机制,其原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止. 1.超时 超 ...

  9. TCP/IP具体解释学习笔记--TCP的超时与重传

    1.基本概念 TCP之所以能够安全的将数据在传输中的安全性,是因为它每次给对方发送数据,都会等待对方给个确认,当长时间收不到这个确认,发送端就会重发这个数据. 2.超时时间的測量 要測超时时间,TCP ...

随机推荐

  1. 【UVA11613 训练指南】生产销售规划 【费用流】

    题意: Acme公司生产一种X元素,给出该元素在未来M个月中每个月的单位售价.最大产量.最大销售量,以及最大储存时间(过期报废不过可以储存任意多的量).你的任务是计算出公司能够赚到的最大利润. 分析: ...

  2. Struts2分模块开发

    -------------------siwuxie095 Struts2 分模块开发 在实际开发中,如果一个项目是团队开发的,也就是很多人开发的, 每个人都需要去修改 struts.xml,因为 s ...

  3. Chrome谷歌浏览器屏蔽百度搜索右侧广告推荐方法

    先上图百度广告,其实屏蔽广告很简单 主要分成以下三步: 下载Adblock Plus插件 安装Adblock Plus插件 开启屏蔽 一.下载Adblock Plus插件(官网离线版) 二.安装Adb ...

  4. 636. Exclusive Time of Functions 进程的执行时间

    [抄题]: Given the running logs of n functions that are executed in a nonpreemptive single threaded CPU ...

  5. VisualVM远程连接Tomcat(转)

    转自:http://www.cnblogs.com/sunshine-2015/p/5547128.html VisualVM VisualVm是一个将很多JDK命令工具可视化的windows程序,直 ...

  6. laravel @if

  7. ubuntu14.04下安装qt5

    1.sudo apt-get install build-essential 2.先打开终端快捷键ctrl+t 3. 然后输入: sudo apt-get install cmake qt5-defa ...

  8. 深入理解java虚拟机(二)HotSpot Java对象创建,内存布局以及访问方式

    内存中对象的创建.对象的结构以及访问方式. 一.对象的创建 在语言层面上,对象的创建只不过是一个new关键字而已,那么在虚拟机中又是一个怎样的过程呢? (一)判断类是否加载.虚拟机遇到一条new指令的 ...

  9. 移动距离——第六届蓝桥杯C语言B组(省赛)第八题

    原创  问题描述: 移动距离 X星球居民小区的楼房全是一样的,并且按矩阵样式排列.其楼房的编号为1,2,3...当排满一行时,从下一行相邻的楼往反方向排号.比如:当小区排号宽度为6时,开始情形如下: ...

  10. 下了个蓝屏代码查看工具,就中病毒了。。。什么鬼病毒,竟然还是用的VBS

    扫描所有盘下面的html文件,加入VBS脚本...真是奇葩,多少年前的病毒了... http://files.cnblogs.com/files/guangshan/lpdmcxq.rar 这个是病毒 ...