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

JavaEE 初阶 — 确认应答机制

文章目录

  • 确认应答机制(安全机制)
    • 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、进一步的引入了序号和确认序号,针对多组数据进行详细的区分。

相关文章:

JavaEE 初阶 — 确认应答机制

文章目录确认应答机制(安全机制)1 什么是后发先至问题1 如何解决后发先至问题确认应答机制(安全机制) 确认应答 是实现可靠传输的最核心机制。 这里指的 可靠传输 不是说 100% 可以把消息发给接收方,而是尽力而为&…...

0207 事件

事件监听事件监听版本事件类型事件概念事件在编程时系统内发生的动作或者发生的事情例子点击按钮鼠标经过拖拽鼠标事件监听(注册事件,绑定事件)让程序员检测是否有事件产生,一旦有事件触发,就立即调用一个函数做出响应…...

SpringBoot整合Swagger

目录 一、swagger介绍 二、springboot集成swagger 1、创建一个springboot-web项目 2、导入相关依赖 3、编写一个Hellow工程 4、配置swagger --->config 5、启动springboot工程 6、配置swagger信息 7、配置swagger扫描接口 8、如何设置Swagger在生产环境中使用&…...

20230210英语学习

Why Do So Many Cats Have White ‘Socks’ on Their Paws? 为什么好多猫咪脚上都“穿着白袜子”? If you see a house cat, the odds are high that it will have white paws, a look that many owners affectionately call "socks."But socks are rar…...

【图像处理OpenCV(C++版)】——4.5 全局直方图均衡化

前言: 😊😊😊欢迎来到本博客😊😊😊 🌟🌟🌟 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义,适用于平时学习、工作快…...

2022年API安全研究报告

目录 导读 2022年API安全风险概况 2022年平均每月遭受攻击的API数量超21万...

【内网安全-横向移动】基于SMB协议-PsExec

目录 一、SMB协议 1、简述: 2、工具: 二、PsExec 1、简述: 2、使用: 1、常用参数: 2、情况: 3、插件 三、PsExec(impacket) 1、简述: 1、impacket&#xff1…...

whistle 一个神奇的前端调试工具(抓包\代理工具)

在进行前端开发过程中,我们常常需要对一些接口进行处理,以及当后端接口没有弄好需要我们mock一些假数据,针对这些场景,我们就可以使用whistle 来解决。首先,我们要知道能满足我们需求的工具有很多,例如&…...

node.js下载和vite项目创建以及可能遇到的错误

目录 一、node.js的下载 1、去官网下载 节点.js (nodejs.org) 2、下载过程 第一步: 第二步: 第三步: 第四步: 第五步: 二、vite项目的创建(使用的工具是Hbuilder x) 第一步: 出现报错…...

如何使用python画一个爱心

1 问题 如何使用python画一个爱心。 2 方法 桌面新建一个文本文档,文件后缀改为.py,输入相关代码ctrls保存,关闭,最后双击运行。 代码清单 1 from turtle import * def curvemove(): for i in range(200): right(1) …...

1 Flutter UI Container和 Text 和图片组件

一 Text 组件Text 文本组件的一些属性如下body: const Text("this is leonardo fibonacci",// 文本对齐的方式textAlign: TextAlign.center,// 文本方向textDirection: TextDirection.rtl,// 字体显示最大的行数maxLines: 2,// 文字超出屏幕之后的显示方式 ellipsi…...

【Hello Linux】 Linux基础命令(持续更新中)

作者:小萌新 专栏:Linux 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:介绍Linux的基础命令 Linux基础命令ls指令lsls -als -dls -ils -sls -lls -nls -Fls -rls -tls -Rls -1总结思维导图pwd指令whoami指令…...

记录一下slf4j2打印一直不成功

整理一个之前的老项目问题,发现日志一直打印不出来,本地启动发现了第一个问题日志如下:此处可发现,jar包冲突问题,去掉冲突的jar包即可,此处不做过多赘述。然后发现了重新启动项目,发现jar包冲突…...

【安全知识】——对Linux密码文件的处理

作者名:白昼安全主页面链接: 主页传送门创作初心: 一切为了她座右铭: 不要让时代的悲哀成为你的悲哀专研方向: web安全,后渗透技术每日emo:他既乐观又悲观,生活也一无是处昨天在挖掘…...

动手深度学习笔记(四十七)8.3. 语言模型和数据集

动手深度学习笔记(四十七)8.3. 语言模型和数据集 8.3. 语言模型和数据集8.3. 语言模型和数据集 在 8.2节中, 我们了解了如何将文本数据映射为词元, 以及将这些词元可以视为一系列离散的观测,例如单词或字符。 假设长度为 T T T的文本序列中的词元依次为 x 1 , x...

URL编码和Base64编码

URL编码和Base64编码前言一、URL编码1. URLEncoder和URLDecoder2. URL编码规则3. Javascript 原生提供三对 Url编码 的函数3.1 三对函数的不同点二、Base64编码1. Base64编码规则2. Base64编码使用3. JavaScript 原生提供两个 Base64 相关的方法总结前言 数据操作过程中&#…...

Flink 滚动窗口、滑动窗口详解

1 滚动窗口(Tumbling Windows) 滚动窗口有固定的大小,是一种对数据进行“均匀切片”的划分方式。窗口之间没有重叠,也不会有间隔,是“首尾相接”的状态。如果我们把多个窗口的创建,看作一个窗口的运动,那就好像它在不…...

想要精通算法和SQL的成长之路 - 柱状图中最大的矩形

想要精通算法和SQL的成长之路 - 柱状图中最大的矩形前言一. 柱状图中最大的矩形前言 想要精通算法和SQL的成长之路 - 系列导航 一. 柱状图中最大的矩形 原题链接 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求…...

网络安全实验室5.上传关

5.上传关 1.请上传一张jpg格式的图片 url:http://lab1.xseclab.com/upload1_a4daf6890f1166fd88f386f098b182af/ 上传一张后缀名为jpg的图片,上传抓包修改后缀名为别的,s或者直接删掉,放包 得到key is IKHJL9786#$%^& 2.请…...

JavaScript 严格模式(use strict)

文章目录JavaScript 严格模式(use strict)使用 "use strict" 指令严格模式声明严格模式的限制保留关键字JavaScript 严格模式(use strict) JavaScript 严格模式(strict mode)即在严格的条件下运行。 使用 “use strict” 指令 “use strict”…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

C++ 基础特性深度解析

目录 引言 一、命名空间(namespace) C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用(reference)​ C 中的引用​ 与 C 语言的对比​ 四、inline(内联函数…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...

Robots.txt 文件

什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...

数据库分批入库

今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线, n r n_r nr​ 根接收天线的 MIMO 系…...

ip子接口配置及删除

配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...