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

javaEE 初阶 — 连接管理机制

文章目录

    • 连接管理机制
      • 1. 建立连接(三次握手)
      • 2. 断开连接(四次挥手)

TCP 的工作机制

确认应答机制

超时重传机制

连接管理机制


比如 主机A 的空间存储了 主机B 的 ip 和 端口,主机B 的空间存储了 主机A 的 ip 和 端口。
当这两部分信息都被维护好了之后,此时连接就有了。
此时也把保存这部分信息的这个空间(数据结构)也称为 连接。

这就好比两个人结婚,结婚证上面会有彼此的另一半是谁,有了结婚证说明这两个人才是正式结为了夫妻,
此时才是成功建立了连接。

如果要断开连接,A 和 B 把自己存储的信息(数据结构)删除了,此时连接就断开了。

管理就是描述了连接如何创建,如何断开。

1. 建立连接(三次握手)


建立连接就是通信双方各自要记录对方的信息,彼此之间要相互认同。

举个例子来说明什么是建立连接。


首先,张三向小红表白,接下来小红接受了张三的表白。此时双方就有了一个认同:小红是张三那个唯一的人。
但是要想成为男女朋友,就需要双方互为唯一,所以此时小红也向张三表白。

这个时候,又建立了一次认同,张三这边知道了,自己是小红唯一的人,而小红这边也知道了张三是她唯一的人。
这个时候才是正真的建立了男女朋友的关系,相当于是连接建立完毕。

此处就把这个过程中的每一次通信都称为一次 “握手”。


如果仔细观察就会发现上面的交互一共是 4 次,那为什么不叫做 四次握手呢?

因为有两次交互是可以合二为一的。



小红在接收张三表白的同时向张三表白,这就节省了一次数据的传输。

通信双方各自要向对方发起一个 “建立连接” 的请求,同时再各自向对方回应一个 ACK,所以这里是有四次信息交互的。
所谓的三次握手,本质上是 四次握手。这是由于中间两次交互是可以合并成一次交互的,因此就构成了三次握手。


这里将两次交互合二为一可以降低成本,好比在一家店铺买了三件商品,商家会打包成一个包裹运过来。
因为这样只需要付一份的运费,而不是分成三个包裹,付三份运费。


为什么不能是两次握手?


如果少了最后一次握手,张三知道了自己是小红的唯一,也知道了小红是自己的唯一。
但是小红这边不知道自己是张三的唯一,也不知道张三是不是她的唯一。

此时从小红的视角张三有可能同时在和多个女朋友交往,相当于是没有建立男女朋友的连接。


三次握手还有另外一个重要的作用,验证通信双方各自发送能力和接收能力是否正常
三次握手也在一定程度上保证了 TCP 传输的可靠性,但是起到的不是关键作用,而是辅助作用。

举个例子来说明。
比如现在李四和张三开黑打游戏,需要连麦,但是在游戏开始之前需要通过三次握手来进行测试验证麦克风和听筒有没有问题。


第一次交互:

1、当李四听到了 “hello !收到请回答” 后,李四就知道了张三的麦克风是好的,李四自身的耳机也是好的。
但是还不知道李四的麦克风是否是好的,也不知道张三的耳机是否是好的。


第二次交互:

2、当张三听到 “收到收到” 后,张三就知道了自己的耳机和李四的麦克风是好的。
同时由于之前是约定好,李四听到张三的 “收到请回答” 后才回复 “收到收到”,所以此时张三的麦克风和李四的耳机是好的。


张三这边已经知道了开麦交流的能力都OK了,但是李四那边的还不清楚,所以需要 第三次交互 同步一下情报。

第三次交互:

1、此时李四听到了 “OKOK” 意味着此时刚才李四发的 “收到收到” 已经被张三收到了。
意味着李四的麦克风和张三的耳机都是好的。

此时双方都知道了,彼此的麦克风和耳机都是好的。


三次握手的意义

1、让通信双方各自建立对方的 “认同”。
2、验证通信双方各自的发送能力和接收能力是否OK。
3、在握手的过程中,双方来协商一些重要的参数。

TCP 通信过程中有些数据通信双方要相互同步,此时就需要有这样的交互过程。
恰好可以利用三次握手的机会来完成数据的同步。




客户端主动给服务器发起的建立连接请求,称为 SYN,这个是 同步报文段

客户端是主动的一方,服务器是被动的一方,一定是客户端先向服务器发起 “建立连接请求”。

客户端服务器这个身份概念只是按照主不主动来进行区分的。
同一个程序在不同的场景下可能是作为服务器也可能是作为客户端。

三次握手中的TCP 的状态



圈出的描述了TCP的状态,TCP 不同的状态就体现了当前 TCP 在干什么。

建立连接阶段主要认识两个状态:

1、LISTEN 服务器的状态。
表示了服务器已经准备就绪,随时可以有客户端来建立连接了。相当于手机开机,信号良好随时可以有人来打电话。


2、ESTABLISHED 客户端和服务器都有。
连接建立完成,接下来就可以正常通信了,相当于电话拨过去,对方接通了。


在这里插入图片描述

圈出的描述了 TCP 和 socket api 之间的关系,此处的 socket api 是系统原生 api (C语言版本)
这个和 java 版本的已经有了一定的差距,因此这里不做关注。

2. 断开连接(四次挥手)


四次挥手和三次握手非常类似,都是通信双方各自向对方发起一个断开连接的请求,再各自给对方一个回应。



经过双方确认分手后,两个人确定断开了连接变成了陌生人。

需要注意的是断开连接中间两条交互,在通常下是不可以合而为一的。
如果两个数据的发送时间相同才能合并,如果是不同的时机,就无法合并!!!


为什么不能合二为一

举个例子。比如说在网上买快递,如果是在一个店铺同时下了多个订单,那么店家会发一个快递,承担一份运费。
如果是一周下一个订单,分三次下完,那么此时店家就会发三个快递,承担三份快递。

主要是因为下订单的时间是完全不同的。


三次握手中的两次能够合并是因为这两个是同一时机的。

具体来说,三次握手这三次交互过程,是纯内核中完成的。(应用程序感受不到,也无法干预)

服务器的系统内核收到 SYN 之后,就会立即发送 ACK 也会立即发送 SYN。




FIN 的发起不是由内核控制的,而是由应用程序调用 socket 的 close 方法(或者进程退出)才会触发 FIN。

ACK 则是由内核控制的,是收到了 FIN 之后立即返回 ACK,服务器的应用程序执行到对应的 close 方法才会触发 FIN。
这两者之间就回隔了一个时间差,这个时间是长还是短,取决于代码是在怎么实现的。


四次挥手中的TCP 的状态



四次挥手涉及到了两个重要的 TCP 状态:

1、CLOSE_WAIT 出现在被动发起断开连接的的一方。等待关闭 (等待调用 close 方法关闭 socket)
建立连接一定是客户端主动发起请求,断开连接可能是客户端主动发起也可能是服务器主动发起。


2、TIME_WAIT 出现在主动发起断开连接的一方。

假如是客户端主动断开连接,当客户端进入 TIME_WAIT 状态的时候,相当于四次挥手已经挥完了。
此时,这里的 TIME_WAIT 要保持当前的 TCP 状态不要立即就释放。

为什么 TIME_WAIT 会保留一会连接不立即释放???

此时最后一个 ACK 刚刚发送出去还没到呢!如果这个最后一个 ACK 丢包了呢?
因此,TIME_WAIT 会等一会,如果超出了等待的时间也没有收到重传的 FIN,此时就认为最后一个 ACK 没丢包,
于是就彻底的释放连接了。


在三次握手和四次挥手的过程中,同样是存在重传的。

如果是最后一个 ACK 丢包了,站在服务器的视角来看,服务器是不知道是因为 ACK 丢了,还是自己发的 FIN 丢了。
所以统一视为 FIN 丢了,统一进行重传操作。

既然服务器可能要重传 FIN ,客户端就需要能够针对这个重传的 FIN 进行 ACK 响应。
很明显,如果刚才彻底把连接释放了,这样的 ACK 就无法进行了。因此使用 TIME_WAIT 状态保留一定的时间,就是为了能够处理最后一个 ACK 丢包的情况,能够在收到重传的 FIN 之后进行 ACK 响应。


TIME_WAIT 保存的具体时长

约定了一个时间,叫做 2MSL 指的是,互联网上两个结点之间数据传输消耗的最大时间。

如果 A 经历了 2MSL 这个时间还没收到重传的 FIN ,就认为上个 ACK 就正常到达了(认为对方没有重传 FIN 了)


MSL 这个值通常情况下是 60s,但是传输数据的实际时长完全是有可能会超过 60s 的。
如果把 MSL 定义为 1h,传输数据的实际时长也有可能是比 1h 多的。

无论如何定义 MSL 都无法理论上排出这样的特殊情况,因此 MSL 其实相当于是一个经验值。
按照一般的经验来说,绝大部分(99.99%)数据传输的时间都不会超过 MSL。


小结:

TCP 作为一个有连接的协议,就需要建立连接和断开连接。

其中建立连接的过程是三次握手,断开连接的过程是四次挥手。

三次握手的意义:

1、让通信双方各自建立对方的 “认同”。
2、验证通信双方各自的发送能力和接收能力是否OK。
3、在握手的过程中,双方来协商一些重要的参数。

相关文章:

javaEE 初阶 — 连接管理机制

文章目录连接管理机制1. 建立连接(三次握手)2. 断开连接(四次挥手)TCP 的工作机制确认应答机制 超时重传机制 连接管理机制 比如 主机A 的空间存储了 主机B 的 ip 和 端口,主机B 的空间存储了 主机A 的 ip 和 端口。…...

40个改变你编程技能的小技巧!

40个改变编程技能的小技巧 1、将大块代码分解成小函数 2、今日事今日毕,如果没毕,就留到明天。 如果下班之前还没有解决的问题,那么你需要做的,就是关闭电脑,把它留到明天。 中途不要再想着问题了! 3、…...

iTOP3588开发板直连电脑配置方法(无线上网)配置主机IP

首先使用网线连接好主机和开发板,在没有上电的情况下,可以看到以太网显示网络电缆 被拔出,如下图所示: 当开发板上电以后,开发板网卡与笔记本电脑的网卡会连接,如下图所示: 然后右键点击以太网…...

压电陶瓷换能器导纳圆图公式推导及匹配

压电陶瓷换能器的等效电路图如下图所示,分为左右两个部分左边的电容和电阻并联构成了电路的静态支路,被称为静态电容,可以由电表很方便的测量得到,这部分的参数是由换能器的电学参数决定的。右边的串联构成了动态支路,…...

设计模式C++实现11:观察者模式

参考大话设计模式; 详细内容参见大话设计模式一书第十四章,该书使用C#实现,本实验通过C语言实现。 观察者模式又叫做发布-订阅(Publish/Subscribe)模式。 观察者模式定义了一种一对多的依赖关系,让多个观察…...

l1和l2接口如何进行编写?一定要掌握这几个元素

在这个大数据时代,很多地方都需要用到l1和l2接口,l1和l2接口在应用程序与数据库之间起着桥梁的作用,是实现数据的整合与共享的重要帮手。 l1和l2接口适用于各行各业,应用场景的不断拓展,l1和l2接口的发展也兴起&#…...

GAMES101作业7及课程总结(重点实现多线程加速,微表面模型材质)

目录闲言碎语最终全部效果展示(均为10241024512ssp)课程总结与理解(Path Tracing)框架梳理任务一:迁移相关代码任务二:实现path tracing任务三:多线程加速(包括其他加速的小trick&am…...

面试题(二十四)数据结构与算法

9.1哈希 请谈一谈,hashCode() 和equals() 方法的重要性体现在什么地方? 考察点:JAVA哈希表 参考回答: Java中的HashMap使用hashCode()和equals()方法来确定键值对的索引,当根据键获取值的时候也会用到这两个方法。…...

【HAL库】STM32CubeMX开发----STM32F407----Uart串口接收空闲中断

一、Uart串口接收空闲中断----详解 首先介绍串口通信的数据传输方式,这样后面的Uart串口空闲中断能更好的理解。 Uart串口通信----数据传输方式 串口通信的数据由发送设备通过自身的TXD接口传输到接收设备得RXD接口。 一个字符一个字符地传输,每个字符…...

Qt_文件操作

本文包含以下内容: 文件操作 基本介绍:ini文件:csv文件:代码功能文件读写:1.1 读取文件1.1.1按行读取1.1.2整体读取1.2 写入文件2. 文件信息读取3. 文件夹的创建4. 获取文件夹下所有的文件5. 获取文件夹及子文件夹下所有的文件用树的方式在界面显示文件夹目录基本介绍: …...

int和Integer有什么区别?

第7讲 | int和Integer有什么区别? Java 虽然号称是面向对象的语言,但是原始数据类型仍然是重要的组成元素,所以在面试中,经常考察原始数据类型和包装类等 Java 语言特性。 今天我要问你的问题是,int 和 Integer 有什么…...

Axure 9 收录不同效果的制作过程

效果类别 一、默认选中实现单选效果 1、默认选中 点击组件,右键选择selected字样; 2、实现单选效果 点击所有组件,右键选择selected group,填好命名,并设置选中时的组件样式;选择其中一个组件&#xf…...

[Datawhale][CS224W]图神经网络(一)

目录一、导读1.1 当前图神经网络的难点1.2 图神经网络应用场景及对应的相关模型:1.3 图神经网络的应用方向及应用场景二、图机器学习、图神经网络编程工具参考文献一、导读 ​ 传统深度学习技术,如循环神经网络和卷积神经网络已经在图像等欧式数据和信号…...

【Android实现16位灰度图数据转RGB数据并以bitmap格式显示】

Android实现16位灰度图数据转RGB数据并以bitmap显示(单通道Gray数据转三通道RGB数据并显示) 需求发现问题解决方案需求 问题需求:项目上需要实现将深度相机传感器给出的数据实时显示出来的功能。经过了解得知,传感器给出的数据为16位灰度图数据,即16位数据表示一个像素的…...

uni-app②

文章目录二、微信小程序简介(一)文档相关开发者工具使用小程序代码构成小程序基本操作三、uniapp 开发规范uniapp 开发环境开发工具下载 HBuilderX工程搭建项目运行浏览器运行四、组件基础组件基础组件列表组件公共属性集合扩展组件自定义组件UNI-ICON五…...

FFmpeg视频处理

目录 1. Ubuntu(wsl)安装 ffmpeg 2. ffmpeg查看指令 3. ffmpeg查看媒体文件信息 4. ffmpeg基础操作指令 5. ffmpeg视频抽帧 5.1 基于时间抽取帧 5.2 两种抽帧方式 5.3 视频流抽帧 5.4 视频批量抽帧 6. ffmpeg更改视频播放速度 7. ffmpeg视频格…...

FreeRTOS任务通知 | FreeRTOS十二

目录 说明: 一、任务通知 1.1、什么是任务通知 1.2、任务通知优势与劣势 1.3、任务通知值的更新方式 1.4、任务通知值状态 1.5、任务通知状态 1.6、任务通知方式类型 二、任务通知相关API函数 2.1、常用的发送通知API函数 2.2、带通知值的发送通知函数 …...

CentOS搭建博客typecho

Ubuntu搭建博客typecho_Dyansts的博客-CSDN博客 见过这样的文章展示页面吗? 详细视频安装教程: 9分钟快速搭建typecho博客,让你不再烦恼_哔哩哔哩_bilibili 现在就把他搭建出来 展示页面:Hello World 其他的插件:…...

湖南中创教育PMP如何实施风险应对,避免产生投诉

一、评估风险 评估风险影响的直接或间接价值 面临的潜在威胁,威胁发生的可能性有多大? 威胁一旦发生,损失是多大? 评估承受风险的能力 采取怎样的措施才能将损失降到最低,甚至为零 二、规划风险 对识别出来的风险进行分组或分类 确定…...

Urho3D子系统

通过使用函数RegisterSubsystem(),任何对象都可以作为子系统注册到上下文中。然后,通过调用GetSubsystem(),同一上下文中的任何其他对象都可以访问它们。每个对象类型只能有一个实例作为子系统存在。 发动机初始化后,以下子系统将…...

无线网络术语总结

学习802.11协议,其中有一些英文缩略词,这里做一下总结与记录。 学习资料:知乎徐方鑫 802.11相关文章 802.11协议精读3:CSMA/CD与CSMA/CA - 知乎 (zhihu.com) 无线网络术语缩写全称中文含义APAccessPoint无线访问节点用于无线网络…...

海卡和海派有什么区别

一、海卡和海派有什么区别 海派和海卡实际上就是快船和慢船的区别。都是头程选用海运的方式,海派是到海港海关清关拆柜后,尾程配送是采用快递配送。而海卡则是到海港海关清关拆柜后,尾程选用货车配送。1、海派比较适用于小件货物 海派是海运抵…...

vue3学习资料整理

一、一个后端程序员为什么要学习前端? 1.网上找到的学习理由 《Java后端的我也要学Node.js 了》 https://blog.csdn.net/yusimiao/article/details/104689007 《nodejs后端开发的优缺点(nodejs的概念与特征详解)》 https://www.1pindao.co…...

Linux基础语法进阶版

Linux基础语法 查看文件内容指令 touch 主要是修改文件时间,多用创建文件 -a #只更改访问时间 -m #只更改修改时间 -c --no-create#不创建任何文件cat 展示小文件内容 -b #对于非空输出行编号 -n #对于所有行输出编号 -E #在每行结束处显示"$" -A #展示所…...

近红外染料标记小分子1628790-37-3,Cyanine5.5 alkyne,花青素CY5.5炔基

试剂基团反应特点:Cyanine5.5 alkyne用于点击化学标记的远红外/近红外染料炔烃。氰基5.5是Cy5.5的类似物,一种流行的荧光团,已广泛用于各种应用,包括完整生物体成像。在温和的铜催化化学条件下,该试剂可与叠氮基共轭&a…...

洛谷——P1004 方格取数

【题目描述】 设有 NN 的方格图 (N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 0。如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 0 0…...

Linux删除软链接

不防大家试试 unlink 命令 首先我们先来创建一个文件 #mkdir test_chk #touch test_chk/test.txt #vim test_chk/test.txt (这一步随便在这个test.txt里写点东东即可) 下面我们来创建test_chk目录 的软链接 #ln-s test_chk test_chk_ln 软链接创建好了,我们来…...

【自然语言处理】【大模型】用于大型Transformer的8-bit矩阵乘法介绍

用于大型Transformer的8-bit矩阵乘法介绍原文地址:A Gentle Introduction to 8-bit Matrix Multiplication for transformers at scale using transformers, accelerate and bitsandbytes 相关博客 【自然语言处理】【大模型】用于大型Transformer的8-bit矩阵乘法介…...

设计模式之工厂模式详解和应用

目录1 工厂模式的历史由来2.简单工厂模式2.1 简单工厂模式定义2.2 简单工厂模式案例2.3 简单工厂模式相关源码2.4 简单工厂模式优缺点3 工厂方法模式3.1 工厂方法模式定义3.2 工厂方法模式案例3.3 工厂方法模式源码3.4 工厂方法模式优缺点4 抽象工厂模式4.1 抽象工厂模式定义4.…...

ArcGIS中的附件功能

从ArcGIS10起,空间数据库增加了"附件"的功能,可灵活管理与要素相关的附加信息,可以是图像、PDF、文本文档或任意其他文件类型。例如,如果用某个要素表示建筑物,则可以使用附件来添加多张从不同角度拍摄的建筑物照片。 启动附件功能 要想使用附件功能,要素类必…...

东莞最好的网站建设/登封seo公司

<jsp:include>动作元素 (1)<jsp:include>动作元素 <jsp:include>动作元素用来包含静态和动态的文件。该动作把指定文件插入正在生成的页面。 <jsp:include>动作元素语法格式如下&#xff1a; <jsp:include page"相对URL地址" flush"…...

网站空间数据库/百度站长平台电脑版

今年过年各位一定在微信里抢了不少红包。那么当别人是手气王而你只抢到1分钱的时候&#xff0c;你有没有想过&#xff0c;如果你来实现红包的分配算法&#xff0c;会怎么写&#xff1f; 这里我给一个简单的实现方案。 基本思路就是&#xff0c;有多少个红包&#xff0c;就循环多…...

网站建设竞标需要怎么做/营业推广的目标通常是

选用ZIP Archive版本的win64下面我再把步骤说明一下&#xff1a;选中上图的版本&#xff0c;开始下载。2、解压安装包解压下载的安装包&#xff0c;直接放到系统根目录下&#xff0c;我放置的是D:\mysql3、配置my.ini文件解压后&#xff0c;根目录下&#xff0c;有一个my-defau…...

出版社网站建设/seo对各类网站的作用

总部位于纽约的“世界经济论坛”12日发布的《2010&#xff0d;2011全球信息技术(IT)报告》指出&#xff0c; 调查显示&#xff0c;就网民每日或每周在互联网上发言频度而言&#xff0c;中国网民在全球是最勤奋的。报告称&#xff0c;在回答是否每日或每周都会在互联网上发言的问…...

荆州大气网站建设价格/网站出租三级域名费用

首先看《消防给水及消防栓系统技术规范》(GB50974-2014)中是如何对机械应急启动进行规定的。消防水泵控制柜应设置机械应急启泵功能&#xff0c;并应保证在控制柜内的控制线路发生故障时由有管理权限的人员在紧急时启动消防水泵。机械应急启动时&#xff0c;应确保消防水泵在报…...

墓园网站建设价格/新媒体推广渠道有哪些

二、六大性能调优技术&#xff08;JVM调优网络调优数据库调优LINUX内核调优中间件底层探索容器环境调优&#xff09; 手绘板&#xff08;脑图&#xff09; 1、JVM调优 JVM调优必备理论知识-Gc COLLECTOR-三色标记 垃圾回收算法串讲 JVM常见参数总结 JVM调优实战 JVM&…...