<JavaEE> TCP 的通信机制(二) -- 连接管理(三次握手和四次挥手)

目录

TCP的通信机制的核心特性

三、连接管理

1)什么是连接管理?

2)“三次握手”建立连接

1> 什么是“三次握手”?

2> “三次握手”的核心作用是什么?

3)“四次挥手”断开连接

1> 什么是“四次挥手”?

2> 为什么需主动断开方要进入“TIME_WAIT”状态?

3> “TIME_WAIT”会等待多久?

4> “四次挥手”能否合并为“三次挥手”?

5> 被动断开方如果一直没有发送FIN,连接就一直不会关闭吗?


TCP的通信机制的核心特性

TCP的通信机制最核心的特性是可靠传输。
TCP至少通过以下机制来保证传输的可靠性,在保证可靠性的同时也采取一些机制来提升传输效率
<1> 确认应答<6> 阻塞控制
<2> 超时重传<7> 延时应答
<3> 连接管理<8> 捎带应答
<4> 滑动窗口<9> 面向字节流
<5> 流量控制<10> 异常情况处理

阅读指针 -> 《 TCP 的通信机制 -- 确认应答 和 超时重传 》<JavaEE> TCP 的通信机制 -- 确认应答 和 超时重传-CSDN博客文章浏览阅读5次。介绍 TCP 的通信机制,确认应答和超时重传。https://blog.csdn.net/zzy734437202/article/details/135228875


三、连接管理

1)什么是连接管理?

连接管理是指,建立连接和断开连接。
在正常情况下,TCP需要经过“三次握手”建立连接,“四次挥手”断开连接。

2)“三次握手”建立连接

1> 什么是“三次握手”?

四个状态:
LISTEN:是TCP连接中,接收方监听等待接收连接的状态。
SYN_SENT:是TCP连接中,发送方第一次给接收方发送连接请求的状态。
SYN_RCVD:是TCP连接中,接收方收到连接请求并返回连接请求之后等待发送方应答的状态。
ESTABLISHED:是TCP连接中,连接准备就绪的状态。
两个数据报标志:
SYN:是同步报文段标志,用于请求建立连接。
ACK:确认标志,表示发来的数据已确认接收无误。

在正式建立TCP连接之前,需要通信的双方先完成三次特殊通信才能正式建立连接。
三次通信分别是:
<1> A端向B端发送SYN报文。
<2> B端成功接收A端发送的SYN报文,并返回ACK报文和SYN报文。至此可以确认A端发送功能正常。
<3> A端成功接收B端发送的ACK+SYN报文,并返回ACK报文。至此可以确认B端接收、发送功能正常,且A端接收功能正常。

2> “三次握手”的核心作用是什么?

<1> 测试当前通信路径是否通畅。
<2> 测试通信双方接收和发送的能力是否正常。
<3> 通信双方对一些通讯重要数据的协商。如序号、初始窗口大小等。

3)“四次挥手”断开连接

1> 什么是“四次挥手”?

六个状态:
FIN_WAIT_1:是TCP连接中,主动断开方第一次给对端发送断开连接请求的状态
CLOSE_WAIT :是TCP连接中,被动断开方收到断开连接请求后,等待关闭连接的状态。
FIN_WAIT_2:是TCP连接中,主动断开方收到对端确认断开应答,等待对端发送断开连接请求的状态。
TIME_WAIT:是TCP连接中,主动断开方收到对端发送断开连接请求后,进入等待的状态。
LAST_ACK:是TCP连接中,被动断开方发送断开连接请求后,等待应答的状态。
CLOSING是TCP连接中,通讯连接断开的状态。
两个数据报标志:
FIN:是结束报文段标志,用于通知对端,本端将结束通讯。
ACK:确认标志,表示发来的数据已确认接收无误。

在正式断开TCP连接之前,需要通信的双方先完成四次特殊通信才能正常断开连接。
四次通信分别是:
<1> A端向B端发送FIN报文。
<2> B端成功接收A端发送的FIN报文,并返回ACK报文。A端成功接收并继续等待B端FIN报文。
<3> B端发送FIN报文,A端成功接收。
<4> A端返回ACK报文。至此,B端在成功接收A端的ACK报文后,关闭连接。A端在等待一段时间没有其他情况后,关闭连接。

2> 为什么需主动断开方要进入“TIME_WAIT”状态?

TIME_WAIT是主动断开方在接收到对端的FIN报文后进入的状态。
在接收到这个FIN报文后,主动断开方会反馈一个ACK报文给对端。
如果这个返回的ACK报文丢失,被动断开方没有接收到,那么站在被动断开方视角,就是自己的FIN没有传达到。此时,被动断开方就会重新发送FIN报文
主动断开方的TIME_WAIT状态,就是为了等待这一条可能发生的报文。但如果过了一段时间后,没有收到这条报文,主动断开方就会认为对端已经CLOSING,自然自己也就CLOSING了。

3> “TIME_WAIT”会等待多久?

MSL的概念:MSL是指TCP报文的最大生存时间,这个生存时间在每个系统上是不一样的,同时也是可以配置更改的。
TIME_WAIT状态会持续存在2MSL的时长。这个时长可以保证两个传输方向上尚未被接受或迟到的报文段都已经消失,同时也是理论上保证最后一个报文可靠到达。
简而言之,一来一回的报文最多存在这么长时间,这个时间内没收到,真的还有报文,也已经达到最大生存时间,报文就“消失”了。

4> “四次挥手”能否合并为“三次挥手”?

答案是不确定的,需要具体情况具体分析。
<1> 不会合并的场景。
将被动断开方的ACK和FIN分开传输的原因是,ACK应答报文是由系统内核响应的,而FIN是由应用程序代码调用close()方法触发的。
因此,两者的触发时间不同,且时间差距可能较大,并不适合合并在一起发送。
<2> 可能合并的场景。
在TCP众多机制中,为了控制窗口大小,提高传输效率,存在“延迟应答”的机制。这意味着,如果被动断开方的ACK报文还没发送时,触发了“延迟应答”的机制,那么后续的FIN报文就有可能和ACK报文合并发送

5> 被动断开方如果一直没有发送FIN,连接就一直不会关闭吗?

主动断开方发送了FIN报文。被动断开方返回了ACK报文后,却一直没有发送FIN报文。
存在以下三种情况:
<1> 业务逻辑还未结束,被动断开方还在不断发送业务数据包给对端。
这种情况下,主动断开方可以感知对端还在通信,连接自然不会断开。
<2> 业务逻辑还未结束,被动断开方一直在处理业务,没有发送业务数据包给对端也没有发送FIN。
这种情况下,主动断开方无法感知对端是否还在。但是,TCP中还有“心跳包”机制,约定每隔一段时间通信双方就要进行一次没有业务数据的通信。因此,避免了一端还在处理数据,没来得及发送,另一端就断开了的情况。
<3> 被动断开方因为代码BUG或者通信问题,一直无法送达FIN。
这是一种异常情况,TCP也提供了一些处理异常情况的机制,如上文所说的“心跳包”机制等。因此,即使在异常情况下,连接仍然可以被关闭。

阅读指针 -> 《 TCP 的通信机制 -- 滑动窗口 》

<JavaEE> TCP 的通信机制(三) -- 滑动窗口-CSDN博客介绍了 TCP 的通信机制 -- 滑动窗口https://blog.csdn.net/zzy734437202/article/details/135235928

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

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

相关文章

听GPT 讲Rust源代码--library/panic_unwind

File: rust/library/panic_unwind/src/seh.rs 在Rust源代码中&#xff0c;rust/library/panic_unwind/src/seh.rs这个文件的作用是实现Windows操作系统上的SEH&#xff08;Structured Exception Handling&#xff09;异常处理机制。 SEH是Windows上的一种异常处理机制&#xff…

Mysql 动态链接库配置步骤+ 完成封装init和close接口

1、创建新项目 动态链接库dll 2、将附带的文件都删除&#xff0c;创建LXMysql.cpp 3、项目设置 3.1、预编译头&#xff0c;不使用预编译头 3.2、添加头文件 3.3、添加类 3.4、写初始化函数 4、项目配置 4.1、右键解决方案-属性-常规-输出目录 ..\..\bin 4.2、生成lib文件 右…

3D视觉-相机选用的原则

鉴于不同技术方案都有其适用的场景&#xff0c;立体相机的选型讲究的原则为“先看用途&#xff0c;再看场景&#xff0c;终评精度”&#xff0c;合适的立体相机在方案中可以起到事半功倍的效果。从用途上来进行划分&#xff0c;三维视觉方案主要应用在两个方向&#xff1a;测量…

Linux 进程(六) 环境变量

main函数参数&#xff1a; 这是一个常见的main函数&#xff0c;那么main函数可以带参吗&#xff1f; int main() {return 0; } 答案是可以的&#xff01; 我们先看这样一段代码&#xff0c;首先给main函数带上两个参数。 然后我们来看输出的结果。 这样一组字符串是命令行解释…

【AI】一文读懂大模型套壳——神仙打架?软饭硬吃?

目录 一、套壳的风波此起彼伏 二、到底什么是大模型的壳 2.1 大模型的3部分&#xff0c;壳指的是哪里 大模型的内核 预训练&#xff08;Pre-training&#xff09; 调优&#xff08;Fine-tuning&#xff09; 2.2 内核的发展历程和万流归宗 2.3 套壳不是借壳 三、软饭硬…

Ubuntu 常用命令之 locate 命令用法介绍

&#x1f525;Linux/Ubuntu 常用命令归类整理 locate命令是在Ubuntu系统下用于查找文件或目录的命令。它使用一个预先构建的数据库&#xff08;通常由updatedb命令创建&#xff09;来查找文件或目录&#xff0c;因此它的查找速度非常快。 plocate 安装 locate 不是 Ubuntu 系…

语音AI小夜灯项目

一、项目简介 使用ESP32-S3N8R8模块作为主控芯片&#xff0c;S3内核增加了用于加速神经网络计算和信号处理等的指令&#xff0c;这使得我们可以使用它来快速解析训练好的语音模型进行语音识别的功能。 二、原理解析 本项目由四个部分组成&#xff0c;电源部分、LED照明部分、…

Spring Cloud Gateway 常见过滤器的基本使用

目录 1. 过滤器的作用 2. Spring Cloud Gateway 过滤器的类型 2.1 内置过滤器 2.1.1 AddResponseHeader 2.1.2 AddRequestHeader 2.1.3 PrefixPath 2.1.4 RequestRateLimiter 2.1.5 Retry 2.2 自定义过滤器 1. 过滤器的作用 过滤器通常用于拦截、处理或修改数据流和事…

【Matlab】基于遗传算法优化BP神经网络 (GA-BP)的数据时序预测(附代码)

资源下载&#xff1a; https://download.csdn.net/download/vvoennvv/88682033 目录 【Matlab】BP 神经网络时序预测算法 【Matlab】CNN卷积神经网络时序预测算法 【Matlab】ELM极限学习机时序预测算法 【Matlab】基于遗传算法优化BP神经网络 (GA-BP)的数据时序预测 【Mat…

什么是 NAS?

一、什么是 NAS&#xff1f; 在数字化时代&#xff0c;小型企业面临着日益增长的数据存储需求。为了应对这一挑战&#xff0c;网络附加存储&#xff08;NAS&#xff09;系统成为了许多企业的首选解决方案。NAS系统是一种连接到网络的存储设备&#xff0c;允许授权网络用户和异…

2024.1.3 Spark on Yarn部署方式与工作原理

目录 Spark集群类型有以下几种&#xff1a; Spark的部署方式有以下几种&#xff1a; Spark on YARN的部署方式有两种&#xff1a;client模式和cluster模式。 Spark底层的工作原理,执行流程 Spark集群类型有以下几种&#xff1a; Standalone模式&#xff1a;这是Spark自带的…

数据挖掘中的数据属性特点、描述性统计度量与相似度计算

目录 1. 引言 2. 数据挖掘中的数据属性 2.1 数值属性 2.2 标称属性 2.3 有序属性 2.4 无序属性 3. 描述性统计度量 3.1 中心趋势度量 3.2 离散程度度量 3.3 分布形状度量 4. 相似度计算 4.1 欧氏距离 4.2 余弦相似度 4.3 Jaccard 5. 数据挖掘中的案例应用 5.1 …

Vue2 - 数据响应式原理

目录 1&#xff0c;总览2&#xff0c;Observer3&#xff0c;Dep4&#xff0c;Watcher5&#xff0c;Schedule 1&#xff0c;总览 vue2官网参考 简单介绍下上图流程&#xff1a;以 Data 为中心来说&#xff0c; Vue 会将传递给 Vue 实例的 data 选项&#xff08;普通 js 对象&a…

NSSCTF sql

开启环境: ?wllm1 回显正常,试试?wllm1 出现报错;加上%23正常 ?wllm-1or 11%23出现过滤 测试,空格用**替代, 等号用like替代 测试长度 ?wlmm1order/**/by/**/3%23正常 ?wlmm1order/**/by/**/4%23报错 长度为3,测试回显位置: ?wlmm-1union/**/select/**/1,2,3%23 …

【C#】知识点实践序列之Lock的锁定代码块

大家好&#xff0c;我是全栈小5&#xff0c;欢迎来到《小5讲堂之知识点实践序列》文章。 2024年第1篇文章&#xff0c;此篇文章是C#知识点实践序列之Lock知识点&#xff0c;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 本篇验证Lock锁定代…

docker学习(二十、network使用示例host、none)

文章目录 一、host应用示例总结 二、none应用示例总结 network相关内容&#xff1a; docker学习&#xff08;十八、network介绍&#xff09; docker学习&#xff08;十九、network使用示例bridge&#xff09; docker学习&#xff08;二十、network使用示例host、none&#xff0…

使用sdf文件+urdf文件模拟机器人示例(不用把urdf转sdf)

gazebo版本&#xff1a;harmonic&#xff1b; <launch> <group> <let name"robot_description" value"$(command xacro $(find-pkg-share gazebo_pkg)/urdf/total.xacro)"/> <node pkg"rviz2" exec"rviz2" name…

冠赢互娱基于 OpenKrusieGame 实现游戏云原生架构升级

作者&#xff1a;力铭 关于冠赢互娱 冠赢互娱是一家集手游、网游、VR 游戏等研发、发行于一体的游戏公司&#xff0c;旗下官方正版授权的传奇类手游——《仙境传奇》系列深受广大玩家们的喜爱。基于多年 MMORPG 类型游戏的自研与运营经验&#xff0c;冠赢互娱正式推出了 2D M…

python爬虫

python爬虫 一、Urllib1、互联网爬虫2、爬虫的核心3、爬虫的用途4、爬虫分类5、反爬手段6、urllib库的使用7、请求对象的定制8、编解码9、ajax的get请求10、ajax的post请求11、URLError\HTTPError12、cookie登录13、Handler处理器14、代理服务器 一、Urllib 1、互联网爬虫 解…

Allins 官网正式上线,铭文赛道进入 AMM 交易时代

“Allins 正在通过全新的 AMM 方案为BRC20及多链铭文资产拓展 DeFi 场景&#xff0c;官网的全新上线意味着铭文资产的交易正式进入 AMM 时代。”