状态机模型:事件驱动状态转换,转换后采取某些行动(非必须)。
实例:TCP连接
三次握手
server调用listen()由CLOSED状态转为LISTEN状态;
client调用connect()由CLOSED转为SYN SENT状态,并向server发送SYN;
server接收到SYN,状态由LISTEN转为SYN RECEIVED,并向client反馈SYN+ACK;
client收到SYN+ACK,状态由SYN SENT转为ESTABLISHED,并向server发送ACK;
server收到ACK,状态由SYN RECEIVED转为ESTABLISHED;
四次挥手
client发送FIN,状态由ESTABLISHED转为FIN WAIT 1;
server收到FIN,状态由ESTABLISHED转为CLOSE_WAIT,并向server发送ACK;
client收到ACK,状态由FIN WAIT 1转为FIN WAIT 2,;
server发送完全部数据后,状态由CLOSE WAIT转为LAST ACK,并向client发送FIN;
client收到FIN,状态由FIN WAIT 2转为TIME WAIT,并向server发送最后一个ACK;
server收到最后ACK,状态由LAST ACK转为CLOSED;
client经过2MSL后,此期间没有收到server消息则将状态由TIME WAIT转为CLOSED;
注意有一特殊情况,两端几乎同时发送了FIN都进入了FIN WAIT 1状态,之后受到对方发送的FIN信号,则都进入CLOSING状态,然后进入TIME WAIT状态,然后关闭