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.hqwc.cn/news/106013.html

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

相关文章

LabVIEW检测润滑油中的水分和铁颗粒

LabVIEW检测润滑油中的水分和铁颗粒 润滑油广泛应用于现代机械设备,由于工作环境日益恶劣,润滑油经常被水分乳化,加速对机械设备的腐蚀。此外,润滑油还受到机械零件摩擦中产生的Fe颗粒的污染,削弱了其机械润滑效果。润…

Java——》ThreadLocal

推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…

Android——数据存储(二)(二十二)

1. SQLite数据库存储 1.1 知识点 (1)了解SQLite数据库的基本作用; (2)掌握数据库操作辅助类:SQLiteDatabase的使用; (3)可以使用命令操作SQLite数据库; …

IIS短文件名泄露漏洞复现

IIS短文件名泄露漏洞复现 前言一、漏洞描述二、漏洞原理1.什么是短文件2.短文件特征 三、漏洞验证三、漏洞防御总结 前言 IIS短文件名泄露漏洞比较老了,而且只适合于windowsiisasp的网络结构,所有如下的复现步骤看下就行了,关键是要弄懂原理…

Ubuntu22.04 安装 MongoDB 7.0

稍微查了一些文章发现普遍比较过时。有的是使用旧版本的Ubuntu,或者安装的旧版本的MongoDB。英语可以的朋友可以移步Install MongoDB Community Edition on Ubuntu — MongoDB Manual,按照官方安装文档操作。伸手党或者英语略差的朋友可以按照本文一步步…

模电课程设计

主要内容跟本科实验关系很大,可以用来借鉴。 包含文件有:实验报告、Multisim仿真文件,资料很全,有问题可以私信 目录 1、模电课设:用Multisim简单了解二极管 2、模电课设:用Multisim简析三极管与场效应…

Python流星雨

系列文章 序号文章目录直达链接1浪漫520表白代码https://want595.blog.csdn.net/article/details/1306668812满屏表白代码https://want595.blog.csdn.net/article/details/1297945183跳动的爱心https://want595.blog.csdn.net/article/details/1295031234漂浮爱心https://want…

“JSR303和拦截器在Java Web开发中的应用与实践“

目录 引言JSR303什么是JSR303?为什么要使用JSR303?常用注解快速入门JSR303 拦截器什么是拦截器拦截器与过滤器应用场景快速入门拦截器 总结 引言 在Java Web开发过程中,我们经常会遇到需要对输入数据进行验证和处理,同时需要对请求进行拦截与控制的需…

医院安全不良事件报告系统源码 PHP+ vue2+element+ laravel8+ mysql5.7+ vscode开发

不良事件上报系统通过 “事前的人员知识培训管理和制度落地促进”、“事中的事件上报和跟进处理”、 以及 “事后的原因分析和工作持续优化”,结合预存上百套已正在使用的模板,帮助医院从对护理事件、药品事件、医疗器械事件、医院感染事件、输血事件、意…

电池的健康状态 SOH 估计

电池的健康状态 SOH 估计 SOH(State of Health)估计通常用于描述电池的健康状态,即电池当前容量与初始容量的比值。 一种常见的SOH估计方法是基于经验的电池寿命预测方法,包括循环周期数法、安时法与加权安时法、面向事件的老化…

二、创建个人首页页面

简介 改造 App.vue 创建一个展示页面,实现一个可以轮播的功能效果。欢迎访问个人的简历网站预览效果 本章涉及修改与新增的文件:style.css、App.vue、assets 一、 自定义全局样式 将 style.css 中的文件样式内容替换为如下代码 /* 初始化样式 --------------------------…

SpotBugs(是FindBugs的继任者)安装、使用

SpotBugs介绍 SpotBugs和FindBugs的关系 SpotBugs是FindBugs的继任者,从SpotBugs停止的地方继续。 备注:FindBugs项目已经停止了,从2015年发布3.0.1版本以后再没有新的版本。 SpotBugs通过静态分析寻找java代码中的bug,通过发现…