OMNeT++ INET仿真框架用户手册——Ipv4NetworkConfigurator

2 网络层

2.1 Ipv4NetworkConfigurator

该模块为 IPv4 网络分配 IPv4 地址并设置静态路由。它为每个接口分配 IP 地址,努力考虑子网,还能通过合并路由条目优化生成的路由表。

重要:从 INET 2.2 开始,该模块不会直接分配地址或添加路由,而只是将它们存储在内部数据结构中。网络节点应包含一个 Ipv4NodeConfigurator(通常是网络层复合模块的一部分)实例,它可根据存储在全局网络配置模块中的信息实际配置节点的接口表和路由表。

配置器支持手动和自动地址分配及其组合。您可以提供包含未指定部分的地址和掩码模板,配置器会通过尝试将同一局域网中的节点放入同一子网来自动完成它们。它还支持手动路由和遵循最短路径的自动路由。默认情况下,配置器会在适当的地方添加默认路由(如在主机中),并进行基于子网的路由选择。

与节点数量相比,只需使用一小部分配置项,就能设置分层路由。配置器还能优化路由表,从而显著减少大型网络中路由表的大小。

上述大部分功能都可以通过 NED 参数开启或关闭。详情(接口地址和掩码模板、手动路由等)可在单个 XML 文件中为整个网络配置。

表示网络节点(主机、集线器、总线、交换机、接入点、路由器等)的模块应具有 @networkNode 属性,因为这是配置器在模型中识别它们的方式。所有节点都必须有自己的接口表(InterfaceTable 模块)作为 "interfaceTable "子模块。所有路由器都必须将路由表(Ipv4RoutingTable 模块)作为其 "routingTable "或 "networkLayer.routingTable "子模块。

默认情况下,所有节点的所有接口都将分配一个唯一的 IPv4 地址。路由表将配置为从任何节点到任何接口的最短路径路由。换句话说,所有接口都可以从所有节点到达(如 ping)。

配置器不连接任何其他模块(它没有门),在整个模型中应该只有一个实例。接口在 InterfaceTable 模块中注册后,配置将在初始化阶段 2 进行。

配置器会执行以下配置步骤:

  • 构建一个表示网络拓扑结构的图。该图将为每个具有 @networkNode 属性的模块(包括主机、路由器和 L2 设备,如交换机、接入点、以太网集线器等)分配一个顶点。它还会为顶点和边分配权重,最短路径算法在设置路由时将使用这些权重。对于已禁用 IP 转发的 IP 节点,权重为无限大(以防止路由通过它们),而对于所有其他节点(路由器和 L2 设备),权重为零。边缘权重的选择与链路的比特率成反比,因此配置器会优先选择带宽较高的连接。出于内部目的,配置器还会建立一个包含所有 “链接”(链接数据结构由位于同一点对点链接或局域网上的网络接口集组成)的表。

  • 为所有节点的所有接口分配 IP 地址。分配过程会考虑到接口上已有的地址和网络掩码(可能是在早期初始化阶段设置的),以及以 XML 格式提供的配置(如下所述)。配置可指定地址和网络掩码的 “模板”,其中一部分是固定的,另一部分可由配置器选择(如 “10.0.x.x”)。在最一般的情况下,配置器可以为所有接口选择任何地址和网络掩码(从而实现自动地址分配)。在最受限制的情况下,配置器必须为所有接口使用所要求的地址和网络掩码(即手动地址分配)。在这两种极端情况之间有许多可能的配置选项。配置器分配地址的方式是最大限度地增加每个子网的节点数。一旦找出属于一个子网的节点,它就会优化分配尽可能长的掩码。配置器可能无法根据给定的配置参数分配掩码和地址;如果出现这种情况,分配过程将停止并发出错误信号。

  • 添加配置中指定的手动路由。

  • 为网络中的所有路由表添加静态路由。配置器使用 Dijkstra 的加权最短路径算法在所有可能的节点对之间找到所需的路由。生成的路由表将为网络中的所有目标接口提供一个入口。可以安全地指示配置器在适当的地方添加默认路由,从而大大减少主机路由表的大小。它还可以添加子网路由,而不是接口路由,从而进一步减少路由表的大小。开启该选项需要精心设计,以避免在不同链路上出现来自同一子网的 IP 地址。注意:同时使用手动路由和静态路由生成可能会产生不必要的副作用,因为路由生成会忽略手动路由。

  • 然后,它会优化路由表的大小。这种优化能以更小的内存占用配置更大的网络,并使路由表查找更快。优化后的路由表可能与原来的路由表不同,会路由原来的路由表没有路由的数据包。不过,以下不变式是成立的:原始路由表路由过的任何数据包(有匹配路由),优化后的路由表仍会以相同方式路由。

  • 最后,它会转储所要求的配置结果。它可以转储网络拓扑、分配的 IP 地址、路由表和自己的配置格式。

下面的示例将所有接口配置为 IPv4 地址范围 10.0.0.0 - 10.255.255.255,掩码范围 255.0.0.0 - 255.255.255。这是默认配置。

<config>
  <interface hosts='**' address='10.x.x.x' netmask='255.x.x.x'/>
</config>

下面的示例配置了一个分层网络,使路由表保持在较小的范围内。

<config>
  <interface hosts="area11.lan1.*" address="10.11.1.x" netmask="255.255.255.x"/>
  <interface hosts="area11.lan2.*" address="10.11.2.x" netmask="255.255.255.x"/>
  <interface hosts="area12.lan1.*" address="10.12.1.x" netmask="255.255.255.x"/>
  <interface hosts="area12.lan2.*" address="10.12.2.x" netmask="255.255.255.x"/>
  <interface hosts="area*.router*" address="10.x.x.x" netmask="x.x.x.x"/>
  <interface hosts="*" address="10.x.x.x" netmask="255.x.x.0"/>
</config>

XML 配置必须包含一个 元素。根元素下可以有多个以下元素。

  • 接口元素为网络中的一个或多个接口提供配置参数。选择器属性限制了接口元素的作用范围。参数属性限制了可分配地址和网络掩码的范围。

    • @hosts 可选选择器属性,用于指定主机名模式列表。只有指定主机中的接口才会受到影响。模式可以是以网络为起点的完整路径,也可以是层次结构中任意位置的模块名,还可以是与 ini 文件键类似的其他模式。例如,"subnet.client*"或 "host* router[0.3]"或 “area*.*.host[0]”。
    • @names 可选选择器属性,用于指定接口名称模式列表。只有指定名称的接口才会受到影响。默认值为 "",匹配所有接口,如 "eth ppp0 "或 “*”。
    • @towards 可选选择器属性,用于指定主机名模式列表。只有连接指定主机的接口才会受到影响。指定的名称将与与正在配置的主机位于同一局域网的主机名称相匹配。即使在配置的主机和此处指定的主机之间有交换机,这也会起作用。对于有线网络,指定此参数可能比指定接口名称更方便。默认值为 “"。例如,"ap "或 "server "或 "client”。
    • @among 可选选择器属性,用于指定主机名称模式列表。只有指定主机中连接到指定主机的接口才会受到影响。among="X Y Z "与 "hosts=“X Y Z” towards="X Y Z "相同。
    • @address 可选参数属性,用于限制可分配地址的范围。允许使用通配符,用 "x “代替字节作为地址的一部分。未指定的部分将由配置器自动填写。默认值”"表示不配置地址。未配置的接口在其子网中仍有已分配的地址,因此以后可以很容易地对其进行配置。
    • @netmask 可选参数属性,用于限制可分配的网络掩码范围。允许使用通配符,用 "x “代替字节作为 netmask 的一部分。未指定的部分将由配置器自动填写。默认值”"表示可以配置任何网络掩码,例如 "255.255.255.0 “或”/24 "或 "255.255.x.x "或 “255.255.x.0”。
    • @mtu number 可选参数属性,用于设置接口的 MTU 参数。未指定时,接口参数保持不变。
    • @metric number 可选参数属性,用于在接口中设置公制参数。未指定时,接口参数保持不变。
    • @groups 可选参数属性;可包含将被添加到接口组播组的(组播)IP 地址列表。另请参阅 元素。
    • @add-static-route 可选 bool 参数(默认值=true)。在路由表中添加静态路由。
    • @add-default-route 可选 bool 参数(默认值=true)。如果节点只有一个非环回接口,则在路由表中添加默认路由。
    • @add-subnet-route 可选 bool 参数(默认值=true)。在路由表中添加子网路由。
  • 无线元素指定无线网络的成员。它主要用于无法使用 SSID 参数自动确定成员的情况。

    • @id(可选)标识无线网络,如果遗漏,则使用唯一值
    • @hosts 可选选择器属性,用于指定主机名模式列表。只有指定主机中的接口才会受到影响。默认值为 “*”,匹配所有主机。
    • @interfaces 可选选择器属性,用于指定接口名称模式列表。只有指定名称的接口才会受到影响。默认值为 “*”,可匹配所有接口。
  • multicast-group元素为网络中的一个或多个接口提供多播网络地址。

    • @hosts 可选选择器属性,用于指定主机名模式列表。只有指定主机中的接口才会受到影响。默认值为 “*”,匹配所有主机。
    • @interfaces 可选选择器属性,用于指定接口名称模式列表。只有指定名称的接口才会受到影响。默认值为 “*”,可匹配所有接口。
    • @towards 可选选择器属性,用于指定主机名模式列表。只有连接到指定主机的接口才会受到影响。默认值为 “*”。
    • @among 可选选择器属性,用于指定主机名称模式列表。只有指定主机中连接到指定主机的接口才会受到影响。among="X Y Z "与 "hosts=“X Y Z” towards="X Y Z "相同。
    • @address 指定要分配的组播组地址列表的必选参数属性。值必须从有效的组播地址范围中选择,如 “224.0.0.1 224.0.1.33”。
  • route元素为网络中的多个节点提供路由表项。选择器属性限制了route元素的作用范围。

    • @hosts 可选选择器属性,用于指定主机名模式列表。只有指定主机中的路由表会受到影响。默认值""表示所有主机都将受到影响。例如,“host* router[0…3]”
    • @destination 可选参数属性,用于指定路由中的目标地址(L3AddressResolver 语法)。默认值为 “"。例如,"192.168.1.1 "或 "subnet.client[3]"或 "subnet.server(ipv4) "或 "”。
    • @netmask 可选参数属性,用于指定路由中的网络掩码。默认值为 “"。例如,"255.255.255.0 “或”/29 "或 "”。
    • @gateway 可选参数属性,用于指定路由中的网关(下一跳)地址(L3AddressResolver 语法)。未指定时,必须指定接口参数。默认值为 “"。例如,"192.168.1.254 "或 "subnet.router "或 "”。
    • @interface 可选参数属性,用于指定路由中的输出接口名称。如果未指定,则必须指定网关参数。该参数没有默认值,如 “eth0”。
    • @metric 可选参数属性,用于指定路由中的度量。默认值为 0。
  • multicast-route元素为多播路由表添加条目。

    • @hosts 可选选择器属性,用于指定主机名模式列表。例如,“host* router[0…3]”
    • @source 指定源网络地址的可选参数属性。默认值为 “*”,可匹配所有源。
    • @netmask 可选参数属性,用于指定源网络的掩码。默认值为 “*”,可匹配所有源。
    • @groups 可选 IPv4 多播地址列表,指定此条目适用的组。默认值为 “*”,匹配所有组播组,如 “225.0.0.1 225.0.1.2”。
    • @metric 可选参数属性,用于指定路由中的度量。
    • @parent 可选参数属性,用于指定组播数据报预计到达的接口名称。当数据报到达父接口时,它将被转发到子接口,否则将被丢弃。默认值是指向数据报源的最短路径上的接口。
    • @children 指定接口名称模式列表的强制参数属性:
      • 名称模式(如 “ppp*”)与接口名称相匹配
      • 朝向 “模式(以”>“开头,如”>router*")通过命名其链路上的一个邻居节点来匹配接口。传入的组播数据报会被转发到每个子接口,但到达的接口除外。
  • autoroute 元素指定自动静态路由的参数。如果未指定该元素,配置器将默认使用。默认情况下,所有路由表都将被修改,所有接口的最短路径都将被计算。

    • @sourceHosts 可选选择器属性,用于指定主机全路径模式列表。它决定了将被修改的路由表集。默认值为 “**”。
    • @destinationInterfaces 指定接口完整路径模式列表的可选参数属性。它决定了计算最短路径的目标接口集。默认值为 “**”。
    • @metric 可选参数属性,用于确定计算最短路径时使用的度量。有效值包括 “hopCount”、“delay”、"dataRate "和 “errorRate”。默认值为 “hopCount”。
    • 节点可选子元素指定了最短路径算法的成本参数。如果未指定该子元素,配置器将默认根据所选的度量来确定成本。
    • @hosts 指定节点完整路径模式列表的强制性选择器属性。它决定了受影响的节点集。
    • @cost 指定cost的强制性参数属性。有效值为"infinite"和数字。
    • 节点子元素指定了最短路径算法的成本参数。如果未指定该子元素,配置器将默认根据所选指标确定链路成本。
    • @interfaces 指定接口完整路径模式列表的强制性选择器属性。它决定连接到给定接口的受影响链接集。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值