NS3初识——first.cc例子分析

本文详细分析了NS3的第一个实例脚本first.cc,介绍了创建节点、安装MAC层、协议栈、IP地址、应用层的过程,以及事件的运行方式。通过Helper类的使用,展示了NS3中如何设置参数并安装组件。运行first.cc时,需在正确目录下执行命令。文中还探讨了应用层的启动时间设置、回调机制以及日志输出的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:
团队仿真必须用ns3上个月速成了c++,这个月看了两个ns3项目的代码,但是还没有实际运行也没有自己写代码,项目代码也是看的稀里糊涂。对于ns3中一些常用的语法啊,回调啊,main函数的书写方法什么都不了解,决定跟随ns3白皮书,过一遍ns3的语法。书中相关例程将发布在ns3这个博客的文件夹下,以免之后再忘记。欢迎各位前辈指点,希望自己快点学会hhhh!

下面是第一个实例脚本first.cc的全部源码

可以看出ns3的总体思路就是
①先创建节点
②创建MAC层Helper类,这个Helper跟采用何种物理信道有关,调用Set***Attribute方法设置一些物理参数
③调用Helper的Install()方法将mac层设备NetDevice以及物理信道装载到node上
④创建协议栈Helper,并Install安装到节点上
⑤创建网络ip地址的Helper,应用Assign方法将地址安装到mac设备NetDevice上
⑥创建应用层Helper,此例子中用的是UdpEchoServerHelper,调用SetAttribute 方法设置应用参数,然后用Install将应用程序装载到node上去
⑦程序的最后调用 Simulator::Run (); Simulator::Destroy ();进行事件的按序运行,开始按照设置事件发生的时间逐一运行事件
关于ns3的Event和Simulator可以参看以下博文:
Events & Simulator
也就是说ns3中的Helper类就是给用户提供了一个接口,使用户可以通过调用此Helper对某一层的一些参数进行设置,并提供Install此类函数,将这一层装载到节点或者设备上。Install这类的函数的参数是需要加工的元件,Install会为其装载此Helper提供的功能,并返回Container,这个Container的容量等于node的数目,Container中包含了我们通过这个Helper装载的东西。

int
main (int argc, char *argv[])
{
   
  CommandLine cmd;
  cmd.Parse (argc, argv);//读取命令行参数
  
  Time::SetResolution (Time::NS);//最小时间单元:ns
  LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO);
  LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);

  //创建网络节点2个
  NodeContainer nodes;
  nodes.Create (2);
  //点对点链路的helper类
  PointToPointHelper pointToPoint;
  //设置参数
  pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
  pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));

  NetDeviceContainer devices;//用于接收install的返回值
  //install函数中创建了与nodes的size相同数目的网络设备,同时创建了信道的对象,装载在dev上面
  devices = pointToPoint.Install (nodes);
  //安装TCP/IP协议栈
  InternetStackHelper stack;
  stack.Install (nodes);
  //网络起始地址为10.1.1.0,网络掩码为255.255.255.0
  Ipv4AddressHelper address;
  address.SetBase ("10.1.1.0", "255.255.255.0");
  //为网络设备分配地址,分配的地址保存在Ipv4InterfaceContainer interfaces中
  Ipv4InterfaceContainer interfaces = address.Assign (devices);

  UdpEchoServerHelper echoServer (9
### 如何在 VSCode 中打开和配置 `ns3first.cc` 文件 #### 创建并打开项目目录 为了顺利操作,需先创建一个工作空间来容纳 NS-3 的源码及相关文件。通过VSCode的界面功能,“文件”菜单下的“打开文件夹”,选择解压后的NS-3包所在位置,比如名为`ns-allinone-3.xx.x`这样的文件夹[^3]。 #### 编辑器设置调整 对于C/C++开发的支持依赖于特定扩展,在确保已安装对应组件的前提下,应进一步优化编辑体验。这涉及到修改`.vscode/c_cpp_properties.json`中的`includePath`字段,使其能够指向正确的头文件路径以便提供更精准的语言服务支持[^1]。 #### 构建工具链集成 考虑到编译执行的需求,建议利用CMake作为构建系统,并配合tasks.json定义具体的编译指令集;同时借助launch.json完成GDB调试环境搭建,从而实现一键编译与调试的功能[^2]。 ```json // .vscode/tasks.json 示例片段 { "version": "2.0.0", "tasks": [ { "label": "build ns3", "type": "shell", "command": "./waf configure && ./waf build", "group": { "kind": "build", "isDefault": true }, "problemMatcher": [] } ] } ``` ```json // .vscode/launch.json 示例片段 { "version": "0.2.0", "configurations": [ { "name": "(gdb) Launch", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/build/scratch/ns3first", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "build ns3", "miDebuggerPath": "/usr/bin/gdb" } ] } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值