描述协议的正式方式
是否有正式/传统的方式来描述数据/命令交换协议? 例如,对于编程语言,有多种方法来描述语法和语义(例如:http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form)。
我所寻找的方法相当实用(与学术相反)。 我需要一些日常用于数据交换描述的同时处理规范,只是为了向其他人传达/清晰地传达想法。 所以,如果有些东西不被认为是事实上的标准,但是有用的 - 它也可以。
我看了UML序列图和“卡尔A.阳光,1979年通信协议规范和验证的形式化方法”。 前一种方法没有描述“有效载荷”(至少从我所理解的内容中),而后一种方法是一种描述考虑因素而非方法的教育性论文(尽管我仍在阅读本文)。
提前致谢
协议是关于根据一系列交互发送的消息。
指定协议的最佳方式是使用有色Petri网(CPN)。
CPN基于(“无色”)Petri网(PN),它定义了并行活动如何同步,例如,消息响应,使用位置来表示可能的状态,令牌就地表示状态以及过渡(同步)指明平行国家必须在哪些方面取得进展。 Petri网可以模拟有限状态机(FSA是一个总是具有“单一标记”的PN,例如“当前状态”),所以是泛化; 事实上,它们可以将某些FSA“指数地压缩”为非常小的描述,因此即使对于复杂的交互序列也可以非常简洁。 但是传统的PN不能解决正在交换的数据。
CPN将PN概括为添加数据类型。 令牌现在具有“颜色”(有趣的方式称为“数据类型”),并且转换不仅可以同步,而且可以将令牌组合以产生其他令牌,例如计算新值。
建模为CPN的协议因此具有作为数据类型的消息内容,并且PN指示同步。 如果您从未使用过CPN,那么了解它们的真实含义是非常值得的,因为它们非常适合FSA。
关于OP的“实用性”评论,CPN Tools提供了非常好的工具,包括图形建模和代码生成。
在电信中,描述网络元素之间交互的标准是Z.100:规范和描述语言(SDL)和伴随Z.120:消息顺序图(MSC)的建议。 该套件包含一个测试框架。
更具数学意义的方法是使用某种类型的各种状态机模型。
早期的出版物之一,计算机协议的设计和验证(1991),由Gerard Holzmann撰写,描述了SPIN模型检查器和PROMELA语言。
几乎任何其他表示法,如TLA +,Petri网,Alloy,CSP,Z ......都可以用来推理协议,而选择通常取决于熟悉度和工具的可用性。
如果严谨并不重要,那么Harel的状态图提供了许多工程师熟悉的符号。
从根本上讲,序列图本身的问题在于它们通过协议来描述单个跟踪。 他们不容易表现出描述并行操作所需的非确定性,并且难以简洁地表示选择。 当用分层消息图表(HMC)扩展时,它们会回落到状态机空间中。
如果通过“功利主义”你的意思是“有用的”,考虑Petri网。 请参阅下面的我的回复或考虑答复的PDF版本。
第一页的回复http://www.aespen.ca/AEnswers/lMtbX1428143440-0_Page_1.jpg答复的第二页http://www.aespen.ca/AEnswers/lMtbX1428143440-0_Page_2.jpg
链接地址: http://www.djcxy.com/p/21437.html