三次握手
第一次握手:客户端向服务器发送一个 SYN 报文段,该报文段中包含客户端选择的初始序列号(SEQ),此时客户端进入 SYN_SENT 状态。
第二次握手:服务器收到客户端的 SYN 报文段后,向客户端回送一个 SYN 和 ACK 报文段,SYN 表示服务器同意建立连接,ACK 是对客户端 SYN 的确认(确认号为客户端发送的 SEQ 加 1),同时服务器也选择一个初始序列号。此时服务器进入 SYN_RCVD 状态。
第三次握手:客户端收到服务器的 SYN+ACK 报文段后,向服务器回送一个 ACK 报文段(确认号为服务器发送的 SEQ 加 1),表明客户端确认收到了服务器的同步信号。此时客户端进入 ESTABLISHED 状态,服务器收到该 ACK 后也进入 ESTABLISHED 状态,连接建立成功。
四次断开
第一次断开(主动关闭方发送 FIN):主动关闭方发送一个 FIN 报文段,表示要关闭连接,此时进入 FIN_WAIT_1 状态。
第二次断开(被动关闭方回应 ACK):被动关闭方收到 FIN 后,向主动关闭方回送一个 ACK 报文段,表示收到关闭请求,此时被动关闭方进入 CLOSE_WAIT 状态,主动关闭方进入 FIN_WAIT_2 状态。
第三次断开(被动关闭方发送 FIN):被动关闭方完成数据发送等操作后,向主动关闭方发送一个 FIN 报文段,此时被动关闭方进入 LAST_ACK 状态。
第四次断开(主动关闭方回应 ACK):主动关闭方收到 FIN 后,向被动关闭方回送一个 ACK 报文段,此时主动关闭方进入 TIME_WAIT 状态,等待一段时间后进入 CLOSED 状态,被动关闭方收到该 ACK 后也进入 CLOSED 状态,连接正式关闭。