2

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

我正在寻找的方法是相当实用的(与学术相反)。在制定规范时,我需要一些用于日常数据交换描述的东西,只是为了将这个想法清楚地传递/传播给其他人。所以,如果有一些东西不被认为是事实上的标准但很有用——那也没关系。

我查看了 UML 序列图和“通信协议规范和验证的形式化方法,Carl A. Sunshine,1979 年”。前一种方法缺少对“有效负载”的描述(至少从我的理解来看),而后一种方法更像是一篇描述考虑因素而不是方法的教育性论文(不过,我仍在阅读这篇论文)。

提前致谢

4

4 回答 4

1

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

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

CPNs 基于(“未着色”)Petri Nets (PNs),它定义了并行活动如何同步,例如消息响应,通过使用 Places 来表示可能的状态,Tokens-in-places 来表示状态,以及转换(同步)门来指示平行状态必须在哪里重合才能取得进展。Petri 网可以对有限状态机进行建模(FSA 是始终具有“单个令牌”的 PN,例如“当前状态”),因此是一种概括;事实上,它们可以将某些 FSA “指数压缩”成非常小的描述,因此即使对于复杂的交互序列也可以非常简洁。但是传统的 PN 不处理正在交换的数据。

CPN 泛化 PN 以添加数据类型。标记现在具有“颜色”(“数据类型”的有趣说法),并且转换不仅可以同步,而且可以组合标记以产生其他标记,例如,计算新值。

因此,建模为 CPN 的协议将消息内容作为数据类型,并且 PN 状态以指示同步。如果您从未使用过 CPN,那么了解它们是什么真的值得您费心费力,因为它们是 FSA 的一个非常概括的概括。

关于 OP 的“功利”言论, CPN Tools提供了非常好的工具,包括图形建模和代码生成。

于 2014-12-08T18:16:06.540 回答
1

在电信领域,描述网络元素之间交互的标准是Z.100:规范和描述语言 (SDL)以及配套的Z.120:消息序列图 (MSC)建议。该套件包括一个测试框架。

一种更具数学倾向的方法是使用某种类型的各种状态机模型。

Gerard Holzmann 为描述 SPIN 模型检查器和 PROMELA 语言编写了早期出版物之一,计算机协议的设计和验证(1991 年)。

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

如果严格不是必需的,那么Harel 状态图提供了许多工程师熟悉的符号。

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

于 2015-01-19T21:32:43.163 回答
1

如果“功利”是指“有用”,请考虑 Petri Nets。请在下面查看我的回复或考虑回复的PDF 版本

第一页回复 http://www.aespen.ca/AEnswers/lMtbX1428143440-0_Page_1.jpg 第二页回复 http://www.aespen.ca/AEnswers/lMtbX1428143440-0_Page_2.jpg

于 2015-04-05T00:26:09.847 回答
0

对于它的价值,既然你提到了 BNF:我相信我已经读过 Wirth 使用 EBNF 来指定协议,并用散文解释了字符串的哪些部分将由客户端发出,哪些部分由服务器发出。我无法立即找到参考资料,但我记得我阅读的示例比我在其他地方阅读的大多数协议描述更清晰。

于 2014-12-08T16:46:08.570 回答