Omnet 停等式ARQ模型仿真实验文档格式.docx
- 文档编号:13048807
- 上传时间:2022-10-03
- 格式:DOCX
- 页数:6
- 大小:10.68KB
Omnet 停等式ARQ模型仿真实验文档格式.docx
《Omnet 停等式ARQ模型仿真实验文档格式.docx》由会员分享,可在线阅读,更多相关《Omnet 停等式ARQ模型仿真实验文档格式.docx(6页珍藏版)》请在冰豆网上搜索。
inputin;
outputout;
}simplereciever
}networkArq
{submodules:
sender:
sender{parameters:
@display("
i=,cyan"
}reciever:
reciever{parameters:
i=,gold"
}connections:
sender.out-->
{delay=100ms;
}-->
reciever.in;
sender.in<
--{delay=100ms;
}<
--reciever.out;
}
图形如下图所示:
2.对停等式ARQ协议进行编程实现。
在发送端设置定时器,当超出一定时间未收到接收端返回的ACK就认为所发message丢失,再次发送相同message。
按时接到相对应的ACK后,
定时器重启。
模块声明及初始化代码如下:
classsender:
publiccSimpleModule
{private:
simtime_ttimeout;
//timeoutcMessage*timeoutEvent;
//holdspointertothetimeoutself-messageintseq;
//messagesequencenumbercMessage*message;
//messagethathastobere-sentontimeoutpublic:
sender();
virtual~sender();
protected:
virtualcMessage*generateNewMessage();
virtualvoidsendCopyOf(cMessage*msg);
virtualvoidinitialize();
virtualvoidhandleMessage(cMessage*msg);
};
Define_Module(sender);
sender:
:
sender()
{timeoutEvent=message=NULL;
}sender:
~sender()
{cancelAndDelete(timeoutEvent);
deletemessage;
}voidsender:
initialize()
{
//Initializevariables.seq=0;
timeout=1.0;
timeoutEvent=newcMessage("
timeoutEvent"
//Generateandsendinitialmessage.EV<
<
"
Sendinginitialmessage\n"
;
message=generateNewMessage();
sendCopyOf(message);
scheduleAt(simTime()+timeout,timeoutEvent);
我们在设定发送端sender的时候,考虑到如果接收端reciever没有接到,sender的上一个message不能被清除,则规定接到相对应的ACK
后,
将刚刚发送的message清除,否则重发。
发送端规则及对message编号的代码如下:
voidsender:
handleMessage(cMessage*msg)
{if(msg==timeoutEvent)
//Ifwereceivethetimeoutevent,thatmeansthepackethasn'
t
//arrivedintimeandwehavetore-sendit.EV<
Timeoutexpired,resendingmessageandrestartingtimer\n"
}else//messagearrived
//Acknowledgementreceived!
EV<
Received:
msg->
getName()<
\n"
deletemsg;
//Alsodeletethestoredmessageandcancelthetimeoutevent.EV<
Timercancelled.\n"
cancelEvent(timeoutEvent);
//Readytosendanotherone.message=generateNewMessage();
}cMessage*sender:
generateNewMessage()
//Generateamessagewithadifferentnameeverytime.charmsgname[20];
sprintf(msgname,"
send-%d"
++seq);
cMessage*msg=newcMessage(msgname);
returnmsg;
在接收端我们需要做的就是将丢包情况考虑进去,设置随机丢包的情况。
如果message丢失,那么打印出丢失的字样,收到message,就返
回
一个相同编号的ACK。
classreciever:
{protected:
virtualvoidhandleMessage(cMessage*msg);
Define_Module(reciever);
voidreciever:
{if(uniform(0,1)<
0.1)
{EV<
\"
Losing\"
message"
msg<
endl;
bubble("
messagelost"
deletemsg;
}else
received,sendingbackanacknowledgement.\n"
send(newcMessage("
ack"
),"
out"
3.运行仿真程序并记录结果。
4.对实验结果进行分析总结。
实验结果及分析
这是13号message发送的全过程,包被接收端接收后,将接到一个ACK,
然后定时器重启。
如果包丢失,则会出现如下图的情况:
发送端收到ACK时间超时,认为数据丢失,再次发送send—16,直到收到ACK为止。
在停等式ARQ中,数据报文发送完成之后,发送方等待接收方的状态报告,如果状态报告报文发送成功,发送后续的数据报文,否则重传该报文。
停等式ARQ,发送窗口和接收窗口大小均为1,发送方每发送一帧之后就必须停下来等待接收方的确认返回,仅当接收方确认正确接收后再继续发送下一帧。
该方法所需要的缓冲存储空间最小,缺点是信道效率很低。
但它对后续的高级ARQ协议有着指导意义。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Omnet 停等式ARQ模型仿真实验 等式 ARQ 模型 仿真 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)