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采用停止等待协议 ...
随机推荐
- PyQt学习随笔:ListView控件删除一项列表项的方法
ListView控件可以通过控件对应数据存储删除列表项,具体使用: 数据存储.removeRow(元素索引位置) 删除指定位置的一个列表项. 数据存储如果不知道程序定义的数据存储名,可以通过model ...
- 分布式文件系统HDFS-部署和配置
1 部署HDFS HDFS的基本操作可以分为集群管理和文件系统操作两种类型: 集群管理:包括Namenodede 的格式化.集群的启动和停止.集群信息查看等. 文件系统:包括对目录.文件和权限等内容的 ...
- 深入解析ConcurrentHashMap:感受并发编程智慧
如果有一个整型变量count,多个线程并发让count自增1,你会怎么设计? 你知道如何让多个线程协作完成一件事件吗? 前言 很高兴遇见你~ ConcurrentHashMap是个老生常谈的集合类了, ...
- 如何实现OSM地图本地发布并自定义配图
目录 1.缘起 2.准备环境 2.1.安装linux系统 2.2.安装docker 2.3.安装Docker Compose 2.4.安装git 3.发布地图 3.1.拉取代码 3.2.测试网络 3. ...
- 01_02_py
1基础知识 1.自然语言 (natural language) 是人们交流所使用的语言,例如英语.西班牙语和法语.它们不是人为设计出来的(尽管有人试图这样做):而是自然演变而来. 2.形式语言 (fo ...
- PDF格式分析
系列文章是csdn作者'秋风之刀'写的,我只是把目录列出来而已,感谢作者辛苦付出. PDF格式分析(一)简介 PDF格式分析(二)语法之对象 PDF格式分析(三)语法之Filter PDF格式分析(四 ...
- 用 Roslyn 做个 JIT 的 AOP
0. 前言 上接:AOP有几种实现方式 接下来说说怎么做AOP的demo,先用csharp 说下动态编织和静态编织,有时间再说点java的对应内容. 第一篇先说Roslyn 怎么做个JIT的AOP d ...
- windows10 64位下安装oracle 11g和PL/SQL Developer
一.材料准备: oracle11g安装包(64位) oracle11g客户端(32位) PL\SQL Developer安装包(32位) 1.下载Oracle 11g链接:http://www.ora ...
- css 10-CSS3选择器详解
10-CSS3选择器详解 #CSS3介绍 CSS3在CSS2基础上,增强或新增了许多特性, 弥补了CSS2的众多不足之处,使得Web开发变得更为高效和便捷. #CSS3的现状 浏览器支持程度不够好,有 ...
- vue第七单元(vue的单文件组件形式-单文件组件的加载原理-vue-cli构建的开发环境以及生命周期)
第七单元(vue的单文件组件形式-单文件组件的加载原理-vue-cli构建的开发环境以及生命周期) #课程目标 掌握安装 vue-cli 命令行工具的方法,掌握使用命令行在本地搭建开发环境,使用命令行 ...