本栏目将对《AFSim 2.9中文参考手册》进行持续更新,欢迎关注交流!
对本书全文和AFSIM其它资料感兴趣的伙伴,可联系作者领取~
全部内容索引请看 ⬇️⬇️⬇️
《AFSim 2.9中文参考手册》-CSDN博客编辑https://blog.csdn.net/henggesim/article/details/145566384
目录
引言
本入门手册旨在为用户提供有关通信功能的附加信息,包括现有的一般功能以及在AFSIM通信框架中扩展功能的机会。它并不是现有通信程序、术语、模型等现实世界等价物的替代品。一般来说,当AFSIM中的实现与传统理解有很大不同时,会特别指出以避免混淆。最后,本入门手册并不打算解释AFSIM以前版本的更改,但在解释通信功能时会提到这些差异(或“非差异”),以解释通信为何以这种方式运行。
地址分配
在AFSIM中,所有通信对象都需要有一个标识符或地址,以唯一标识模拟中存在的每个通信对象。最广泛认可的地址分配方法是Internet协议(IP)地址方案,它用于AFSIM中通信对象的内部地址分配。此外,AFSIM使用IPV4无类别域间路由(CIDR)表示法进行通信的内部地址分配。选择这种地址分配方法是因为它的普遍性,以及它能够基于此类地址提供有关“组”或“网络”成员资格的附加信息,从而允许在通信系统中去除将网络显式建模为对象的需求。(有关更多详细信息,请参见网络)
IPV4 CIDR作为Internet地址方案,显然不适用于所有通信对象,尤其是那些基于传统无线电通信的对象。然而,应该注意的是,尽管这些对象仍然需要基于IPV4 CIDR拥有一个地址以在AFSIM中保持一致的地址分配,但它们的行为并不受限于传统IP通信设备的预期方式。大多数情况下,用户可以选择忽略地址分配。
目前不支持IPV6,但地址分配是基于未来可以实现其他地址方案(从基本地址类派生)的想法而开发的。一般来说,如果适当地限制CIDR值以避免过多的“稀疏”网络分配,IPV4应该提供比模拟在任何给定时间能够处理的更多主机地址。
IPV4 CIDR地址表示法使用一个32位值,排列为四个整数,以字节值的形式用句点(‘.’)分隔,范围从0到255。AFSIM中唯一受限的地址是0.0.0.0,用于标识“空”地址(尚未在模拟中分配的地址)。现实世界中IPV4地址分配的复杂性(基于其他功能限制某些地址,主要限于IP功能,如多播、广播等)在AFSIM中未实现。使用CIDR表示法,地址附带一个附加值,指示用于地址网络本身的地址部分,这也直接指示在任何给定时间可以属于该网络的“主机”(单个通信对象)的数量。由于CIDR值是可变的,网络大小是灵活的。然而,应该注意的是,使用过大的网络大小而不实际使用提供的空间会限制模拟中可分配地址的总数。换句话说,如果手动确定地址分配,请限制小CIDR值的使用。CIDR值限制在1到31之间,其含义如下所示:
- 提供通信对象所属网络的名称。在这种情况下,地址会自动分配给网络中最低的空闲地址。
- 提供IPV4/CIDR表示法中的显式地址。在这种情况下,通信对象将自动加入已存在的具有此地址的任何网络。
- 提供IPV4/CIDR表示法中的显式网络地址。如果没有与已存在网络的地址冲突,则会创建网络。
- 不做任何操作。通信会自动加入AFSIM中始终可用的通用网络,名为“default”。它被分配网络中最低可能的地址。
注意:AFSIM中的“default”网络是保留地址0.1.0.0/16。这提供了约65,000个可分配给该网络的通信。 警告:不要在0.1.0.0到0.1.255.255范围内创建网络,因为这些地址属于默认网络,如果尝试将导致模拟初始化错误。 警告:不要在与多播相关的范围224.0.0.0到239.255.255.255内创建网络。
网络
在AFSIM中,网络是通信对象的集合,通过其IPV4 CIDR地址的相似网络地址前缀分组。在AFSIM的早期版本中,通信仅限于同一网络内的对象,除非使用其他对象和设置(如现已弃用的AFSIM_COMM_ROUTER)。这一概念严重限制了通信对象的灵活性和建模能力,因此被移除,转而将每个通信设备建模为可能能够与任何其他通信进行通信,限制由通信链路的存在和通信实现本身提供。为了实现任何两个通信对象之间的通信,只需在它们之间存在一个链路。
AFSIM中的网络对象是用户可定义的对象,可以通过场景输入或脚本语言定义。这些对象对与网络相关的通信对象的成员资格、连接性和行为实施特定规则。此外,还提供了几种预定义的网络类型。未来可能会提供更多,或者用户可以扩展可用框架并添加自己的网络。AFSIM中可用的网络对象通常实施网络拓扑(如环形、网状、星形等),但可以在网络定义中对添加/删除成员或添加/删除网络中的链路的操作实施任何规则。
未来计划还提供一种方法来驱动网络对象的更新,以便基于时间或事件的网络规则执行。这将提供一种基于协议使用、模拟环境或用户确定应驱动此类事件的一般事件来更新网络状态的方法。尽管目前不可用,但预计此机制将提供基于通信发现(和丢失)事件的自组织网络能力。
网络管理器
网络管理器是AFSIM中通信数据的主要收集点。模拟中的每个通信对象都需要向网络管理器注册以获取地址(由用户指定或动态分配)。每个通信都作为节点添加到图对象中,通信对象(节点)之间的通信能力表示为图中对象之间的边。网络管理器中维护的数据被视为“真实”数据,即AFSIM中任何给定时间点的实际通信状态。它还提供了一个对象,可以从AFSIM模拟对象中获取任何通信对象的地址、所属网络以及同一网络的其他成员列表。实际上,网络管理器充当DNS服务器。
路由和协议
更新至AFSIM v2.5.0
在AFSIM中,路由是指确定从发送通信设备到目标接收者的通信路径的能力。这也意味着能够根据是否找到路径来判断消息是否可以发送到目的地。
路由在AFSIM中由路由器对象表示。这不应与作为网络硬件的路由器的通俗概念混淆,而是路由和路径查找能力的表示。它当然可以用于表示作为网络硬件的路由器,但这不是其主要目的。用户也不必对在无线电通信系统中使用路由器的概念感到惊讶,因为关键的无线电功能(如中继)是AFSIM中路由器对象所代表的一种路径查找形式,尽管是一种非常简单的形式。
路由器对象是平台部件,一个平台可以有任意数量的路由器与之关联。AFSIM中始终提供一个路由器用于默认功能,以帮助保持向后兼容性,被称为默认路由器。每个通信(在路由器中称为接口)都与一个路由器关联,并且在任何给定时间只能与一个路由器关联。在简单的通信用例中,用户通常不需要了解这些概念,因为默认路由器存在于平台上,无需用户输入,平台上声明的所有通信都是默认路由器的接口。
路由器还包含可以模拟作为硬件的路由器概念的功能,例如通过在所有连接的成员之间创建通信链路来充当交换机(默认行为),如果需要,可以禁用。
路由器为消息找到路径的方式不是由路由器本身直接决定的,而是由其使用的路由协议(或多个协议)决定的。路由器支持任意数量的独特协议,在典型操作中,按优先顺序查询每个协议,直到其中一个协议确定到目的地的路径。如果找到这样的路径,它会指示通信对象将消息传输到路径中的下一个跳点。并非所有路由协议都需要为消息提供路径查找,有些协议启用不同的地址方案、路由知识更新,或以其他方式增强(或限制)路由器的功能。
每个路由器对象默认提供两个路由协议,尽管如果需要可以移除——WSF_COMM_ROUTER_PROTOCOL_LEGACY和WSF_COMM_ROUTER_PROTOCOL_MULTICAST。这些是通用协议实现,旨在提供AFSIM早期版本中固有的一些遗留功能,以便场景输入文件无需任何(或最少)更新即可在当前和未来版本的AFSIM中保持功能,特别是简单地将消息从通信A传递到通信B。
最后,在增强通信框架的早期版本中,路由器提供了关于感知与真实网络状态使用的概念和用户切换。这已被移除,因为路由协议现在决定(逐案)它们是否使用模拟真实网络状态进行路径查找,或者它们是否在本地维护感知的网络状态,或两者的某种混合。由于路由器对象可以使用多个协议,这允许基于协议可用性在用户可配置的真实或感知路由选择中进行条件选择。
通信层实现和通信协议
AFSIM中的通信对象使用7层OSI模型来组织通信类型的实现。基本上,每个通信对象包含一个称为协议栈的对象,其中包含多个“层”对象,用于处理从通信对象发送和接收的消息。当通信被指示发送消息时,该消息会通过栈中的每一层,每一层都有选择继续传递消息或中止过程的选项。接收消息的工作方式相同,只是消息在协议栈的层中以相反的方向(从下到上)遍历,具有相同的选项来将消息传递到更高层或中止接收。
请注意,尽管AFSIM通信对象使用此模型,但不要推断通信模型仅基于IP。这只是支持通信对象建模的一种逻辑、灵活和可扩展的方式,无论它们如何运行或其预期用途,即使是基于电磁的。没有什么可以阻止最终用户仍然使用单层定义自己的通信对象,或者可能跳过层模型。这样提供只是为了减轻创建新模型、维护现有模型以及支持尚未创建的其他模型所产生的成本。
层结构的含义是每一层可以在通信内部和/或对消息执行操作,并以适合特定通信实现的方式处理消息。许多通信对象可能选择重用相同的层实现,或创建自己的实现,因为这些层可以通过AFSIM框架完全扩展。
目前,AFSIM提供了以下具有基本功能的层:
- 应用层 - 在发送时,确定目标平台的可能接收者。
- 传输层 - 在发送时,将适当的传输协议附加到消息上,以便其他通信知道如何处理消息。
- 网络层
- 在发送时,使用路由器确定到目标接收者的路径,并选择“最佳”路径(由路由器的可用协议确定)。
- 在接收时,确定消息是否针对该平台,或者只是一个跳点。如果只是一个跳点,找到到目标的最佳路径,并转发消息。
- 数据链路层 - 在发送时,将消息放入队列,直到通信能够物理传输。
- 物理层 - 在发送时,确定消息传输涉及的时间,并发出电磁信号(如果适用)。通知数据链路层(如果适用)何时可以发送更多排队的消息。如果使用可靠通信作为传输协议且发送失败,通知网络层发送失败(用于路由更新目的)。
代码库中还提供了其他层,但目前没有以有意义的方式使用。
可以向通信实现添加任意数量或类型的层,并可以根据需要进行修改。这允许创建更详细的实现,甚至在必要时可能实现数据包级别的实现。
通信还具有一个独特的组件,即通信协议。在AFSIM中,任何给定的通信实例可以关联任意数量的独特通信协议。通信协议修改通信模型层处理的默认行为,因为AFSIM提供的通信模型中的默认层实现会在典型的发送/接收操作中查询通信在每一层中遍历的通信协议。因此,通信协议允许修改现有通信模型而无需创建全新的模型来修改行为。这减少了创建新通信功能所需的开发量,允许它们在现有模型上使用,并大大减少了代码复制。目前,AFSIM中仅预定义了一个通信协议WSF_COMM_PROTOCOL_IGMP,它通过通信接口启用多播组成员资格,并允许通信对象接收多播消息。
指挥链、平台指定消息目标和通信的说明
以前版本的AFSIM使用指挥链来构建通信布局/网络状态表示。这一功能正随着AFSIM通信的更新逐步被移除。这样做的原因如下:
- 假设通信布局与指挥链相同是不现实的,即使这样做起来方便。
- 认为指挥链代表通信结构的假设,会导致行为上的假定,从而阻碍更高保真度的建模,并限制AFSIM作为工具进行实验的能力,尤其当通信是重要变量时。
- 这种模型曾在一些旧的仿真框架中使用,并在AFSIM中初步复制,以帮助行为的一致性验证和确认。如今,它限制了AFSIM的能力,尤其是在有效通信建模日益重要的情况下。
- 指挥链指定接收目标平台,而不是目标通信(见下文,了解为什么这有害)。
此外,在AFSIM中,指定通信消息的目标平台的功能正逐渐被移除,原因如下:
- 一个平台可以维护多个通信。简单地将平台指定为消息接收者并不指明哪个通信将接收消息。
- 因为上述原因,选择哪个通信接收消息属于假设行为,或者更糟糕的是,随机排序。这是不可接受的,因为模拟需要确定性和可重复性。
- 不知道消息接收的具体通信接口会导致难以调试场景建模中的错误,可能导致平台上的链接无法将传入消息路由到其正确的部分目的地,或者:
- 用户被迫在所有通信接口上始终如一地复制内部链接,以确保消息的正确内部平台路由,这就强制使用唯一的消息类型进行过滤,并增加了布局的复杂性。
分布式仿真与通信
在分布式环境中使用通信时,用户需要注意一些细节以确保功能正常。
- 默认情况下,通信设备可以在本地仿真环境中动态寻址。虽然这实际发生的方式超出了本文档的范围,但需要注意的是,当用户让仿真为通信设备分配地址而不明确定义时,生成的地址取决于网络中任何后续寻址的可用性,通信设备属于先到先得的基础上,从最低可用地址开始递增到最高。
- 这在分布式仿真用例中是问题,因为通信设备的排序可能在一个仿真实例与另一个仿真实例之间不一致。这可能导致地址分配冲突,显而易见的是,由于消息在其他仿真实例中以发送仿真实例中的正确地址到达,但在接收的实例中错误,导致错误的交付和/或消息丢失。
- 目前,没有机制确保在使用动态寻址时跨分布式仿真实例进行正确和唯一的地址分配。
强烈建议在分布式用例中使用通信的用户为其通信设备使用静态寻址。静态寻址规避了 上述问题。此外,只要确保使用动态寻址的任何通信设备属于仅在同一仿真环境中定义和使用的网络,动态寻址在分布式用例中仍然可行。因此,用户可以配置其场景以继续利用动态寻址,只要他们修改其网络布局以仅包含本地定义和管理的通信设备。
其他注意事项
在AFSIM中通信还有一些其他重要注意事项:
- 通信框架不传递端到端消息(以前的AFSIM版本在某些情况下会这样做)。发送消息可能会生成多跳路径。AFSIM中的每个通信对象接收、处理并重新发送这些消息,直到到达目的地。
- 默认情况下,AFSIM继续将对象分配到一个名为“default”的网状网络,并提供初始链接。
- 基于平台的消息发送在所有情况下都被移除。这包括任何基于指挥链的操作。新框架的保真度已足够高,不能再将消息概括为发送到一个平台引用,因为接收者可能不止一个通信。所有通信发送调用都需要一个发送通信和一个接收通信,以多种格式之一进行。目前,针对发送到平台的现有方法,所有可用的发送通信将发送消息,以提供一种临时的输入文件过渡方法。
- 网关仍然可用,任何失败的消息路由将自动将消息传递到定义的网关(假设用户选择的协议支持这一点)。网关是针对每个通信对象定义的,因此任何通信都可以定义自己的网关。使用旧的“default_gateway”命令不再支持。