(1)CLOSED:
起始点,在超时或者连接关闭时进入此状态。
(2)LISTEN:
Server端在等待连接时的状态,Server端为此要调用Socket、bind、listen函数,就能进入此状态。这称为应用程序被动打开(等待客户端来连接)。
(3)SYN-SENT:
客户端发起连接,发送SYN给服务器端。如果服务器端不能连接则直接进入CLOSED状态。
(4)SYN-RCVD:
与3对应,服务器端接受客户端的SYN请求,服务器端由LISTEN状态进入SYN-RCVD状态。同时服务器端要回应一个ACK,发送一个SYN给客户端;另外一种情况是,客户端在发起SYN的同时接收到服务器端的SYN请求,客户端回由SYN-SENT转换到SYN-RCVD状态。
(5)ESTABLISHED:
服务端和客户端在完成3次握手后进入状态,说明已经可以开始传输数据了。
(6)FIN-WAIT-1:
主动关闭的一方,由状态5进入此状态。具体动作是发送FIN给对方。
(7)FIN-WAIT-2:
主动关闭的一方,接收到对方的FIN ACK,进入此状态。由此不能再接收对方的数据,但是能够向对方发送数据。
(8)CLOSE-WAIT:
接收到FIN以后,被动关闭的一方进入此状态。具体动作是在接收到FIN的同时发送ACK。
(9)LAST-ACK:
被动关闭的一方,发起关闭请求,由状态8进入此状态。具体动作是发送FIN给对方,同时在接收到ACK时进入CLOSED状态。
(10)CLOSING:
两边同时发起关闭请求时,会由FIN-WAIT-1进入此状态。具体动作是接收到FIN请求,同时响应一个ACK。
(11)TIME-WAIT:
这个状态比较复杂,也是我们最常见的一个连接状态。有3个状态可以转化为此状态。