JavaEE 初阶 — 确认应答机制

news2025/3/14 10:33:20

文章目录

  • 确认应答机制(安全机制)
    • 1 什么是后发先至问题
    • 1 如何解决后发先至问题

确认应答机制(安全机制)


确认应答 是实现可靠传输的最核心机制。

这里指的 可靠传输 不是说 100% 可以把消息发给接收方,而是尽力而为,尽可能的把数据传输过去。
同时,如果传输不过去,至少可以及时的获知。

我要给张三发短信,如果是在十几年前,这个发送的短信就有一个很大的问题,那就是可能会丢包,尤其是高峰期的时候。

有一天我想约张三出来一起去打球,所以就给他发了一个短信。



这里张三回答的 OK 就称为 “应答报文”,也叫做 ack(acknowledge的缩写)

当我收到 OK 的时候,我就知道,我发送的消息已经顺利的被张三看到了。(也就是短信没丢包)
如果隔了半天还没有收到张三回复,就说明发送的消息大概率是没了。

TCP 进行可靠性传输,最主要的就是靠这个确认应答机制。
A 给 B 发了一个消息,B 收到之后就会返回一个应答报文(ACK)。此时 A 收到应答之后,
就会知道了刚才发的数就已经顺利到达 B 了。

生活中随处可见这样的应答机制,比如打电话,打电话就相当于是可靠传输。


下面考虑一下更复杂的情况。


此处我可能是连续发送两条消息,我发送第一条的时候,不需要等第一条消息的回应,而张三则是收到消息就会立即回应。

1 什么是后发先至问题


网络上可能存在 “后发先至” 的情况,这个情况下,收到消息的顺序是可能存在变数的。

考虑上述约张三打球的场景,如果收到消息的顺序是可能存在变数,那么我发送的打球去收到的会是滚犊子,
而输的请客吃饭则会收到 OK。



如果发生了 “后发先至” 的情况,本来要表达的含义就会出现歧义了。

像 “后发先至” 这种情况,现实生活中也是挺常见的。

比如说马拉松比赛,刚开始选手都是在起点线排在一起,有的靠前,有的靠后。



随着比赛开始,由于每一个选手的速度和耐力都是不一样的,
并且有的选手会因为体力不支而无法完赛,撤离赛场所走的路径与比赛选手的路劲也不同,
因此想要保持比赛开始前的队形是非常困难的。

网络中数据的 后发先至 也是同理。

两个主机之间,路线存在多条,数据报1 和 数据报2 走的都是不同的路线。
数据报1 和 数据报2 转发的速率也不一样,有的快,有的慢,此时,这两个数据报到达的顺序就存在变数了。

结论:

网络后发先至这个现象是客观存在的,是无法避免的。因此应答报文到达的顺序也是可能发生变动的。
此时就需要考虑如何避免这种顺序错乱所带来的歧义。

1 如何解决后发先至问题


给传输的数据和应答报文都进行编号就可以了。


这里的 1 和 2 就是序号,而 针对1 和 针对2 就是确认序号
当引入了序号之后,即使是顺序乱了,也可以通过序号来区分当前的应答报文是针对哪个数据进行的。


针对于 序号 的解释:

任何一条数据(包括应答报文)都是有序号的,确认序号则是只有应答报文有。(普通报文确认序号字段里的值无意义)

前面所提到的 ACK (确认号是否有效),是用来表示这一条报文是否是应答报文。
如果 ACK 这个标志位为1,表示为应答报文,如果为0,表示不是应答报文。


实际上 TCP 的序号并不是按照 “一条两条” 这样的方式来编号的。TCP 是面向字节流的,TCP 的序号也是按照字节来编号的。




TCP 的字节的序号是依次累加的,这个依次累加的过程对于后一条数据来说,
起始字节的序号就是上一个数据的最后一个字节的序号。

每个 TCP 数据报报头填写的序号只需要写 TCP 数据的头一个字节的序号即可。

TCP 知道了同一个字节的序号,再根据 TCP 报文长度,就很容易知道每一个字节的序号。


针对于 确认序号 的解释:

确认序号的取值,是收到的数据的最后一个字节的序号 + 1。


应答报文中的确认序号填写的是 1001,就是在刚才 1000 的基础上 +1。

表示的含义:

1、小于 1001 的数据都已经确认收到了。
2、主机1 接下来应该从 1001 这个序号开始继续发送。(主机2向主机1索要 1001 的数据)

小结

1、TCP 可靠传输能力,最主要就是通过确认应答机制来保证的。
2、通过应答报文,就可以让发送方清楚的知道传输是否成功。
3、进一步的引入了序号和确认序号,针对多组数据进行详细的区分。

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

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

相关文章

【Linux】进程优先级 | 进程的切换 | 环境变量详解

🤣 爆笑教程 👉 《看表情包学Linux》👈 猛戳订阅 🔥 ​ 💭 写在前面:我们先讲解进程的优先级,探讨为什么会存在优先级,以及如何查看系统进程、进程优先级的修改。然后讲解进程的切…

基于SpringBoot的器材管理系统

介绍有一家实验室,里面有100台实验设备,5个实验员。每个设备使用之前需要对设备进行检查,现在存在以下痛点: 实验员检查器材的时候,发现器材不见了,他们都不知道器材是坏了还是其他实验员用到其他器材。非常…

传奇GOM引擎配置PAK密码补丁教程

因为我很少接触GOM引擎,所有很晚才知道PAK密码的事情,以前经常在群里或者QQ上有人问站长,说补丁有PAK密码怎么办,我起初不在意,限制发现是一个大问题,好吧,今天借助这篇文章,分享一下…

Python获取公众号(pc客户端)数据,使用Fiddler抓包工具

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 今天来教大家如何使用Fiddler抓包工具,获取公众号(PC客户端)的数据。 Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,…

Spring JdbcTemplate 和 事务

JdbcTemplate概述 JdbcTemplate是spring框架中提供的一个对象,是对原始繁琐的Jdbc API对象的简单封装。spring框架为我们提供了很多的操作模板类。例如:操作关系型数据的JdbcTemplate和,操作nosql数据库的RedisTemplate,操作消息…

UDP协议

文章目录一、前沿知识应用层传输层二、UDP协议一、前沿知识 应用层 应用层:描述了应用程序如何理解和使用网络中的通信数据。 我们程序员在应用层的主要工作是自定义协议,因为下面四层都在系统内核/驱动程序/硬件中已经实现好了,不能去修改…

【数据集】中国各类水文专业常用数据集合集

1 水文气象数据 1.1 中国站点尺度天然径流量估算数据集(1961~2018年) 论文: J2022-High-quality reconstruction of China’s natural streamflow-缪驰远(北京师范大学地理科学学部) 研究内容&#xff1a…

TLV73312PQDRVRQ1稳压器TPS622314TDRYRQ1应用原理图

一、TLV73312PQDRVRQ1低压差稳压器 1.2V 300MATLV733 300mA 低压差稳压器是有 300mA 拉电流能力的超小型、低静态电流 LDO,具有良好的线路和负载瞬态性能。这些器件具有 1% 的典型精度。TLV733 系列设计具有先进的无电容器结构,确保无需输入或输出电容器…

thinkPHP6接入workman

上篇介绍了workman实现websocket功能(链接:https://blog.csdn.net/weixin_38155824/article/details/128952037) 这篇就介绍如何在thinkPHP6项目中接入workman。 利用TP6的自定义命令开启websocket服务 查看TP6手册:命令行>自…

Oracle Dataguard(主库为 Oracle rac 集群)配置教程(01)—— dataguard 服务器安装 Oracle 软件

Oracle Dataguard(主库为 Oracle rac 集群)配置教程(01)—— dataguard 服务器安装 Oracle 软件 / 本专栏详细讲解 Oracle Dataguard(Oracle 版本为11g,主库为双节点 Oracle rac 集群)的配置过程…

共享模型之无锁(二)

1.原子基本类型 1>.J.U.C并发包提供了多个原子基本类型: AtomicBoolean AtomicInteger AtomicLong ...2>.以AtomicInteger为例: public class TestAtomicIntegerDemo01 {public static void main(String[] args) {//原子整型类AtomicInteger i new AtomicInteger(0);…

linux入门---基础指令(上)

这里写目录标题前言ls指令pwd指令cd指令touch指令mkdirrmdirrmman指令cp指令mv指令前言 我们平时使用电脑主要是通过鼠标键盘以及操作系统中自带的图形来对电脑执行相应的命令,比如说我想打开D盘中的cctalk这个文件: 我就可以先用鼠标左键单击这个文件…

负载均衡的方式

在业务初期,我们一般会先使用单台服务器对外提供服务。随着业务流量越来越大,单台服务器无论如何优化,无论采用多好的硬件,总会有性能天花板,当单服务器的性能无法满足业务需求时,就需要把多台服务器组成集…

五岳科技与亚马逊云科技,助力中国产品实现全球品牌力提升

随着DTC模式实践在全球跨境电商市场取得成功,越来越多中国品牌走出国门,走向世界。而文化差异、语言隔阂、信息差等始终是行业中的共同难题,如何提高竞争壁垒与解决数据困境成为企业的共同需求。 作为一家致力于用AI技术赋能传统行业升级以…

将群晖NAS变为本地盘

本文介绍一个工具,可以在 Windows 系统下将群晖NAS的目录变为本地盘,好处是在外部访问的时候,能够大大改善体验。可以用本地的应用程序直接打开,速度依赖网络带宽,正常情况下,看视频是没有问题的。当然&…

MySQL入门篇-Xtrabackup详细介绍

Xtrabackup简介 MySQL冷备、mysqldump、MySQL热拷贝都无法实现对数据库进行增量备份。在实际生产环境中增量备份是非常实用的,如果数据大于50G或100G,存储空间足够的情况下,可以每天进行完整备份,如果每天产生的数据量较大&#…

Vue3 企业级优雅实战 - 组件库框架 - 11 组件库的打包构建和发布

回顾第一篇文章中谈到的组件库的几个方面,只剩下最后的、也是最重要的组件库的打包构建、本地发布、远程发布了。 1 组件库构建 组件库的入口是 packages/yyg-demo-ui,构建组件库有两个步骤: 添加 TypeScript 的配置文件: tsco…

百趣代谢组学资讯:槟榔的基因组为雌雄同株植物的性别决定提供见解

文章标题:The genome of Areca catechu provides insights into sex determination of monoecious plants 发表期刊:New Phytologist 影响因子:10.323 作者单位:海南大学 百趣生物提供服务:植物激素高通量靶标定…

怎么查看自己的电脑IP地址?

作为一个互联网冲浪侠,你应该对IP地址并不陌生:访问网站和网络服务器知道你的IP地址;发送的电子邮件头包含你的IP地址。如果有人想从IP地址追踪到你的物理地址和身份,是有可能的。 IP地址代表互联网协议地址。它是一个特殊的号码…

linux高级命令系列一

重定向命令学习目标能够使用重定向命令将终端显示内容重定向到文件1. 重定向命令的介绍重定向也称为输出重定向,把在终端执行命令的结果保存到目标文件。2. 重定向命令的使用命令说明>如果文件存在会覆盖原有文件内容,相当于文件操作中的‘w’模式>…