专栏首页cwl_Java速读原著-TCP/IP(往返时间测量)

速读原著-TCP/IP(往返时间测量)

第21章 TCP的超时与重传

21.3 往返时间测量

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

首先T C P必须测量在发送一个带有特别序号的字节和接收到包含该字节的确认之间的RT T。在上一章中,我们曾提到在数据报文段和 A C K之间通常并没有一一对应的关系。在图2 0 . 1中,这意味着发送方可以测量到的一个 RT T,是在发送报文段4(第1 ~ 1 0 2 4字节)和接收报文段7(对1 ~ 1 0 2 4字节的A C K)之间的时间,用M表示所测量到的RT T。最初的T C P规范使T C P使用低通过滤器来更新一个被平滑的 RT T估计器(记为O)。 R← R+ ( 1- )M这里的是一个推荐值为 0 . 9的平滑因子。每次进行新测量的时候,这个被平滑的 RT T将得到更新。每个新估计的9 0%来自前一个估计,而1 0 %则取自新的测量。

该算法在给定这个随RT T的变化而变化的平滑因子的条件下, RFC 793推荐的重传超时时间RTO(Retransmission Ti m e O u t)的值应该设置为

RTO = R

这里的 是一个推荐值为2的时延离散因子。[Jacobson 1988] 详细分析了在 RT T变化范围很大时,使用这个方法无法跟上这种变化,从而引起不必要的重传。正如 J a c o b s o n记述的那样,当网络已经处于饱和状态时,不必要的重传会增加网络的负载,对网络而言这就像在火上浇油一样。

除了被平滑的RT T估计器,所需要做的还有跟踪RT T的方差。在往返时间变化起伏很大时,基于均值和方差来计算 RTO,将比作为均值的常数倍数来计算 RTO能提供更好的响应。在[Jacobson 1988]中的图5和图6中显示了根据RFC 793计算的某些实际往返时间的 RTO和下面考虑了往返时间的方差所计算的 RTO的比较结果。

正如J a c o b s o n所描述的,均值偏差是对标准偏差的一种好的逼近,但却更容易进行计算(计算标准偏差需要一个平方根)。这就引出了下面用于每个 RT T测量M的公式。

E rr = M-A A←A + g E rr D←D + h( | E rr |-D)
RTO = A + 4D

这里的A是被平滑的RT T(均值的估计器)而D则是被平滑的均值偏差。 E rr是刚得到的测量结果与当前的RT T估计器之差。A和D均被用于计算下一个重传时间( RTO)。增量g起平均作用,取为1 / 8(0 . 1 2 5)。偏差的增益是h,取值为0 . 2 5。当RT T变化时,较大的偏差增益将使 RTO快速上升。

[Jacobson 1988]指明在计算 RTO时使用 2 D,但经过后来更深入的研究,[Jacobson1990c]将该值改为4D,也就是在BSD Net/1的实现中使用的那样。

J a c o b s o n指明了一种使用整数运算来计算这些公式的方法,并被许多实现所采用(这也就是g, h和倍数4均是2的乘方的一个原因,这样一来计算均可只通过移位操作而不需要乘、除运算来完成)。 将J a c o b s o n与最初的方法比较,我们发现被平滑的均值计算公式是类似的( 是1减去增益g),而增益可使用不同的值。而且 J a c o b s o n计算RTO的公式依赖于被平滑的 RT T和被平滑的均值偏差,而最初的方法则使用了被平滑的 RT T的一个倍数。在看完下一节中的例子时,我们将看到这些估计器是如何被初始化的。

Karn算法 在一个分组重传时会产生这样一个问题:假定一个分组被发送。当超时发生时, RTO正如2 1 . 2节中显示的那样进行退避,分组以更长的 RTO进行重传,然后收到一个确认。那么这个A C K是针对第一个分组的还是针对第二个分组呢?这就是所谓的重传多义性问题。

[Karn and Partridge 1987]规定,当一个超时和重传发生时,在重传数据的确认最后到达之前,不能更新 RT T估计器,因为我们并不知道 A C K对应哪次传输(也许第一次传输被延迟而并没有被丢弃,也有可能第一次传输的 A C K被延迟)。

并且,由于数据被重传, RTO已经得到了一个指数退避,我们在下一次传输时使用这个退避后的 RTO。对一个没有被重传的报文段而言,除非收到了一个确认,否则不要计算新的RTO。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 速读原著-TCP/IP(TCP重新分组)

    当T C P超时并重传时,它不一定要重传同样的报文段。相反, T C P允许进行重新分组而发送一个较大的报文段,这将有助于提高性能(当然,这个较大的报文段不能够...

    cwl_java
  • 速读原著-TCP/IP(广域网输出)

    前面所给出的小互联网的输出例子对于查看协议运行过程来说是足够了,但对于像全球互联网这样的大互联网来说,应用 t r a c e r o u t e程序就需要一些...

    cwl_java
  • 速读原著-TCP/IP(超时与重传的简单例子)

    首先观察T C P所使用的重传机制,我们将建立一个连接,发送一些分组来证明一切正常,然后拔掉电缆,发送更多的数据,再观察 T C P的行为。

    cwl_java
  • 基于Spark的大数据热图可视化方法

    针对普通客户端浏览和分析大数据困难的问题, 结合 Spark 和 LOD 技术, 以热图为例提出一种面向大数据可视化技术框架. 首先利用 Spark 平台分层并...

    ZONGLYN
  • Alpha Blending and Alpha Channel on Windows Mobile

          2007年的时候,Alex在《Compelling UI's in NetCF anybody?》一文中,讲述了windows mobile 5平台...

    ShiJiong
  • 在深谈TCP/IP三步握手&四步挥手原理及衍生问题—长文解剖IP

    如果对网络工程基础不牢,建议通读《细说OSI七层协议模型及OSI参考模型中的数据封装过程?》

    周陆军
  • 你以为的可能不是你以为的

    最近生信技能树管理员小朋友XZG跟我炫耀他植物的简化基因组的gvcf模式,两百个测序数据,我一直没用过这个gvcf功能,因为的确没有需求。癌症研究,关注的主要是...

    生信技能树
  • nginx0.1.0之event模块初始化源码分析(3)

    前面已经分析了event初始化的整体流程和第一步create_conf,接下来看一下第二步ngx_conf_parse。这里不分析该函数的代码,该函数主要是遍历...

    theanarkh
  • 使用scikit-learn解释随机森林算法

    在以前的一篇博文里,我讨论过如何将随机森林算法转化为一个“白盒”,这样每次预测就能被分解为各项特征的贡献和,即 ? 我多次想找相关的代码。然而,绝大多数的随机森...

    CSDN技术头条
  • 《“互联网+”赋能于农:现状与展望》课题专家评审会召开

    ?   2月23日,《“互联网+”赋能于农:现状与展望》研究课题专家评审会在北京召开,本课题由腾讯研究院与国脉研究院共同完成,主要分析研究了“互联网+”在三农...

    腾讯研究院

扫码关注云+社区

领取腾讯云代金券