TCP中往返时间的估计与超时
往返时间的估计与超时
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中往返时间的估计与超时的更多相关文章
- 三十天学不会TCP,UDP/IP网络编程 -- TCP中的智慧之连续ARQ
突然发现上一篇文章贴图有问题,关键我怎么调也调不好,为了表达歉意,我再贴一篇gitbook上的吧,虽然违背了我自己的隔一篇在这里发一次的潜规则~其余完整版可以去gitbook(https://www. ...
- TCP中RTT的测量和RTO的计算
https://blog.csdn.net/zhangskd/article/details/7196707 tcp传输往返时间是指:发送方发送tcp断开时, 到发送方接收到改段立即响应的所耗费的时间 ...
- TCP/IP协议中几个缩写词的含义 MSL、TTL和RTT 报文最大生存时间 跳数(即生存时间) cs往返时间 MSL要大于TTL知道为什么吗?
MSL.TTL和RTT简介 1.MSL是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃.因为 ...
- [bug]超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。
引言 自己弄了一个小项目——日程管理系统,在初始化日期时,查询了数据库,每个日期就会查询一次数据库,就导致了这个问题. 问题 出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小. Desc ...
- 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 ...
- 【网络协议】TCP中的四大定时器
前言 对于每个TCP连接,TCP一般要管理4个不同的定时器:重传定时器.坚持定时器.保活定时器.2MSL定时器. 重传定时器 非常明显重传定时器是用来计算TCP报文段的超时重传时间的(至于超时重传时间 ...
- TCP中ECN的工作原理分析二(摘自:RFC3168)
英文源:http://www.icir.org/floyd/ecn.html 发送端和接收端处理: The TCP Sender For a TCP connection using ECN, new ...
- RTT(往返时间)和RPC
RTT(Round-Trip Time)往返时间在计算机网络中它是一个重要的性能指标.表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认,不包含数据传输时间)总共经 ...
- Java Redis的Pipeline管道,批量操作,节省大量网络往返时间 & Redis批量读写(hmset&hgetall) 使用Pipeline
一般情况下,大家使用redis去put/get都是先拿到一个jedis实例,然后操作,然后释放连接:这种模式是 请求-响应,请求-响应 这种模式,下一次请求必须得等第一次请求响应回来之后才可以,因为r ...
随机推荐
- 周报数据采集之生存图片(execl方法)
https://blog.csdn.net/Luzaofa/article/details/81675364 Python之Excel chart另存为图片大家好,好久没有更新博客了,这一段时间有点忙 ...
- javaean(web作业)
javabean简介: javabean是java语言开发的可重用组件,在jsp中使用javabean可以减少代码的重复量,使代码简洁. 他的优点: 1.可将HTML和Java代码分离,这主要是为了日 ...
- 单个div充满屏幕的CSS方法
1.通过定位实现 <style> *{ margin: 0; padding: 0; } div{ width:100%; height: 100%; background: yellow ...
- vs 2017 打开 iis express问题
问题: 更新vs2017 15.6.4后,首次打开网站 iis express 一直报 无法连接到web服务器. 解决办法: 关闭防火墙,在次启动即可,启动成功后,在次打开防火墙也无影响.
- C# WebAPI系列(2)
上篇中简单介绍了一下WebApi,本章主要介绍一下Controller相关的知识. 在实际应用中,Controller是WebAPI的链接服务器和客户端的窗口.Controller的好坏影响整个系统的 ...
- unity API 之EventSystem.current.IsPointerOverGameObject()
命名空间 :UnityEngine.EventSystems 官方描述: public bool IsPointerOverGameObject(); public bool IsPointerOve ...
- Asp.Net WebAPI核心对象解析(三)
对于.NET的分布式应用开发,可以供我们选择的技术和框架比较多,例如webservice,.net remoting,MSMQ,WCF等等技术.对于这些技术很多人都不会陌生,即时没有深入的了解,但是肯 ...
- JavaScript异步编程的Promise模式
参考: http://www.infoq.com/cn/news/2011/09/js-promise http://www.cnblogs.com/rubylouvre/p/3495286.html ...
- EmpireCMS_V7.5的一次审计
i春秋作家:Qclover 原文来自:EmpireCMS_V7.5的一次审计 EmpireCMS_V7.5的一次审计 1概述 最近在做审计和WAF规则的编写,在CNVD和CNNVD等漏洞平台寻找 ...
- Docker学习笔记-CentOS7镜像
前言: 环境:centos7.5 64 位 正文: 第一步:下载centos7镜像 docker pull centos 第二步:建立centos7的容器 sudo docker run --priv ...