TCP状态表
| 状态 | 
说明 | 
状态 | 
说明 | 
| CLOSED | 
没有连接存在 | 
FIN-WAIT-2 | 
首个FIN 的ACK 已被接收;等待第二个FIN | 
| LISTEN | 
接收到被动打开;等待SYN | 
CLOSE-WAIT | 
首个FIN 被接收,ACK 被发送;等待应用关闭 | 
| SYN-SENT | 
SYN已被发送;等待ACK | 
TIME-WAIT | 
第二个FIN 被接收,ACK 被发送;等待2MSL 超时 | 
| SYN-RCVD | 
SYN + ACK 已被发送;等待ACK | 
LAST-ACK | 
第二个FIN 被发送;等待ACK | 
ESTABLISHED | 
连接建立;数据传输正在进行 | 
CLOSING | 
双端决定同时关闭 | 
| FIN-WAIT-1 | 
首个FIN 已被发送;等待ACK | 
 | 
 | 
 | 
 | 
 | 
 | 
示例

客户进程向它的TCP 发出主动打开命令来请求连接到特定套接字地址。
- TCP 发送一个SYN 段并转移到
SYN-SENT 状态。 
- 在收到SYN + ACK 段后,TCP 发送了一个ACK 段并且进入
ESTABLISHED状态。 
- 数据被传输,可能是双向的,并且被确认。
 
当客户进程没有数据要发送了,它发出称为主动关闭的命令。
- TCP 发送FIN 段并进入
FIN-WAIT-1状态。 
- 当它接收到ACK 段,它进入
FIN-WAIT-2状态。 
- 当客户接收到FIN 段时,它发送一个ACK 段并进入
TIME-WAIT状态。 
- 客户保持这种状态2MSL秒(TCP 计时器)。
 
- 当相应计时器超时,客户进入
CLOSED状态。 
服务器进程发出被动打开命令。
- 服务器TCP 进入
LISTEN 状态并且保持这种状态直到它接收到一个SYN 段。 
- TCP 之后发送一个SYN + ACK 段并且进入
SYN-RCVD 状态,等待客户发送ACK段。 
- 在接收到ACK 段后,TCP 进入
ESTABLISHED 状态,这就开始了数据传输。 
TCP 保持这种状态直到它接收到一个来自客户的FIN 段,这表示没有其他数据要被交换且连接可以被关闭。
- 一旦服务器接收到FIN 段,那么它就向客户发送带有虚拟EOF 标记的排队中所有的数据,这意味连接必须被关闭。
 
- 它发送一个ACK 段且进入
CLOSE-WAIT状态,但是推迟确认来自客户的FIN 段,直到它接收到来自进程的被动关闭命令。 
- 在接收到被动关闭命令后,服务器向客户发送FIN 段并进入
LAST-ACK状态,等待最终ACK。 
- 当ACK 段从客户发送后被服务器接收,服务器进入
CLOSE 状态。