跳到主要内容

4. SCTP 关联状态图

在 SCTP 关联的生命周期内, SCTP 端点上的关联会响应各种事件, 从一个状态推进到另一个状态. 可能推动关联状态变化的事件包括:

  • SCTP 用户原语调用, 例如 [ASSOCIATE],[SHUTDOWN],[ABORT]
  • 收到 INIT,COOKIE ECHO,ABORT,SHUTDOWN 等控制 chunk
  • 某些超时事件

下图中的状态图展示状态变化, 以及导致变化的事件和产生的动作. 请注意, 某些错误条件未在状态图中显示. 所有特殊情况的完整说明见正文.

注: Chunk 名称全部使用大写字母, 而参数名称采用首字母大写, 例如 COOKIE ECHO chunk type 与 State Cookie parameter.

如果可能有多个事件/消息导致同一状态转换, 则使用 (A),(B) 等标注.

以下是 SCTP 关联状态图的详细示意:

-----        --------              (from any state)
/ \ / \
/ rcv ABORT [ABORT] rcv INIT | |
| ---------- or ---------- --------------- |
| v v v
\ delete TCB snd ABORT generate Cookie \
+---------+ delete TCB snd INIT ACK ---| CLOSED |
+---------+ / \

[ASSOCIATE] / \
--------------- | |
create TCB | |
snd INIT | |
strt init timer rcv valid |
v | COOKIE ECHO |
+------------+ | (1) ----------------
| COOKIE-WAIT| | create TCB (2)
+------------+ | snd COOKIE ACK
| |
| rcv INIT ACK |
| ----------------- |
| snd COOKIE ECHO |
| stop init timer |
| strt cookie timer |
v |
+--------------+ |
| COOKIE-ECHOED| (3) |
+--------------+ |
| |
| rcv COOKIE ACK |
| ----------------- |
| stop cookie timer v
v v
+---------------+
| ESTABLISHED |
+---------------+

(仅从 ESTABLISHED 状态开始)

|                         /--------+--------\
| [SHUTDOWN] / \
| -------------------| |
| check outstanding | |
| DATA chunks | |
| v |
| +---------+ |
| |SHUTDOWN-| | rcv SHUTDOWN
| |PENDING | |------------------
| +---------+ | check outstanding
| | | DATA chunks
| No more outstanding |
| --------------------- |
| snd SHUTDOWN | |
| strt shutdown timer | |
| v v
| +---------+ +-----------+
| |SHUTDOWN-| (4) | SHUTDOWN- | (5,6)
| |SENT | | RECEIVED |
| +---------+ +-----------+
| | \
| (A) rcv SHUTDOWN ACK | \
| ---------------------- | \rcv:SHUTDOWN
| stop shutdown timer | \ (B)rcv SHUTDOWN
| send SHUTDOWN COMPLETE | \----------------------
| delete TCB | | send SHUTDOWN ACK
| | | start shutdown timer
| | | move to SHUTDOWN-
| | | ACK-SENT
| | |
| v v
| +-----------+ |
| | SHUTDOWN- | (7) |
| | ACK-SENT | |
| +-----------+ |
| | |
| (C)rcv SHUTDOWN COMPLETE |
| |----------------- | |
| | stop shutdown timer |
| | delete TCB | |
| | |
| | (D)rcv SHUTDOWN ACK |
| |-------------- | |
| | stop shutdown timer |
| | send SHUTDOWN COMPLETE |
| | delete TCB | |
| | |
| \ +---------+ /
| \-------------->| CLOSED |<-----------------/
| +---------+

注 1) 如果收到的 COOKIE ECHO 中的 State Cookie 无效 (即未通过完整性检查), 接收方必须静默丢弃该分组. 或者, 如果收到的 State Cookie 已过期 (见 Section 5.1.5), 接收方必须返回一个 ERROR chunk. 无论哪种情况, 接收方都保持 CLOSED 状态.

注 2) 如果 T1-init timer 到期, 端点必须重传 INIT 并重新启动 T1-init timer, 且不改变状态. 此操作必须最多重复 'Max.Init.Retransmits' 次. 之后, 端点必须中止初始化过程, 并向 SCTP 用户报告错误.

注 3) 如果 T1-cookie timer 到期, 端点必须重传 COOKIE ECHO 并重新启动 T1-cookie timer, 且不改变状态. 此操作必须最多重复 'Max.Init.Retransmits' 次. 之后, 端点必须中止初始化过程, 并向 SCTP 用户报告错误.

注 4) 在 SHUTDOWN-SENT 状态下, 端点必须立即确认任何收到的 DATA chunk.

注 5) 在 SHUTDOWN-RECEIVED 状态下, 端点不得接受其 SCTP 用户发出的任何新发送请求.

注 6) 在 SHUTDOWN-RECEIVED 状态下, 端点必须发送或重传数据, 并在队列中的所有数据都已发送后离开此状态.

注 7) 在 SHUTDOWN-ACK-SENT 状态下, 端点不得接受其 SCTP 用户发出的任何新发送请求.

使用 CLOSED 状态表示关联未创建 (即不存在).