三次握手
第一次握手(SYN):A向B发送一个SYN包,其中包含一个初始序列号(seq)。A进入SYN_SENT状态,等待服务器的响应。
第二次握手(SYN+ACK):B接收到A的SYN包后,会回复一个SYN+ACK包。SYN+ACK包中确认号(ack)设置为A的初始序列号加1,同时也包含一个B的初始序列号。B进入SYN_RCVD状态。
第三次握手(ACK):A接收到B的SYN+ACK包后,会向B发送一个ACK包。ACK包中确认号设置为B的初始序列号加1。B接收到A的ACK包后,进ESTABLISHED状态,A也进入ESTABLISHED状态。此时,TCP连接已经建立,双方可以开始进行数据传输。
四次断开
第一次断开(FIN):当A想要断开连接时,发送一个FIN包给B,表示A不再发送数据。A进入FIN_WAIT_1状态。
第二次断开(ACK):B接收到A的FIN包后,会回复一个ACK包,表示已经接收到了B的FIN包。A进入CLOSE_WAIT状态。
第三次断开(FIN):B发送一个FIN包给A,表示B不再发送数据。B进入LAST_ACK状态。
第四次断开(ACK):A接收到B的FIN包后,回复一个ACK包,表示已经接收到了B的FIN包。A进入TIME_WAIT状态,等待一段时间后关闭连接。B接收到A的ACK包后,进入CLOSED状态,连接彻底关闭