1.离散事件仿真器原理在NS3中,Event是以智能指针(函数指针)的形式存储在Scheduler的列表中的,执行Event的过程就是调用该函数的过程,在执行过程中又将产生新的EventTimeSchedulerAction:TriggerAction:InsertAction:InsertAction:InsertBeginEventi2.NS3文件与模块NS3是由3部分组成的:.运行支撑框架,如event,scheduler等;.仿真对象(网络元素),如路由对象、物理层MAC层对象以及各类协议;.仿真辅助工具,如跟踪trace,日志log,统计statistical,图形化等;3.NS3基础架构图4.关键元素4.1Nodens-3中基本计算设备被抽象为节点。节点由C++中的Node类来描述。Node类提供了用于管理仿真器中网络组件表示的各种方法,包括应用程序,协议栈,外设卡及驱动程序等。4.2Application在ns-3中,需要被仿真的用户程序被抽象为应用。应用在C++中用Application类来描述。这个类提供了管理仿真时用户层应用的各种方法。开发者应当用面向对象的方法自定义和创建新的应用。UdpEchoClientApplication和UdpEchoServerApplication:一个client/server应用来发送和回应仿真网络中的数据包。4.3Channel通常我们把网络中数据流流过的媒介称为信道。包括:CsmaChannel,PointToPointChannel和WifiChannel。在ns-3的模拟环境中,你可以把节点连接到代表数据交换信道的对象上。在这里,基本的通信子网这一抽象概念被称为信道,在C++中用Channel类来描述。4.4NetDevicesNetDevices由C++中的NetDevice类来描述。NetDevice类提供了管理连接其他节点和信道对象的各种方法,并且允许开发者以面向对象的方法来自定义。例如CsmaNetDevice,PointToPointNetDevice,和WifiNetDevice。4.5TopologyHelpers在现实的网络中,你会发现主机已装有(或者内置)的网卡。在ns-3中你会发现Nodes附加了NetDevices。在大型仿真网络中,你需要在Nodes、NetDevices和Channels之间部署许多连接。既然把NetDevices连接到Nodes、Channels,配置IP地址等等事情在ns-3是很普遍是任务,那么我们干脆提供了TopologyHelpers来使这个工作变得尽可能的容易。举例来说:创建一个NetDevices,配置一个MAC地址,把此NetDevices装载到Nodes上,设置Nodes的协议栈,以及连接NetDevices到一个Channels,这些事情都需要许多分立的ns-3核心操作。而当需要把许多设备连接到多点Channels,在网际间将单个网络进行连接,则需要对ns-3核心进行更多更多的分立操作。我们提供了TopologyHelpers来整合这些大量分立的步骤,使其成为一个简单易用的操作。很明显,这样做可以极大地方便用户。5.通信流程(消息传递机制)ApplicationApplicationProtocolStackNetDeviceNetDeviceNodeApplicationApplicationProtocolStackNetDeviceNetDeviceNodeChannelChannelPacket(s)Sockets-likeAPI6.NS3的移动模型ns-3支持的移动模型类包含:(1)一个用于跟踪和维护object当前笛卡尔坐标和速度的移动模型(2)可以用来注册移动模型的轨迹变换监听器的轨迹变换通知器的跟踪源(3)一些用来放置节点和移动模型的helper类类名模型名ConstantPosition定点模型ConstantVelocity固定速度模型ConstantAcceleration固定加速度模型GaussMarkov随机模型Hierarchical分层模型RandomDirection2D二维随机方向模型RandomWaypoint随机路径模型SteadyStateRandomWaypoint稳态随机路径模型7.节点装载流程创建节点;创建链路类型;为节点创建具有链路类型的设备;为节点创建协议栈;设置节点和网络IP;配置业务应用;8.NS3的优缺点.优点:框架灵活,可以方便修改自己所要仿真的部分;内容丰富,有最新的网络仿真元素,如openflow,LTE;持续维护中;.缺点:移动模型粗糙简陋;仿真无线通信时无法考虑建筑等障碍物对通信质量的影响;仿真结果的可视化9.iTETRIS-ICS架构图仿真器10.iTETRIS-ICS时序图UpdateUpdateTrafficLightInforUpdateNodesInformationActiveNewNodesCreateNewNodesRemovearrivedvehiclesRunOneSumoTimeStepAnswer:MessagesCollectReceivedMessageAnswer:EXIT_FAILED/_SUCCERunComm:RunParam:ns3timestepRunOneNS3TimeStepGetDataFramNS3Comm:GetParam:nodeIDRunRunApplicationRunApplicationLogicProcessApplicationResultsSimulateCommunicationUpdateNS3PossitionEndICS