TCP机制之连接管理(三次握手和四次挥手详解)

TCP的连接管理机制描述了连接如何创建以及如何断开!

建立连接(三次握手)

三次握手的过程

所谓建立连接就是通信双方各自要记录对方的信息,彼此之间要相互认同;这里以A B双方确立男女朋友关系为例:

从图中可以看出,通信双方各自向对方发起一个"建立连接"的请求,同时,再各自向对方回应一个ack,总共进行了四次通信交互(把每一次通信形象的比喻成一次握手),那为什么叫做三次握手呢?是因为其中第二次和第三次可以合并,合并之后的情况如图所示:

注意:

1,为什么是三次握手,而不是四次,中间两次可不可以不合并?

答:中间两次不可以不合并,四次比三次多一次通信的过程,每一次通信就会在网络上多一次封装分用的过程,开销更大成本更大.

2,三次握手可不可以简化成两次握手?

答:不能,因为两次的话必定会有一方不能建立对对方的连接.

三次握手的状态转换

在面试中,面试官可能让你动手画一下三次握手的一个简化过程,所以掌握三次握手的状态转换也是十分重要的,如图所示:

  • 建立连接之前,服务器端(被动建立连接的一方)处于LISTEN状态,表明此时客户端(主要建立连接的一方)可以发起建立连接的请求
  • 当客户端接收到服务器返回的ACK以及建立连接请求的SYN时,客户端就会处于一个ESTABLISHED状态
  • 当服务器接收到客户端返回的ACK时,服务器也会处于ESTABLISHED状态

三次握手的意义

  1. 让通信双方各自建立对对方的"认同"
  2. 验证通信双放方各自的发送能力和接收能力是否OK
  3. 在握手的过程中,双方协商一些重要的参数(TCP通信过程中,有些数据,通信双方要相互同步,此时就需要有这样的交互过程,恰好可以利用三次握手的机会,来完成数据的同步)

断开连接(四次挥手)

四次挥手的过程

所谓断开连接就会通信双方各自向对方发起一个断开连接的请求,再各自给对方一个回应,"挥手"和"握手"一样都是形象的叫法,都是客户端和服务器之间的交互;这里以男女朋友分手为例:

断开连接中间的两次通信过程不能合并!

注意:

为什么断开连接中中间两次通信不能合并?

答:因为在断开连接中的第一次通信返回的ACK是由内核控制的比较快,但是第二次通信是B向A发起断开连接的请求,不是由内核控制,而是应用程序调用socket的close方法(或者进程退出)才会触发,两者间隔时间比较长,一般不能合并(三次握手中中间两次通信过程都是由内核控制,间隔时间比较短,所以可以合并).

四次挥手的状态转换

  • CLOSED_WAIT(等待关闭状态)出现在被动发起断开连接的一方,等待调用close方法关闭socket
  • TIME_WAIT出现在主动发起断开连接的一方(上图假设的是客户端主动断开连接),当客户端进入TIME_WAIT状态的时候,相当于四次挥手已经完了
  • 客户端的TIME_WAIT状态要保持当前的TCP连接状态不要立即释放(原因:如果服务器没有收到客户端的ACK,服务器会认为是自己的FIN丢包了,就会重传,既然服务器要重传FIN,那么客户端需要能够针对这个重传的FIN进行ACK响应,如果刚才彻底把连接释放了,这样ACK就无法进行了)

所以更加详细记录四次挥手的图如下图所示:

TIME_WAIT具体保持多长时间才真正释放呢?一般约定的时间是2MLS,如果客户端经历了2MLS这个时间还没有收到重传的FIN,就认为这个ACK正常到达服务器了.

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

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

相关文章

SOME/IP TTL 在各种Entry 中各是什么意思?有什么限制?

1 服务发现 SOME/IP SD 服务发现主要用于 定位服务实例检测服务实例状态是否在运行发布/订阅行为管理SOME/IP SD 也是 SOME/IP 消息,遵循 SOME/IP 消息格式,有固定的 Message ID、Request ID 以及 Message Type 等。并对 SOME/IP Payload 进行了详细的定义。 SOME/IP SD …

STM32CUBEMX_创建时间片轮询架构的软件框架

STM32CUBEMX_创建时间片轮询架构的软件框架 说明: 1、这种架构避免在更新STM32CUBEMX配置后把用户代码清除掉 2、利用这种时间片的架构可以使得代码架构清晰易于维护 创建步骤: 1、使用STM32CUBEMX创建基础工程 2、新建用户代码目录 3、构建基础的代码框…

Unity生命周期函数

1、Awake 当对象(自己这个类对象,就是这个脚本)被创建时 才会调用该生命周期函数 类似构造函数的存在 我们可以在一个类对象创建时进行一些初始化操作 2、OnEnable 失活激活(这个勾) 想要当一个对象(游戏…

C语言基础知识理论版(很详细)

文章目录 前述一、数据1.1 数据类型1.2 数据第一种数据:常量第二种数据:变量第三种数据:表达式1、算术运算符及算术表达式2、赋值运算符及赋值表达式3、自增、自减运算符4、逗号运算符及其表达式(‘顺序求值’表达式)5…

光电耦合器市场在预测期内预计将以8.99%的复合年增长率增长!

光耦合器是一种用于传输光信号的电子器件。它具有以下特性: 1. 传输性能:光耦合器能够实现光电转化和信号传输,具有良好的传输性能和抗干扰能力,可以避免外部环境的干扰。 2. 隔离性能:光耦合器能够实现电路之间的隔…

学习MATLAB

今日,在大学慕课上找了一门关于MATLAB学习的网课,MATLAB对于我们这种自动化的学生应该是很重要的,之前也是在大三的寒假做自控的课程设计时候用到过,画一些奈奎斯特图,根轨迹图以及伯德图,但那之后也就没怎…

【构造】CF Edu 12 D

Problem - D - Codeforces 题意: 思路: 这种题一定要从小数据入手,不然很有可能走歪思路 先考虑n 1的情况,直接输出即可 然后是n 2的情况,如果相加是质数,就输出2个,否则就输出一个 然后…

死锁是什么?死锁的字节码指令了解?

用幽默浅显的言语来说死锁 半生:我已经拿到了机考的第一名,就差笔试第一名了 小一:我已经拿到了笔试的第一名,就差机考第一名了 面试官:我很看好你俩,继续"干", 同时拿到2个的第一名才能拿到offe…

算法训练 第一周

一、合并两个有序数组 本题给出了两个整数数组nums1和nums2,这两个数组均是非递减排列,要求我们将这两个数组合并成一个非递减排列的数组。题目中还要求我们把合并完的数组存储在nums1中,并且为了存储两个数组中全部的数据,nums1中…

签到系统怎么设计

背景 相信签到系统大家都有接触过,更多的是使用。但是有思考过这种系统是怎么设计的吗?比方说我统计一下每个月中每天的签到情况,怎么设计呢?今天一篇文章告诉你。 首先,我们熟悉的思维是:我设计一个数据…

[SSM]MyBatisPlus进阶

三、进阶篇 3.1映射 3.1.1自动映射规则 表名和实体类名映射 -> 表名user 实体类名User字段名和实体类属性名映射 -> 字段名name 实体类属性名name字段名下划线命名方式和实体类属性驼峰命名方式映射 -> 字段名 user_email 实体类属性名 userEmail 开启驼峰命名 m…

设计模式之适配器与装饰器

目录 适配器模式 简介 角色 使用 优缺点 使用场景 装饰器模式 简介 优缺点 模式结构 使用 使用场景 适配器模式 简介 允许将不兼容的对象包装成一个适配器类,使得其他类可以通过适配器类与原始对象进行交互,从而提高兼容性 角色 目标角色…

vite+vue3+element-plus

vitevue3element-plus 1.开始 npm create vitelatest app -- --template vuenpm installlnpm run dev2.引入element-ui npm install element-plus修改main.js import ElementPlus from element-plus import element-plus/dist/index.css createApp(App).use(ElementPlus).m…

BlueStore BlueFS rocksdb 关联性梳理

Tag: ceph 12.2.4 BlueStore空间初始化 BlueStore磁盘空间管理 总述 OSD挂载目录基于文件系统管理,Slow、WAL、DB空间区域基于裸盘管理;Slow区域:此类空间主要用于存储对象数据,由BlueStore管理,其中分配于BlueFS空…

AI篇-chatgpt基本用法(文心一言也适用)

目录 (1)基本规则 (2)例子1-文章摘要 (3)例子2-代码生成 (4)文心一言链接 (1)基本规则 相比于搜索引擎,ChatGPT的优势在于其高效的想法关联和…

MyBatisPlus之DQL编程控制

🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 MyBatisPlus之DQL编程控制 一、 条件查询方式&…

Spring项目配置

1.创建项目 2.修改编码格式为UTF-8 3.检查或配置代码⾃动补全功能 4.检查或配置⾃动导包 5.检查或配置Maven,可以⽤国内仓库镜像 6.idea识别Maven项⽬:在Notifications视图中会提⽰Load Maven Project,点击即可。 7.开启热部署 a.确认 pom.x…

EasyPOI处理excel、CSV导入导出

1 简介 使用POI在导出导出excel、导出csv、word时代码有点过于繁琐,好消息是近两年在开发市场上流行一种简化POI开发的类库:easyPOI。从名称上就能发现就是为了简化开发。 能干什么? Excel的快速导入导出,Excel模板导出,Word模板导出,可以…

无涯教程-JavaScript - SECOND函数

描述 SECOND函数返回时间值的秒数。第二个数字以0(零)到59之间的整数形式给出。 语法 SECOND (serial_number)争论 Argument描述Required/OptionalSerial_number 您想找到包含秒数的时间。 时间可以输入为- 引号内的文本字符串(如" 6:45 PM") 十进制数(如0.7812…

LCD驱动电路IC简述

Panel 模块驱动图示 1.Panel内部驱动 2.驱动原理框图 2.1.1 TCON(Timing Controller):时序控制器。主要功能为数据的转换及时序控制信号生成。 2.2.2 Gate控制信号工作时序 OE1 (output enable):输出控制使能信号。OE2(Multi Level Gate)&…