# 2.ns3 关键抽象
在本节中,我们将总结一些在网络中常用的,但在 ns3
中有特定含义的术语。
# Node
一个连接到网络的计算设备被称为主机,有时也被称为终端系统。因为 ns3
是一个网络模拟器,在 ns3
中,基本的计算设备抽象被称为 Node
。 C++
中由 Node
类实现。Node 类提供了管理模拟中计算设备的表示方法。人们会添加一些协议,如应用程序、协议栈和外围卡及其相关的驱动程序,以使计算机能够进行有用的工作。我们在 ns-3
中使用同样的基本模型。
# Application
Application
是指可以完成某成某些活动的用户程序。 Application
附着在 Node
上,用来模拟该应用运行在一个节点上的场景。在 ns3
中,应用被抽象为一个基类即 Application
类。目录位于 ns-3.xx/src/applications
下。后续自己创建 customized application
, 都需要继承这个类。
# Channel
通常把网络中数据流流过的媒介称为信道。当你把网线插入到路由器时,就是通过信道将计算机与以太网连接。在 ns3 的模拟环境中,你可以把节点连接到代表数据交换信道的对象上。在这里,基本的通信子网这一抽象概念被称为信道,使用 Channel
类描述。一个信道实例可以模拟一条简单的点对点,也可以模拟一个复杂的巨型以太网交换机,甚至是无线网络中充满障碍物的三维空间,同样的我们也可以自定义新的 Channel
。
# NetDevice
计算机需要通过网络设备才能连接到网络上,如网卡(硬件设备)。而网卡需要软件驱动才能知道从何处取得需要发送至网络中的数据,以及将从网络中获取到的数据发送至计算机的哪个位置。
在 ns3
中,网络设备这一抽象概念相当于硬件设备和软件驱动的综合。 ns3
仿真环境中,网络设备安装在节点上,使得节点通过信道和其他节点通信。像真实计算机一样,一个节点可以通过多个网络设备同时连接到多条信道上。网络设备使用 NetDevice
类描述, NetDevice
类提供管理连接其他节点和信道对象的各种方法,并且允许开发者以面向对象的方法来自定义。几个特定的网络设备有: CsmaNetDevice
、 PointToPointNetDevice
和 Wi-FiNetDevice
。正如以太网卡被设计在以太网中工作一样, CamsNetDevice
被设计在 CSMA 信道中工作,而 PointToPointNetDevice
在 PointToPoint
信道中工作, Wi-FiNetDevice
在 Wi-Fi 信道中工作。
# Topology Helpers
如同现实网络中的主机都默认装有内置网卡一样,把网络设备连接到节点、信道、配置 IP 地址等在 ns3 是很普遍的任务,那么干脆提供 “拓扑生成器” 来使这个工作变得尽可能的容易。举例来说:创建一个网络设备,配置一个 MAC 地址,把此网络设备装载到节点上,设置节点的协议栈以及连接网络设备到一个信道,这些事情都需要许多分立的 ns-3 核心操作。而当需要把许多设备连接到多点信道,在网际间将单个网络设备进行连接时,则需要对 ns-3 核心进行更多的分立操作。此时提供拓扑生成器来整合这些大量分立的步骤,使其成为一个简单易用的操作。
很明显, Helper
类可以极大地方便用户。例如 TopologyReaderHelper
类可以使得更容易配置和使用通用的 TopologyReader
。再如类 InternetStackHelper
是一个安装 PointToPointHelper
对象和点到点网络设备的网络协议栈的拓扑生成器,它会为每一个节点容器中的节点安装一个网络协议栈(如 TCP、UDP 和 IP 等)。