6. 状态图 (State Diagrams)
这里我们为一个非常简单的FTP实现呈现状态图。仅使用回复代码的第一位数字。每组FTP命令或命令序列都有一个状态图。
命令分组是通过为每个命令构造模型, 然后将具有结构相同模型的命令收集在一起来确定的。
对于每个命令或命令序列, 有三种可能的结果: 成功 (S, Success), 失败 (F, Failure), 和错误 (E, Error)。在下面的状态图中, 我们使用符号B表示"开始 (Begin)", 符号W表示"等待回复 (Wait for reply)"。
我们首先呈现代表最大FTP命令组的图:
1,3 +---+
----------->| E |
| +---+
|
+---+ cmd +---+ 2 +---+
| B |---------->| W |---------->| S |
+---+ +---+ +---+
|
| 4,5 +---+
----------->| F |
+---+
此图模拟以下命令:
ABOR, ALLO, DELE, CWD, CDUP, SMNT, HELP, MODE, NOOP, PASV,
QUIT, SITE, PORT, SYST, STAT, RMD, MKD, PWD, STRU, and TYPE.
另一个大的命令组由一个非常相似的图表示:
3 +---+
----------->| E |
| +---+
|
+---+ cmd +---+ 2 +---+
| B |---------->| W |---------->| S |
+---+ --->+---+ +---+
| | |
| | | 4,5 +---+
| 1 | ----------->| F |
----- +---+
此图模拟以下命令:
APPE, LIST, NLST, REIN, RETR, STOR, and STOU.
请注意, 第二个模型也可以用于表示第一组命令, 唯一的区别是在第一组中, 100系列回复是意外的, 因此被视为错误, 而第二组期望 (有些可能需要) 100系列回复。请记住, 每个命令最多允许一个100系列回复。
剩余的图模拟命令序列, 也许其中最简单的是重命名序列:
+---+ RNFR +---+ 1,2 +---+
| B |---------->| W |---------->| E |
+---+ +---+ -->+---+
| | |
3 | | 4,5 |
-------------- ------ |
| | | +---+
| ------------->| S |
| | 1,3 | | +---+
| 2| --------
| | | |
V | | |
+---+ RNTO +---+ 4,5 ----->+---+
| |---------->| W |---------->| F |
+---+ +---+ +---+
下一个图是重启 (Restart) 命令的简单模型:
+---+ REST +---+ 1,2 +---+
| B |---------->| W |---------->| E |
+---+ +---+ -->+---+
| | |
3 | | 4,5 |
-------------- ------ |
| | | +---+
| ------------->| S |
| | 3 | | +---+
| 2| --------
| | | |
V | | |
+---+ cmd +---+ 4,5 ----->+---+
| |---------->| W |---------->| F |
+---+ -->+---+ +---+
| |
| 1 |
------
其中"cmd"是APPE, STOR或RETR。
我们注意到上述三个模型是相似的。重启与重命名的不同仅在于第二阶段对100系列回复的处理, 而第二组期望 (有些可能需要) 100系列回复。请记住, 每个命令最多允许一个100系列回复。
最复杂的图是登录 (Login) 序列:
1
+---+ USER +---+------------->+---+
| B |---------->| W | 2 ---->| E |
+---+ +---+------ | -->+---+
| | | | |
3 | | 4,5 | | |
-------------- ----- | | |
| | | | |
| | | | |
| --------- |
| 1| | | |
V | | | |
+---+ PASS +---+ 2 | ------>+---+
| |---------->| W |------------->| S |
+---+ +---+ ---------->+---+
| | | | |
3 | |4,5| | |
-------------- -------- |
| | | | |
| | | | |
| -----------
| 1,3| | | |
V | 2| | |
+---+ ACCT +---+-- | ----->+---+
| |---------->| W | 4,5 -------->| F |
+---+ +---+------------->+---+
最后, 我们呈现一个可用于模拟命令和回复交换的通用图:
------------------------------------
| |
Begin | |
| V |
| +---+ cmd +---+ 2 +---+ |
-->| |------->| |---------->| | |
| | | W | | S |-----|
-->| | -->| |----- | | |
| +---+ | +---+ 4,5 | +---+ |
| | | | | | |
| | | 1| |3 | +---+ |
| | | | | | | | |
| | ---- | ---->| F |-----
| | | | |
| | | +---+
-------------------
|
|
V
End