网站的建设与预算,哪些网站做推广,医院美容网站建设,那些网站是php开发的文章目录 一、概述二、链路模型和包格式创建三、进程模型1.src 进程模型2.sink 进程模型 四、节点模型五、网络模型六、仿真结果 一、概述
本例程是在 OPNET Modeler 中对停等协议的建模和仿真#xff0c;其中停等协议的操作过程如下#xff1a; #xff08;1#xff09;发… 文章目录 一、概述二、链路模型和包格式创建三、进程模型1.src 进程模型2.sink 进程模型 四、节点模型五、网络模型六、仿真结果 一、概述
本例程是在 OPNET Modeler 中对停等协议的建模和仿真其中停等协议的操作过程如下 1发送方每次仅将当前信息帧作为备份保留在缓冲存储器中 2当发送方开始发送信息帧时赋予该信息帧一个帧序号随即启动计时器 3当接收方收到无差错的信息帧后即向发送方返回一个与该帧序号相同序号的ACK确认帧 4当接收方检测到一个含有差错的信息帧时便舍弃该帧 5若发送方在规定时间内收到ACK确认帧即将计时器清零需而开始下一帧的发送 6若发送方在规定时间内未收到ACK确认帧则应重发存于缓冲器中的待确认信息帧。 二、链路模型和包格式创建
创建点对点双工链路模型其设置如下图所示。 ACK 反馈包的包格式设置如下图所示。 三、进程模型
1.src 进程模型
停等协议模块的进程模型状态转移如下表所示。
当前状态转移条件执行函数下一状态initPOWER_UP无idleidleFRAME_ARRIVALsend_frame()ACKWaitidleLINK_FAIL无Linkdownidledefault无idleACKWaitFRAME_ARRIVALqueue_frame()ACKWaitACKWaitACK_ARRIVAL !QUEUE_EMPTYproc_ack();send_next_frame()ACKWaitACKWaitTIME_OUTresend_frame()ACKWaitACKWaitLINK_FAIL无ACK_Wait_LinkdownACKWaitACK_ARRIVAL QUEUE_EMPTYproc_ack()idleLinkdownLINK_UP QUEUE_EMPTY无idleLinkdownLINK_UP !QUEUE_EMPTYsend_next_frame()ACKWaitLinkdownFRAME_ARRIVALqueue_frame()LinkdownACK_Wait_LinkdownLINK_UPproc_flag()ACKWaitACK_Wait_LinkdownFRAME_ARRIVALqueue_frame()ACK_Wait_LinkdownACK_Wait_LinkdownTIME_OUTflag 1;ACK_Wait_LinkDown
stop_wait_queue 模块的进程模型如下图所示。 状态变量设置如下图所示。 头块代码如下。
#define GEN_IN_STRM 0
#define RCV_IN_STRM 1
#define POWER_UP (op_intrpt_type() OPC_INTRPT_BEGSIM)
#define FRAME_ARRIVAL (op_intrpt_type() OPC_INTRPT_STRM op_intrpt_strm() GEN_IN_STRM)
#define LINK_FAIL (op_intrpt_type() OPC_INTRPT_FAIL)
#define TIME_OUT (op_intrpt_type() OPC_INTRPT_SELF)
#define ACK_ARRIVAL (op_intrpt_type() OPC_INTRPT_STRM op_intrpt_strm() RCV_IN_STRM)
#define QUEUE_EMPTY (op_subq_empty(0) OPC_TRUE)
#define LINK_UP (op_intrpt_type() OPC_INTRPT_RECOVER)函数块代码。
void send(Packet * pkptr)
{FIN(send(Packet * pkptr));copy_pk op_pk_copy(pkptr); op_pk_send(pkptr,0);ack_event op_intrpt_schedule_self(op_sim_time()5.0,0); FOUT;
}void send_frame()
{FIN(send_frame());send(op_pk_get(op_intrpt_strm())); FOUT;
}void queue_frame()
{FIN(queue_frame());op_subq_pk_insert(0,op_pk_get(op_intrpt_strm()),OPC_QPOS_TAIL); FOUT;
}void resend_frame()
{FIN(resend_frame());send(copy_pk); FOUT;
}void proc_ack()
{FIN(proc_ack());op_ev_cancel(ack_event);op_pk_destroy(copy_pk);FOUT;
}void send_next_frame()
{FIN(send_next_frame());send(op_subq_pk_remove(0,OPC_QPOS_HEAD)); FOUT;
}void proc_flag()
{FIN(proc_flag());if(flag 1)resend_frame();flag 0;FOUT;
}2.sink 进程模型
sink 模块的进程模型如下图所示。 状态变量设置如下图所示。 头块代码。
#define PK_RECEIVE (op_intrpt_type()OPC_INTRPT_STRM)init 状态的进入执行代码。
RBT_handle op_stat_reg(Received Bit Throughput (bits/sec),OPC_STAT_INDEX_NONE,OPC_STAT_GLOBAL);
ETE_Delay_handle op_stat_reg(End to end Delay (sec),OPC_STAT_INDEX_NONE,OPC_STAT_GLOBAL);
ack_count_handle op_stat_reg(Number of ACK Packets,OPC_STAT_INDEX_NONE,OPC_STAT_GLOBAL);
op_ima_obj_attr_get(op_id_self(),Ack Sending Delay(seconds),ack_delay);
received_bit 0;
ack_count 0;函数块代码。
void receive_process()
{int index;Packet* pkptr;Packet* ack_ptr;double ete_delay;double creation_time;double sim_time;FIN(receive_process());index op_intrpt_strm();pkptr op_pk_get(index);creation_time op_pk_creation_time_get(pkptr);sim_time op_sim_time();ete_delay sim_time - creation_time;op_stat_write(ETE_Delay_handle,ete_delay);received_bit op_pk_total_size_get(pkptr);op_stat_write(RBT_handle,received_bit/sim_time);op_pk_destroy(pkptr);ack_ptr op_pk_create_fmt(ack_pkt); ack_count;op_stat_write(ack_count_handle,ack_count);op_pk_send_delayed(ack_ptr,0,ack_delay);FOUT;
}全局属性设置如下图。 全局统计量设置如下图。 四、节点模型
src 的节点模型如下图所示。 gen 模块的属性设置。 stop_wait_queue 模块的属性设置。 sink 的节点模型如下图所示。 sink 模块的属性设置。 五、网络模型
网络模型如下图所示。 除了前面创建的两个节点和链路对象外还有一个设置链路故障的对象。 链路模型的属性设置。 Failure Recovery 的属性设置如下图所示。 设置其在180s时链路故障480s时链路恢复再到600s时链路故障720s时链路再恢复。 六、仿真结果
在网络模型中设置 src 节点的发包间隔为1ssink 节点的 ACK 回复延迟 8s仿真持续时间为1000s运行仿真。 端到端延时的结果如下图所示。 设置绘图为离散形式显示如下。 可以看到在链路没有故障时延时是增长的有故障时延时就没有了。 接收到 ACK 包的数量如下图所示。 链路没有故障时ACK 包的数量单调递增链路故障时就没有 ACK 包到达了此时包的数量保持不变链路恢复后ACK 包的数量接着增加。 吞吐量如下图所示。 吞吐量和链路的故障与否仍然有关在链路产生故障时吞吐量明显下降。 下行链路利用率如下图所示。 上行链路利用率如下图所示。 产生包的速率是比收到 ACK 包的速率大的因此下行链路利用率要比上行链路利用率高出不少。 src 节点的包动画如下。 sink 节点的包动画如下。 stop_wait_queue 模块的进程模型动画如下。 sink 模块的进程模型动画如下。 以上就是 OPNET Modeler 例程——停等协议的建模和仿真的全部内容了。