TPC总共同拥有11个状态,状态转换图:


TCP状态转换图(state transition diagram)_数据通信




状态转换的要素


状态:


tcp定义的11个状态




事件:


触发TCP状态迁移。事件能够是:本地应用层调用。收到TCP消息(incoming segment);超时事件(timeout)




动作:


主要指针对远程Peer产生的动作,如发送确认等。




转换中的角色


本地应用层 Local App:产生事件。


本地tcp实现层 local TCP stack:处理事件。完毕状态转换;在远程tcp上产生事件。


远程tcp实现层 remote TCP stack(or peer):和本地TCP功能一致。




TCP连接建立(三次握手)的表格表示:


socket创建后的默认状态是CLOSED,从这个初始状态開始,socket经历一系列状态变迁(state transition)。


当前状态(current state)

等待事件(expected events)

下个状态(next state)

运行动作(action)


CLOSED



本地应用调用CONNECT(active open)



SYN_SENT


向peer发送SYN消息。


CLOSED



本地应用调用LISTEN(passive open)



LISTEN





SYN_SENT



收到peer SYN ACK消息



ESTABLISHED



向peer发送SYN ACK消息



LISTEN



收到peerSYN消息


SYN_RECEIVED


向peer发送SYN ACK消息;向peer发送SYN消息。两个消息在一个响应中发送。


SYN_RECEIVED


收到peer SYN ACK消息



ESTABLISHED



ESTABLISHED










当两方都进入ESTABLISHED后。表示TCP连接已经建立。能够開始数据通信。

数据通信过程中,TCP状态一直是ESTABLISHED。






TCP连接终止(close,4次握手)的表格表示(非simultaneous close):



ESTABLISHED



本地应用调用CLOSE(close initiator)



FIN_WAIT_1



向peer发送FIN消息



ESTABLISHED



收到peer FIN消息(close responder)



CLOSE_WAIT



向peer发送FIN ACK消息



FIN_WAIT_1



收到peer FIN ACK消息



FIN_WAIT_2





CLOSE_WAIT



本地应用调用CLOSE(close initiator)



LAST_ACK



向peer发送FIN消息



FIN_WAIT_2



收到peer FIN消息



TIME_WAIT



向peer发送FIN ACK消息



LAST_ACK



收到peer FIN ACK消息



CLOSED





TIME_WAIT



超时产生,timeout



CLOSED





close的发起方(initiator)能够是随意一方(client or server),initiator最后会进入TIME_WAIT状态。


关于TIME_WAIT状态的作用,能够參考:​​http://www.iteblog.com/archives/169​




TCP连接终止(close。4次握手)的表格表示(simultaneous close):


simultaneous close表示通信两方在收到peer FIN消息时,都已经进入了FIN_WAIT_1状态。



ESTABLISHED



本地应用调用CLOSE(close initiator, both sides)



FIN_WAIT_1



向peer发送FIN消息



FIN_WAIT_1



收到peer FIN消息



CLOSING


向peer发送FIN ACK消息

CLOSING

收到peer FIN ACK消息

TIME_WAIT



TIME_WAIT

超时产生,timeout

CLOSED


这样的情况下,两方都进入到TIME_WAIT。