CLOSED:在超时或者连接关闭时候进入此状态.LISTEN:服务器端等待连接的状态。
SYN_SENT:客户端发起连接。
SYN_RCVD:服务器端接收到了客户端的 SYN,此时服务器由 LISTEN进入SYN_RCVD状态,同时服务器端回应一个ACK,然后再发送一个 SYN即SYN+ACK给客户端。
ESTABLISHED:客户端接收到服务器端的 ACK包(ACK,SYN)之后,也会发送一个ACK确认包,客户端进入ESTABLISHED状态,表明客户端这边已经准备好,但TCP 需要两端都准备好才可以进行数据传输。服务器端收到客户端的ACK之后会从SYN_RCVD状态转移到ESTABLISHED状态,表明服务器端也准备好进行数据传输了。这样客户端和服务器端都是ESTABLISHED状态,就可以进行后面的数据传输了。所以ESTABLISHED也可以说是一个数据传送状态。
FIN_WAIT_1:主动关闭的一方(执行主动关闭的一方既可以是客户端,也可以是服务器端,这里以客户端执行主动关闭为例),终止连接时,发送FIN给对方,然后等待对方返回ACK。
CLOSE_WAIT:接收到FIN之后,被动关闭的一方进入此状态。具体动作是接收到FIN,同时发送ACK。TCP关闭是全双工过程,这里客户端执行了主动关闭,被动方服务器端接收到FIN后也需要调用close关闭,这个CLOSE_WAIT就是处于这个状态,等待发送FIN,发送了FIN则进入LAST_ACK状态。
FIN_WAIT_2:主动端(这里是客户端)先执行主动关闭发送FIN,然后接收到被动方返回的 ACK后进入此状态。LAST_ACK:被动方(服务器端)发起关闭请求,由状态2进入此状态,具体动作是发送FIN给对方,同时在接收到ACK 时进入CLOSED状态。CLOSING:两边同时发起关闭请求时,主动方会由FIN_WAIT_1进入此状态,等待被动方返回ACK。TIME_WAIT:从状态变迁图看,四次挥手操作最后都会经过这样一个状态然后进入CLOSED状态。