前言:
团队仿真必须用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