TCP的有限状态机


昨天面试的时候被面试官问了TCP的有限状态机,状态机一直听说过,但是没有去了解是什么,当时答的是“我可能知道有这么个东西,但是不清楚它叫有限状态机”,今天去看了一下,果然是知道有这个东西,但是不清楚叫有限状态机。现在整理一下。

以下行文:先介绍状态机,再介绍TCP状态机。


状态机

状态机:顾名思义,状态转换,既然需要状态转换,就需要有状态(State),状态之间转换需要转换条件(Guard)以及事件(Event),这里的条件和事件有点容易混淆,我的理解是:条件指是状态机内部的一些状态,事件是指来自状态机外部的事件,只有内部和外部的条件和事件都满足了,才能够产生迁移(Transition),但是,外部事件并不一定会引起状态的迁移,有可能只是产生一些动作(Action)。(以上是我个人理解,欢迎斧正)。

下面是关于状态机的一些名词解释,可能会比较晦涩。来自https://glumes.com/post/android/understand-state-machine/

  • State(状态):状态(State),就是一个系统在其生命周期中某一个时刻的运行情况,此时,系统会执行一些操作,或者等待一些外部输入。并且,在当前形态下,可能会有不同的行为和属性。
  • Guard(条件):状态机对外部消息进行响应时,除了需要判断当前的状态,还需要判断跟这个状态相关的一些条件是否成立。这种判断称为 Guard(条件)。Guard 通过允许或者禁止某些操作来影响状态机的行为。
  • Event(事件):事件(Event),就是在一定的时间和空间上发生的对系统有意义的事情,事件通常会引起状态的变迁,促使状态机从一种状态切换到另一种状态。
  • Action(动作):当一个事件(Event)被状态机系统分发的时候,状态机用 动作(Action)来进行响应,比如修改一下变量的值、进行输入输出、产生另外一个 Event 或者迁移到另外一个状态等。
  • Transition(迁移):从一个状态切换到另一个状态被称为 Transition(迁移)。引起状态迁移的事件被称为触发事件(triggering event),或者被简称为触发(trigger)。

TCP的状态机

直接上图:

TCP状态机
TCP状态机

大家可能对下面这个两个图会比较熟悉:

TCP三次握手
TCP三次握手
TCP四次挥手
TCP四次挥手????

实际上这两个图就是对TCP状态机的简化。

TCP状态的描述

TCP状态及其描述如下表。

状态 描述
LISTEN 等待来自远程TCP应用程序的请求
SYN_SENT 发送连接请求后等待来自远程端点的确认。TCP第一次握手后客户端所处的状态
SYN-RECEIVED 该端点已经接收到连接请求并发送确认。
该端点正在等待最终确认。TCP第二次握手后服务端所处的状态
ESTABLISHED 代表连接已经建立起来了。这是连接数据传输阶段的正常状态
FIN_WAIT_1 等待来自远程TCP的终止连接请求或终止请求的确认
FIN_WAIT_2 在此端点发送终止连接请求后,等待来自远程TCP的连接终止请求
CLOSE_WAIT 该端点已经收到来自远程端点的关闭请求,此TCP正在等待本地应用程序的连接终止请求
CLOSING 等待来自远程TCP的连接终止请求确认
LAST_ACK 等待先前发送到远程TCP的连接终止请求的确认
TIME_WAIT 等待足够的时间来确保远程TCP接收到其连接终止请求的确认

参考资料:

https://www.jianshu.com/p/3c7a0771b67e

https://glumes.com/post/android/understand-state-machine/