往返时间的估计与超时

  TCP采用超时/重传机制来处理报文段的丢失问题。尽管这在概念上面很简单,但是在实际中还
是会产生很多微妙的问题。最明显还是超时时间间隔的设置。很显然,这个时间间隔肯定会大于RTT
时间,但是具体为多大呢?如何估计最开始的往返时间呢?下面将介绍这些问题的一些解决办法。

估计往返时间

  报文段的样本RTT(表示为SampleRTT)为某报文段发出到对该报文段的确认被收到之间的时间
量大多数TCP的实现仅在某个时刻做一次SampleRTT测量,而不是为每个报文段测量一个SampleRTT。
  也就是说,在任何时刻,仅为一个已发送但是目前尚未被确认的报文段估计SampleRTT,从而产生
一个接近每个RTT的新SampleRTT值。


  另外,TCP绝不为被重传的报文计算SampleRTT;它仅为传输一次的报文段测量SampleRTT。

  由于路由器的拥塞和端系统负载的变化,这些报文段的SampleRTT是波动的,所以给定的任何
SampleRTT都是非典型的。因此要取得典型的RTT,就要对SampleRTT进行加权取值。

        EstimatedRTT = (1-α)*EstimatedRTT + α*SampleRTT

  [RFC 6298]中给出α的参考值为0.125

  对于最近的样本赋予较大的权值,是因为越近的样本越能反应网络当前的拥塞状况。

  从统计学观点讲,这种平均被称为指数加权移动平均(EWMA)

  除估算RTT外,测量RTT变化也是很有用的!

  [RFC 6298]定义了RTT偏差 DevRTT,用于估算SampleRTT偏离EstimatedRTT的程度:

       DevRTT = (1-β)*DevRTT + β*|SampleRTT - EstimatedRTT|

  DevRTT是SampleRTT和EstimatedRTT之差的指数加权移动平均

  如果SampleRTT的波动小那么DevRTT的波动便会小,反之亦此。

  第一次的DevRTT=1/2(SampleRTT),以后按公式来计算,推荐β为0.25

设置和管理重传超时间隔

  超时时间间隔应该大于EstimatedRTT并且不能大于太多。超时时间间隔为EstimatedRTT加
上一些余量。并且在SampleRTT值波动大时,余量较大;当波动较小时,余量较小。因此就用
到了DevRTT。由此得出TCP重传时间间隔计算公式:

      TimeoutInterval = EstimatedRTT + 4*DevRTT

  推荐的初始TimeoutInterval为1秒。

  出现超时后,TimeoutInterval直接加倍。

  因为此次重传可能是报文确认ACK因为网络拥塞而延迟到达从而导致报文重传,重传报文
后,不久,ACK到达,会导致SampleRTT变小,进而使TimeoutInterval变小,使后面的报文出
现过早超时!


  一旦报文段收到并更新EstimatedRTT后,TimeoutInterval又使用上述公式。


  此文为《计算机网络 自顶向下方法》的学习笔记4

TCP中往返时间的估计与超时的更多相关文章

  1. 三十天学不会TCP,UDP/IP网络编程 -- TCP中的智慧之连续ARQ

    突然发现上一篇文章贴图有问题,关键我怎么调也调不好,为了表达歉意,我再贴一篇gitbook上的吧,虽然违背了我自己的隔一篇在这里发一次的潜规则~其余完整版可以去gitbook(https://www. ...

  2. TCP中RTT的测量和RTO的计算

    https://blog.csdn.net/zhangskd/article/details/7196707 tcp传输往返时间是指:发送方发送tcp断开时, 到发送方接收到改段立即响应的所耗费的时间 ...

  3. TCP/IP协议中几个缩写词的含义 MSL、TTL和RTT 报文最大生存时间 跳数(即生存时间) cs往返时间 MSL要大于TTL知道为什么吗?

    MSL.TTL和RTT简介 1.MSL是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃.因为 ...

  4. [bug]超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。

    引言 自己弄了一个小项目——日程管理系统,在初始化日期时,查询了数据库,每个日期就会查询一次数据库,就导致了这个问题. 问题 出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小. Desc ...

  5. System.Data.Entity.Core.EntityException: The underlying provider failed on Open. ---> System.InvalidOperationException: 超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。

    2017/8/15 20:55:21 [AgentPayQuery_205506102_1BBBB]系统异常:System.Data.Entity.Core.EntityException: The ...

  6. 【网络协议】TCP中的四大定时器

    前言 对于每个TCP连接,TCP一般要管理4个不同的定时器:重传定时器.坚持定时器.保活定时器.2MSL定时器. 重传定时器 非常明显重传定时器是用来计算TCP报文段的超时重传时间的(至于超时重传时间 ...

  7. TCP中ECN的工作原理分析二(摘自:RFC3168)

    英文源:http://www.icir.org/floyd/ecn.html 发送端和接收端处理: The TCP Sender For a TCP connection using ECN, new ...

  8. RTT(往返时间)和RPC

    RTT(Round-Trip Time)往返时间在计算机网络中它是一个重要的性能指标.表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认,不包含数据传输时间)总共经 ...

  9. Java Redis的Pipeline管道,批量操作,节省大量网络往返时间 & Redis批量读写(hmset&hgetall) 使用Pipeline

    一般情况下,大家使用redis去put/get都是先拿到一个jedis实例,然后操作,然后释放连接:这种模式是 请求-响应,请求-响应 这种模式,下一次请求必须得等第一次请求响应回来之后才可以,因为r ...

随机推荐

  1. 周报数据采集之生存图片(execl方法)

    https://blog.csdn.net/Luzaofa/article/details/81675364 Python之Excel chart另存为图片大家好,好久没有更新博客了,这一段时间有点忙 ...

  2. javaean(web作业)

    javabean简介: javabean是java语言开发的可重用组件,在jsp中使用javabean可以减少代码的重复量,使代码简洁. 他的优点: 1.可将HTML和Java代码分离,这主要是为了日 ...

  3. 单个div充满屏幕的CSS方法

    1.通过定位实现 <style> *{ margin: 0; padding: 0; } div{ width:100%; height: 100%; background: yellow ...

  4. vs 2017 打开 iis express问题

    问题: 更新vs2017 15.6.4后,首次打开网站 iis express 一直报 无法连接到web服务器. 解决办法: 关闭防火墙,在次启动即可,启动成功后,在次打开防火墙也无影响.

  5. C# WebAPI系列(2)

    上篇中简单介绍了一下WebApi,本章主要介绍一下Controller相关的知识. 在实际应用中,Controller是WebAPI的链接服务器和客户端的窗口.Controller的好坏影响整个系统的 ...

  6. unity API 之EventSystem.current.IsPointerOverGameObject()

    命名空间 :UnityEngine.EventSystems 官方描述: public bool IsPointerOverGameObject(); public bool IsPointerOve ...

  7. Asp.Net WebAPI核心对象解析(三)

    对于.NET的分布式应用开发,可以供我们选择的技术和框架比较多,例如webservice,.net remoting,MSMQ,WCF等等技术.对于这些技术很多人都不会陌生,即时没有深入的了解,但是肯 ...

  8. JavaScript异步编程的Promise模式

    参考: http://www.infoq.com/cn/news/2011/09/js-promise http://www.cnblogs.com/rubylouvre/p/3495286.html ...

  9. EmpireCMS_V7.5的一次审计

    i春秋作家:Qclover 原文来自:EmpireCMS_V7.5的一次审计 EmpireCMS_V7.5的一次审计 1概述    最近在做审计和WAF规则的编写,在CNVD和CNNVD等漏洞平台寻找 ...

  10. Docker学习笔记-CentOS7镜像

    前言: 环境:centos7.5 64 位 正文: 第一步:下载centos7镜像 docker pull centos 第二步:建立centos7的容器 sudo docker run --priv ...