Формальный способ описания протоколов

Существует ли формальный/традиционный способ описания протоколов обмена данными/командами? Например, для языков программирования существует несколько подходов к описанию синтаксиса и семантики (например: http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form).

Подход, который я ищу, скорее утилитарный (в отличие от академического). Мне нужно что-то для повседневного использования для описания обмена данными при работе над спецификациями, просто для того, чтобы четко передать/распространить идею другим. Так что, если есть что-то, что не признано стандартом де-факто, но полезно — тоже нормально.

Я взглянул на диаграммы последовательности UML и "Формальные методы спецификации и проверки протокола связи, Карл А. Саншайн, 1979". В первом методе отсутствует описание «полезных нагрузок» (по крайней мере, насколько я понял), в то время как последний представляет собой скорее познавательный документ, описывающий соображения, а не методы (хотя я все еще просматриваю этот документ).

заранее спасибо


person Nikita Vorontsov    schedule 10.10.2014    source источник


Ответы (4)


Протоколы — это сообщения, отправляемые в соответствии с серией взаимодействий.

Лучший способ указать протоколы, которые я видел, — использовать цветные сети Петри (CPN).

CPN основаны на ("неокрашенных") сетях Петри (PN), которые определяют, как синхронизируются параллельные действия. , например, ответы на сообщения, используя Places для представления возможных состояний, Tokens-in-places для представления состояния и переходные (синхронизирующие) ворота для указания, где параллельные состояния должны совпадать для достижения прогресса. Сети Петри могут моделировать конечные автоматы (FSA - это PN, у которого всегда есть «один маркер», например, «текущее состояние»), и поэтому они являются обобщением; на самом деле, они могут «экспоненциально сжимать» определенные FSA до очень маленьких описаний и, таким образом, могут быть весьма краткими даже для сложных последовательностей взаимодействия. Но обычный PN не обращается к данным, которыми обмениваются.

CPN обобщают PN для добавления типов данных. Токены теперь имеют «цвета» (забавный способ сказать «тип данных»), и переходы могут не только синхронизироваться, но и комбинировать токены для создания других токенов, например, для вычисления новых значений.

Таким образом, протокол, смоделированный как CPN, имеет содержимое сообщения в виде типов данных, а состояния PN указывают на синхронизацию. Если вы никогда не использовали CPN, вам действительно стоит потрудиться, чтобы узнать, что они из себя представляют, потому что они представляют собой прекрасное обобщение FSA.

Что касается «утилитарного» замечания ОП, в Инструменты CPN доступны очень хорошие инструменты, включая графическое моделирование и генерацию кода.

person Ira Baxter    schedule 08.12.2014

В области электросвязи стандартом описания взаимодействия между сетевыми элементами является Z.100: Спецификация и описание. Язык (SDL) и сопутствующий Z.120: Message Sequence Chart ( MSC) рекомендации. В комплект входит среда тестирования.

Более математически изогнутый подход состоял бы в использовании различных моделей конечных автоматов того или иного типа.

Одна из первых публикаций, Design and Validation of Computer Protocols (1991), была написана Джерардом Хольцманном. описать средство проверки моделей SPIN и язык PROMELA.

Почти любые другие обозначения, такие как TLA+, сети Петри, Alloy, CSP, Z, ... также могут использоваться для рассуждений о протоколах, и выбор часто зависит от знакомства и наличия инструментов.

Если точность не важна, тогда карты штатов Harel ввести обозначения, знакомые многим инженерам.

По сути, проблема с диаграммами последовательности сама по себе заключается в том, что они описывают одну трассу через протокол. Они не могут легко показать недетерминизм, необходимый для описания параллельных операций, и изо всех сил пытаются лаконично представить выбор. При расширении с помощью иерархических диаграмм сообщений (HMC) они возвращаются в пространство конечного автомата.

person Pekka    schedule 19.01.2015

Если под «утилитарным» вы подразумеваете «полезный», рассмотрите сети Петри. См. мой ответ ниже или рассмотрите PDF-версию ответа.

http://www.aespen.ca/AEnswers/lMtbX1428143440-0_Page_1.jpg http://www.aespen.ca/AEnswers/lMtbX1428143440-0_Page_2.jpg

person John Frederick Chionglo    schedule 05.04.2015
comment
Согласитесь, в таком виде сложно описать каждое значение, которое нужно передать, и каждый бит, который нужно проверить. А вот для представления протокола может пригодиться, согласен. Спасибо за Ваш ответ. - person Nikita Vorontsov; 08.04.2015
comment
Я не пытался описать протокол на битовом уровне. Я согласен с тем, что кажется сложным описать этот уровень в терминах сетей Петри. Было бы интересно увидеть типы проблем, с которыми можно столкнуться в этих описаниях, и существуют ли систематические методы смягчения описаний способами, которые четко сопоставляются с элементами сети Петри. - person John Frederick Chionglo; 09.04.2015
comment
Извините, я не понял вашего комментария (где вы спрашиваете, являются ли типы вызовов систематическими). Пожалуйста, поясните примерами. Проблема, которую я вижу, заключается в том, что с этой нотацией описание будет слишком громоздким. Обычная текстовая форма с левой и правой колонками (представляющими приемник и передатчик) будет менее формальной, но, как я полагаю, более применимой. - person Nikita Vorontsov; 09.04.2015
comment
Вот изображение моего ответа (с более подробной информацией и примерами) на ваш комментарий. изображение. Также доступна версия ответа в формате PDF, цифры будут динамическими. ссылка. - person John Frederick Chionglo; 21.04.2015

Для чего это стоит, поскольку вы упомянули BNF: кажется, я читал, что Вирт использовал EBNF для указания протоколов, с прозой, объясняющей, какие части строки должны быть отправлены клиентом, а какие - сервером. Я не могу найти ссылку навскидку, но я помню, что пример, который я прочитал, был яснее, чем большинство описаний протоколов, которые я читал где-либо еще.

person C. M. Sperberg-McQueen    schedule 08.12.2014
comment
BNF — паршивый способ моделирования протоколов. Это ни черта не модельное государство. (Возможно, вы сможете определить строки, идущие вперед и назад, но большая часть BNF является контекстно-свободной, что означает не так много памяти о прошлом (левый контекст). Это может быть использованная структура сообщения модели. Но вы, вероятно, захотите более сложную модель, включающую ограничений; ознакомьтесь с XML-схемами как более сложным инструментом моделирования данных, который является надмножеством BNF. - person Ira Baxter; 08.12.2014
comment
Я сомневаюсь, что Вирт ограничил определение протокола тем, что может быть захвачено EBNF, равно как и запретил правила объявления перед использованием и объявления типов в своих языках программирования. Но... правильно поняли. (И я обязательно когда-нибудь посмотрю на XSD... :-) - person C. M. Sperberg-McQueen; 09.12.2014