logo资料库

信息网络建模与仿真.docx

第1页 / 共27页
第2页 / 共27页
第3页 / 共27页
第4页 / 共27页
第5页 / 共27页
第6页 / 共27页
第7页 / 共27页
第8页 / 共27页
资料共27页,剩余部分请下载后查看
一、实验目的
二、题目要求
三、实验说明
3.1 ad hoc接入方式
3.2 主要相关代码
四、程序运行
4.1 创建wifi-simple-adhoc-grid.cc副本
4.2 程序编译
4.3 Netanim实现可视化
五、实验任务
5.1 拓扑模型
5.1.1 修改数量
5.1.2 修改位置和运动模型
5.1.3 实验要求
5.2 WiFi和信道参数设定
5.2.1. 基本组成
5.2.2. 信道模型
5.2.3. 实验要求
5.3 网络层模型
5.3.1 修改网络层路由协议
5.3.2 实验要求
5.4 统计模块
5.4.1 节点设置
5.4.2 实验步骤
5.4.3 实验要求
5.5 能耗模型(选做,2分)
5.5.1 能耗模型
5.5.2 实验要求
五、附录:在ns3中建立新的库函数(tem文件)
一、实验目的 本实验基于 NS-3 仿真平台,通过多种网络模型建模的设计,使学生掌握信 息网络的 Ad hoc 拓扑建模、移动性建模、信道建模、协议层建模等方法。另外, 本实验借助 Netanim 实现仿真网络的可视化,旨在直观地学习和掌握网络的结构 和变化过程,以更好地理解信息网络建模与仿真的过程。对于仿真结果,可以采 用 stats 或者 trace 文件进行结果分析和统计。最终,用可视化工具呈现仿真过程 以及图形化表征统计结果。 二、题目要求 1. 在上一个实验的基础上,建立 ad hoc 节点拓扑模型,网络中节点均具有路由 转发功能; 2. 进 入~/tarballs/ns-allinone-3.2x/ns-3.2x/examples/wireless$ 目 录 , 在 wireless 文件夹下,有很多 wifi 传输的示例。在 wifi-simple-adhoc-grid.cc 代码基础上 修改,文件拷贝到 scratch 文件夹下,重命名为你的姓名缩写+学号,例如学 生姓名钢铁侠,学号 20191314,c 文件命名为 gtx20191314.cc; 3. 读懂 wifi-simple-adhoc-grid.cc 代码,掌握在 NS-3 中网络拓扑布局,ad hoc 传输方式、网络路由的简单配置等,成功运行 wifi-simple-adhoc-grid.cc; 4. 掌握拓扑建模方法,在 wifi-simple-adhoc-grid.cc 代码中扩展建立到 100 个节 点,节点初始呈现网格布局; 5. 深入研究移动模型建模方法,完成对移动模型参数设置,使得节点移动在可 视化界面更加明显; 6. 深入研究信道模型建模方法,在代码中完成对信道模型的替换,例如 Friis、 LogDistancePropagationLossModel 信道模型。通过射频参数,了解发射机、 路径损耗和接收机间增益的计算方法。可以根据参数配置想要的发射距离; 7. 掌握网路层路由配置方法,可以配置多种 ad hoc 路由模式,例如 OLSR、aodv 等。查阅不同路由协议的工作原理和方法; 8. 掌握统计模型的使用方法,可以统计相应节点的时延、丢包率等重要指标; 9. 掌握能耗模型的使用方法,配置节点能量,设备能量,可以统计节点的能量 消耗;
10. 掌握统计数据作图方法,对于获得的统计数据,图形化的形式得出结果。 三、实验说明 本实验以~ns-3.2x/examples/wireless/wifi-simple-adhoc-grid.cc 为基础,完成 ad hoc 网络的建模、仿真、统计和结果呈现。 3.1 ad hoc 接入方式 上一个实验中,我们了解了两种接入方式:有线接入和无线接入。其中,无 线接入方式,是存在 AP(Access Point)节点的中心接入方式。本次实验中,我 们学习无线接入方式中的另一种方式:ad hoc 组网方式。 ad hoc 网络即为自组织网络。网络中没有中心节点来管理网络中节点的接入、 退出、路由等内容。ad hoc 网络中的节点,一般均具有路由转发功能。ad hoc 路 由方式不再采用静态路由或者动态路由的路由表式方法,而是采用更为动态的自 组网路由方式。 3.2 主要相关代码 1. ~/examples/wireless/wifi-simple-adhoc-grid.cc 程序代码为基本文件,在此基础 上进行修改,包括添加其他模块,头文件等。 2. ~/examples/stats/wifi-example-apps.cc 统计模块函数文件 3. ~/examples/stats/wifi-example-apps.h 统计模块函数文件 4. ~/examples/stats/wifi-simple-sim.cc,统计模块示例文件 5. ~/examples/energy/energy-model-example.cc 能耗模块示例文件 每一个代码的使用方法,详见后文。 四、程序运行 4.1 创建 wifi-simple-adhoc-grid.cc 副本 将 examples/wireless 中的 wifi-simple-adhoc-grid.cc 拷贝到 scratch 目录,重命 名为你的姓名缩写+学号,例如学生姓名钢铁侠,学号 20191314,c 文件命名为 gtx20191314.cc。 用 vim 编辑器打开代码进行编辑,vim 编辑器简单快捷键如下。
1. 修改代码:在命令行模式下进入到输入模式,  i:在光标所在字符前开始插入  a:在光标所在字符后开始插入  o:在光标所在行的下面另起一新行插入  s:删除光标所在的字符并开始插入  I:在光标所在行的行首开始插入 如果行首有空格则在空格之后插入  A:在光标所在你行的行尾开始插入  O:在光标所在行的上面另起一行开始插入  S:删除光标所在行并开始插入  u:撤销上一步的操作  Ctrl+r:恢复上一步被撤销的操作 2. 保存代码:首先使用 esc(键退出)->:(符号输入)->wq(保存退出)  :wq(保存编辑操作退出)  :wq!(保存编辑强制退出) 4.2 程序编译 进行编译./waf --run scratch/gtx20191314,注意这里的命令是编译后文件名 gtx20191314 而不是 c 文件 gtx20191314.cc。 4.3 Netanim 实现可视化 安装好 Netanim 后,在命令行进入 Netanim 文件夹(该文件夹位于 ns 目录下), 在终端输入: $ ./NetAnim 即可打开 Netanim。命令行会记录 Netanim 的工作状态,如图: 由于 Netanim 是通过打开.xml 文件来实现网络结构的可视化,因此本实验首 先要生成.xml 文件。添加可视化所需的代码,运行 gtx20191314.cc 文件将自动产 生对应的.xml 文件(该文件位于~/ns-3.2x 文件夹)。在 Netanim 中,通过直接 点击可视化窗口左上角的文件夹,即可导入此.xml 文件获得可视化结果。
五、实验任务 5.1 拓扑模型 wifi-simple-adhoc-grid.cc 提供了一个默认网络拓扑结构,包括 25 个 wifi 节点, n21 n16 n11 n6 n1 如下: // The default layout is like this, on a 2-D grid. // // n20 // n15 // n10 // n5 // n0 // // the layout is affected by the parameters given to GridPositionAllocator; // by default, GridWidth is 5 and numNodes is 25. 节点从 n0 到 n24,节点均为 ad hoc 模式,初始呈现网格结构。 n24 n19 n14 n9 n4 n22 n17 n12 n7 n2 n23 n18 n13 n8 n3 根据此范例,我们可以修改节点的数量和位置,实现拓扑模型的改变。 5.1.1 修改数量 修改 xxx.Create()中的数字,即可改变节点数量。 修改定义 uint32_t numNodes = 100; … NodeContainer c; c.Create (numNodes); //建立 100 个节点 // 定义节点数量 100 5.1.2 修改位置和运动模型 在设定坐标系时,可利用 MobilityHelper 类中的 SetPositionAllocator()函数和 ns3::GridPositionAllocator,设定节点位置,其具体步骤如下: MobilityHelper mobility; mobility.SetPositionAllocator ("ns3::GridPositionAllocator", //网格位置分配 "MinX", DoubleValue (0.0), "MinY", DoubleValue (0.0),
"DeltaX", DoubleValue (distance), //间距 "DeltaY", DoubleValue (distance), "GridWidth", UintegerValue (10), //一行节 点数量 在可视化界面中可以改变节点的大小,使得节点更为明显(最大为 20)。 "LayoutType", StringValue ("RowFirst")); 在可视化界面中的初始效果如下图所示, 在设置节点位置之后,需要设定节点运动模型,使节点具有移动性: 图 1 网格化节点拓扑 (1) 节点静止 mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
(2) 节点运动 RandomWalk2dMobilityModel NS3 自带的 2d 运动模型,bounds 属性为设置节点移动的边界 mobility.SetMobilityModel ("ns3::RandomWalk2dMobilityModel", "Bounds", RectangleValue (Rectangle (-50, 50, -50, 50))); //"Bounds"是设定边界范围,如果过小,将无法分配节点。需要根据节点数量, 估算边界大小,使得边界覆盖节点的运动范围。修改(-50, 50, -50, 50)中的数值。 示例代码默认使用 RandomWalk2dMobilityModel,但是并没有设定游走模型 内部的参数。 5.1.3 实验要求 1. 修改 WiFi 节点的数量和位置,实现 WiFi 的节点数量 100 个; 2. 网格初始化布局;(代码中设置节点初始距离 500m) 3. 查看封装函数,根据传输距离,设定运动模式(mode)、时间(time)、方 向(direction)、距离(distance)、运动速度(speed)、运动边界(bounds) 以至运动效果明显。 说明:原有节点运动,在可视化界面中运动不明显。修改后,要在可视化时 能够明显的体现出节点移动性。 4. 修改不限于 RandomWalk2dMobilityModel,可以用其他运动模型代替,可以 实现明显的移动性即可。 经过一段运动,在可视化界面显示效果参考如下:
图 2 运动会节点拓扑示例
5.2 WiFi 和信道参数设定 5.2.1. 基本组成 Ns-3 的 WifiNetDevice 基于 802.11 标准构建,能够精确执行标准 MAC 和 PHY 层的要求。Ns-3 建立 wifi 节点的过程是模块化的。Ns-3 提供了 Helper 帮助 建立 Wi-Fi 节点。建立 WifiNetDevice 一般要分别设定信道、物理层和 MAC 层 参数: 1 设置信道模型 借助 YansWifiChannelHelper 生成默认信道模型并设置参数,属性设定包括 传播时延和传播损耗。 2 设置物理层模型 借助 YansWifiPhyHelper 生成物理层模型并设置属性,属性包括错误率模型 和移动模型。物理层模型涉及的常用属性有: TxGain、 TxPowerEnd(最大传输水平,默认为 16.0206dbm)、 TxPowerStart(:最小传输水平,默认为 16.0206dbm)、 EnergyDetectionThreshold(能量检测门限,默认为-96dbm)、 CcaMode1Threshold 9(确定为 CCA busy 状态的门限,默认为-99dbm)、 RxGain 等。 传输 增 益和接收增益 由 TxGain 和 RxGain 分别设 置,接收到的 信号由 EnergyDetectionThreshold 阈值检测,高于阈值即可以在 PHY 层被检测到。信道 衰落在信道部分设置,包括信道的传播时延和传播损耗。调用 wifiPhy.Set 函数 进行属性设定。 加入下段代码,替代原有 wifiPhy.Set 部分 90: wifiPhy.Set ("RxGain", DoubleValue (0.0)); // Reception gain (dB). wifiPhy.Set ("TxGain", DoubleValue (0.0)); // Transmission gain (dB) wifiPhy.Set ("CcaMode1Threshold", DoubleValue (-62.0)); //Clear Channel Assessment,空闲信道评估,判断信道是否空闲。
分享到:
收藏