【TCP 通信生命周期】

TCP 通信生命周期

【TCP 通信生命周期】

这是一个完整的 TCP 三次握手建立连接、HTTP 通信、四次挥手断开连接 的流程,以下分阶段解释:

一、TCP 三次握手(建立连接)

第一次握手(2761→8120 [SYN])

客户端(2761 端口)向服务端(8120 端口)发送 SYN 包,发起连接请求。


Seq=0
:初始序列号(用于后续数据排序)。


Win=29200
:客户端声明的接收窗口大小(流量控制)。


MSS=1460
:最大报文段长度(单次发送的最大数据量)。


SACK_PERM

TSval

WS=512
等是 TCP 选项(用于增强传输效率、时间戳验证等)。

第二次握手(8120→2761 [SYN, ACK])

服务端收到 SYN 后,回复 SYN+ACK 包,确认连接请求并发起自己的连接请求。


Seq=0
:服务端的初始序列号。


Ack=1
:确认客户端的 Seq=0,示意 “我已收到你发的第 0 字节,接下来请发第 1 字节及以后的数据”。


Win=28960
:服务端声明的接收窗口大小。

携带与客户端一致的
MSS

SACK_PERM
等选项,同时
WS=128
是服务端的窗口缩放因子。

第三次握手(2761→8120 [ACK])

客户端收到 SYN+ACK 后,回复 ACK 包,完成连接建立。


Seq=1
:基于服务端的 Ack=1,客户端的序列号从 1 开始。


Ack=1
:确认服务端的 Seq=0,示意 “我已收到你发的第 0 字节,接下来请发第 1 字节及以后的数据”。

此时,客户端和服务端的 TCP 连接正式建立,可开始传输数据。

二、HTTP 数据传输(应用层通信)

客户端发送 HTTP 请求(2761→8120 [POST])

客户端通过建立好的 TCP 连接,发送 HTTP POST 请求,内容是
POST /VIID/Subscribes HTTP/1.1 , JSON (json)
(向服务端发起订阅类的 JSON 数据请求)。

服务端确认请求(8120→2761 [ACK])

服务端回复 ACK 包,确认收到客户端的 HTTP 请求。

服务端发送 HTTP 响应(8120→2761 [PSH, ACK])

服务端处理请求后,发送 HTTP 响应数据(同时带 ACK 确认)。


[TCP PDU reassembled in 72]
表示该数据是由多个 TCP 段重组而来(因为数据量较大,拆分成多段发送后再合并)。

客户端确认响应(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)的通信过程。

© 版权声明

相关文章

暂无评论

none
暂无评论...