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

前言:
团队仿真必须用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
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值