协议的验证

该实验课程介绍了如何使用SPIN工具对数据链路层的停等、AB和Go-Back-N协议进行验证。学生需掌握PROMELA语言来描述协议,并通过SPIN进行语法检查和模拟仿真,以确保协议的正确性。实验过程中,通过实例演示了协议验证过程,包括发现并修复错误的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、实验课程内容和基本要求

(一) 试验设备与工具软件(上机环境与工具软件)

(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值