一、TCP 协议基础:为什么需要 “握手” 与 “挥手”?
在正式讲解 TCP 连接管理流程前,我们需要先深入理解 TCP 协议的两个核心特性 —— 面向连接(Connection-oriented)和可靠性(Reliability),这也是 "三次握手" 与 "四次挥手" 机制存在的根本原因:
-
面向连接特性详解:
- 建立连接:TCP 在通信前必须通过三次握手建立逻辑连接,确保通信双方都准备好进行数据传输。这类似于打电话时的拨号接通过程。
- 关闭连接:通信结束后需要通过四次挥手正常关闭连接,释放系统资源(如端口号、缓冲区等)。如果不规范关闭可能导致"僵尸连接"占用资源。
- 连接状态管理:TCP 维护精确的连接状态机(LISTEN、SYN-SENT、ESTABLISHED等),确保连接生命周期的规范管理。
-
可靠性保障机制:
- 确认机制(ACK):接收方对每个收到的数据包发送确认应答
- 序列号机制(Sequence Number):为每个字节编号,解决数据包乱序问题
- 超时重传:未收到ACK时会重传数据包
- 流量控制:通过滑动窗口机制匹配收发双方的速率
- 拥塞控制:通过慢启动、拥塞避免等算法防止网络过载
三次握手的核心作用:
- 同步双方的初始序列号(ISN),ISN是基于时钟的动态随机值,防止历史连接干扰
- 交换TCP参数(如MSS最大报文段大小、窗口缩放因子等)
- 确认双方的收发能力正常
- 为后续可靠传输建立基础,序列号将用于确认和重传机制
四次挥手的必要性:
- 全双工特性决定需要分别关闭两个方向的数据流
- FIN报文需要得到确认,确保数据完整传输
- TIME_WAIT状态等待2MSL(最大报文生存时间),防止最后ACK丢失
- 彻底释放连接资源,避免出现半关闭状态(Half-close)
示例场景: 当客户端访问web服务器时:
- 三次握手:客户端发送SYN→服务器回复SYN+ACK→客户端回复ACK
- 数据传输:客户端发送HTTP请求,服务器返回网页数据
- 四次挥手:任一方先发送FIN→收到ACK→另一方向发送FIN→最终ACK确认
二、三次握手:TCP 连接的建立过程
1. 三次握手概述
三次握手是 TCP/IP 协议中客户端与服务器之间通过交换 3 个 TCP 报文段来完成连接建立的关键过程。我们以 "客户端发起 HTTP 请求" 这一常见场景为例,详细拆解每一步的操作细节和底层原理。
2. 核心概念铺垫
TCP 报文关键字段
| 字段 | 含义 | 详细说明 |
|---|---|---|
| SYN | 同步标志位 | 用于发起连接请求,当取值为 1 时表示"请求同步序列号"。在三次握手中,第一个SYN报文由客户端发出,第二个SYN报文由服务器返回 |
| ACK | 确认标志位 | 用于确认收到对方的报文,取值为 1 时表示"确认有效"。在三次握手中,第二个和第三个报文都带有ACK标志 |
| Seq | 序列号 | 32位无符号数,用于标识当前发送的报文段中第一个数据字节的编号。每个方向(客户端到服务器或服务器到客户端)都有独立的序列号空间 |
| Ack | 确认号 | 32位无符号数,表示期望收到对方下一个报文段的序列号,即"已收到的最大序列号 + 1"。确认号用于确保数据按序到达 |
3. 三次握手具体流程
假设场景:客户端(IP:192.168.1.100,端口:54321)向服务器(IP:10.0.0.1,端口:80)发起 TCP 连接,建立后用于传输 HTTP 请求。
第一步:客户端发送 "连接请求"(SYN 报文)
- 发送方:客户端
- 报文类型:SYN 报文(设置SYN=1,ACK=0)
- 关键字段:
- Seq = x(x 为客户端随机生成的初始序列号,例如 1000,用于标识客户端后续发送数据的起始编号)</

最低0.47元/天 解锁文章
2392

被折叠的 条评论
为什么被折叠?



