【JavaEE】——TCP应答报文机制,超时重传机制

8e19eee2be5648b78d93fbff2488137b.png

阿华代码,不是逆风,就是我疯

你们的点赞收藏是我前进最大的动力!!

希望本文内容能够帮助到你!!

目录

一:TCP协议(面试重点重点)

1:报头长度

2:保留位

3:六位标志位

二:TCP传输的可靠性

1:场景引入

2:数据后发先至问题

3:序号解决问题

三:应答报文机制

(1)过程梳理

(2)误区

四:超时重传机制

1:发送方丢包

2:超时重传

(1)重传次数有上限

(2)超时时间动态变化

3:接收方丢包

(1)扣款情景引入

4:数据缓存

(1)数据去重

(2)数据排序


一:TCP协议(面试重点重点)

引入:

8位(bit) = 1 字节(byte),8位就是01010111这样的二进制数字组成

1:报头长度

解释:①看报头部分,不算选项那一行(后面再讲)共计5行每一行32位,换算为4个字节。那总共就是4 * 5 = 20个字节,这20个字节是固定长度(最小长度)

②另一种看法:因为4位首部长度是01这样的二进制数据 即范围为   0101(5)——>1111(15);注意这里4位首部长度的单位是4个字节,不是1个字节。所以报头长度的动态波动长度就为5*4=20,15*4=60。即[20,60]。所以这里多出来的40部分可以理解为,就是为了给选项部分预留的空间。

即:报头长度最低为20字节,此时无选项部分,

2:保留位

像UDP这个协议,受到2个字节的限制,无法扩展,如果扩展就会与其他厂商的机器不兼容,

所以在TCP这里,预防TCP以后进行功能扩展,而保留一部分空间,(留个坑位)

3:六位标志位

可以理解为像UDP中检验和一样,把报头和载荷放到一起进行计算,后续会对里面的内容进行具体解释,后面这个图我们会多次用到

二:TCP传输的可靠性

在过去的学习中我们了解到,TCP传输的特点有:有连接,可靠传输,面向字节流,全双工。

其中最重要的机制就是“可靠传输”,在数据传输过程中,我们无法保证数据100%传达到对端,退而求其次,我们可以确认对端是否受到数据了,这样保住了传输的可靠性

1:场景引入

应答机制这是TCP传输中最核心的机制

试想这样一个情景,我给我的发消息女神表白,并邀请她去爬山

本来女神已经答应做我的女朋友了,但是由于“滚,不行”   这条回复信息  ,后发先至,比“好呀好呀”更快一步到达我这一端,导致我以为女神拒绝我了~~~这是一个悲伤的故事

2:数据后发先至问题

为什么会出现信息后发先至这种情况呢?

我们知道,广域网之间是由很多路由器和交换机连接的,那么数据在进行传输的时候就有很多路径可以选择,倘若先发出去的数据包①遭遇线路阻塞,那么很可能后发的数据包②会比①还要先到达另一端。

3:序号解决问题

我们通过加入序号这一形式,来确认应答的哪一条数据,这里的模型只是简化了一下,实际TCP序号和确认序号都是以字节来进行编号的,要复杂的多

假如载荷中有1000个字节那么每一个字节都会有一个相应的序号。由于这个序号是连续的,我们只要确定头序号,后面的字节通过计算就可以很容易拿到了

三:应答报文机制

数据发送出去了,那么以怎样的形式,告知发送方“哦,我收到了”~

注:应答报文——也叫ask报文(asknowledge缩写),通过应答报文来反馈给发送方,当前的数据收到了。

(1)过程梳理

A发送1-1000这个数据,主机B如果收到了,就会反馈一个“应答报文”——应答报文的序号是收到的数据的最后一个字节的序号+1。即从1001开始

注:这里的1001有两层含义

①告诉主机A:序号<1001的数据我都收到了

②主句A你下次应该给我发1001开始的数据了

(2)误区

确认应答机制是TCP“可靠性传输”的核心机制,并非是只要有确认应答机制就可以保证TCP可靠传输。

TCP的可靠传输是因为“进行了三次握手”这一说法是错误的(后续我们会详细解释)

四:超时重传机制

超时重传机制是确认应答的补充

1:发送方丢包

上文有说到,设备间进行通讯的时候需要经过,像路由器和交换机这种中间站,进行转发,我们知道路由器和交换机能处理转发的数据是由上限的,如果超过了负载上限,这个数据报包就会被丢弃 ,这就是我们说的“丢包”现象

2:超时重传

发送方发送完数据后,会等待接收方返回应答报文(不是无限制的等待~),迟迟等不到(超时)ask应答报文,发送方就会认为,这次发送的数据报包丢失了没有到达接收方,那么就会重新在发送一遍。

注:这里的重传次数也是有策略的

(1)重传次数有上限

假设数据传输到接收方的概率是90%,那么发送方发送两次数据发生丢包的概率就是10%*10%=1%。这种情况,此时就很可能不是丢包的问题了,可能是设备的问题,此时设备间就会重新连接,连接失败,就放弃连接了

(2)超时时间动态变化

超时时间会随着重传次数的增加而增大,(因为经历重传之后还丢包的话,大概率是网络的原因,在咋传也是白费力气,不如少传几次,节省力气资源)

3:接收方丢包

上述,我们得到一个结论(有问题):如果发送方(主机A)没有收到ask,那么就认为发送的数据丢包了

这里其实还有一些问题——到底是“发送的数据丢了,还是返回的ask丢了”。从发送方的角度是没有办法区分的。

(1)扣款情景引入

如果是主机A发送扣款数据,主机B完成扣款,并发送ask报文,但是ask丢失了,此时主机A迟迟收不到ask报文(超时重传),A再次发送扣款数据,完蛋了~,扣了两次款。

4:数据缓存

通过之前的socket的学习,我们知道socket在内存当中有一块缓存区(用flush冲刷解决问题那一篇文章)

对于接收到的数据都是先暂时放到缓存区中,攒一波,然后调用read或者scanner.next进行读取操作,这里读的就是接受缓存区中的内容。

这里的应答过程中,也有读取数据这一操作,这里的缓冲区主要有两个作用

(1)数据去重

当数据到达接受方的时候,接收方会先判断一下,缓冲区中是否已经有或者有过这个数据,如果yes,那么就把这个重复发来的数据就丢弃,确保应用程序不会出现重复的数据。

(2)数据排序

对接受的数据按照序号进行排序,保证应用程序中读到的数据顺序跟发送过来的数据顺序是一致的。

注:应用程序读的时候也是按照序号的先后顺序连续读取,可以想象成一个阻塞队列。

实现以上两个作用的核心是:数据有序号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/881870.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

尚硅谷rabbitmq 2024 Federation配置 第60节答疑

rabbitmq联邦队列怎么做 要在 RabbitMQ 中设置联邦队列&#xff08;Federated Queues&#xff09;&#xff0c;你需要遵循以下步骤。联邦队列允许你在不同的 RabbitMQ 实例之间共享队列&#xff0c;从而实现消息的分布式处理和高可用性。 ### 步骤 1&#xff1a;安装 RabbitMQ…

线性规划:优化决策的数学工具

文章目录 一、引言二、线性规划的基本概念1. 决策变量2. 目标函数3. 约束条件 三、线性规划的数学模型四、线性规划的求解方法1. 图解法2. 单纯形法3. 其他算法 五、线性规划的应用场景1. 生产计划2. 投资组合优化3. 运输问题4. 资源分配 六、总结 一、引言 线性规划&#xff…

Linux学习网络编程学习(TCP和UDP)

文章目录 网络编程主要函数介绍1、socket函数2、bind函数转换端口和IP形式的函数 3、listen函数4、accept函数网络模式&#xff08;TCP&UDP&#xff09;1、面向连接的TCP流模式2、UDP用户数据包模式 编写一个简单服务端编程5、connect函数编写一个简单客户端编程 超级客户端…

国产单片机及其特点

国产单片机在近年来取得了显著的发展&#xff0c;不仅在技术上不断突破&#xff0c;还在市场上占据了越来越重要的位置。 主要国产单片机品牌及特点 兆易创新&#xff08;GD&#xff09; 主要系列&#xff1a;GD32系列&#xff0c;基于ARM Cortex-M内核。特点&#xff1a;高性能…

PDT 数据集:首个基于无人机的高精密度树木病虫害目标检测数据集

2024-09-24&#xff0c;由中国山东计算机科学中心、北京大学等机构联合创建了Pests and Diseases Tree&#xff08;PDT&#xff09;数据集&#xff0c;目的解决农业领域中病虫害检测模型开发中专业数据集缺失的问题。通过集成公共数据和网络数据&#xff0c;进一步推出了Common…

编程题 7-18 二分法求多项式单根【PAT】

文章目录 题目输入格式输出格式输入样例输出样例 题解解题思路完整代码 编程练习题目集目录 题目 二分法求函数根的原理为&#xff1a;如果连续函数 f ( x ) f(x) f(x) 在区间 [ a , b ] [a,b] [a,b] 的两个端点取值异号&#xff0c;即 f ( a ) f ( b ) < 0 f(a)f(b)<…

前端笔记(二):svg图标;git

一、svg图标 原视频 注意&#xff1a;图片是使用的png但是图标是使用的svg&#xff1b; &#xff08;1&#xff09;配置svg ①main.js里引入icons目录 ②调用函数遍历使用svg ③配置symbolId前都加了icon-&#xff0c;所以引用时应该加icon- ④但是使用时没有加因为组件里…

2024.10.15 sql

刷题网站&#xff1a; 牛客网 select device_id as user_infos_example from user_profile where id < 2 select device_id, university from user_profile where university"北京大学" select device_id, gender, age, university from user_profile where ag…

Qt_打开其他软件(带参数)

文章内容: 当打开器他软件并要求其他软件做出响应动作时,我们可以通过传入参数来控制软件打开的方式。 打开软件: if(QString::compare(ui->btn_connect->text(), "断开连接") ==

MySQL学习(六):视图和存储过程以及函数

MySQL学习&#xff08;六&#xff09;&#xff1a;视图和存储过程以及函数 文章目录 MySQL学习&#xff08;六&#xff09;&#xff1a;视图和存储过程以及函数1. 视图1.1 视图的作用与特性1.2 视图的创建1.3 视图的查看与维护1.4 视图的修改与删除 2. 存储过程与函数2.1 存储过…

Windows 添加右键以管理员身份运行 PowerShell

在 Windows 系统中添加一个右键菜单选项&#xff0c;以便可以使用管理员权限打开 PowerShell&#xff0c;可以通过编辑注册表来实现。 打开注册表编辑器&#xff1a; 按 Win R 打开运行对话框。输入 regedit 并按回车&#xff0c;这将打开注册表编辑器。 导航到文件夹背景键&…

计算机毕业设计Django+Vue.js豆瓣图书推荐系统 图书评论情感分析 豆瓣图书可视化大屏 豆瓣图书爬虫 数据分析 图书大数据 大数据毕业设计 机器学习

《DjangoVue.js豆瓣图书推荐系统》开题报告 一、研究背景与意义 1. 研究背景 随着数字化时代的来临&#xff0c;图书资源日益丰富&#xff0c;用户面临着信息过载的问题。如何在海量图书中快速找到符合个人兴趣和需求的书籍成为了亟待解决的问题。传统的图书检索方式往往基于…

javaweb以html方式集成富文本编辑器TinyMce

前言&#xff1a; 单一的批量图片上传按钮&#xff0c;禁用tinymce编辑器&#xff0c;但是还可以操作图片编辑&#xff1b; 多元化格式的富文本编辑要求&#xff1b; 采用tinymce实现。 附&#xff1a; tinymce中文手册网站&#xff1a; http://tinymce.ax-z.cn/download-all.…

空间解析几何 3:空间点到线段和平面的距离【附MATLAB代码】

目录 空间中点到线段的距离 空间中点到平面的投影和距离 matlab代码 空间中点到线段的距离 空间中点到平面的投影和距离 matlab代码 function [dis,P2,t] point2Line (A1,B1,C1) %求空间一点到一线段的最短距离 %[dis,P2,Q2]pointSegmentDistance(A,B,C) %A B为线段首末端…

使用LlamaFactory进行模型微调

使用LlamaFactory进行模型微调 简介 论文地址&#xff1a;https://arxiv.org/pdf/2403.13372 仓库地址&#xff1a;https://github.com/hiyouga/LLaMA-Factory/tree/main 名词解释 1. 预训练 (Pre-training, PT) 预训练是指模型在大规模无监督数据集上进行初步训练的过程…

最强 OpenAI o1 逻辑推理正确率仅 50%!清华、智谱推出「大模型逻辑推理新基准」

9.11 和 9.9 哪个大&#xff1f; 这一连人类幼儿园儿童都能回答的问题&#xff0c;曾经&#xff08;至今&#xff09;难倒了众多大语言模型&#xff08;LLM&#xff09;。 然而&#xff0c;要想达到通用人工智能&#xff08;AGI&#xff09;的水平&#xff0c;LLM 不仅要完成“…

居民小区的有序充电策略及解决方案

0引言 全球经济增长导致化石能源过度消耗&#xff0c;加剧环境污染。电动汽车因其环保优势迅速崛起&#xff0c;预计到2030年中国电动汽车保有量将达到6000万辆。这有助于减少化石能源依赖&#xff0c;推广绿色出行&#xff0c;但也对电网稳定性构成挑战。因此&#xff0c;研究…

2.1 HTML5 - Canvas标签

文章目录 引言Canvas标签概述定义实例&#xff1a;创建画布 理解Canvas坐标系概述实例&#xff1a;获取Canvas坐标 获取Canvas环境上下文概述实例&#xff1a;获取Canvas上下文设置渐变色效果 结语 引言 大家好&#xff0c;今天我们要一起探索HTML5中一个非常有趣且强大的特性…

001 Hadoop安装、Spring整合测试

Hadoop安装、整合测试 文章目录 Hadoop安装、整合测试1.简介1.优点2.组成 2.安装1.安装jdk&#xff08;如已安装可跳过&#xff09;2.安装hadoop1.安装2. 修改配置文件core-site.xml3. 修改配置文件hdfs-site.xml4.启动hadoop5.启动yarn6.执行jps查看7.相关端口及配置位置8.访问…

Python数学难题:科拉兹猜想(又称为 3x+1 猜想、角谷猜想、哈塞猜想、冰雹猜想、乌拉姆猜想或叙拉古猜想)

Python数学难题&#xff1a;科拉兹猜想&#xff08;又称为 3x1 猜想、角谷猜想、哈塞猜想、冰雹猜想、乌拉姆猜想或叙拉古猜想&#xff09; 科拉兹猜想&#xff0c;又称为 3x1 猜想、角谷猜想、哈塞猜想、冰雹猜想、乌拉姆猜想或叙拉古猜想&#xff0c;是一个与自然数相关的猜…