tcp 有限状态机(译)

几个术语

状态state、事件event、流转transition

Table 151 briefly describes each of the TCP states in a TCP connection, and also describes the main events that occur in each state,and what actions and transitions occur as a result. For brevity, three abbreviations are used for three types of message that controltransitions between states, which correspond to the TCP header flags that are set to indicate a message is serving that function.  

下表简要的描述了一个tcp连接中的每一个状态,也描述了每个状态会发生的主要的事件,以及相应的动作和状态流转. 有三种类型的消息来控制状态之间的流转,在tcp的header中

下表并不是所有可能的状态流转

状态(state) 状态描述 事件(event) transition (事件发生后的动作及其状态流转)
CLOSED 这是每个连接建立之前默认的状态,状态还没建立或者刚刚被关闭 被动打开 一个server开始连接进程通过被动的设置一个tcp port,同时它设置一个叫做transmission control block TCB的数据结构来管理连接,然后过度到LISTEN状态
    主动打开,发送SYN 一个client开始一个连接通过发送一个SYN包,同设置一个TCB,然后过度到SYN-SENT状态
LISTEN 一个设备(通常是一个server)等待接收一个来自client的SYN,此时它还没有发送自己的SYN呢 接收到client的SYN,发送SYN+SCK server设备接收到一个client的SYN包,然后它回传一个包含自己SYN和对client的ACK,进入SYN-RECEIVED
SYN-SENT 设备(通常是一个client)已经发送了自己的SYN,它在等待来自其他设备(通常是一个server)的匹配的SYN 接收到SYN,发送ACK 如果一个已经发送了SYN包的设备接收到了来自别的设备的SYN但是没有自己SYN的ACK(响应),它会响应接受到的SYN,发送ACK,然后过渡到SYN-RECEIVED等到它的SYN的响应
    接收到SYN+ACK,发送ACK 如果一个已经发送了SYN包的设备同时收到了它的SYN的ACK(响应)和其他设备的SYN,它对接受到的SYN进行响应ACK,过渡到ESTABLISHED状态
SYN-RECEIVED 设备已经发送了自己的SYN,并且接收到来自其他设备的SYN。它在等待它的SYN的ACK响应来完成连接 接收到ACK 当设备接收到它发送的SYN的ACK响应,它过渡到ESTABLISHED状态
ESTABLISHED 一个TCP连接的稳定状态,数据可以在设备间自由的交换直到连接被关闭 关闭,发送FIN 一个设备可以关闭通过发送一个FIN来关闭连接,然后过渡到FIN-WAIT-1状态
    接收到FIN 一个设备可能会接收到来自连接方的关闭的请求FIN,然后它会对其进行响应,并过渡到CLOST-WAIT状态
CLOSE-WAIT 设备接收到一个来自另一个设备的关闭请求(FIN)。它必须等待本地设备来对这个请求进行响应,并产生一个对应的请求 关闭,发送FIN 被通知要关闭的使用TCP的应用,会向它运行的机器的TCP层发送一个关闭的请求,然后TCP会向远端的设备发送一个终止连接的请求,设备过渡到LAST_ACK
LAST-ACK 设备接收到一个关闭请求并对其进行了响应,也发送了自己的FIN,等待着自己FIN的ACK 接收到FIN的ACK 设备发送了自己的FIN包并接收到了响应,同时也接收到了其他设备的FIN并进行了响应,然后过渡到CLOSED状态
FIN-WAIT-1 这个状态的设备等待着它发送的FIN的ACK响应,或者别的设备的关闭请求 接收到FIN的ACK响应 设备接收到自己发送FIN的ACK,然后过渡到FIN-WAIT-2
    接收到FIN,发送ACK 设备没有接收到自己发送的FIN的ACK,但是收到了别的设备的FIN。它对其进行响应之后,过渡到CLOSING状态
FIN-WAIT-2 处于这个状态的设备接收到自己FIN的ACK,并在等待对应的别的设备的FIN 接收到FIN,发送ACK 设备接收到来自别的设备的FIN包,它对其进行响应,并过渡到TIME_WAIT状态
CLOSING 设备已经接收到别的设备的FIN,并且也发送了其ACK响应,但是还没收到自己FIN的ACK 接收到自己FIN的ACK 设备接收到自己关闭请求的响应,过渡到TIME_WAIT状态
TIME-WAIT 连接双方都已经发送了FIN,并且收到了对方的ACK Timer Expiration 在一段特定等待时间后,设备过渡到CLOSED状态

有限状态机

有限状态机

[1]http://www.tcpipguide.com/free/t_TCPOperationalOverviewandtheTCPFiniteStateMachineF.htm

[2]https://en.wikipedia.org/wiki/Transmission_Control_Protocol

[3]http://www.cnblogs.com/sunxucool/p/3449068.html