网络协议基础:TCP 三次握手 / 四次挥手1. 前言在互联网的世界里,数据能够有序、可靠地在不同设备之间传输,背后离不开各种网络协议的支撑。其中,传输控制协议(TCP)作为 TCP/IP 协议族中至关重要的一员,凭借其可靠、面向连接、字节流的特性,成为了 HTTP、FTP、SMTP 等众多应用层协议的基础。而 TCP 实现 “可靠连接” 与 “优雅断开” 的核心机制,正是广为人知的 “三次握手” 与 “四次挥手”。本文将从 TCP 的核心特性出发,详细拆解这两个关键过程,帮助读者理解网络通信背后的底层逻辑。
TCP 的核心特性:为何需要 “握手” 与 “挥手”?
在深入讲解 “三次握手” 和 “四次挥手” 之前,我们首先需要明确 TCP 的核心设计目标 ——可靠性。与 UDP(用户数据报协议)的 “无连接、不可靠” 不同,TCP 需要确保数据从发送方到接收方的过程中 “不丢失、不重复、按序到达”。为了实现这一目标,TCP 引入了 “面向连接” 的机制:在数据传输前,通信双方必须先建立一个稳定的 “连接”;数据传输完成后,再通过规范的流程断开连接,避免资源浪费或数据残留。
而 “三次握手” 就是 TCP 建立连接的过程,其核心目的是同步通信双方的序列号(Sequence Number) ,并确认双方的发送和接收能力正常;“四次挥手” 则是 TCP 断开连接的过程,主要用于确保双方都已完成数据传输,避免因一方提前断开导致数据丢失。
2. TCP 连接的生命周期一个 TCP 连接的生命周期大致分为:
建立连接(三次握手)数据传输断开连接(四次挥手)3. 三次握手(Three-way Handshake)3.1 目的确认双方的发送与接收能力正常同步双方的初始序列号(ISN)建立可靠的全双工通信通道3.2 握手过程步骤
发起方(客户端)
接收方(服务器)
说明
第一次握手
发送 SYN=1, seq=x
等待连接请求
客户端请求建立连接,并发送初始序列号 x
第二次握手
等待确认
发送 SYN=1, ACK=1, seq=y, ack=x+1
服务器同意连接,并发送自己的初始序列号 y,同时确认收到 x
第三次握手
发送 ACK=1, seq=x+1, ack=y+1
连接建立
客户端确认收到 y,连接正式建立
3.3 时序图代码语言:javascript代码运行次数:0运行复制客户端 服务器
| ----------- SYN, seq=x ---------> |
| <--- SYN, ACK, seq=y, ack=x+1 --- |
| ----------- ACK, ack=y+1 --------> |4. 四次挥手(Four-way Handshake)4.1 目的双方都能独立关闭发送通道确保数据传输完成后再释放连接4.2 挥手过程步骤
主动关闭方
被动关闭方
说明
第一次挥手
发送 FIN=1, seq=u
等待关闭请求
主动方表示数据发送完毕,请求关闭发送通道
第二次挥手
等待对方数据
发送 ACK=1, ack=u+1
被动方确认收到关闭请求,但可能还有数据要发
第三次挥手
等待确认
发送 FIN=1, seq=v
被动方数据发送完毕,请求关闭发送通道
第四次挥手
发送 ACK=1, ack=v+1
连接关闭
主动方确认收到关闭请求,进入 TIME_WAIT 状态
4.3 时序图代码语言:javascript代码运行次数:0运行复制主动关闭方 被动关闭方
| ----------- FIN, seq=u --------> |
| <----------- ACK, ack=u+1 ------- |
| <----------- FIN, seq=v --------- |
| ----------- ACK, ack=v+1 --------> |img5. 为什么握手是三次,挥手是四次?三次握手: 因为双方需要交换一次 SYN 并确认对方的 SYN,总共需要三步。四次挥手: TCP 是全双工的,关闭发送和接收通道是独立的,所以需要两对 FIN/ACK。6. 常见问题与排查技巧6.1 SYN Flood 攻击攻击者发送大量 SYN 包但不完成握手,导致服务器资源耗尽。防御措施:SYN Cookies、限制半连接队列、启用防火墙规则。6.2 TIME_WAIT 过多主动关闭方会进入 TIME_WAIT 状态(默认 2MSL 时间)。影响:占用端口资源。优化:调整内核参数(如 tcp_tw_reuse、tcp_tw_recycle),但需谨慎。7. 总结三次握手:建立连接,确保双方通信能力正常。四次挥手:优雅关闭,确保数据完整传输。掌握 TCP 连接过程,有助于网络调试、安全防护与性能优化。💡 实战建议: 在抓包工具(如 Wireshark、tcpdump)中观察 TCP 握手/挥手过程,是理解协议的最佳方式。 你可以在测试环境运行:
代码语言:javascript代码运行次数:0运行复制tcpdump -i eth0 tcp and port 80然后用浏览器访问 HTTP 服务,直观看到三次握手与四次挥手的全过程。
TCP 的三次握手与四次挥手,是网络通信中 “可靠连接” 与 “优雅断开” 的核心保障。三次握手通过同步序列号和确认收发能力,确保连接建立的可靠性;四次挥手通过分阶段关闭双向通道,避免数据丢失;而TIME-WAIT状态则进一步保障了连接断开后的网络稳定性。
理解这两个过程,不仅能帮助我们更深入地掌握 TCP 协议的设计思想,还能为后续学习 HTTP、HTTPS 等应用层协议,以及排查网络问题奠定坚实的基础。在互联网技术飞速发展的今天,这些底层协议的逻辑始终是构建可靠网络服务的基石。
Copyright © 2022 北智游戏学院 - 活动攻略与新手教学 All Rights Reserved.