ns3—第一章:test.cc分析,基本脚本分析

1.ns3是一个离散事件模拟器,该项目始于2006年,它并不是NS2的扩展,而是新的模拟器。

2.ns3官网文件:
tutorial,入门,基本技术;
manual,软件整体框架,核心技术;
model-library,ns3模型库;
API Documentation包括所有的模块。

3.创建项目的方法
首先先明确概念,NS3是用c++编程的,因此它用到了一个非常重要的概念:面向对象。
这个面向对象,最直观的表示是:我们创建了一个对象a,那么a就可以用a.xxx(xxx代表针对该对象的操作函数)来实现关于a的具体操作。
比如我们创建的对象是哈密瓜,那么哈密瓜,我们可以做的操作,哈密瓜.吃,如果它返回的是一个感觉,那么 感觉=哈密瓜.吃()
因此在后续的编程中,大家会发现,NS3的一般过程为:创建对象→利用对象的函数进行操作。
test.cc脚本文件
在脚本的开头会有几行注释,这个是固定格式,同时是必要的,便于其他用户进行后续的开发和使用

/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation;
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

以下是代码的正文部分

//(1)调用模块
#include"ns3/core-module.h"							//core模块
#include"ns3/network-module.h"						//network模块
#include"ns3/internet-module.h"						//internet模块
#include"ns3/point-to-point-module.h"				//point to point 模块
#include"ns3/application-dodule.h"					//application模块
//(2)命名空间(因为大部分函数需要用到ns3::,所以这里直接加入命名空间)
using namespace ns3;
//(3)创建日志组件(使用log系统打印辅助信息)
NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");

//mian函数
int main(int argc, char *argv[]){
//(1)打开命令行(实现参数传递)
CommandLine cmd;//创建命令行对象
cmd.Parse (argc, argv);//利用对象中的解析函数,识别我们在命令行中输入的参数
//(2)设置时间的最小单位Ns
Time::SetResolution(Time::Ns);
//(3)使日志组件生效(组件被内建在Echo Client和Echo Server的应用中,日志级别为INFO)
LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO);
LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);
//(4)创建结点(网络是由很多节点组成的,这些节点之间相互发送数据)
NodeContainer nodes;//创建节点对象
nodes.Creat(2);//用Creat生成两个节点
//(5)创建Helper类,并设置网络属性
PointToPointHelper pointToPoint;//创建Helper类
pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));//设置传输速率信为“5Mbit/s”
pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));//设置时延为2ms
//(6)创建设备对象
NetDeviceContainer devices;//创建设备对象
devices = pointToPoint.Install (nodes);//为每一个节点安装P2P连接方式,并用devices记录该节点设备
//(7)为每一个节点安装协议栈
InternetStackHelper stack;//创建协议栈对象
stack.Install (nodes);//将协议栈安装到每一个节点
//(8)为网络设置地址并分配地址
Ipv4AddressHelper address;//设置Ipv4地址对象
address.SetBase("10.1.1.0","255.255.255.0");//设置地址对象的基础网段,分配地址时从10.1.1.0开始以子网掩码为255.255.255.0分配地址,地址分配默认是从1开始逐渐增加。
Ipv4InterfaceContainer interfaces=address.Assign(devices);//为每台设备分配地址,这里的设备在上面的定义为节点。分配后的地址和设备的关联信息保存到interfaces对象里。
//(9)设置服务端
UdpEchoServerHelper echoServer (9);//创建监听9号端口的响应对象
ApplicationContainer serverApps = echoServer.Install (nodes.Get (1));//nodes.Get(1)表示索引号为1的节点。这里是为索引号为1的节点安装能监听9号端口的响应对象。并将该信息记录在应用层的应用对象serverApps内.
//设置服务端启动时间点
serverApps.Start (Seconds (1.0));//服务在1s时开始生效
serverApps.Stop (Seconds (10.0));//服务在10s时停止
//(10)设置客户
UdpEchoClientHelper echoClient (interfaces.GetAddress (1), 9);//创建目标地址为服务器地址,目标端口号为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));将客户端安装在0号节点。
//设置客户端启动时间
clientApps.Start (Seconds (2.0));//客户在2s时开始生效
clientApps.Stop (Seconds (10.0));//客户在10s时停止

//最后,当整个网路搭建好后,启动分析,后结束分析
Simulator::Run ();
Simulator::Destroy ();
return 0;
}

最后我们来看一下,我们在节点安装了什么

①安带IP的网卡(这里安网卡时,同时设置了信道)
devices = pointToPoint.Install (nodes)→安装网卡(网络设备),并用devices记录
address.Assign(devices)→后续为每个网卡分配了IP地址
②安协议栈(这里就短短两句,把五个层都配置了,很神奇,很多都默认了)
stack.Install (nodes)→安装协议栈
③安具体的应用(很像给了个任务,让跑一下)
ApplicationContainer serverApps = echoServer.Install (nodes.Get (1));
ApplicationContainer clientApps = echoClient.Install (nodes.Get (0));→为节点安装客户端与服务端的应用服务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值