NDN之ndnSIM-NS3学习笔记(二)

本文介绍了如何在ndnSIM中进行仿真,包括搭建拓扑、配置策略、使用IDE如CLion和VScode进行代码编写,以及解决VScode中编译问题。重点讲解了结合CLion和VScode进行NS3开发环境的配置过程。
Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

前言

前一篇博客已经顺利完成了ndnSIM的安装过程。

还未安装的请参考:NDN之ndnSIM-NS3学习笔记(一)_zrr1221的博客-优快云博客

一、ndnSIM仿真介绍

ndnSIM的仿真过程主要可以分为三步:

1、建立仿真场景,包括拓扑、应用(名称)的相关配置、路由策略和缓存机制等;

2、设置仿真时间,启动仿真,获取仿真数据;

3、分析数据,将数据绘图,生成实验结果。

其中,前两步是在ndnSIM中完成,最后一步可以使用python或者matlab完成画图。

前两步的完成主要依赖自己编写的代码,即自己编写的cpp文件或cc文件。具体的代码存放位置可以参考:ndnSIM 应该在哪里编写脚本 自己编写的文件放在哪运行?_producerhelper.setattribute-优快云博客

代码中要完成的内容:
1.      构建拓扑结构,使用代码依次创建节点和链接或者直接读取拓扑文件(如果使用拓扑文件请参考)

2.      在所有节点安装NDN栈

3.      配置转发策略

4.      为各个节点安装消费者应用或者生产者应用,用于生产或请求NDN网络中的流量数据

5.      手动或者用 GlobalRoutingHelper 生成FIB表

6.      设置仿真时间

7.      使用 trace helper 等工具获取仿真结果(https://ndnsim.net/2.1/metric.html)

8.      开始仿真,仿真结束后销毁
 

参考链接:ndnSIM 如何进行仿真实验 仿真步骤_身价五毛的博客-优快云博客

二、ndnSIM仿真结合IDE进行代码编写 

ndnSIM安装、源代码结构与修改兴趣包生存周期-优快云博客

在这篇博客中给出了一种开发软件IDE-CLion。可参考下载CLion以及学习其使用方法进行代码编写,但是在编译运行仿真的时候,依然需要使用命令行,CLion无法识别一些代码调用会乱标红,只能用来看看改改。

也可以下载VScode作为IDE进行代码编写。

下面详细介绍NS3结合VScode开发环境配置:

1、在Ubuntu software 中搜索VScode下载,或者从Visual Studio Code官网下载deb软件包。

并将VScode添加到收藏夹。

 2、安装CMake和C++插件

打开VS Code,快捷键(Ctrl + Shift + X)打开扩展模块,或在最左侧活动栏中找到拓展模块图标点击打开拓展模块,在输入栏中输入“C/C++”,安装C++插件,如下图所示:

同理,安装CMake插件:

接下来配置NS3-VScode开发环境:

1、按Ctrl+Shift+P打开命令面板,输入查找“C/C++: Edit Configurations (JSON)“并点击,打开“c_cpp_properties.json”文件。


用如下代码替换:

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/build/**"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "gnu17",
            "cppStandard": "gnu++14",
            "intelliSenseMode": "linux-gcc-x64",
            "compileCommands": "${workspaceFolder}/build/compile_commands.json"
        }
    ],
    "version": 4
}

2、点击左侧目录结构.vscode->launch.json,打开launch.json文件

用如下代码替换:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C/C++: cpp 生成活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "/home/zrr/桌面/ndnSIM/ns-3/build/scratch/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            // "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: cpp 生成活动文件",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}

注意: 

"launch.json"文件中的"program"字段改成自己的,可用如下代码查看路径

cd build/scratch/
pwd

3、点击左侧目录结构.vscode->tasks.json,打开tasks.json文件

用如下代码替换:

{
	"version": "2.0.0",
	"tasks": [
		{
			"type": "cppbuild",
			"label": "C/C++: cpp 生成活动文件",
			// "command": "/usr/bin/cpp",
			"command": "./waf",
			"args": [
				// "-fdiagnostics-color=always",
				// "-g",
				// "${file}",
				// "-o",
				// "${fileDirname}/${fileBasenameNoExtension}"
			],
			"options": {
				"cwd": "${workspaceFolder}"
			},
			"problemMatcher": [
				"$gcc"
			],
			"group": {
				"kind": "build",
				"isDefault": true
			},
			"detail": "编译器: /usr/bin/cpp"
		}
	]
}

----------------------------------------------------------------------------------------------------------------------------

注意!!!运行examples~>tutorial~>first.cc,按F5运行,会出现如下问题:

 是因为所有的编译后的文件储存在/home/zrr/桌面/ndnSIM/ns-3/build 目录下,而launch.json中的

"program": "/home/zrr/桌面/ndnSIM/ns-3/build/scratch/${fileBasenameNoExtension}",

 该语句将可执行的路径限制在了/home/zrr/桌面/ndnSIM/ns-3/build/scrach下  而first.cc的目录应修改为/home/zrr/桌面/ndnSIM/ns-3/build/examples/tutorial下,因此产生该错误。

主要解决办法为:在scrach目录下新建项目,进行项目代码的编写,完成后续调试过程。

运行代码时可直接按F5进行编译执行。

要运行其他目录下的代码实例时可利用终端窗口输入./waf --run 文件名

如:运行frist.cc  输入./waf --run first.cc

 参考链接: ns3+VSCode开发环境配置完美版_哔哩哔哩_bilibili

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>嗯,用户想了解ndnSIM的使用或学习资料,他们提到了教程、学习资料和使用指南。首先,我需要根据用户提供的引用内容来整理相关信息。用户给出的引用1到4提到了几个关键点:ndnSIM是基于NS-3NDN模拟器,安装步骤,目录结构,以及学习资源稀缺的问题。 首先,用户可能对如何开始学习ndnSIM感到困惑,特别是因为资料较少。根据引用1,推荐的学习教程包括官方文档、示例脚本和社区资源。需要强调这些资源的重要性,并可能建议用户从示例入手。引用2详细描述了项目结构,所以应该解释各个目录的作用,比如examples/里的示例脚本,ndnSIM/中的核心模块,这有助于用户理解项目布局。 然后,安装步骤是关键,用户可能遇到安装问题。引用3和4提到了安装过程,包括git克隆仓库和使用waf构建。需要分步骤说明安装过程,确保用户能正确安装ndnSIM。这里需要注意可能的依赖问题,比如系统环境、Python绑定等,可能需要提醒用户安装前检查依赖。 接下来,用户可能需要知道如何运行第一个示例。引用2中的examples/目录包含示例脚本,可以指导用户运行简单的场景,比如ndn-simple.cpp。此外,可能需要提到修改和调试代码的方法,比如使用NS-3的日志系统。 用户可能还想了解进阶内容,比如自定义场景或与其他工具集成。引用1提到了Docker镜像和论文复现,这些可以作为进阶学习的资源。同时,需要指出常见问题,如编译错误、依赖缺失,并给出解决建议,比如查看issue列表或论坛。 最后,生成相关问题时,要覆盖安装、运行示例、项目结构、调试、自定义应用和社区资源等方面,确保用户能全面了解ndnSIM的使用和学习路径。需要保持回答结构清晰,分步骤说明,并引用提供的资料来增强可信度。</think>### ndnSIM 使用指南与学习资料整理 #### 一、学习资源推荐 1. **官方文档与示例** ndnSIM 的核心学习资料主要集中在 `examples/` 目录下的脚本和 `README.md` 文件[^2][^4]。示例脚本覆盖了基础网络拓扑构建、兴趣包/数据包交互等场景,例如 `ndn-simple.cpp` 展示了简单的生产者-消费者模型。 2. **社区教程与论文复现** - ndnSIM 官方 GitHub Wiki 提供安装指南和基础配置说明[^3] - 研究论文《A Survey of Named Data Networking》中的仿真案例可通过官方示例复现[^1] - 开发者社区(如 GitHub Discussions)中有用户分享的 Docker 镜像和调试技巧 3. **关键目录解析** ```plaintext ndnSIM/ ├── examples/ # 示例脚本(学习起点) ├── ndnSIM/apps/ # 自定义应用程序模板 ├── ndnSIM/model/ # NDN 协议栈核心逻辑 └── ndnSIM/scenarios/ # 预设网络拓扑场景 ``` #### 、环境搭建步骤 1. **依赖安装** 需提前安装 NS-3 要求的依赖项(Python、gcc、CMake 等),然后执行: ```bash git clone https://github.com/named-data-ndnSIM/ns-3-dev.git ns-3 git clone --recursive https://github.com/named-data-ndnSIM/ndnSIM.git ns-3/src/ndnSIM ``` 2. **编译与验证** ```bash cd ns-3 ./waf configure --enable-examples ./waf build ./waf --run ndn-simple # 测试基础示例 ``` #### 三、核心开发流程 1. **场景构建** 通过 `ndnSIM/scenarios/` 中的拓扑模板(如树形、环形结构)快速搭建网络: ```cpp // 示例:创建节点 NodeContainer nodes; nodes.Create(3); PointToPointHelper p2p; p2p.Install(nodes.Get(0), nodes.Get(1)); ``` 2. **自定义应用开发** 继承 `Application` 类实现兴趣包发送逻辑,参考 `ndnSIM/apps/ndn-consumer.cpp` 的设计模式。 3. **数据收集与分析** 使用 `ndn::L3RateTracer` 跟踪网络流量,输出 CSV 格式日志进行可视化分析。 #### 四、常见问题解决 - **编译失败**:检查 `pybindgen` 版本是否匹配 - **日志调试**:启用 NS-3 的 `NS_LOG` 环境变量输出详细过程 - **性能优化**:调整 CS(内容存储)大小和 FIB 表更新频率
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值