logo资料库

西电协议分析上机报告.doc

第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
资料共13页,剩余部分请下载后查看
协议分析与设计上机报告 学号:13030288014 姓名:宋慧鹏
一、本实验课程的教学目标与任务 计算机网络及通信系统的核心技术是协议分析与设计。协议分析 与设计是借助计算机,在相应软件平台上对以 PROMELA 语言为描述手 段完成的设计规范,自动地完成相应协议仿真,模拟,验证测试,从 而减少协议开发过程中存在的错误,提高协议开发的效率和质量。因 此,学习协议分析与设计对计算机网络及通信系统十分重要。 本课程的主要任务是:通过上机实验使学生掌握计算机网络及通 信系统的协议分析方法,培养学生协议分析及工程实践能力。 二、本课程与其他课程的联系和分工 相关课程如计算机网络,数据通信,分布式系统等。计算机网络 等其他的课程一般只涉及介绍经国际标准化组织标准化的协议,而协 议与分析着重于让读者熟悉协议开发过程中的基本概念,方法和技 术。 三、实验课程内容和基本要求 (一)试验设备与工具软件(上机环境与工具软件) (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 mtype={Msg,Ack,Nak,Err,Miss}; chan SenderToReceiver=[1]of{mtype,byte,byte}; chan ReceiverToSender=[1]of{mtype,byte,byte}; 5
proctype Sender(chan InCh;chan OutCh) { byte SenderData; byte SenderSeq; byte ReceiverSeq; SenderData = MAXSEQ-1; do ::SenderData=(SenderData+1)%MAXSEQ; again: if ::OutCh ! Msg(SenderData,SenderSeq); ::OutCh ! Err(0,0); ::OutCh ! Miss(0,0); fi; if ::InCh ? Ack(ReceiverSeq,0)-> goto progress ; if fi ::(ReceiverSeq == SenderSeq) -> ::(ReceiverSeq != SenderSeq) -> end1: goto again ; ::InCh ? Nak(ReceiverSeq,0)-> end2: goto again; ::InCh ? Err(0,0) -> end3: goto again; ::InCh ? Miss(0,0) -> end4: goto again; ::timeout -> end5: goto again; fi;
progress: SenderSeq = 1-SenderSeq ; od } proctype Receiver(chan InCh;chan OutCh) { byte ReceiverData; byte ReceiverSeq; byte ExceptedData; byte ExceptedSeq; do ::InCh ? Msg(ReceiverData,ReceiverSeq) -> if ::(ReceiverSeq == ExceptedSeq)-> assert(ReceiverData == ExceptedData); progress: ExceptedSeq = 1-ExceptedSeq; ExceptedData= (ExceptedData+1)%MAXSEQ; if ::OutCh ! Ack(ReceiverSeq,0); ::OutCh ! Err(0,0); ExceptedSeq = 1-ExceptedSeq; ExceptedData=(ExceptedData+4)%MAXSEQ ::OutCh ! Miss(0,0); ExceptedSeq = 1-ExceptedSeq; ExceptedData=(ExceptedData+4)%MAXSEQ
fi ::(ReceiverSeq != ReceiverSeq)-> if fi ::OutCh ! Nak(ReceiverSeq,0); ::OutCh ! Err(0,0); ::OutCh ! Miss(0,0); fi ::InCh ? Err(0,0) -> OutCh ! Nak(ReceiverSeq,0) ::InCh ? Miss(0,0)-> skip od } init { atomic{ run Sender(ReceiverToSender,SenderToReceiver); run Receiver(SenderToReceiver,ReceiverToSender); } } 结果:
实验二 一、实验目的(明确学生应达到的基本能力要求) 1.熟悉 AB 协议,并能用 PROMELA 语言正确描述 2.掌握用 SPIN 验证协议的方法 二、实验原理 对于给定的一个使用 PROMELA 描述的协议系统,SPIN 可以 对其执行任意的模拟,也可以生成一个 C 代码程序,然后对 该系统的正确性进行有效检验,并报告系统中出现的死锁, 无效的循环,未定义的接受和标记不完全等情况。 三、实验仪器 PC 机 四、实验内容及步骤 实验内容:熟悉 AB 协议,并根据状态图用 PROMELA 语言描 述该协议 实验步骤: 1.熟悉 AB 协议 2.用 PROMELA 语言描述协议 3.用 SPIN 对协议进行验证 五、实验结果 代码: mtype = {err,a,b} chan SenderToReceiver = [1]of{mtype,byte}; chan ReceiverToSender = [1]of{mtype,byte}; proctype A(chan InCh;chan OuCh) { S5: if fi; ::OuCh ! a(0) -> goto S4 ::OuCh ! err(0)
-> goto S1 ::InCh ? b(0) ::InCh ? b(1) -> goto S1 ::InCh ? err(0) -> goto S5 S4: if fi; S1: if ::OuCh ! a(1) ::OuCh ! err(0) fi; goto S2; S2: if -> goto S3 ::InCh ? b(0) ::InCh ? b(1) -> goto S1 ::InCh ? err(0) -> goto S5 fi; S3: if fi ::OuCh ! a(1) -> goto S2 } proctype B(chan InCh;chan OuCh) { if ::InCh?err(0) -> goto S5 ::InCh?a(0) -> goto S1 -> goto S1 ::InCh?a(1)
分享到:
收藏