TCP 三次握手与四次挥手(核心逻辑)

TCP 是面向连接的可靠传输协议,“三次握手” 建立连接,“四次挥手” 断开连接,核心是通过交互确认双方收发能力正常。
一、三次握手(建立 TCP 连接)
目的:让客户端和服务器确认彼此 “能发能收”,同步序列号,建立可靠通信通道。
第一次握手(客户端→服务器):客户端发送连接请求报文(SYN=1,初始序列号 seq=x),表示 “我想和你建立连接,我的起始序号是 x”,随后客户端进入 SYN_SENT 状态,等待服务器响应。
第二次握手(服务器→客户端):服务器收到请求后,回复确认报文(SYN=1,ACK=1,确认号 ack=x+1,自身初始序列号 seq=y),表示 “我收到你的请求了,允许连接,我的起始序号是 y”,服务器进入 SYN_RCVD 状态。
第三次握手(客户端→服务器):客户端收到回复后,发送最终确认报文(ACK=1,确认号 ack=y+1,序列号 seq=x+1),表示 “我收到你的确认了,连接可以正式通信”,双方均进入 ESTABLISHED 状态,连接建立完成。
二、四次挥手(断开 TCP 连接)
目的:双方协商释放连接,确保所有数据都已传输完成,避免数据丢失。
第一次挥手(主动关闭方→被动关闭方):主动关闭方(如客户端)发送断开请求报文(FIN=1,序列号 seq=u),表示 “我这边数据已发完,准备关闭连接”,进入 FIN_WAIT_1 状态。
第二次挥手(被动关闭方→主动关闭方):被动关闭方(如服务器)收到后,回复确认报文(ACK=1,确认号 ack=u+1,序列号 seq=v),表示 “我收到关闭请求了,正在处理剩余数据”,进入 CLOSE_WAIT 状态;主动关闭方收到后进入 FIN_WAIT_2 状态,等待对方剩余数据传输完毕。
第三次挥手(被动关闭方→主动关闭方):被动关闭方处理完所有数据后,发送断开请求报文(FIN=1,ACK=1,确认号 ack=u+1,序列号 seq=w),表示 “我这边数据也发完了,可以关闭连接了”,进入 LAST_ACK 状态。
第四次挥手(主动关闭方→被动关闭方):主动关闭方收到后,回复确认报文(ACK=1,确认号 ack=w+1,序列号 seq=u+1),表示 “我收到你的关闭通知了,等待片刻后释放连接”,进入 TIME_WAIT 状态;被动关闭方收到确认后,直接进入 CLOSED 状态;主动关闭方等待 2MSL(报文最大生存时间)后,确认无残留数据,也进入 CLOSED 状态,连接彻底释放。
核心要点
三次握手:最少三次交互确认收发能力,避免 “失效连接请求” 导致误连接。
四次挥手:因被动关闭方需先确认接收,再处理剩余数据后发送关闭请求,故需四次交互,确保数据完整传输。

posted @ 2025-12-22 10:55  sssssmao  阅读(3)  评论(0)    收藏  举报