news 2026/5/31 0:18:23

TCP连接管理——三次握手和四次挥手

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TCP连接管理——三次握手和四次挥手

TCP连接管理:三次握手与四次挥手详解

TCP(Transmission Control Protocol)是一种面向连接可靠的传输层协议。在数据传输前必须建立连接,传输结束后必须释放连接。这个过程分别由三次握手(Three-Way Handshake)和四次挥手(Four-Way Handshake)完成。

1. TCP报文段首部关键字段

理解握手和挥手前,先记住以下6个关键控制位(flags):

字段含义作用场景
SYN同步序列号(Synchronize)发起连接请求
ACK确认(Acknowledgment)确认收到对方报文
FIN结束(Finish)请求释放连接
RST复位(Reset)异常中断连接
PSH推送(Push)尽快交付应用层
URG紧急(Urgent)紧急数据

另外两个重要字段:

  • seq(Sequence Number):本方发送数据的起始序号
  • ack(Acknowledgment Number):期待收到的对方下一个字节的序号(即已确认收到 ack-1 之前的字节)
2. 三次握手(建立连接)

目的:双方确认彼此的发送能力和接收能力正常,并协商初始序号(ISN)。

过程图示:

客户端 服务端 | SYN (seq=x) | |------------------------------>| | SYN+ACK (seq=y, ack=x+1) | |<------------------------------| | ACK (seq=x+1, ack=y+1) | |------------------------------>|

详细步骤:

  1. 第一次握手(SYN)
    客户端发送 SYN 报文:

    • SYN=1
    • seq = x(客户端随机初始序号)
    • ACK=0(此时还没确认)
      客户端进入SYN_SENT状态。
      → 告诉服务端:“我想和你建立连接,我的初始序号是 x”
  2. 第二次握手(SYN+ACK)
    服务端收到 SYN 后回复:

    • SYN=1, ACK=1
    • seq = y(服务端随机初始序号)
    • ack = x+1(确认收到客户端的 SYN,期待下一个序号为 x+1)
      服务端进入SYN_RCVD状态。
      → 告诉客户端:“我同意建立连接,我的初始序号是 y,我已收到你的 SYN”
  3. 第三次握手(ACK)
    客户端收到 SYN+ACK 后发送最终确认:

    • SYN=0, ACK=1
    • seq = x+1
    • ack = y+1
      双方都进入ESTABLISHED状态,可以开始传输数据。

为什么是三次而不是两次?
两次握手只能确认客户端→服务端的单向通信能力,无法确认服务端→客户端的通道是否正常(旧的重复 SYN 可能导致服务端误以为是新连接)。三次握手确保双方都能正常收发。

3. 四次挥手(释放连接)

目的:确保双方都有机会优雅地关闭连接,数据都能可靠送达(半关闭特性:支持单方向先关闭)。

过程图示(假设客户端主动关闭):

客户端 服务端 | FIN (seq=a) | |------------------------------>| | ACK (ack=a+1) | |<------------------------------| | | (服务端可能还有数据要发) | (可能收到数据) | |<------------------------------| | FIN (seq=b) | |<------------------------------| | ACK (ack=b+1) | |------------------------------>|

详细步骤:

  1. 第一次挥手(客户端发送 FIN)
    客户端数据发送完毕,发送 FIN 报文:

    • FIN=1, seq=a
      客户端进入FIN_WAIT_1状态。
      → “我发完了,你还有数据要发吗?”
  2. 第二次挥手(服务端回复 ACK)
    服务端收到 FIN,立刻回复确认:

    • ACK=1, ack=a+1
      服务端进入CLOSE_WAIT状态。
      客户端收到后进入FIN_WAIT_2状态。
      → “我收到你发完的通知了,但我要处理完剩余数据”

    注意:此时连接处于半关闭状态,客户端不再发送数据,但仍能接收服务端数据。

  3. 第三次挥手(服务端发送 FIN)
    服务端处理完所有数据后,发送自己的 FIN:

    • FIN=1, seq=b
      服务端进入LAST_ACK状态。
      → “我也发完了,可以关闭了”
  4. 第四次挥手(客户端回复 ACK)
    客户端收到服务端 FIN 后回复最终确认:

    • ACK=1, ack=b+1
      客户端进入TIME_WAIT状态,等待 2MSL(最大报文生存时间,通常 1-4 分钟)后才完全关闭。
      服务端收到 ACK 后立即进入CLOSED状态。

为什么客户端要 TIME_WAIT 等待 2MSL?

  • 确保最后的 ACK 能到达服务端(如果丢失,服务端会重发 FIN,客户端可重新确认)
  • 防止旧连接的延迟报文干扰新连接(同一四元组的旧报文在网络中存活不超过 MSL)

为什么是四次而不是三次?
因为 TCP 是全双工的,关闭需要分别关闭两个方向。服务端收到客户端 FIN 后可能还有数据要发,不能立即关闭,必须等自己也准备好再发 FIN。

4. 常见状态变迁总结(客户端主动关闭)
客户端状态服务端状态
CLOSEDCLOSED
SYN_SENTLISTEN
ESTABLISHEDSYN_RCVD
FIN_WAIT_1ESTABLISHED
FIN_WAIT_2CLOSE_WAIT
TIME_WAITLAST_ACK
CLOSEDCLOSED
5. 常见面试延伸问题
  • 为什么初始序号 ISN 要随机?→ 防止历史旧连接的报文被误认为是新连接的数据。
  • 如果第三次握手丢失会怎样?→ 服务端超时重发 SYN+ACK,客户端重新发送第三次 ACK。
  • 大量 TIME_WAIT 如何处理?→ 调小 time_wait 时间、开启 tcp_tw_reuse/recycle(慎用)。
  • SYN Flood 攻击?→ 攻击者发送大量 SYN 不完成第三次握手,耗尽服务端半连接队列。防御:syn cookies、增加 backlog 等。

希望这个详解清晰易懂!如果需要结合 Wireshark 抓包示例、状态机图或其他深入点(如同时打开、同时关闭),随时告诉我。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 14:43:28

PyTorch-CUDA-v2.7镜像训练StyleGAN3效果评测

PyTorch-CUDA-v2.7镜像训练StyleGAN3效果评测 在当今高分辨率图像生成任务日益普及的背景下&#xff0c;研究人员和工程师面临一个共同挑战&#xff1a;如何快速搭建稳定、高效且可复现的深度学习训练环境&#xff1f;尤其是像 StyleGAN3 这类对算力、内存和软件版本极为敏感的…

作者头像 李华
网站建设 2026/5/29 0:38:13

Jupyter Notebook转Python脚本:自动化批量执行任务

Jupyter Notebook转Python脚本&#xff1a;自动化批量执行任务 在深度学习项目的日常开发中&#xff0c;我们常常面临这样一个现实&#xff1a;实验阶段用 Jupyter Notebook 写得飞起&#xff0c;图表随手画、结果即时看&#xff0c;调试效率极高&#xff1b;可一旦要上线——比…

作者头像 李华
网站建设 2026/5/29 1:06:44

PyTorch-CUDA-v2.7镜像在智能制造中的落地实践

PyTorch-CUDA-v2.7镜像在智能制造中的落地实践 在现代智能工厂的产线上&#xff0c;每分钟都有成千上万张工业图像被采集用于质量检测。面对如此庞大的数据吞吐量&#xff0c;传统基于规则的视觉系统早已力不从心&#xff0c;而深度学习模型虽然具备强大的识别能力&#xff0c;…

作者头像 李华
网站建设 2026/5/29 2:03:12

计算机Java毕设实战-基于SpringBoot+Vue的宠物生活馆网站的设计与实现在线预约、宠物档案【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/5/29 0:47:11

Hadoop生态中的数据可视化最佳实践

Hadoop生态中的数据可视化最佳实践&#xff1a;从数据仓库到洞察之眼关键词&#xff1a;Hadoop生态、数据可视化、大数据分析、可视化工具、数据洞察摘要&#xff1a;在Hadoop构建的“数据仓库帝国”中&#xff0c;海量数据如同沉睡的宝藏。数据可视化则是打开宝藏的“魔法钥匙…

作者头像 李华
网站建设 2026/5/30 15:25:41

AI应用架构师必看:构建企业AI创新生态圈的7大核心策略与落地路径

AI应用架构师必看&#xff1a;构建企业AI创新生态圈的7大核心策略与落地路径 一、引言 (Introduction) 钩子 (The Hook) “我们花了1000万做的AI客服系统&#xff0c;上线3个月后用户满意度反而下降了20%——因为它根本听不懂客户的方言。” 这是我去年在某传统企业调研时听到的…

作者头像 李华