Omnet 停等式ARQ模型仿真实验.docx

上传人:聆听****声音 文档编号:360088 上传时间:2023-04-29 格式:DOCX 页数:6 大小:10.68KB
下载 相关 举报
Omnet 停等式ARQ模型仿真实验.docx_第1页
第1页 / 共6页
Omnet 停等式ARQ模型仿真实验.docx_第2页
第2页 / 共6页
Omnet 停等式ARQ模型仿真实验.docx_第3页
第3页 / 共6页
Omnet 停等式ARQ模型仿真实验.docx_第4页
第4页 / 共6页
Omnet 停等式ARQ模型仿真实验.docx_第5页
第5页 / 共6页
Omnet 停等式ARQ模型仿真实验.docx_第6页
第6页 / 共6页
亲,该文档总共6页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Omnet 停等式ARQ模型仿真实验.docx

《Omnet 停等式ARQ模型仿真实验.docx》由会员分享,可在线阅读,更多相关《Omnet 停等式ARQ模型仿真实验.docx(6页珍藏版)》请在冰点文库上搜索。

Omnet 停等式ARQ模型仿真实验.docx

实验二Omnet++停等式ARQ模型仿真实验

一.实验目的

1.熟悉omnet++软件使用。

2.对停等式ARQ模型进行更形象的分析与学习,了解此协议的思想。

二.实验工具

Omnet++软件三.实验步骤

1.用omnet++软件,创建一个arq.ned文件,编写代码,建立两个具有收发功能的节点并连接,传输延迟设置为100ms。

代码如下:

simplesender

{parameters:

@display("i=block/process");gates:

inputin;outputout;

}simplereciever

{parameters:

@display("i=block/process");gates:

inputin;outputout;

}networkArq

{submodules:

sender:

sender{parameters:

@display("i=,cyan");

}reciever:

reciever{parameters:

@display("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";sendCopyOf(message);scheduleAt(simTime()+timeout,timeoutEvent);

}else//messagearrived

{

//Acknowledgementreceived!

EV<<"Received:

"<getName()<<"\n";deletemsg;

//Alsodeletethestoredmessageandcancelthetimeoutevent.EV<<"Timercancelled.\n";

cancelEvent(timeoutEvent);deletemessage;

//Readytosendanotherone.message=generateNewMessage();sendCopyOf(message);scheduleAt(simTime()+timeout,timeoutEvent);

}

}cMessage*sender:

:

generateNewMessage()

{

//Generateamessagewithadifferentnameeverytime.charmsgname[20];

sprintf(msgname,"send-%d",++seq);cMessage*msg=newcMessage(msgname);returnmsg;

}

在接收端我们需要做的就是将丢包情况考虑进去,设置随机丢包的情况。

如果message丢失,那么打印出丢失的字样,收到message,就返

一个相同编号的ACK。

代码如下:

classreciever:

publiccSimpleModule

{protected:

virtualvoidhandleMessage(cMessage*msg);

};Define_Module(reciever);

voidreciever:

:

handleMessage(cMessage*msg)

{if(uniform(0,1)<0.1)

{EV<<"\"Losing\"message"<

deletemsg;

}else

{EV<

deletemsg;send(newcMessage("ack"),"out");

}

}

3.运行仿真程序并记录结果。

4.对实验结果进行分析总结。

实验结果及分析

这是13号message发送的全过程,包被接收端接收后,将接到一个ACK,

然后定时器重启。

如果包丢失,则会出现如下图的情况:

发送端收到ACK时间超时,认为数据丢失,再次发送send—16,直到收到ACK为止。

在停等式ARQ中,数据报文发送完成之后,发送方等待接收方的状态报告,如果状态报告报文发送成功,发送后续的数据报文,否则重传该报文。

停等式ARQ,发送窗口和接收窗口大小均为1,发送方每发送一帧之后就必须停下来等待接收方的确认返回,仅当接收方确认正确接收后再继续发送下一帧。

该方法所需要的缓冲存储空间最小,缺点是信道效率很低。

但它对后续的高级ARQ协议有着指导意义。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2