一.建立连接(三次握手)
建立连接过程中的状态转换如下:
客户端:
发送SYN CLOSED >>>>>>>>>>>>>>SYN SENT(第一次握手)
接收SYN+ACK发送ACK SYN SENT>>>>>>>>>>>>>>ESTABLISHED(第三次握手)
服务端:
调用Listen() CLOSE>>>>>>>>>>>>>>>>LISTEN
接收SYN发送SYN+ACK LISTEN>>>>>>>>>>>>>>>>SYN RECEIVED(第二次握手)
收到ACK SYN RECEIVED>>>>>>>>>>>ESTABLISHED
二.关闭连接(四次挥手)
此阶段共有六个状态,可以分为主动关闭与被动关闭。主动关闭代表第一次主动发送FIN报文的一方的状态。被动关闭指最后关闭的连接通路(因为连接是双向的故而需要按照顺序关闭通道例如先关闭A->B再关闭B->A)。
主动关闭:
发送FIN ESTABLISHED>>>>>>>>>>>>>FIN WAIT 1
这时会出现三种情况,1)收到服务端FIN同时关闭2)只收到服务端ACK,此时服务端还可以向客户端传递消息,等待消息传输完毕3)收到服务端FIN+ACK,此时回应ACK
同时关闭 FIN WAIT 1>>>>>>>>>>>>CLOSING
收到ACK未收到FIN FIN WAIT 1>>>>>>>>>>>>FIN WAIT 2
.....其余状态转换见图中