内置网络节点
-
StandardHost包含最常见的互联网协议。UDP、TCP、IPv4、IPv6、以太网、IEEE802.11。它还支持可选的移动性模型、可选的能源模型和任何数量的应用程序,这些都是可以通过INI文件完全配置的。
-
EthernetSwitch为一个以太网交换机建模,每个端口包含一个中继单元和一个MAC单元。
-
Router提供了最常见的路由协议。OSPF、BGP、RIP、PIM。
-
AccessPoint为一个具有多个IEEE 802.11网络接口和多个以太网端口的Wifi接入点建模。
-
WirelessHost提供了一个具有一个(默认)IEEE802.11网络接口的基础设施模式的网络节点,适合与AccessPoint一起使用。
-
AdhocHost是一个WirelessHost,其网络接口配置为ad-hoc模式,并启用转发功能。
网络节点通过交换OMNeT++消息在网络层面进行通信,这些消息是传输介质上物理信号的抽象表示。在有线情况下,信号通过OMNeT++连接发送,在无线情况下,信号直接发送到接收网络节点的门。信号封装了代表传输的数字数据的INET特定数据包。数据包被进一步分为几块,为较小的数据片断(如协议头、应用数据)提供替代表示。
非物理网络节点(对网络建模具有辅助作用的模块)
- 无线电介质模块,如Ieee80211RadioMedium、ApskScalarRadioMedium和UnitDiskRadioMedium(有几个这样的模块)是无线网络的一个必要组成部分。
- (PhysicalEnvironment)模拟物理环境(即障碍物)对无线电信号传播的影响。它是一个可选的组件。
- 配置器,如Ipv4NetworkConfigurator、L2NetworkConfigurator和NextHopNetworkConfigurator,配置网络的各个方面。例如,Ipv4NetworkConfigurator将IP地址分配给主机和路由器,并设置静态路由。当模拟动态IP地址分配(如通过DHCP)或动态路由不重要时,就会使用它。L2NetworkConfigurator允许人们配置802.1局域网,并提供STP/RSTP相关参数,如链路成本、端口优先级和
"is-edge "标志。 - ScenarioManager允许脚本化场景,如网络节点的定时故障和恢复。
- 一些群组移动性模型的运行需要群组协调器。例如,MoBanCoordinator是MoBAN移动性模型的协调器模块。
- 像PacketDropOsgVisualizer这样的Visualizer为模拟的某些方面提供图形渲染,可以是二维(canvas)或三维(使用OSG或osgEarth)。通常的选择是IntegratedVisualizer,它将每个特定的可视化器类型的实例捆绑在一个复合模块中。
典型网络
- 有线网络
有线网络连接,例如以太网电缆(Ethernet cables),用标准的OMNeT++连接表示,使用DatarateChannel NED类型。该通道的数据传输率和延迟参数(datarate and delay)必须为所有的有线连接提供。主机(或路由器)中的有线接口数量通常不需要手动配置,因为它可以从邻居节点的实际链接数量中自动推断出来。
下面的例子显示了为一个简单的有线网络创建一个模型是多么的简单。这个网络包含一个使用PPP连接到路由器的服务器,而路由器又使用以太网连接到一个交换机。该网络还包含一个可参数化的客户数量,所有客户都连接到交换机上,形成一个星形拓扑结构。利用的网络节点都是INET中预定义的模块。为了避免手动配置IP地址和路由表,还包括一个自动网络配置器。
network WiredNetworkExample
{
parameters:
int numClients; // number of clients in the network
submodules:
configurator: Ipv4NetworkConfigurator; // network autoconfiguration
server: StandardHost; // predefined standard host
router: Router; // predefined router
switch: EthernetSwitch; // predefined ethernet switch
client[numClients]: StandardHost;
connections: // network level connections
router.pppg++ <--> {
datarate = 1Gbps; } <--> server.pppg++; // PPP
switch.ethg++ <--> Eth1G <--> router.ethg++; // bidirectional ethernet
for i=0..numClients-1 {
client[i