这个星期要开始学仿真啦!感觉仿真真的是一个特别用的东西,但是因为种种原因都没有机会去学习。
现在实验室需要ns3仿真,所以我也要努力学!
ns3的安装就不说了,网上都有,反正就是安一大堆包的,然后很容易就装好了。
建议学ns3的时候去官网下载一份library,这样边看代码的时候边查,比较方便。
最开始的学习,我是跟着这个博客来学的http://blog.sina.com.cn/s/blog_5356e4790101fq2t.html,博客很棒。。唯一的就是字儿太多了。。。。。。
我也刚学几天,就大概的讲下自己的收获吧:
首先打开example/tutorial/fist.cc文件,这是一个最简单的p2p的例子,我贴代码出来讲解(其实NS3就是C++)
NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");
定义Log名字(关于LOG的东西下面会讲)
int
main (int argc, char *argv[]) //主函数
{
Time::SetResolution (Time::NS);
LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO); //下面会提到
LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);
NodeContainer nodes; //创建节点
nodes.Create (2);
PointToPointHelper pointToPoint; //创建点到点的链路,设置Attribute属性值,这里是速率和时延)
pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));
NetDeviceContainer devices; //创建完节点和链路要创建设备了
devices = pointToPoint.Install (nodes);
InternetStackHelper stack; //安装协议栈
stack.Install (nodes);
Ipv4AddressHelper address; //分配IP地址,SetBase(IP地址,子网掩码),学过计网的应该都清楚,不多说啦
address.SetBase ("10.1.1.0", "255.255.255.0");
Ipv4InterfaceContainer interfaces = address.Assign (devices);
UdpEchoServerHelper echoServer (9); //建立端口为9的UDP Server
ApplicationContainer serverApps = echoServer.Install (nodes.Get (1));
serverApps.Start (Seconds (1.0)); //仿真start和stop时间设置
serverApps.Stop (Seconds (10.0));
UdpEchoClientHelper echoClient (interfaces.GetAddress (1), 9); //建立客户端,连接Node1 地址,连接端口为9)
echoClient.SetAttribute ("MaxPackets", UintegerValue (1));
echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0)));
echoClient.SetAttribute ("PacketSize", UintegerValue (1024));
ApplicationContainer clientApps = echoClient.Install (nodes.Get (0));
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));
1、现在说说日志这个东西,http://blog.sina.com.cn/s/blog_5356e4790101fq2n.html这里有,但是太长了,我概括一下
在现有系统中,LOG有多个LEVEL,比如ALL , INFO等,用户当然也可以自定义LEVEL(这里不多讲),举个例子
LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO);
LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);
这里是来自你定义的UdpEchoClient和UdpEchoServer的日志消