TCP传输控制协议的三次握手和四次挥手:
三次握手
• 目的:是为了建立可靠的通信连接,确保客户端和服务器双方都准备好进行数据传输。
• 过程:
1. 第一次握手:客户端向服务器发送一个带有 SYN(同步序列号)标志的数据包,其中 seq=x,表示客户端请求建立连接,并随机生成一个初始序列号 x。此时客户端进入 SYN-SENT(同步已发送)状态。
2. 第二次握手:服务器收到客户端的 SYN 包后,会发送一个 SYN + ACK 包作为回应。SYN 标志表示服务器也同意建立连接,ACK 标志用于确认客户端的 SYN 请求,ack=x + 1 表示确认收到客户端的序列号,并期望下一个数据包的序列号为 x + 1,同时服务器自己也随机生成一个初始序列号 y,seq=y。此时服务器进入 SYN-RCVD(同步已接收)状态。
3. 第三次握手:客户端收到服务器的 SYN + ACK 包后,会向服务器发送一个 ACK 包,ack=y + 1 表示确认收到服务器的序列号,并期望下一个数据包的序列号为 y + 1,seq=x + 1(通常为 x + 1,但有些实现可能不同)。此时客户端进入 ESTABLISHED(连接已建立)状态,服务器收到客户端的 ACK 包后,也进入 ESTABLISHED 状态,至此,TCP连接建立成功,双方可以开始进行数据传输。
四次挥手
• 目的:是为了安全、可靠地关闭已经建立的TCP连接,确保双方的数据都已传输完毕且不会丢失。
• 过程:
1. 第一次挥手:客户端打算关闭连接时,向服务器发送一个带有 FIN(结束标志)的数据包,FIN=1,seq=x,表示客户端没有数据要发送给服务器了,此时客户端进入 FIN_WAIT_1(终止等待1)状态。
2. 第二次挥手:服务器收到客户端的 FIN 包后,会发送一个 ACK 包作为回应,ack=x + 1,seq=y,表示服务器已经收到客户端的关闭请求,但可能还有数据未发送完,此时服务器进入 CLOSE_WAIT(关闭等待)状态,客户端收到 ACK 包后进入 FIN_WAIT_2(终止等待2)状态。
3. 第三次挥手:当服务器也没有数据要发送给客户端时,服务器会向客户端发送一个 FIN 包,FIN=1,ack=x + 1,seq=y + 1,表示服务器也准备关闭连接,此时服务器进入 LAST_ACK(最后确认)状态。
4. 第四次挥手:客户端收到服务器的 FIN 包后,会发送一个 ACK 包作为回应,ack=y + 2,seq=x + 1,表示客户端确认服务器的关闭请求,此时客户端进入 TIME_WAIT(时间等待)状态,等待 2MSL(Maximum Segment Lifetime,最大报文段生存时间)后,客户端进入 CLOSED 状态,服务器收到客户端的 ACK 包后也立即进入 CLOSED 状态,至此,TCP连接完全关闭。
三次握手和四次挥手是TCP协议保证可靠连接和有序关闭的重要机制,通过这些步骤可以确保数据传输的准确性和完整性,避免数据丢失和错误连接的情况发生。

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2024-01-28 浅谈主数据管理项目建设思路
2023-01-28 工业,让元宇宙真正落到实处
2022-01-28 一图读懂 | RCEP生效啦!
2021-01-28 图解 | 原来这就是网络(转)