网络协议与工程实验报告.docVIP

  • 39
  • 0
  • 约2.61千字
  • 约 8页
  • 2018-06-17 发布于云南
  • 举报
网络协议与工程实验报告 班级:计算机科学与技术(2) 姓名: 黄勇辉 学号:2014329620052 使用Spin分析与验证协议 描述并验证RDT1.0、RDT2.0、RDT3.0。 实验目的: 掌握协议描述与验证的一般过程,学会使用Promela语言描述协议并用Spin验证器进行验证。 实验内容和要求: RDT2.0 协议假定: 报文会出错,但不会丢失,应答帧不会出错也不会丢失; 不使用停等协议 要求: 设计并描述上述协议,在描述文本中加入end 和progress标签; 模拟运行协议,并将结果写入实验报告; 将描述的协议进行一般性验证和Non-progress循环验证;在正确的描述中加入一些错误,再进行验证;将结果写入试验报告; 在上述协议中,假定应答会出错,重新描述协议,模拟运行协议并进行验证,将结果写入实验报告。 实验环境: iSpin验证器,activestate中的wish环境。 实验原理: 分析与实现步骤: 创建RDT.0.pml文件 /*------------------------------------------------RDT 2.0-------------------------------------------*/ #define MAXSEQ 5 /*最大报文序号*/ #define ERROR 100 /*表示报文的错误状态*/ #define RIGHT 110 /*表示报文的正确状态*/ /**+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /** 定义报文类型。注意:在这里mtype是类型关键字,通过查手册可知 */ /** mtype只有三种使用方法: */ /** (1) mtype [ = ] { mtype_name, [mtype_name]* } */ /** (2) mtype name = mtype_name */ /** (3) mtype name[const] = mtype_name */ /** 也就是说,mtype要么定义枚举类型,此时只能用关键词mtype,比如: */ /** mtype = {Msg, Ack, Nak }; */ /** 要么定义只有一个类型的自定义类型,或初始化自定义类型,比如: */ /** mtype msg_type = Msg 或 mtype msg_type[4] = Msg,后者是初始化 */ /**+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ mtype = {Msg, Ack, Nak}; chan SenderToReceiver = [1] of {mtype, byte, byte}; /*发送端到接收端的通道*/ chan ReceiverToSender = [1] of {mtype, byte, byte}; /*接收端到发送端的通道*/ proctype sender(chan inChan, outChan) { byte send_data; /*待发送数据*/ send_data = 0; do :: send_data = send_data % MAXSEQ; again: if :: outChan ! Msg(send_data, RIGHT) /*正常发送数据*/ :: outChan ! Msg(send_data, ERROR) /*模拟出现误码*/ fi; if :: inChan ? Nak(0, 0)- end: goto again /*收到NAK,重发报文*/ :: inChan ? Ack(0, 0)-goto progress /*收到肯定应答,发送下一报文*/

文档评论(0)

1亿VIP精品文档

相关文档