“深入浅出”系列之数通篇:(5)TCP的三次握手和四次挥手

server/2025/1/23 13:34:23/

TCP(传输控制协议)的三次握手和四次挥手是TCP连接建立和释放的过程。

一、TCP三次握手

TCP三次握手是为了建立可靠的连接,确保客户端和服务器之间的通信能力。具体过程如下:

第一次握手:客户端向服务器发送一个带有SYN(Synchronize Sequence Numbers,同步序列编号)标志的数据包,表示需要建立TCP连接。此时,客户端进入SYN_SENT状态,等待服务器的确认。

第二次握手:服务器收到客户端的SYN数据包后,会回复一个带有SYN/ACK标志的数据包,表示同意建立连接并确认收到了客户端的请求。此时,服务器进入SYN_RECEIVED状态。SYN/ACK数据包中的ACK字段数值是在客户端发送过来的序列号的基础上加1进行回复的,以便客户端收到信息时,知晓自己的TCP建立请求已得到验证。

第三次握手:客户端收到服务器的SYN/ACK数据包后,会再次回复一个带有ACK标志的数据包,表示确认收到了服务器的回复,并准备好进行数据传输。此时,客户端和服务器都进入ESTABLISHED状态,表示TCP连接已经成功建立。

在三次握手过程中,服务器会维护一个未连接队列,为每个客户端的SYN数据包开设一个条目,并等待客户端的确认。如果服务器在发送SYN/ACK数据包后未收到客户端的确认,会进行重传,直到达到最大重传次数为止。

二、TCP四次挥手

TCP四次挥手是为了释放已经建立的连接。由于TCP是全双工通信,因此每个方向都必须单独进行关闭。具体过程如下:

第一次挥手:客户端想要释放连接时,会向服务器发送一个带有FIN(Finish,结束)标志的数据包,表示需要关闭客户端到服务器的数据传送。此时,客户端进入FIN_WAIT_1状态。

第二次挥手:服务器收到客户端的FIN数据包后,会回复一个带有ACK标志的数据包,表示确认收到了客户端的释放连接请求。此时,服务器进入CLOSE_WAIT状态,并准备关闭服务器到客户端的数据传送。客户端收到服务器的ACK数据包后,进入FIN_WAIT_2状态。

第三次挥手:服务器在确认所有传输到客户端的数据已经发送完毕后,会向客户端发送一个带有FIN标志的数据包,表示准备关闭服务器到客户端的数据传送。此时,服务器进入LAST_ACK状态。

第四次挥手:客户端收到服务器的FIN数据包后,会回复一个带有ACK标志的数据包,表示确认收到了服务器的释放连接请求。此时,客户端进入TIME_WAIT状态,并等待足够的时间(通常为2MSL,即Maximum Segment Lifetime的两倍)以确保服务器接收到确认报文。在TIME_WAIT期间,客户端不会立即释放连接资源,以防止由于网络延迟等原因导致的重复报文。如果在这段时间内没有收到服务器的任何报文,客户端会进入CLOSED状态,表示连接已经完全释放。服务器在收到客户端的ACK数据包后,也会进入CLOSED状态。


http://www.ppmy.cn/server/160748.html

相关文章

AF3 ConditionedTransitionBlock类源码解读

ConditionedTransitionBlock类的核心功能是对输入特征进行非线性变换,并通过条件输入(s)自适应地调整特征的表示。 主要模块包括: 自适应层归一化(ada_ln):用于动态调整特征分布。两组线性变换(hidden_gating_linear 和 hidden_linear):用于构造特征空间中的非线性变…

Spark SQL中的from_json函数详解

Spark SQL中的from_json函数详解 在Spark SQL中,from_json是一个用于解析JSON数据的函数,主要用于将JSON格式的字符串解析为结构化的数据(即StructType或其他Spark SQL数据类型)。这个函数在处理半结构化数据(如JSON日…

前端Vue2项目使用md编辑器

项目中有一个需求,要在前端给用户展示内容,内容有 AI 生成的,返回来的是 md 格式,所以需要给用户展示 md 格式,并且管理端也可以编辑这个 md 格式的文档。 使用组件库 v-md-editor。 https://code-farmer-i.github.i…

开源轻量级文件分享服务Go File本地Docker部署与远程访问

???欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老…

Comment(爆破+git泄漏+二次注入)

通过爆破密码的后三位,获得账号为:zhangwei666 F12查看控制台 使用bugscanteam的githack工具,下载泄漏的源码,根据控制台的提示,完整源码还在历史的commit中 git log –reflog 查看历史记录 查看最新的提交记录&#…

内容中台实施最佳实践解析与应用指南

内容概要 内容中台是一个旨在提升企业内容管理与分发能力的战略性平台,其实施最佳实践对于企业在数字化转型中尤为重要。内容中台的建设,不仅涉及技术层面的架构设计,还需结合组织变革、业务流程优化等多个方面,以实现高效、灵活…

如何学习网络安全?有哪些小窍门?

学好网络安全其实没有所谓的捷径,也没有什么小窍门。 入门网络安全首先要有浓厚的学习兴趣,不然很容易就变成了从入门到放弃了。 其次要能静下心,踏踏实实的打好基础。如果你是零基础,建议从Web安全入手,课程难度相对…

simulink入门学习01

文章目录 1.基本学习方法2.图形环境--模块和参数3.激活菜单---添加到模型3.1输入选项3.2添加到模型3.3更改运算3.4验证要求 4.乘以特定值--Gain模块4.1引入gain模块4.2更改增益参数4.3接入系统4.4大胆尝试 1.基本学习方法 今天突然想要学习这个simulink的相关知识,…