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
状态。