1 四次挥手

TCP四次挥手断开连接_数据

(1)A 机器想要关闭连接,则待本方数据发送完毕之后,传递 FIN 信号给 B 机器,序列号 seq 假设为 u

(2)B 机器收到 A 机器关闭连接的请求,应答 ACK 置为 1,告诉 A 机器可以断开,但需要等待 B 机器处理完数据确认序列号 ack 为 u+1。这时,A 机器处于半关闭状态(FIN_WAIT_2),无法再发送新的数据。 

(3)B 机器做好连接关闭前的准备工作后,主动给 A 机器发送 FIN 信号,应答 ACK 置为1,序列号 seq 假设为 w,确认序列号 ack 为 u+1,此时 B 机器也进入半关闭状态(CLOSE_WAIT)。

(4)A 机器收到 B 机器的 FIN 信号之后,发送应答 ACK=1,确认序列号 ack 置为 w+1,然后 A 机器进入 TIME_WAIT 状态经过 2 MSL(Maximum Segment Lifetime)后,没有收到 B 机器传来的报文,则确定 B 机器已经收到 A 机器最后发送的 ACK 指令,此时 TCP 连接正式释放。

 

2 四次挥手抓包分析

TCP四次挥手断开连接_数据_02

(1)红色箭头表示 B 机器已经做好关闭连接前的准备动作,并发送 FIN + ACK。B 机器主动发送的两次 ACK 应答的都是 Ack=81,第一次进入 CLOSE_WAIT 状态,表示需要等待数据处理完毕,第二次应答进入 LAST_ACK 状态,表示可以断开连接。

(2)在绿色箭头处,A 机器的应答是 Seq=81。