当前位置: 首页 > 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”…...

硬件设计—高性能ADC前端电路

高性能模数转换器(ADC)一般对系统的性能有非常高的要求,而AD芯片的“前端”的输入电路设计对ADC系统的的性能有非常大的影响。以下主要介绍了ADC芯片前端输入使用放大器和变压器各自的优势。 1、放大器和变压器根本区别 放大器是有源器件&am…...

详讲常见的字符函数

👦个人主页:Weraphael ✍🏻作者简介:目前是C语言学习者 ✈️专栏:C语言航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&a…...

for循环中异步请求问题:循环里面使用异步函数,如何等所有的异步函数都执行完再进行下一步

场景是这样的: 在一个列表循环里,对数据进行赋值,调用接口,循环外后面的代码需等待所有请求执行完成后再去执行。 1. Promise.all实现 Promise.all() 方法接收一个 promise 的 iterable 类型(注:Array&am…...

【iOS-系统框架】

文章目录前言47.熟悉系统框架CoreFoundation框架其他框架要点48. 多用块枚举,少用for循环for循环NSEnumerator遍历快速遍历基于块的遍历方式要点49.对自定义其内存管理语义的collection使用无缝桥接要点50.构建缓存时选用NSCache而非NSDictionaryNSCacheNSCache实例…...

Android APK 签名打包原理分析(二)【Android签名原理】

说到签名,从这个词来理解,正常个人需要签名的时候,一般是用来证明这是某个人的特属认证。 大家是否有印象?还记得我们之前在学习、总结网络相关知识的时候,说到过,客户端和服务端虽然通信数据上,可以采用对称加密和非对称加密组合去进行数据的加密,但是这时还有一个问题…...

linux判断文件不存在退出jenkins编译流程

# linux判断文件不存在退出jenkins编译流程 file"${WORKSPACE}/mc/jenkins_arm64.sh" if [ ! -f "$file" ]; then echo "jenkins_arm64.sh not exist" exit 0 fi dir(charge){checkout([$class: GitSCM, branches: [[name: …...

shell脚本(语法)

一、什么是shell脚本 1.1、shell 的两层含义:既是一种应用程序,又是一种程序设计语言 1.1.1、shell是一种应用程序 交互式地解释、执行用户输入的命令,将用户的操作翻译成机器可以识别的语言,完成相应功能称之为 shell 命令解析器。 shell 是…...

java高频面试题(2023最新)

目录一.java基础1.八大基础类型2.java三大特性3.重载和重写的区别4.pubilc、protected、(dafault)不写、private修饰符的作用范围5.和equals的区别6.hashcode()值相同,equals就一定为true7.short s 1;s s 1;(程序1)和 short s 1&#xff…...

视觉感知(二):车位线检测

1. 简介 本期为大家带来车位线检测相关知识点,以及算法工程落地的全流程演示。车位线检测是自动泊车领域必不可缺的一环,顾名思义就是采用环视鱼眼相机对路面上的车位线进行检测,从而识别出车位进行泊车。 较为常规的做法是使用四颗鱼眼相机环视拼接然后在鸟瞰图上做停车位…...

2023.2.10学习记录Docker容器

Docker 必须跑在Linux内核上 镜像是一个轻量级可执行的独立软件包 新建一个docker容器只需要几秒钟 Docker常用命令 启动类命令 镜像命令 容器命令 docker images docker search --limit 5 redis docker pull redis:6.0.8 docker system df 查看镜像/容器/…...

武汉企业制作网站/网站制作报价

可以使用Python的os模块和re模块来实现: import os import re 获取目录下的所有文件 for file in os.listdir(directory_path): with open(file) as f: # 读取文件中的每一行并使用正则表达式查找包含字符串abcd的行 for line in f.readlines(): if re.findall(abcd…...

怎么做网站免费/怎样联系百度客服

网络互联网络互联通常是指交换机和路由器之间的互联,因为交换机和交换机互联存在三方面的不足:1、广播风暴,2、网络互联,3、网络安全。所以通常需要添加路由器,以有效的放置上述三种问题。路由器根据IP地址来区别不同网…...

公司网站建设p开发/电商数据统计网站

穷人有穷人思维我们一点都不奇怪,但我见过很多老板也有穷人思维,这种思维说明一个什么问题?接下来我们就来看看为什么说有三种思想的人是当不了很大的老板的。思维一:你为我做多少事,我给你多少钱你给我干多少事&#…...

公司招聘网站有哪些/青岛网站推广公司

两个线程抓10个网页 线程数量试验 参考资料 线程数量控制 线程池 两个线程抓10个网页 之前我们有过循环抓取10页豆瓣电影数据的例子,当时是每次循环都新建了一个线程,但是如果我们想要只用两个线程怎么办呢? 首先声明,1个线程分5个…...

dreamweaver网站建设/网络营销顾问招聘

...

wordpress任意文件删除/网络营销策划方案模板范文

git deploy之后发现个问题,访问自己的域名返回404,如下图:查看github的Custom domain发现已经被还原为空值。解决方法如下:1,配置正确的Custom domain。2,到source目录下,创建CNAME文件&#xf…...