| LISTEN | 被动方 | 等待来自任何远程TCP端点的连接请求。 |
| SYN-SENT | 主动方 | 在发送连接请求后,等待匹配的连接请求。(主动方第一次握手之后的状态) |
| SYN-RECEIVED | 被动方 | 在收到和发送连接请求后,正在等待确认的连接请求确认。(被动方第二次握手,发送ACK + SYN之后的状态) |
| ESTABLISHED | 双方 | 一个开放的连接,接收到的数据可以传递给用户。这是连接数据传输阶段的正常状态。 |
| FIN-WAIT-1 | 主动方 | 等待来自远程TCP的连接终止请求,或先前发送的连接终止请求的确认。(主动方第一次挥手,发送了FIN,在等被动方发送 ACK 确认) |
| FIN-WAIT-2 | 主动方 | 等待来自远程TCP的连接终止请求。(主动方已经收到了被动方发送的ACK号,在等待被动方发送的FIN号) |
| CLOSE-WAIT | 被动方 | 等待本地用户发送连接终止请求。(被动方接收到了主动方发送的FIN号,会立刻发送ACK,但是它仍然需要一段时间来处理自己的事情,close-wait就是用来干这个的) |
| CLOSING | 被动方 | 正在等待来自远程TCP的连接终止请求确认。(实际上是比较少见的,用来应对双方几乎同时关闭连接的场景) |
| LAST-ACK | 被动方 | 等待之前发送给远程TCP的连接终止请求的确认(其中包括对其连接终止请求的确认)。(被动方在发送了FIN报文之后,等待主动断开方发送 ACK确认的过程,实际上就是最靠近Closed的一种状态) |
| TIME_WAIT | 主动方 | 等待足够的时间,以确保连接上的所有剩余数据包都已过期。(主动断开方在收到了最后一次ACK号之后,也就是四次挥手全部结束之后,还要等一段时间,确保迷路的包全部死掉) |
| CLOSED | 双方 | 关闭 |