TCP 通信生命周期

这是一个完整的 TCP 三次握手建立连接、HTTP 通信、四次挥手断开连接 的流程,以下分阶段解释:
一、TCP 三次握手(建立连接)
第一次握手(2761→8120 [SYN])
客户端(2761 端口)向服务端(8120 端口)发送 SYN 包,发起连接请求。
:初始序列号(用于后续数据排序)。
Seq=0
:客户端声明的接收窗口大小(流量控制)。
Win=29200
:最大报文段长度(单次发送的最大数据量)。
MSS=1460
、
SACK_PERM、
TSval 等是 TCP 选项(用于增强传输效率、时间戳验证等)。
WS=512
第二次握手(8120→2761 [SYN, ACK])
服务端收到 SYN 后,回复 SYN+ACK 包,确认连接请求并发起自己的连接请求。
:服务端的初始序列号。
Seq=0
:确认客户端的 Seq=0,示意 “我已收到你发的第 0 字节,接下来请发第 1 字节及以后的数据”。
Ack=1
:服务端声明的接收窗口大小。
Win=28960
携带与客户端一致的 、
MSS 等选项,同时
SACK_PERM 是服务端的窗口缩放因子。
WS=128
第三次握手(2761→8120 [ACK])
客户端收到 SYN+ACK 后,回复 ACK 包,完成连接建立。
:基于服务端的 Ack=1,客户端的序列号从 1 开始。
Seq=1
:确认服务端的 Seq=0,示意 “我已收到你发的第 0 字节,接下来请发第 1 字节及以后的数据”。
Ack=1
此时,客户端和服务端的 TCP 连接正式建立,可开始传输数据。
二、HTTP 数据传输(应用层通信)
客户端发送 HTTP 请求(2761→8120 [POST])
客户端通过建立好的 TCP 连接,发送 HTTP POST 请求,内容是 (向服务端发起订阅类的 JSON 数据请求)。
POST /VIID/Subscribes HTTP/1.1 , JSON (json)
服务端确认请求(8120→2761 [ACK])
服务端回复 ACK 包,确认收到客户端的 HTTP 请求。
服务端发送 HTTP 响应(8120→2761 [PSH, ACK])
服务端处理请求后,发送 HTTP 响应数据(同时带 ACK 确认)。
表示该数据是由多个 TCP 段重组而来(因为数据量较大,拆分成多段发送后再合并)。
[TCP PDU reassembled in 72]
客户端确认响应(2761→8120 [ACK])
客户端回复 ACK 包,确认收到服务端的 HTTP 响应。
服务端发送最终响应(2761→8120 [HTTP/1.1 200 OK])
服务端发送 HTTP 响应的最终部分,状态码 表示请求处理成功。
200 OK
三、TCP 四次挥手(断开连接)
第一次挥手(2761→8120 [FIN, ACK])
客户端发起断开连接请求,发送 FIN+ACK 包。
表示 “我没有数据要发了,准备断开”;
FIN 是对之前数据的确认。
ACK
第二次挥手(8120→2761 [ACK])
服务端回复 ACK 包,确认收到客户端的 FIN 请求(此时服务端可能还有数据未发完)。
第三次挥手(8120→2761 [FIN, ACK])
服务端数据发送完毕后,发送 FIN+ACK 包,表示 “我也没有数据要发了,同意断开”。
第四次挥手(2761→8120 [ACK])
客户端回复 ACK 包,确认收到服务端的 FIN 请求,TCP 连接最终断开。
整个流程完整呈现了 “建立连接→传输 HTTP 数据→断开连接” 的 TCP 通信生命周期,是典型的应用层(HTTP)基于传输层(TCP)的通信过程。