文章目录

  • 实验介绍
    • 实验内容:
    • 步骤
    • 具体步骤
      • 1 构建网络图
        • .ned
          • 节点模型
          • 网络模型
      • 2 写路由算法
        • .cc
        • msg.h
        • msg.cc
      • 3 启动网络
        • .ini

实验介绍

编程实现一个4维的立方体网络仿真,网络节点按照如下方式运行,
实验要求:
1.网络节点按照默认的顺序,如节点标识0,1,…,15从小到大的顺序依次产生一个数据包。
2.节点产生(或接收到)一个数据包后,随机选择一个相邻节点发送数据包,依此规则重复执行,直至产生数据包的节点接收到自己的数据包后,直接删除该数据包。
超级立方体网络指具有 d 个维度的网络具有2d个网络节点,网络节点按照0,1,2,…2d-1顺序进行编号。标识 i 的节点采用二进制方式可表示为d 位的二进制序列,网络任意两个节点二进制形式表示的d位标识符,对应位只有某一位不同时,表示节点是直接相邻接,否则,两个节点之间不存在直接相邻接。例如,对于一个3维的超级立方体网络,网络中存在8(8 = 23)个网络节点,如0(000),1(001) ,2(010) ,3(011) ,4(100) ,5(101) ,6(110) ,7(111)。网络拓扑结构按照如下方式连接,节点 0(000)与节点1(001) ,2(010) ,4(100) 直接相临接,因节点 0(000)与节点1,2,4分别在第1位,第2位,第3位不同(从左往右数),其他节点按此规律相邻接。

实验内容:

1.生成4维超立方体网络模型图及网络运行截图;
2.画出网络流程框图;
3.写出节点随机选择相邻节点的路由算法伪代码
4.统计每个节点产生的数据包一个轮回产生的跳数,同时,统计每个节点发送、接收的数据包的个数。

步骤

  • 构建4维的立方体网络网络模型图,编写.ned代码
  • 写出节点随机选择相邻节点的路由算法,编写.cc代码

具体步骤

1 构建网络图

先上图,生成的模型图如下(参考hypercube )

.ned

自己 new 一个 project(注意是empty project),再project中新建一个.ned文件。
工程创建参考:link

节点模型
simple Node
{parameters:int dim = default(4);//维数,默认为4,可自行修改生成各种维数的立方体@display("i=block/circle;is=vs");gates:inout gate[dim];//根据维数构建输出输入门
}
网络模型
network Hypercube
{parameters:int dim = default(4);types:channel Channel extends ned.DelayChannel {delay = 100ms;}submodules:node[2^dim]:Node;connections:for i=0..2^dim-1, for j=0..dim-1 {.node[i].gate[j] <--> Channel<-->node[i#(1<<j)].gate[j] if (i < i#(1<<j));//关键代码//此句代码将根据维数生成按照如下方式连接的网络拓扑结构:例如三维:节点 0(000)与节点1(001) ,2(010) ,4(100) 直接相临接,因节点 0(000)与节点1,2,4分别在第1位,第2位,第3位不同(从左往右数),其他节点按此规律相邻接。}
}

2 写路由算法

.cc

在project中,新建一个.cc文件

#include <omnetpp.h>
#include "msg.h"
#include <stdio.h>
using namespace omnetpp;
class Node: public cSimpleModule
{private:int hop;int sendCounter;//存储发送数目int recCounter;//存储接受数目int dim;//维数int pointCounter;//根据维数生成的节点数目protected:virtual TicTocMsg *generateMessage();virtual void initialize() override;virtual void handleMessage(cMessage *msg) override;void SendRandomMessage(TicTocMsg *msg);//随机选择从该节点的 一个节点发送消息出去
};Define_Module(Node);void Node::initialize()
{hop=0;sendCounter=0;recCounter=0;pointCounter=1;WATCH(hop);WATCH(sendCounter);WATCH(recCounter);//根据维数生成相应数量的点dim = par("dim");for(int i=0;i<dim;i++)pointCounter*=2;EV<<"pointCounter"<<pointCounter<<endl;for(int i=0;i<pointCounter;i++){if (getIndex() == i) {EV<<"node "<<i<<" :start!"<<endl;TicTocMsg *msg = generateMessage();//产生消息SendRandomMessage(msg);//随机选择一个门发送出去,随机转发算法}}
}void Node::handleMessage(cMessage *msg)
{recCounter++;//处理消息,即接受到消息,接受消息数目+1TicTocMsg *ttmsg = check_and_cast<TicTocMsg *>(msg);//转化类型//消息到达目的节点,打印调数,删除旧消息,生成新消息,随机发送消息if (ttmsg->getY() == getIndex()) {// Message arrived.EV << "Message " << ttmsg << " arrived after " << ttmsg->getHopCount() << " hops.\n";hop = ttmsg->getHopCount();//统计消息到达时的hopbubble("ARRIVED");//在网络视图中 产生 对话框,delete ttmsg;}//消息没到达目的节点,随机转发else{SendRandomMessage(ttmsg);//随机转发}
}void Node::SendRandomMessage(TicTocMsg *msg)
{// Increment hop count.//发送出去,跳数+1,发送数目+1msg->setHopCount(msg->getHopCount()+1);sendCounter++;// Same routing as before: random gate.int n = gateSize("gate");EV<<"gataSize:"<<n<<endl;int k = intuniform(0, n-1);EV << "Forwarding message " << msg << " on gate[" << k << "]\n";send(msg, "gate$o", k);//$0表示从out门发送出去
}//生成消息,
TicTocMsg* Node::generateMessage()
{int src = getIndex();  // our module indexint dest = src;//据题意:目的节点就是源节点char msgname[20];sprintf(msgname, "tic-%d", src);// Create message object and set source and destination field.TicTocMsg *msg = new TicTocMsg(msgname);msg->setX(src);msg->setY(dest);return msg;
}

msg.h

自定义消息头文件

#ifndef MSG_H_
#define MSG_H_
#include <omnetpp.h>class TicTocMsg;
class TicTocMsg : public ::omnetpp::cMessage
{protected:int x = 0;//存储源地址,这里命名有点lowint y = 0;//存储目的地址,命名不规范int hopCount = 0;//存储跳数private:void copy(const TicTocMsg& other);protected:// protected and unimplemented operator==(), to prevent accidental usagebool operator==(const TicTocMsg&);public:TicTocMsg(const char *name=nullptr, short kind=0);TicTocMsg(const TicTocMsg& other);virtual ~TicTocMsg();// field getter/setter methodsvirtual int getX() const;virtual void setX(int source);virtual int getY() const;virtual void setY(int destination);virtual int getHopCount() const;virtual void setHopCount(int hopCount);
};#endif /* MSG_H_ */

msg.cc

自定义消息实现文件

#include "msg.h"
#include <iostream>
#include <sstream>
#include <memory>namespace omnetpp {}void TicTocMsg::copy(const TicTocMsg& other)
{this->x = other.x;this->y = other.y;this->hopCount = other.hopCount;
}TicTocMsg::TicTocMsg(const char *name, short kind) : ::omnetpp::cMessage(name, kind)
{
}TicTocMsg::TicTocMsg(const TicTocMsg& other) : ::omnetpp::cMessage(other)
{copy(other);
}TicTocMsg::~TicTocMsg()
{
}int TicTocMsg::getX() const
{return this->x;
}void TicTocMsg::setX(int source)
{this->x = source;
}int TicTocMsg::getY() const
{return this->y;
}void TicTocMsg::setY(int destination)
{this->y = destination;
}int TicTocMsg::getHopCount() const
{return this->hopCount;
}void TicTocMsg::setHopCount(int hopCount)
{this->hopCount = hopCount;
}

3 启动网络

.ini

网络配置

[General]
network = Hypercube

欢迎读者们提出你们宝贵的建议。

omnet++ 4维的立方体网络仿真相关推荐

  1. 【OMNET++】卫星网络仿真

    前言 OMNET++工程osg-satellites支持三维卫星网络仿真.具有以下特点和功能: QT接口 仿真时间分辨率MS 卫星数量设置 背景图片加载 雷达主要城市经纬度设置 顶点.向量和法线计算其 ...

  2. 网络仿真软件性能比较

    [导读]网络仿真技术是一种通过建立网络设备和网络链路的统计模型, 并模拟网络流量的传输, 从而获取网络设计或优化所需要的网络性能数据的仿真技术.由于仿真不是基于数学计算, 而是基于统计模型,因此,统计 ...

  3. 华为 eNSP V100R003C00 和 eNSP 设备包大全,来这里一键下载!快捷方便,网络仿真不用愁!

    eNSP是华为企业路由器.交换机的图形化网络仿真平台,该平台通过对真实网络设备的仿真模拟,帮助广大ICT从业者快速熟悉华为路由.交换系列产品,了解并掌握相关产品的操作和配置,提升对企业ICT网络的规划 ...

  4. Windows平台下NS2网络仿真环境的搭建

    NS2(Network Simulator 2) 是一种针对网络技术的源代码公开的.免费的软件模拟平台,研究人员使用它可以很容易的进行网络技术的开发,而且发展到今天,它所包含的模块几乎涉及到了网络技术 ...

  5. OPNET网络仿真分析-1.1.1、网络仿真简介

    版权声明:本书为作者版权所有,仅用于学习,请勿商用 OPENT网络仿真分析 (作者:栾鹏.陈玓玏) OPNET网络仿真分析-目录 OPNET网络仿真分析-电子版 1.1.1.网络仿真简介 1.网络仿真 ...

  6. 运维工程师和网络工程师的差别在哪?到底哪个更有“钱”途?

    网络运维工程师属于网络工程师里售后的一个分支 网络工程师按销售时间分售前.售后.按工程步骤分设计.建设.运行.维护,运维就是后两个,工作职责主要是维护.升级和出问题的时候解决问题.至于售前,一般是根据 ...

  7. NS2网络仿真的过程

    NS2网络仿真的过程可以总结为: 1.初始化     创建ns simulator     创建.tr文件(记录仿真结果)     创建.nam文件(记录仿真过程)     设置结束函数     设置 ...

  8. NS-3网络仿真平台搭建及可视化

    面向5G车联网仿真平台的搭建 本博客是基于SRTP(面向5G车联网仿真平台设计与开发)而搭建的"面向5G车联网的网络仿真平台",以供大家学习使用. 目录 前言概述 准备工作 下载n ...

  9. Alevin——虚拟网络仿真平台

    Alevin--虚拟网络仿真平台 摘要: 抽象网络虚拟化被看作是未来互联网的一种实现技术.在此背景下,目前已有文献介绍了许多虚拟网络嵌入算法.本文讨论了一个评估这些算法的开源框架.本文描述了该框架提供 ...

  10. eNSP网络仿真软件配置局域网vlan

    eNSP网络仿真软件配置局域网vlan 实验准备 实验 2.1 基于端口的 VLAN 的划分 实验 2.2 基于 MAC 地址的 VLAN 的划分 实验 2.3 基于 IP 地址的 VLAN 的划分 ...

最新文章

  1. Spark in meituan http://tech.meituan.com/spark-in-meituan.html
  2. 复制选中的listbox内容
  3. 前端学习(3054):vue+element今日头条管理-状态展示处理
  4. 百度地图Key的设置方法
  5. Python基础import导包问题
  6. 男人拥有女人后的心态变化
  7. 搜狗王小川:搜狗的语音识别比阿里和科大讯飞的好
  8. [Linux + 深度学习]Ubuntu18.04 深度学习环境配置
  9. 5.20 考试 20 未完
  10. Halcon教程二:内置实例程序库
  11. android倒计时服务,Android倒计时器——CountDownTimer
  12. 网站服务器配置在哪里设置,web服务器配置参数 web服务器建立网站具体步骤
  13. 张靓颖同学2006年日程表
  14. Jikes 研究虚拟机(RVM)二 JVM 的组织
  15. java 手机智能拨号_智能拨号 CeleDial v1.8
  16. Hive 取非 Group by 字段数据的方法
  17. 机房监控系统解说—新风机篇
  18. java properties map_为什么java.util.Properties实现Map而不是Map
  19. ActiveMQ使用及原理浅析(消息队列)
  20. QT编程从入门到精通之一:“第一章:认识QT”之“1.1 Qt简介”

热门文章

  1. RationalDMIS7.1自动测量圆+参考测量(汇总)
  2. 开发者硬核:Web3 DApp 最佳编程实践指南
  3. Java算法之 循序搜寻法
  4. 快读与快输(读入优化与输出优化、QIO优化)
  5. 基于Proteus学习单片机系列(九)——DA转换及其应用--TLC5615
  6. cesium heading(yaw)-pitch-roll的关系(3)
  7. 计算机领域所有SCI期刊,计算机领域的所有SCI一区期刊,这是最顶级期刊了
  8. 【杂篇 · 虚拟机】win11安装虚拟机
  9. python深拷贝与浅拷贝
  10. True Liars (POJ - 1417)带权并查集+dp路径