数据通信——传输层TCP(超时时间选择)

2023-09-21 16:05:35

引言

  TCP每一次发送报文段,就会对这个报文段设置一次计时器。如果时间到了却没有收到确认报文,那么就要重传该报文。

  这个之前在TCP传输的机制中提到过,这个章节就来研究一下超时时间问题。

 关于加权的概念

有必要提及一下加权的概念,这属于数学知识,但可用帮助我们理解超时重传机制。 

权是在测量时不同的精准度,加权就是乘上权重/系数的含义,加权是对精准度的一种测量。

    比如说:你参加了一个竞赛,专家、老师和学生分别为你打分。最后分数进行计算后作为总成绩。我们下意识认为是(8+6+7)/3=7这样通过加法平均数的方式进行计算。但是在你看来不公平!因为你认为专家是懂竞赛的,不应该因为老师的打分和学生的随意而影响了总成绩。因此赛事委员设置专家的权重和老师及学生的权重为0.5:0.3:0.2,那么加权后就是8*0.5+6*0.3+7*0.2=7.2。这样相对更加公平。下图就是加权的计算方式。

好了,此时就能对超时重传时间进行描述了。

超时重传时间

    下图所示,TCP数据报文发送直到TCP确认报文回馈的这段时间为一个RTT时间。这个之前也提到过。

但是会出现以下两种情况:

    一,超时重传时间远远小于一个RTT时间,那么就会导致ACK信息还没到达前,请求重传就发出了,结果ACK到达了,重传发出后的请求又导致重复的信息再次发送了。占用了大量带宽!

    二,如果超时重传时间远远大于一个RTT时间,那么一旦出现问题需要重传了,超时重传的请求隔了很久才到达,大大影响了网络使用空间。

上图是两种可能发生的情况 

    为了避免上述情况的发生,超时重传的时间应该略微大于RTT时间,可是问题来了,怎么保证呢?这时就要采用加权计算的方式了。

    我们知道每个报文在一段时间内的传输速率不同,因此重传时间不应该是一个固定值,而是随着RTT值的变动而变动且要略大于RTT值。我们此时假设RTO为超时传输时间,RTTs为加权的平均往返时间。那么就有如下计算方式:

  我们得出了加权的RTTs的值,这个数值决定了各个阶段RTT在加权情况下的往返时间,随后,我们要使得RTTO略微大于RTTs即可,那么有以下计算公式:

 我们知道RTTs是上述的加权平均往返时间,那么RTTD是什么呢?

    RTTD为RTT的偏差的加权平均值。官方建议这样计算:第一次测量时,RTTD的值取为测量到的RTT样本值的一半。在以后的测量中,使用以下公式计算加权平均RTTD的值。

    它的计算方式和RTTs计算方式大同小异,我认为RTTD是为了进一步精准确定RTTs的范围,将RTTs的加权平均值和4倍的RTTD的偏差加权平均值放在一起就能得到RTO的值。

    好了,确定了RTO的数值,我们就可以重传了,而每一次重传又会发生两种情况好了,新问题又来了:

  也就是说,重传时,问题又会出现之前RTT的情况,此时的RTO如果不进行更改,那么问题会再次显现。 

    那么此时引入了一个算法(Karn算法),公式是:

     其中“r”的值为2,每一次重传都会将旧的超时重传时间扩大2倍。当报文段不再重传时,才会根据报文段的往返时延更新平均往返时延RTT和超时重传时间RTO的数值。这样的好处是,我不需要对重传报文的往返时间重新计算了。

更多推荐

文盘Rust -- tonic-Rust grpc初体验 | 京东云技术团队

gRPC是开发中常用的开源高性能远程过程调用(RPC)框架,tonic是基于HTTP/2的gRPC实现,专注于高性能、互操作性和灵活性。该库的创建是为了对async/await提供一流的支持,并充当用Rust编写的生产系统的核心构建块。今天我们聊聊通过使用tonic调用grpc的的具体过程。工程规划rpc程序一般包含s

zabbix自定义监控、钉钉、邮箱报警 (五十六)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档目录一、实验准备二、安装三、添加监控对象四、添加自定义监控项五、监控mariadb1、添加模版查看要求2、安装mariadb、创建用户3、创建用户文件4、修改监控模版5、在上述文件中配置路径6、重启zabbix-agent验证六、监控NGINX1、安装NG

干货!网络丢包故障定位全景指南

极客星球:深入理解网络子系统欢迎加入极客星球,一起学习,快速成长:修炼基本功,打好高薪基础:分享基础技术深度理解,基础概念深度解析,经典书籍推荐和读书分享,经典源码阅读分享等,不定期直播分享,问题答疑解惑;扩展技术深度和技术视野:分享热门技术发展,国内外大厂技术内幕,业界解决方案;校招/社招免费就业指导:模拟面试,简历

精准测试(针对人工执行的测试用例和自动化测试脚本)

在软件测试中,我们常常碰到两个基本问题(困难):很难保障无漏测:我们做了大量测试,但不清楚测得怎样,对软件上线后会不会出问题,没有信心;选择待执行的测试用例:面对大量的回归测试用例时,我们没有足够的时间完成测试,如何选择出有效的测试用例呢?虽然我们会有一些策略,如基于风险的测试策略、基于操作剖面的测试策略或组合测试策略

系统架构:软件工程速成

文章目录参考概述软件工程概述软件过程可行性分析可行性分析概述数据流图数据字典需求分析需求分析概述ER图状态转换图参考软件工程速成(期末+考研复试+软考)均适用.支持4K概述软件工程概述定义:采用工程的概念、原理、技术和方法来开发与维护软件。三要素:方法:完成软件开发各项任务的技术方法,回答“怎么做”。工具:为运用方法提

美创科技入选IDC中国等保合规市场报告推荐厂商

近日,全球领先的IT研究和咨询公司IDC正式发布《IDCPersepctive:中国等保合规市场洞察,2023》报告。在该市场报告中,IDC对中国等保合规市场的发展现状进行调研,明确了最终用户等保合规建设的痛点、难点,阐述了市场中各技术服务提供商的产品服务方案和优势。美创科技凭借在数据安全和运行安全领域专业能力与积累实

垃圾收集算法

1.如何判断对象是否存活?1.1引用计数算法基本思路:在对象中添加一个引用计数器每当有一个地方引用它的时候,计数器就加+1每当有一个引用失效的时候,计数器就减-1当计数器的值为0的时候,那么该对象就是可被GC回收的垃圾对象存在的问题:对象循环引用a对象引用了b对象,b对象也引用了a对象,a、b对象却没有再被其他对象所引

单片机外设-串口(UART)详情

目录学习UART要先认识一些基础知识一:什么是串行、并行通信?(1)串行通信串行通信概念:串行通信的特点:(2)并行通信并行通信概念:并行通信特点:二:什么是异步通信、同步通信?(1)异步通信​编辑异步通信概念:异步通信特点:(2)同步通信同步通信概念:1、外同步2、自同步同步通信特点:三:什么是单工、半双工、全双工通

Vue知识系列(5)每天10个小知识点

目录系列文章目录Vue知识系列(1)每天10个小知识点Vue知识系列(2)每天10个小知识点Vue知识系列(3)每天10个小知识点Vue知识系列(4)每天10个小知识点知识点41.vue常用基本指令有哪些以及他们的作用和使用场景42.Vue组件中data为什么必须是函数43.v-if和v-show的区别44.vue自定

Git(7)——使用Beyond Compare快速解决冲突

一、简介根据前六章的学习,我们应该很清楚地感知到不同分支合并代码时产生的冲突是最让我们头疼的问题,因为他需要我们手动去解决冲突的文件,有没有一种方法可以快速地解决冲突呢?本篇文章将介绍如何使用ByondCompare去快速解决冲突二、在Git中进行配置使用如下命令对Git进行配置注:这里的--local是指以下这命令配

Nacos内核设计之一致性协议(上)

Nacos一致性协议Nacos技术架构先简单介绍下Nacos的技术架构从而对nacos有一个整体的认识如图Nacos架构分为四层用户层、应用层、核心层、各种插件再深入分析下nacos一致性协议的发展过程及原理实现为什么nacos需要一致性协议Nacos是一个需要存储数据的一个组件为了实现这个目标,就需要在Nacos内部

热文推荐