一、网络仿真步骤
- 选择或开发相应模块
- 编写网络仿真脚本,其中包括:
- 生成节点
- 安装网络设备
- 安装协议栈
- 安装应用层协议
- 其他配置
- 启动仿真
- 仿真结果分析
- 根据仿真结果调整网络配置参数或修改源代码
二、ns3关键概念
(1)节点(Node)
? 设想为一台空的可以添加各种功能的计算机。为了使一台计算机有效工作,可以给它添加应用程序、协议栈、外设卡及驱动程序等。
C++中使用Node类描述节点。如果一个设备助手可能在大量得相同节点上安装设备,则可使用NodeContainer类追踪一组节点指针。
NodeContainer nodes;//创建节点指针
nodes.Create(2); //创建两个节点对象
创建节点后下一步是把节点连接到一个网络中。
(2)应用(Application)
? 在ns3中,需要被仿真的用户程序被抽象为应用。使用Application类描述,该类提供了管理仿真时应用层应用的各种方法。如两个Application类实例:UdpEchoClientApplication 和 UdpEchoServerApplication,这两个类由相应的Helper管理。这些应用用来发送和回应仿真网络中的数据分组。应用对象需要一个时间参数来”开始“产生数据通信并且可能在一个可选的时间点”停止“。如:
clientApps.Start(Seconds(2.0));//开始时间
clientApps.Stop(Seconds(10.0));//结束时间
(3)信道(Channel)
? 通常把网络中数据流流过的媒介称为信道。当你把网线插入到路由器时,就是通过信道将计算机与以太网连接。在ns3的模拟环境中,你可以把节点连接到代表数据交换信道的对象上。在这里,基本的通信子网这一抽象概念被称为信道,使用channel类描述。
一个信道实例可以模拟一条简单的线缆(wire),也可以模拟一个复杂的巨型以太网交换机,甚至是无线网络中充满障碍物的三维空间。常用的信道模型实例有:CsmaChannel、PointToPointChannel和WifiChannel。
举例来说,CsmaChannel信道模拟了一个可以用于实现载波侦听多路访问通信子网的媒介,这个信道具有和以太网相似的功能。如:
PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));//设置数据率
pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"))//设置延迟;
(4)网络设备(device)
? 计算机需要通过网络设备才能连接到网络上,如网卡(硬件设备)。而网卡需要软件驱动才能知道从何处取得需要发送至网络中的数据,以及将从网络中获取到的数据发送至计算机的哪个位置。
? 在ns3中,网络设备这一抽象概念相当于硬件设备和软件驱动的综合。ns3仿真环境中,网络设备安装在节点上,使得节点通过信道和其他节点通信。像真实计算机一样,一个节点可以通过多个网络设备同时连接到多条信道上。网络设备使用NetDevice类描述,NetDevice类提供管理连接其他节点和信道对象的各种方法,并且允许开发者以面向对象的方法来自定义。几个特定的网络设备有:CsmaNetDevice、PointToPointNetDevice和Wi-FiNetDevice。正如以太网卡被设计在以太网中工作一样,CamsNetDevice被设计在CSMA信道中工作,而PointToPointNetDevice在PointToPoint信道中工作,Wi-FiNetDevice在Wi-Fi信道中工作。
? 如果需要一个所有被创建的NetDevice对象列表,就需要使用一个NetDeviceContainer对象来存放它们,就像使用一个NodeContainer对象来存放所创建节点。如:
NetDeviceContainer devices;
devices = pointToPoint.Install (nodes);//为节点装载点对点网络设备
(5)拓扑帮助
? 如同现实网络中的主机都默认装有内置网卡一样,把网络设备连接到节点、信道、配置IP地址等在ns3是很普遍的任务,那么干脆提供“拓扑生成器”来使这个工作变得尽可能的容易。举例来说:创建一个网络设备,配置一个MAC地址,把此网络设备装载到节点上,设置节点的协议栈以及连接网络设备到一个信道,这些事情都需要许多分立的ns-3核心操作。而当需要把许多设备连接到多点信道,在网际间将单个网络设备进行连接时,则需要对ns-3核心进行更多的分立操作。此时提供拓扑生成器来整合这些大量分立的步骤,使其成为一个简单易用的操作。
? 很明显,Helper类可以极大地方便用户。例如TopologyReaderHelper类可以使得更容易配置和使用通用的TopologyReader。再如类InternetStackHelper是一个安装PointToPointHelper对象和点到点网络设备的网络协议栈的拓扑生成器,它会为每一个节点容器中的节点安装一个网络协议栈(如TCP、UDP和IP等)。如:
InternetStackHelper stack;
stack.Install (nodes);
|