【新星计划-2023】TCP三次握手和四次挥手讲解

news2025/2/27 23:03:05

关于TCP三次握手和四次挥手,各位想必在读大学的时候或者是在面试的时候一定遇到过,三次握手和四次挥手本身是不是太难的,但它容易忘😞,今天我就在这里给大家讲解一下三次握手与四次挥手。

一、三次挥手

cc0fb99730be4b419e51fb2e358790db.jpg

TCP三次握手建立连接,是TCP数据传输的必要过程。流程大致分为以下几步:

1、刚开始,客户端服务器都处于CLOSED状态。

2、服务端创建传输控制块(TCB),时刻准备客户进程的连接请求,处于LISTEN监听状态。

3、第一次握手

客户端将TCP报文的标志位SYN置为1,随机产生一个序号值SEG=x保存在TCP首部序列号字段里,然后指明客户端打算连接的服务器端口,并将数据包发送给服务器端。发送完毕后,客户端进入SYN-SEND状态。

4、第二次握手

服务端收到数据包后,由标志位SYN=1确认了客户端要请求建立连接。于是,服务端将TCP报文的标志位SYN和确认应答号ACK都置为1请求号ACK=x+1(表示序列号为x的消息已经接收了,下一次传输的序列号为X+1),再随机产生一个序号值SEA=y,然后将该数据包发送给客户端以确认连接请求。这时,服务端进入SYN-RCVD状态。

5、第三次握手

客户端收到服务端的确认后,检查ACK是否为x+1,ACK是否为1,如果正确则将确认应答ACK置为1,请求号ack=y+1(表示序列号为v的消息已经接收了,下一次传输的序列号为V+1),并将数据包发送给服务器。服务器端检查ACK是否为y+1ACK是否为1,如果正确则成功建立连接。客服端和服务器都进入ESTABLISHED状态,三次握手结束,客户端和服务器可以开始传输数据了。

在上述过程中,还有一些重要的概念:

①半连接

收到SYN包,但还未收到ACK包时的连接状态称为半连接,即尚未完全完成三次握手的TCP连接,处于第一次握手之后,第三次握手之前。

②半连接队列

在三次握手协议中,服务器维护一个半连接队列,该队列为每个客户端的SYN包开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认后。这些条目所标识的连接在服务器处于SYN-RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。

通俗又简单的来说就是:

Client(客户端):嘿,李四,是我,听到了吗?

Server(服务器端):我听到了,你能听到我的吗?

Client(客户端):好的,我们互相都能听到对方的话,我们的通信可以开始了。

二、四次挥手

当数据传输完成后,为了节省服务器的资源和网络开销,需要进行断连

简单理解为:电话打完了,需要我们手动进行挂电话的操作。

6013fb7d2c4d4969a5a1a92d868563f8.jpg

当客户端和服务器端都是连接状态时:

1、第一次挥手

客户端不想再进行数据传输了,就发起一条挥手请求,将TCP报文的标志位FIN=1设置序列号SEQ为随机数x。此时,客户端进入FIN-WAIT-1状态;

2、第二次挥手

服务器端收到客户端的FIN数据报,知道客户端不再发送数据了。于是返回一条ACK确认消息,表示同意客户端的关闭请求,然后服务器端进入CLOSE-WAIT状态。当客户端收到服务器端的确认消息后,进入FIN-WAIT-2状态,等待服务器端的连接结束;

3、第三次挥手

服务器端发送数据完毕后,给客户端发送标志位为FIN的报文段,请求关闭连接,并进入LAST-ACK状态;

4、第四次挥手

当客户端收到FIN报文段之后,再向服务器端回复标志位为ACK的应答消息,然后进入TIME-WAIT状态,当等待2MSL(报文的最大存活时间,后面会详细讲解)后还没收到回复,证明服务器端已经正常关闭,于是客户端进入CLOSED状态。而服务器端在收到客服端的ACK报文段以后,就关闭连接,直接进入CLOSED状态。

通俗又简单的来说就是:

Client(客户端):我所有东西都说完了。

Server(服务器端):我已经全部听到了,但是等等我,我还没说完。

Server(服务器端):好了,我已经说完了。

Client(客户端):好的,那我们的通信结束。

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我,大厂P9,找不到工作

作者| 老W 编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) K哥写在前面的话:这是一位读者投稿,读者老W讲述了自己从大厂P9失业后、再就业的故事,并总结了自己的心路历程,很真实的记录与思考,值得大家借…

SensorX2car:在道路场景下的完成传感器到车体坐标系标定

文章:SensorX2car: Sensors-to-car calibration for autonomous driving in road scenarios 作者:Guohang Yan, Zhaotong Luo, Zhuochun Liu and Yikang Li 编辑:点云PCL 代码:https://github.com/OpenCalib/SensorX2car 作者单位…

IDEA+maven+Springboot工程创建超详细过程示例

IDEAmavenSpringboot工程创建超详细过程示例 1、IDEA、Maven下载安装及IDEA配置Maven教程2、IDEAmavenSpringboot的web工程创建示例2.1 SpringBoot简介2.2 maven形式创建sprintboot工程2.3 导入相关依赖2.4 创建SpringBoot启动类2.5 创建 Controller2.6 启动项目2.7 配置端口信…

springboot第22集:security,Lombok,token,redis

Spring Security是一个基于Spring框架的权限管理框架,用于帮助应用程序实现身份验证和授权功能。它可以为Web应用程序、REST API和方法级安全性提供支持,并支持各种认证方式。 Spring Security最初是Acegi Security的前身,但由于其配置繁琐而…

【第六期】Apache DolphinScheduler 每周 FAQ 集锦

点击蓝字 关注我们 摘要 为了让 Apache DolphinScheduler 的广大用户和爱好者对于此项目的疑问得到及时快速的解答,社区特发起此次【每周 FAQ】栏目,希望可以解决大家的实际问题。 关于本栏目的要点: 本栏目每周将通过腾讯文档(每…

用排列组合来编码通信(六)——魔术《5张牌的预言》的魔术拓展之《My Fitch Four Glory》...

早点关注我,精彩不错过! 在上一篇中,我们介绍了《5张牌的预言》这个魔术的一个精彩的扩展表演《Eigens Value》,把这个魔术和数学性质的结合做到了极致,相关内容请戳: 用排列组合来编码通信(五&…

第二十二章 Unity 光照贴图

光照贴图过程将预先计算场景中静态物体表面的亮度,并将结果存储在称为“光照贴图”的纹理中供以后使用。光照贴图可以包含直接光照和间接光照,以及阴影效果。但是,烘焙到光照贴图中的数据无法在运行时更改,这就是为什么移动静态物…

Angular开发之——Angular介绍(01)

一 概述 Angular是什么AngularJS和Angular关系Angular特性Angular的发展历史Angular学习建议 二 Angular是什么 Angular(读音[ˈŋɡjələr])是一套用于构建用户界面的javaScript框架。由Google开发和维护,主要被用来开发单页面应用程序类似于Vue.js(MVVM数据驱动…

视觉检测技术在图书生产缺陷控制中的应用

在过去我们一直向大家展示的是视觉检测应用在重工业制造之上,让很多人误以为这种新兴的检测技术更加倾向于重工业,或者说因为成本因素,这项技术对目前的轻工业来说更加的不友好,其实并不是这样的。 轻工业我们之所以很少的提机器…

docker入门和docker应用场景,镜像制作,服务编排,docker私服

一、简介 docker解决了什么问题docker和虚拟机的区别在CentOS7里安装docker 1. docker简介 我们写的代码会接触到好几个环境:开发环境、测试环境以及生产环境等等。多种环境去部署同一份代码,由于环境原因往往会出现软件跨环境迁移的问题(也就…

黏包和半包

黏包和半包 黏包: Slf4j public class HelloWorldServer {public static void main(String[] args) {NioEventLoopGroup boss new NioEventLoopGroup();NioEventLoopGroup worker new NioEventLoopGroup();try {ServerBootstrap serverBootstrap new ServerBoo…

open3d教程(二):可视化三维模型,并转换成点云(Python版本)

1、三维模型获取 可以自己用建模软件建立一个模型从free3d免费下载 2、关键函数 open3d.visualization.draw_geometries 参数: geometry_list(List[open3d.geometry.Geometry]):要可视化的几何体列表.window_name(str, optional, defaultOpen3D)&…

Linux环境下编程遇到“fatal error:stdio.h:没有那个文件或目录”错误解决办法

我是荔园微风,作为一名在IT界整整25年的老兵,今天总结一下linux环境下如何解决一个常见的问题,也就是“fatal error:stdio.h:没有那个文件或目录”错误。 不少初学者在linux环境下用gcc编译C语言时,经常会遇到这个问题。 比如当…

工具推荐二

(点击上方公众号,可快速关注) GUI框架 我是个后端程序员,使用GUI框架的机会很少,主要用来编写个人或工作中的一些小工具上,经验有限,仅供参考。 Tk框架这个框架tcl语言自带,在python…

海报图片生成服务在狐友的落地实践

本文字数:22817字 预计阅读时间:58分钟 项目背景 狐友作为搜狐的一款社交产品,在流量传播上有着旺盛的需求点。而在流量传播所需的众多载体之中,海报图片以其简单的分享形式、可定制的视觉体验、自带二维码识别导流等特点&#xf…

入门与 Follow GPT 的路径分析:LLM 道阻且长,行则将至

动手点关注 干货不迷路 本文只用于技术交流,仅代表作者个人观点。 作为 CEO,Sam 将 OpenAI 的内部氛围组织的很好,有位 OpenAI 的前员工告诉拾象团队,当 2018 年 GPT-2 的论文被驳回时,Sam 在团队周会上将拒信的内容朗…

ONES X 高测股份|用数字化,重构新材料企业的研发管理体系

近日,ONES 签约高硬材料切割的领军企业——高测股份,助力高测股份建立有效、规范的研发测试管理体系,实现项目管理、测试管理、知识库管理、工时管理、组织效能管理等端到端的研发管理,提升测试效率和产品交付质量,并进…

用Python+OpenCV+Yolov5+PyTorch开发的车牌识别软件(包含训练数据)

目录 演示视频 软件使用说明 软件设计思路 演示视频 这是一个可以实时识别车牌的软件,支持图片和视频识别,以下是软件的演示视频。 车牌识别软件 点击查看代码购买地址 软件使用说明 1. 下载源码后,首先安装依赖库。项目所用到的依赖库已…

bash shell 基础命令

章节目录: 一、浏览文件系统1.1 Linux 文件系统1.2 遍历目录 二、列出文件和目录三、处理文件3.1 创建文件3.2 复制文件3.3 命令行补全3.4 链接文件3.5 文件重命名3.6 删除文件 四、管理目录4.1 创建目录4.2 删除目录 五、查看文件内容5.1 查看文件类型5.2 查看整个…

【Linux】Linux编辑神器vim的使用

目录 一、Vim的基本概念 二、Vim的基本操作 1、进入vim 2、正常模式切换至插入模式 3、插入模式切换至正常模式 4、正常模式切换至底行模式 5、退出Vim编辑器 三、Vim正常模式命令集 1、移动光标 2、删除文字 3、复制 4、替换 5、撤销 四、Vim底行模式命令集 1、列出行号 2、光…