一 TCP状态转换图
二 TCP的各种状态
|
状态 |
说明 |
|
CLOSED |
没有连接,表示初始状态 |
|
LISTEN |
表示服务器端的某个socket处于监听状态,可以接收连接。服务端收到被动打开,等待SYN |
|
SYN_SENT |
客户端socket执行CONNECT连接时,客户端已发送SYN,等待服务端的ACK |
|
SYN_RCV |
服务端已发送SYN+ACK,等待客户端的ACK |
|
ESTABLISHED |
表示连接已经建立了,数据传送在进行 |
|
FIN_WAIT_1 |
第一个FIN已发送,等待对端的ACK |
|
FIN_WAIT_2 |
第一个FIN的ACK已收到,等待对端的FIN,实际上该状态下的socket,表示半连接,即有一方要求关闭连接,但另外还告诉对方,我暂时还有点数据需要传送给你,请稍后再关闭连接。 |
|
TIME_WAIT |
收到对端的FIN,已发送ACK,等待2MSL超时。如果在FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入TIME_WAIT状态,而无需经过FIN_WAIT_2状态 |
|
CLOSING |
如果双方几乎同时关闭一个socket,那么就出现同时发送FIN报文的情况,就会出现CLOSING状态,表示双方都正在关闭 |
|
CLOSE_WAIT |
收到第一个FIN,已发送ACK。接下来要考虑的是查看是否还有数据发送给对方,如果没有,就可以关闭socket了,发送FIN报文给对方,即关闭连接。 |
|
LAST_ACK |
已发送第二FIN,等待ACK |
三 连接建立和终止
四 使用三向握手的连接终止
五 同时打开
六 同时关闭
七 拒绝连接
八 异常终止连接