TCP 状态
摘自 RFC793 , 3.2 - 术语
TCP 连接在生命周期中有一系列状态。包括: LISTEN, SYN-SENT, SYN-RECEIVED, ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT 和一个虚拟状态 CLOSED 。 CLOSED 是虚拟的,因为它表示没有传输控制块(TCB)的状态,因此,无连接。这些状态的含义简单描述如下:
- LISTEN - 表示等待任何远程 TCP 和端口请求连接
- SYN-SENT - 表示发送连接请求后,等待对应的连接
- SYN-RECEIVED - 表示接收并发送连接请求后,等待确认连接确认请求
- ESTABLISHED - 表示打开的连接,收到的数据可以传递给用户。这个是连接数据传输阶段的正常状态
- FIN-WAIT-1 - 表示等待从远程 TCP 的连接结束请求,或者之前发送的连接结束请求的确认
- FIN-WAIT-2 - 表示等待远程 TCP 的连接结束请求
- CLOSE-WAIT - 表示等待本地用户的连接结束请求
- CLOSING - 表示等待远程 TCP 连接结束请求的确认
- LAST-ACK - 表示等待之前发送给远程 TCP 的连接结束的确认(包括它的连接结束请求的确认)
- TIME-WAIT - 表示等待足够时间,确保远程 TCP 收到它的连接结束请求确认
- CLOSED - 表示无连接状态
TCP 连接通过事件从一个状态变为另一个状态。这些事件包括用户调用, OPEN, SEND, RECEIVE, CLOSE, ABORT 和 STATUS ;传入段, 特别是包含 SYN, ACK, RST 和 FIN 标记的;还有超时。
图 6 中的状态图只展示状态改变,与触发事件和结果操作,但是不包括错误和与状态改变无关的操作。在最后一节,提供了 TCP 对事件反应的更多细节。
注意:本图仅是一个总结,不应该看成是完整规范。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| +---------+ ---------\ active OPEN | CLOSED | \ ----------- +---------+<---------\ \ create TCB | ^ \ \ snd SYN passive OPEN | | CLOSE \ \ ------------ | | ---------- \ \ create TCB | | delete TCB \ \ V | \ \ +---------+ CLOSE | \ | LISTEN | ---------- | | +---------+ delete TCB | | rcv SYN | | SEND | | ----------- | | ------- | V +---------+ snd SYN,ACK / \ snd SYN +---------+ | |<----------------- ------------------>| | | SYN | rcv SYN | SYN | | RCVD |<-----------------------------------------------| SENT | | | snd ACK | | | |------------------ -------------------| | +---------+ rcv ACK of SYN \ / rcv SYN,ACK +---------+ | -------------- | | ----------- | x | | snd ACK | V V | CLOSE +---------+ | ------- | ESTAB | | snd FIN +---------+ | CLOSE | | rcv FIN V ------- | | ------- +---------+ snd FIN / \ snd ACK +---------+ | FIN |<----------------- ------------------>| CLOSE | | WAIT-1 |------------------ | WAIT | +---------+ rcv FIN \ +---------+ | rcv ACK of FIN ------- | CLOSE | | -------------- snd ACK | ------- | V x V snd FIN V +---------+ +---------+ +---------+ |FINWAIT-2| | CLOSING | | LAST-ACK| +---------+ +---------+ +---------+ | rcv ACK of FIN | rcv ACK of FIN | | rcv FIN -------------- | Timeout=2MSL -------------- | | ------- x V ------------ x V \ snd ACK +---------+delete TCB +---------+ ------------------------>|TIME WAIT|------------------>| CLOSED | +---------+ +---------+
TCP 连接状态图 图 6
|