当前位置: 首页 > news >正文

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

引言

  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的数值。这样的好处是,我不需要对重传报文的往返时间重新计算了。

相关文章:

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

引言 TCP每一次发送报文段,就会对这个报文段设置一次计时器。如果时间到了却没有收到确认报文,那么就要重传该报文。 这个之前在TCP传输的机制中提到过,这个章节就来研究一下超时时间问题。 关于加权的概念 有必要提及一下加权的概念&#x…...

【数据库索引优化】

文章目录 数据库索引优化1. 选择合适的字段创建索引2. 限值每张表上的索引数量3. 被频繁更新的字段应该慎重建立索引4. 尽可能考虑简历联合索引而不是单列索引5. 避免冗余索引6. 字符串类型的字段使用前缀索引代替普通索引7. 避免索引失效8. 删除长期未使用的索引 数据库索引优…...

WebGL 选中物体

目录 前言 如何实现选中物体 示例程序(PickObject.js) 代码详解 gl.readPixels()函数规范 示例效果 前言 有些三维应用程序需要允许用户能够交互地操纵三维物体,要这样做首先就得允许用户选中某个物体。对物体…...

科目二倒车入库

调整座位和后视镜 离合踩到底大腿小腿成130-140 上半身90-100 座椅高度能看到前方全部情况 后视镜调节到能看到后门把手,且后门把手刚好在后视镜上方边缘、离车1/3处。 保持直线: 前进: 车仪表盘中央的原点和地面上的黄线擦边&#xff…...

PostgreSQL如何支持PL/Python过程语言

瀚高数据库 目录 环境 文档用途 详细信息 环境 系统平台:Linux x86-64 Red Hat Enterprise Linux 7 版本:10.4 文档用途 本文档主要介绍PostgreSQL如何支持PL/Python过程语言,如何创建plpython扩展。 详细信息 一、PostgreSQL支持python语言…...

【C++】STL之适配器---用deque实现栈和队列

目录 前言 一、deque 1、deque 的原理介绍 2、deque 的底层结构 3、deque 的迭代器 4、deque 的优缺点 4.1、优点 4.2、缺点 二、stack 的介绍和使用 1、stack 的介绍 2、stack 的使用 3、stack 的模拟实现 三、queue 的介绍和使用 1、queue 的介绍 2、queue 的使用 3、qu…...

PHY6230低成本遥控灯控芯片国产蓝牙BLE5.2 2.4G SoC

高性价比的低功耗高性能蓝牙5.2系统级芯片,适用多种PC/手机外设连接场景。 高性能多模射频收发机: 通过硬件模块的充分复用实现高性能多模数字收发机。发射机,最大发射功率10dBm;BLE 1Mbps速率接收机灵敏度达到-96dBm&#xff1…...

OceanBase杨传辉传递亚运火炬:国产数据库为“智能亚运”提供稳稳支持

9 月 14 日,亚运火炬传递到了浙江台州,OceanBase 的 CTO 杨传辉作为火炬手交接了第 89 棒火炬。 2010 年,杨传辉作为创始成员之一参与自研原生分布式数据库 OceanBase。十年磨一剑,国产数据库 OceanBase 交出了一张优秀的成绩单&a…...

分布式锁实现方法

分布式锁 什么时候需要加锁 有并发,多线程有写操作有竞争关系 场景: 电商系统,下单流程:用户下单–>秒杀系统检查redis商品库存信息–>用户锁定并更新库存(mysql)—>秒杀系统更新redis 问题&…...

软件测试缺陷报告详解

【软件测试行业现状】2023年了你还敢学软件测试?未来已寄..测试人该何去何从?【自动化测试、测试开发、性能测试】 缺陷报告是描述软件缺陷现象和重现步骤地集合。软件缺陷报告Software Bug Report(SBR)或软件问题报告Software Pr…...

pytorch冻结参数训练的坑

由于项目需要训练一个主干网络接多个分支的模型,所以先训练一个主干网络加第一个分支,再用另外的数据训练第二个分支,训练的过程中需要冻结主干网络部分,后面的分支训练过程也一样需要冻结主干网络部分。 冻结模型的方式 for nam…...

P1827 [USACO3.4] 美国血统 American Heritage(前序 + 中序 生成后序)

P1827 [USACO3.4] 美国血统 American Heritage(前序 中序 生成后序) 一、前言 二叉树入门题。涉及到树的基本知识、树的结构、树的生成。 本文从会从结构,到完成到,优化。 二、基础知识 Ⅰ、二叉树的遍历 前序遍历&#xff…...

【四、centOS安装docker】

安装docker sudo yum install -y yum-utils device-mapper-persistent-data lvm2 如果以上报错 备份系统自带yum源配置文件 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup进入 /etc/yum.repos.d cd /etc/yum.repos.d删除文件 rm -f *.r…...

想学嵌入式开发,薪资怎么样?

想学嵌入式开发,薪资怎么样? 对于嵌入式工程师来说呢,它重点学习内容就是首先一定要打好基础,如果从编程语言角度来讲,那么可以在语言上选C或者C,你可以选择其中任何一门语言作为你的入门。 最近很多小伙伴…...

SQL死锁进程内容查询语句

1.方式1 SELECT object_name(A.resource_associated_entity_id) as TABLENAME, A.request_session_id AS SPID,DB_NAME(B.dbid) AS DBName,B.blocked,B.dbid,B.program_name,B.waitresource,B.lastwaittype,B.loginame,B.hostname,B.login_time,B.last_batch--,B.* FROM sy…...

Ubuntu 20.04中Nightingale二进制部署

参考博客《【夜莺监控】初识夜莺,强!》 lsb_release -r可以看到操作系统版本是20.04,uname -r可以看到内核版本是5.5.19。 sudo apt-get update进行更新镜像源。 完成之后,如下图: sudo apt-get upgrade更新软件…...

深入探讨Java面试中内存泄漏:如何识别、预防和解决

引言 在编写和维护Java应用程序时,内存泄漏是一个重要的问题,可能导致性能下降和不稳定性。本文将介绍内存泄漏的概念,为什么它在Java应用程序中如此重要,并明确本文的目标,即识别、预防和解决内存泄漏问题。 内存泄…...

win10 安装.net framework 3.5,错误代码0x8024401C

win10 安装.net framework 3.5,错误代码0x8024401C 参考链接:https://www.gxlsystem.com/diannaowenti-386775.html 解决方法如下,cmd中执行: net stop wuauserv reg delete HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\W…...

杂记 | Langchain中few-shot提示词模板的使用(给提示词添加示例)

文章目录 01 普通的提示词模板02 few-shot提示词模板 Langchain是一个集成多个大语言模型的开源框架,可以使用它来快速开发大语言模型应用。 本文的代码使用到的模块: from typing import List, Dict from langchain import PromptTemplate, FewShotPr…...

SVN -基础

SVN - 基础 概念操作步骤开发实际经验 概念 带SVN路径 有隐藏文件,记录repo的一些信息,与repo进行关联,可以与repo进行同步 不带SVN路径 只是单纯的文件,与repo独立 操作步骤 checkout 具有路径 URLcheckout dir 输出目标文件夹…...

MySQL基础终端命令与Python简单操作MySQL

文章目录 MySQL终端命令1. 进入mysql2. 创建数据库3. 选择数据库4. 创建数据表1. 主键约束2. 外键约束3. 非空约束4. 唯一约束5. 使用默认约束6. 设置id为自增列 5. 查看数据表6. 修改数据表1. 修改表名2. 修改表的字段类型3. 修改表的字段名4. 为表添加字段5. 删除字段6. 调整…...

编译原理.龙书学习1

第一章: 编译器:将程序翻译成一种能够被计算机执行的形式 解释器:解释器直接利用用户提供的输入执行源程序中指定的操作 一个编译器的结构 编译器将源程序映射为语义上等价的目标程序,这个映射过程由两部分组成:分析…...

anaconda安装完成之后输入conda -V没有反应

anaconda安装完成后,conda没有反应 vim ~/.bashrc后面添加内容 # added by Anaconda3 5.3.0 installer # >>> conda init >>> # !! Contents within this block are managed by conda init !! __conda_setup"$(CONDA_REPORT_ERRORSfalse /u…...

netty报文解析之粘包半包问题

粘包问题 Netty 的粘包问题是指在网络传输过程中,由于 TCP 协议本身的特点,导致发送方发送的若干个小数据包被接收方合并成了一个大数据包。这种情况称为粘包。 TCP 协议是面向流的协议,没有数据边界,发送方发送的数据可能会被分…...

EasyCode整合mybatis-plus的配置

文章目录 entitymapper.javamapper.xmlserviceserviceImplcontroller 这篇文章不教你如何安装和使用EasyCode,只是贴出可以使用的配置。 具体EasyCode的使用可以查看其它的文章。 entity ##导入宏定义 $!{define.vm}##保存文件(宏定义) #sa…...

实施预测性维护解决方案的挑战及PreMaint的应对方法

前面我们介绍了企业选择预测性维护解决方案的常见问题和PreMaint的策略,本期我们将带来实施过程中可能会遇到的挑战,以及如何通过PreMaint来应对这些挑战,以实现可靠的预测性维护。 随着工业技术的不断进步,预测性维护作为一种先进…...

1. js中let、var、const定义变量区别与方式

1 声明语法 var upperA A; let upperB B; const upperC C; 只声明不初始化的结果,【 const定义的常量不可以修改,而且必须初始化】 // var 声明变量 var upperA; console.log(打印大写的A:%s, upperA); // 结果:打印大写的A&am…...

【STM32学习】I2C通信协议 | OLED屏

🐱作者:一只大喵咪1201 🐱专栏:《STM32学习》 🔥格言:你只管努力,剩下的交给时间! 今天需要将代码烧录到开发板中,本喵默认大家都会创建工程,以及进行基本的…...

Nvme Spec 第一章节学习

Nvme Express Base Specification 第一章 简介 1.1概述 NVM ExpressTM(NVMeTM)接口允许主机软件与非易失性存储器子系统通信。 此接口针对企业和客户端固态驱动器进行了优化,通常作为寄存器级接口连接到PCI Express接口。 注:在…...

第一章:最新版零基础学习 PYTHON 教程(第九节 - Python 语句中的 – 多行语句)

Python 中的语句: 在Python中,语句是Python解释器可以读取和执行的逻辑命令。它可能是Python 中的赋值语句或表达式。 Python 中的多行语句: 在Python中,语句通常写成一行,每行的最后一个字符是换行符。要将语句扩展到一行或多行,我们可以使用大括号 {}、圆括号 ()、方…...

无棣网页设计/郭生b如何优化网站

1.数组 public class Test{public static void main(String args[]){int[] intArray new int[] {1,4,3,2,5};//等价于 : int intArray[] new int[] {1,2,3,4,5};System.out.println(intArray.length); //打印长度//使用java.util.Arrays工具类 来操作 数组System.out.pr…...

广州建设银行投诉网站/百度知道合伙人官网登录入口

本章概要: 1、创建office集成解决方案使用代码或非代码形式 2、使用内容类型作为能映射到文档库的文档 3、使用InfoPath管理表单 4、使用工作流管理业务流程 5、使用office2010服务端扩大SPS解决方案转载于:https://www.cnblogs.com/tonghounb/p/3482488.html...

张家港网站建设/网络营销师资格证

不同数据库模糊查询特殊字符处理 (2010-10-21 19:04:47) 转载▼标签: 杂谈 分类: MSN搬家一、Sqlserver 特殊字符 [ 、 % 、_ [ 用于转义(事实上只有左方括号用于转义,右方括号使用最近优先原则匹配最近的左方括号)&a…...

学网站建设难/网站收录查询爱站

这两天在苦苦钻研闭包,因为之前对闭包的接触并不多,于是大量在网上找资料。怕遗忘,登陆博客,记录日记。 什么是闭包,记得刚学习JS的时候,说闭包就是外部调用内部函数的变量。楼主当时比较浮躁,就…...

怎样做网络推广信任豪升网络好/重庆可靠的关键词优化研发

C/C技术讲师 6名 (北京,年薪:24-50万)传智播客C/C课程培训体系如下:1.C语言,世界五百强C语言面试训练2.C语言,世界五百强C语言面试训练3.数据结构与算法,世界五百强数据结构与算法面…...

珠海建网站多少钱/杭州搜索引擎推广排名技术

组合1: react技术栈(react(阮一峰react入门,官网教程)、redux(阮一峰redux入门,官网教程)、saga)JS(ES6)antdyou dont know JS(上中下)JavaScript高级程序设计JavaScript数据结构和算法 推荐书籍…...