tcp状态转移

 

 

1.CLOSED:起始点,在超时或者连接关闭时候进入此状态。

2.LISTEN:ser端在等待连接过来时候的状态,ser端为此要调用socket,bind,listen函数,就能进入此状态。此称为应用程序被动打开(等待客户端来连接)。

3.SYN_SENT:客户端发起连接,发送SYN给服务器端。如果服务器端不能连接,则直接进入CLOSED状态。

4.SYN_RCVD:服务器端接受客户端的SYN请求,服务器端由LISTEN状态进入SYN_RCVD状态。并且回应一个ACK报文和SYN报文给客户端;客户端在接收到服务器端回复的SYN请求后,客户端就会由SYN_SENT到SYN_RCVD状态。

5.ESTABLISHED:服务器端和客户端完成3次握手。

四次挥手:(默认客户端主动断开连接)

6.FIN_WAIT_1:客户端由ESTABLISHED(完成连接时的状态)进入此状态。并且发送FIN给对方。

7.CLOSE_WAIT:服务器接收到FIN以后,服务器进入close_wait状态。并且发送ACK给客户端。(此时进入半连接状态,服务器还可以发送数据给客户端)

8.LAST_ACK:当服务器想断开连接时,发送FIN给客户端,服务器进入LAST_ACK状态(等待客户端确认收到了FIN请求)

9.FIN_WAIT_2:客户端接收到对方的ACK进入FIN_WAIT_2。

10.TIME_WAIT:客户端接收到对方的FIN进入TIME_WAIT。并且发送ACK给服务器(回应服务器的关闭请求)

TIME_WAIT状态的意义:2MSL(两个最大报文段的生存时间)

  1.可靠的终止tcp连接。

  2.保证让迟来的tcp报文段有足够的时间被识别并丢弃。