三次握手
服务器处于listen状态,是一种被动打开的状态,客户端处于主动打开的状态,首先发送一个Syn包,客户端转向Syn_Send
状态,服务器接收到后,发送Syn和Ack包,进入Syn_Recv状态,客户端接收到Ack和Syn,发送一个Ack包,进入established
状态,服务器接收到Ack包后,进入established状态。
客户端状态:Syn_Send,established
服务端状态:listen,Syn_Recv,established
客户端发送FIN包,进入FIN_WAIT_1, 服务器接收FIN包,发送ACK包,进入CLOSE_WAIT,客户端接收ACK包,进入FIN_WAIT_2,服务器发送FIN包,进入LAST_WAIT,客户端接收FIN,发送ACK,进入TIME_WAIT,2MSL后进入CLOSED,服务器接收ACK进入CLOSED
客户端状态:FIN_WAIT1,FIN_WAIT2,TIME_WAIT,CLOSED
服务器状态:CLOSE_WAIT,LAST_ACK
这里还有一个要提一下,CLOSING是指客户端发送FIN后,不是收到ACK包,而是FIN包,服务器发送的ACK包有可能丢失了,也有可能
还没发送到。