协议的验证
一、实验课程内容和基本要求
(一) 试验设备与工具软件(上机环境与工具软件)
(1)实验所需仪器设备:计算机。
(2)实验所需工具软件:SPIN。
(二)具体内容
基于PROMELA语言的协议分析验证
用PROMELA语言描述以下协议并进行模拟仿真与协议验证,检测协议的正确性:
(1)数据链路层协议
(2)AB协议
(3)GO-BACK-N协议
(三)基本要求
(1)熟悉工具软件SPIN的安装与使用
(2)掌握用PROMELA语言对协议进行描述的方法
实验内容
实验一:使用停等协议
一、实验目的
1. 熟悉数据链路层协议,并能用PROMELA语言正确描述 2. 掌握用SPIN验证协议的方法二、实验原理
对于给定的一个使用PROMELA描述的协议系统,SPIN可以对其执行任意的模拟,也可以生成一个C代码程序,然后对该系统的正确性进行有效检验,并报告系统中出现的死锁,无效的循环,未定义的接受和标记不完全等情况。三、实验仪器
PC机四、实验内容及步骤
实验内容:熟悉数据链路层协议,并将协议条件修改为:报文和应答均会出错,且都丢失,接受方没有无限接受能力。 实验步骤: 1.熟悉数据链路层协议,并进行相应修改 2.用PROMELA语言描述协议 3.用SPIN对协议进行验证代码实现
#define MAXSEQ 5
mtype={Msg,Ack,Nak,Err,Mis};
chan SenderToReceiver=[1] of {mtype,byte,byte};
chan ReceiverToSender=[1] of {mtype,byte,byte};
proctype SENDER(chan InCh,OutCh)
{
byte SendData;
byte SendSeq;
byte ReceivedSeq;
SendData=MAXSEQ-1;
do
::SendData=(SendData+1)%MAXSEQ;
again: if //由于是随机选择执行, 所以多放置一些Msg提高命中概率
::OutCh!Msg(SendData,SendSeq)
::OutCh!Msg(SendData,SendSeq)
::OutCh!Msg(SendData,SendSeq)
::OutCh!Msg(SendData,SendSeq)
::OutCh!Msg(SendData,SendSeq)
::OutCh!Msg(SendData,SendSeq)
::OutCh!Err(0,0)
::OutCh!Mis(0,0)
fi;
if
::timeout->
goto again
::InCh?Mis(0,0)->
goto again
::InCh?Err(0,0)->
goto again
::InCh?Nak(ReceivedSeq,0)->
end1: goto again
::InCh?Ack(ReceivedSeq,0)->
if
::(ReceivedSeq==SendSeq)->
goto progress
::(ReceivedSeq!=SendSeq)->
end2: goto again
fi
fi;
progress: SendSeq=1-SendSeq;
od;
}
proctype RECEIVER(chan InCh,OutCh)
{
byte ReceivedData;
byte ReceivedSeq;
byte Expe