1、状态
状态是系统的特定配置。
2、TCP连接的状态
首先,该图包含四个部分。顶部的4个状态描述了如何打开TCP连接;中间的状态“ESTABLISHED”说明TCP正发送和接收数据,它处于连接建立后和连接关闭前;下面的6个状态描述了连接如何关闭;底部的状态“CLOSED”表示连接已关闭,节点可以忘记它了。注意顶部的状态也是“CLOSED”,它在建立连接之前。
图的上半部分描述了TCP建立连接的3次握手状态变化,下半部分描述了TCP关闭连接的几种情况:
- 第一种情况:客户端发起关闭命令,发送FIN消息给服务端,从“ESTABLISHED”转移到“FIN WAIT1”。而服务端接收到FIN消息后,还有一些数据需要发送,从“ESTABLISHED”转移到“CLOSE WAIT”, 同时返回一个ACK消息给客户端。客户端接收到ACK消息后,转移到状态“FIN WAIT2”,此时客户端无法再向服务端发送数据,但服务端仍保留到客户端的连接,也就是服务端可能还有一些数据要发送给客户端。当服务端发送完剩余的数据后,执行关闭命令,并发送FIN消息给客户端,转移到“LAST ACK”状态。客户端收到FIN消息后,返回ACK消息给服务端,并转移到“TIME WAIT”状态。服务端收到ACK消息后,进入关闭状态。客户端等待安全过渡时间后也进入关闭状态。
- 第二种情况:客户端发起关闭命令,发送FIN消息给服务端,从“ESTABLISHED”转移到“FIN WAIT1”。而服务端接收到FIN消息后,没有数据需要发送,进入”CLOSE WAIT“状态后立刻进入”LAST ACK“状态,发送FIN + ACK消息(为一个数据包,包中的FIN位和ACK位都被置位),客户端从”FIN WAIT1“转移到”TIME WAIT“状态。
- 第三种情况:双方可能同时发起关闭命令,同时发送FIN消息给对方。此时,两者皆处于“FIN WAIT1”状态。然后它们会各自收到对方的FIN消息,发送ACK消息后转移到状态“CLOSING”。当收到对方的ACK消息后,转移到“TIME WAIT”状态,和上面一样,经过安全过渡后进入关闭状态。