描述协议的正式方式

时间:2014-10-10 07:31:31

标签: protocols specifications formal-methods

是否有正式/传统的方式来描述数据/命令交换协议?例如,对于编程语言,有多种方法来描述语法和语义(例如:http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form)。

我正在寻找的方法相当实用(与学术相反)。在处理规范时,我需要用于日常使用的数据交换描述,只是为了将这个想法转移/传播给其他人。所以,如果有些东西没有被认为是事实上的标准但是很有用 - 它也可以。

我看了一下UML序列图和#34;通信协议规范和验证的形式化方法,作者:Carl A. Sunshine,1979"。以前的方法缺少"有效载荷"的描述。 (至少根据我的理解),而后者则是一篇描述考虑因素而非方法的教育性论文(尽管如此,我仍然会阅读本文)。

提前致谢

4 个答案:

答案 0 :(得分:1)

协议是关于根据一系列交互发送的消息。

指定我见过的协议的最佳方法是使用Colored Petri Nets (CPNs)

CPN基于("未着色")Petri Nets (PNs),它定义了并行活动如何同步,例如,消息响应,使用Places来表示可能的状态,Tokens-in-places到表示状态和转换(同步)门,以指示并行状态必须重合的位置才能取得进展。 Petri网可以对有限状态机进行建模(FSA是一个PN,它始终具有"单个令牌"例如,"当前状态")因此是一般化;事实上,他们可以指数压缩"某些FSA成为非常小的描述,因此即使对于复杂的交互序列也可以非常简洁。但传统的PN并不能解决所交换的数据。

CPN概括了PN以添加数据类型。令牌现在有#34;颜色" (有趣的说法"数据类型")和转换不仅可以同步,还可以组合令牌以产生其他令牌,例如计算新值。

建模为CPN的协议因此具有作为数据类型的消息内容,并且PN表示指示同步。如果您从未使用过CPN,那么了解它们的确是值得的,因为它们对FSA来说非常普遍。

关于OP' "功利"请注意,CPN Tools提供了非常好的工具,包括图形建模和代码生成。

答案 1 :(得分:1)

在电信领域,描述网络元素之间互动的标准是Z.100 : Specification and Description Language (SDL)和伴随Z.120 : Message Sequence Chart (MSC)建议。该套件包括一个测试框架。

更加数学上弯曲的方法是使用某种类型的各种状态机模型。

其中一篇早期出版物Design and Validation of Computer Protocols(1991)由Gerard Holzmann撰写,用于描述SPIN模型检查器和PROMELA语言。

几乎任何其他符号如TLA +,Petri-nets,Alloy,CSP,Z ......也可用于推理协议,选择通常取决于熟悉程度和工具可用性。

如果严谨不是必需的,那么Harel state charts提供了许多工程师熟悉的符号。

从根本上说,序列图本身的问题在于它们描述了通过协议的单个跟踪。它们不能轻易地显示描述并行操作所需的非确定性,并且难以简洁地表示选择。当使用分层消息图表(HMC)进行扩展时,它们会回退到状态机空间。

答案 2 :(得分:1)

如果用“功利主义”来表示“有用”,请考虑Petri网。请参阅下面的回复或考虑回复的PDF version

first page of reply http://www.aespen.ca/AEnswers/lMtbX1428143440-0_Page_1.jpg second page of reply http://www.aespen.ca/AEnswers/lMtbX1428143440-0_Page_2.jpg

答案 3 :(得分:0)

为了它的价值,因为你提到BNF:我相信我已经读过Wirth使用EBNF来指定协议,散文解释了字符串的哪些部分将由客户端发出以及哪些部分由服务器。我无法找到参考资料,但我的回忆是我读到的例子比我在其他地方读过的大多数协议描述更清晰。