Skip to main content

4. SCTP关联状态图 (SCTP Association State Diagram)

在SCTP关联的生命周期中,SCTP端点的关联会根据各种事件从一个状态进展到另一个状态。可能推进关联状态的事件包括:

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

下图中的状态图说明了状态变化,以及导致变化的事件和结果动作。请注意,某些错误条件并未在状态图中显示。所有特殊情况的完整描述可在文本中找到。

注意: 块名称用全大写字母表示,而参数名称的第一个字母大写,例如COOKIE ECHO块类型与State Cookie参数。

如果有多个事件/消息可能导致状态转换,则用(A)、(B)等标记。

以下是SCTP关联状态图的详细说明:

-----        --------              (从任何状态)
/ \ / \
/ rcv ABORT [ABORT] rcv INIT | |
| ---------- 或 ---------- --------------- |
| v v v
\ 删除TCB snd ABORT 生成Cookie \
+---------+ 删除TCB snd INIT ACK ---| CLOSED |
+---------+ / \

[ASSOCIATE] / \
--------------- | |
创建TCB | |
snd INIT | |
strt init timer rcv valid |
v | COOKIE ECHO |
+------------+ | (1) ----------------
| COOKIE-WAIT| | 创建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] / \
| -------------------| |
| 检查未完成 | |
| DATA块 | |
| v |
| +---------+ |
| |SHUTDOWN-| | rcv SHUTDOWN
| |PENDING | |------------------
| +---------+ | 检查未完成
| | | DATA块
| 无更多未完成 | |
| --------------------- |
| 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无效(即未通过完整性检查),接收方必须 (MUST) 静默丢弃该数据包。或者,如果接收到的State Cookie已过期(参见第5.1.5节),接收方必须 (MUST) 发回ERROR块。在任何一种情况下,接收方都保持在CLOSED状态。

注2) 如果T1-init定时器到期,端点必须 (MUST) 重传INIT并重启T1-init定时器而不改变状态。这必须 (MUST) 重复最多'Max.Init.Retransmits'次。之后,端点必须 (MUST) 中止初始化过程并向SCTP用户报告错误。

注3) 如果T1-cookie定时器到期,端点必须 (MUST) 重传COOKIE ECHO并重启T1-cookie定时器而不改变状态。这必须 (MUST) 重复最多'Max.Init.Retransmits'次。之后,端点必须 (MUST) 中止初始化过程并向SCTP用户报告错误。

注4) 在SHUTDOWN-SENT状态,端点必须 (MUST) 立即确认任何接收到的DATA块而不延迟。

注5) 在SHUTDOWN-RECEIVED状态,端点不得 (MUST NOT) 接受来自其SCTP用户的任何新发送请求。

注6) 在SHUTDOWN-RECEIVED状态,端点必须 (MUST) 传输或重传数据,并在队列中的所有数据传输完成后离开此状态。

注7) 在SHUTDOWN-ACK-SENT状态,端点不得 (MUST NOT) 接受来自其SCTP用户的任何新发送请求。

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