- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
西安邮电大学
协议与接口软件设计技术
实验报告
专业班级:
学生姓名:
学号(班内序号):
年 月 日实验一 停等式ARQ协议模拟实验
[实验目的]
1.通过停等式ARQ协议演示实验,学习OPNET开发环境的使用方法,初步掌握OPNET建模的基本过程。
2.熟悉OPNET提供的协议算法开发工具,掌握在OPNET平台下实现协议状态机的方法。
[实验环境]
1.操作系统:Windows XP,Windows2000,Windows 98皆可;
2.开发平台:OPNET Modeler10.0;
3.其他软件:Microsoft visual c++ 6.0。
[实验原理]
停等式ARQ协议的工作原理:
停等式ARQ协议是最简单和最基本的数据链路层协议,其特点是:发送端每发送一帧数据,将不能继续发送后续数据,而是等待接收端的确认帧或否认帧。接收端收到数据帧后经过检验如果没有发现出错,则向发送端返回一个确认帧(ACK),否则返回否认帧(NAK)。发送端收到ACK后取出下一帧发送,收到NAK则重发原来的数据帧。停等式ARQ的工作过程如图:
停等式ARQ的工作过程
[实验内容]
一、设计思想:
1.发送方和接收方的流程图:
2.状态转移图:
发送方:
接收方:
3.PDU的结构:
Type:包的类型,Data、ACK或NAK
SeqNum:数据包的序号,取值0或1
AckNum:ACK或NAK帧的序号,取值0或1
Corrupted:包是否出错的标记,0表示未出错,1表示出错
Data:PDU的净负荷,长度符合指数分布
二、实现方案:
1.发送方和接收方的状态转移图:
停等ARQ协议实验网络模型:
发送方状态转移图:
接收方状态转移图:
2.PDU结构图:
3.主要变量:
发送方模块参数设置:
接收方模块参数设置:
4.核心程序:
Sender模块:
if(op_intrpt_type()==OPC_INTRPT_STRM) //发生ARVL事件
{
//停止定时钟
op_intrpt_clear_self();
//获取指向收到的数据包的指针
pkt=op_pk_get(op_intrpt_strm());
//判断该数据包的类型
op_pk_nfd_get(pkt,Type,pktType);
op_pk_nfd_get(pkt,AckNum,ack_num);
op_pk_destroy(pkt);
if(pktType==ACKPacket) //ACK
{
//判断ACK是否是当前帧的确认,不是则直接返回等待状态
if(ack_num!=1-send_seq)
return;
//对新发送的包进行记录
if(packet_saved!=NULL)
op_pk_destroy(packet_saved); //删除缓存的包
send_number++;
send_seq=1-send_seq;
if(send_numbertotal_pkt)
{
//创建一个新的数据包
pkt=op_pk_create_fmt(SWARQ_Full_Packet);
op_pk_nfd_set(pkt,Type,0);
op_pk_nfd_set(pkt,SeqNum,send_seq);
op_pk_nfd_set(pkt,Corrupted,0);
data=op_pk_create(op_dist_outcome(dist));
op_pk_nfd_set_pkt(pkt,Data,data);
//对数据包进行缓存
packet_saved=op_pk_copy(pkt);
}
}
else if(pktType==NAKPacket) //NAK
{
pkt=op_pk_copy(packet_saved);
}
if(send_numbertotal_pkt)
{
op_pk_send(pkt,STR
文档评论(0)