TCP超时重传时间的选择
一---导读
TCP超时重传时间的选择是计算机网络中较复杂的问题之一,但幸好前辈们都把路铺好了,我们只需要学习并且遵循这些规则,有能力的话去进一步改正。
二---必知的一些专业术语
A--RTT( round-trip time)往返时延。代表TCP发送方从发送报文段开始,到接收到接收方发送的确认报文段的这段时间.

B--RTO(Retransmissinon Time -out)超时重传时间。
三---重传时间的公式和选择
思考这样两个问题,如果超时重传时间RTO设置的比往返时间RTT还要小,那么在发送方还没收到确认之前,该数据报文段发生了不必要的重传。多此一举。

如果超时重传时间RTO设置的比往返时延RTT大很多,那么网络空闲的时间就会较大(因为在重传时间内,不能进行其它报文段的发送),减低了网络传输的效率。

通过以上两个问题总结我们是否可以得出这样的结论:超时重传时间RTO的值是不是设置的比第一次往返时间RTT0的值略大就行了呢?答案是否定的,网络速率千变万化,受很多因素(如路由器,带宽)的影响,可能第一次RTT0是一个值,第二次RTT1的值又是另外一个值,那么如果把RTO的值固定写死那就行不通。

上图表面如果RTO固定的话会造成“TCP数据报文段1”发生不必要的重传
第二次的RTT1要大于第一次的RTT0,于是第一次的RT0的选择值在这里就不适合了。针对这一个复杂的问题,我们不能用某次测量的值来计算超时重传时间RTO。这时就需要借鉴中华名族的优秀传统-折中。利用每次测量的RTT样本,然后取一个加权平均值RTTs。
新的加权平均往返时间RTTs = (1 - a)x 旧的RTTs + a x 新的RTT样本。(其中0 < a < 1)
如果 a很小,趋近于0,说明新的RTT样本作用不大。
如果 a 很大,趋近于1,则说明旧的RTTs对新的RTTs的影响很小。
现在通用的a的取值为1/8,即0.125。
显然,新的RT0的值应该要略大于RTTs的值。
RTO = RTTs + 4 x RTTd(RTTd为RTT偏差的加权平均)
RTTd1 = RTT1 / 2
新的RTTd = (1-B) x 旧的RTTd+B x |RTTs-新的RTT样本| 。 (其中0< B<1)
B的建议取值为1/4,即0.25
从上面可以看出,新的RTT样本的计算正确与否特别重要。
RTT的测量容易出现下面图示的问题

解决上面问题的办法是:报文段每重传一次,就增大RTO的值,典型的做法是把新的RTO的值取值为旧RTO的两倍。
四---习题与总结
超时重传时间的问题比较复杂,但重要的是理解并记忆两个公式,最后,以一个练习来结束总结本文,如下图

TCP超时重传时间的选择的更多相关文章
- TCP/IP笔记 三.运输层(3)——TCP超时重传算法
TCP 每发送一个报文段,就对这个报文段设置一次计时器.只要计时器设置的重传时间到但还没有收到确认,就要重传这一报文段 1. 平均往返时延RTT 往返时延:一个报文段发出的时间,以及收到相应的确认报文 ...
- 【原创】TCP超时重传机制探索
TCP超时重传机制探索 作者:tll (360电商技术) 1)通信模型 TCP(Transmission Control Protocol)是一种可靠传输协议.在传输过程中当发送方(sender)向接 ...
- TCP超时重传、滑动窗口、拥塞控制、快重传和快恢复
TCP超时重传 原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止. 影响超时重传机制协议效率的一个关键参数是重传超时时 ...
- 《TCP/IP详解 卷一》读书笔记-----TCP超时重传
1.TCP提供的是可靠传输,它通过接收方发送一个确认报文ACK来提供这种可靠性.但是数据报文和确认报文都可能会丢失,所以TCP会给发出的数据报文设置一个时间,如果超时了则进行重传 2.Karn's A ...
- linux tcp超时重传实现分析
kernel version 3.18.20 1.函数调用关系 tcp_ack-> tcp_clean_rtx_queue-> tcp_ack_update_rtt-> tp-> ...
- 计算TCP链接的RTO超时重传时间
- TCP超时重传、序列号、滑动窗口简介
文章目录 12 TCP:传输控制协议(初步) 12.1 引言 12.1.1 ARQ和重传 12.1.2 分组窗口和滑动窗口 12.1.3 变量窗口:流量控制和拥塞控制 12.1.4 变量窗口:设置重传 ...
- TCP超时重传机制
TCP协议在能够发送数据之前就建立起了"连接".要实现这个连接,启动TCP连接的那一方首先将发送一个SYN数据包.这只是一个不包含数据的数据包, 然后,打开SYN标记.如果另一方同 ...
- 深入浅出图解【计算机网络】 之 【TCP可靠传输的实现2: 超时重传+拥塞控制】
[前言]上一篇文章介绍了关于TCP的基础知识,以及建立(释放)连接和滑动窗口的概念. 本篇文章将延续上一篇的思路,继续介绍TCP实现可靠传输的机制. 超时重传 上一篇文章里介绍过TCP采用停止等待协议 ...
随机推荐
- [ASIS 2019]Unicorn shop
点击进去之后是一个购买独角兽的界面,有四种类型的独角兽,前三种的价格比较便宜,最后的独角兽价格比较贵. 我们先尝试购买前三种独角兽,输入id,然后price输入9 然后就告诉我商品错了,可能复现靶场这 ...
- C#清除HTML标签方法
删除字符串中HTML标签代码 public static string ClearHTMLTags1(string HTML) { string[] Regexs ={ @"<scri ...
- chrome打开Axure Rp导出的html文件提示需要安装Axure Rp插件解决办法
1.确保chrome安装了Axure Rp扩展插件,如果按照页面的提示去下载,但是打不开的话就是被墙了,贴上科学的上网梯子https://www.lanzous.com/i7i0wuh,直接下载打开就 ...
- 【Azure Developer】VS Code运行Java 版Azure Storage SDK操作Blob (新建Container, 上传Blob文件,下载及清理)
问题描述 是否可以用Java代码来管理Azure blob? 可以.在代码中加入azure-storage-blob依赖.即可使用以下类操作Azure Storage Blob. BlobServic ...
- 【题解】「UVA681」Convex Hull Finding
更改了一下程序的错误. Translation 找出凸包,然后逆时针输出每个点,测试数据中没有相邻的边是共线的.多测. Solution 首先推销一下作者的笔记 由此进入>>> ( ...
- 四、Zookeeper伪集群搭建
伪集群模式 Zookeeper不但可以在单机上运行单机模式 Zookeeper,而且可以在单机模拟集群模式 Zookeeper的运 行,也就是将不同实例运行在同一台机器,用端口进行区分,伪集群模式为我 ...
- git学习——git下载安装
原文来至 一.集中式vs分布式 Linus一直痛恨的CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢? 先说集中式版本控制系统,版本库是集中 ...
- STL——容器(Map & multimap)的删除
Map & multimap 的删除 map.clear(); //删除所有元素 map.erase(pos); //删除pos迭代器所指的元素,返回下一个元素的 ...
- 七、TestNG传递参数2
数据提供者本身可以接受两个类型的参数:Method和ITestContext 在创建@DataProvider方法是可以有四种格式如图: 第一种在上一篇中有学到 1-Methode参数使用 @Data ...
- Consul安装部署(Windows单机、Docker集群)
1. Consul简介 Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发,基于 Mozilla Public Licen ...