第四章:介绍 BACnet 虚拟链路层
平时调试BACnet协议,一个好用的 BACnet 调试工具和模拟器必不可少,推荐一款:
官网地址:https://www.redisant.cn/bacnetexplorer
虚拟链路层 (VLL) 背后的基本概念是向现有的 BACnet 网络层呈现某些网络拓扑和功能的视图,利用新协议中内置的任何功能并根据需要添加功能以维护现有标准中的 BACnet 网络视点。
当前的介绍仅限于 IPv4,但 VLL 可以轻松为任何其他类型的网络开发。其概念是不仅使用其他协议的数据链路层,而是在节点和/或进程之间建立协作,以便从更高层协议的角度来看,它们被构造为数据链路。只要设备或进程可以被唯一地识别,并且有一种方法可以将消息分发给协作组中的所有设备或进程,就可以使用新的虚拟链路层来寻址它们。
在下图中,BACnet 虚拟链路层 (BVLL) 的控制信息被指定为 BACnet 虚拟链路控制信息 (BVLCI)。每个 BVLCI 字段至少有三个字段:BVLC 类型、BVLC 功能和 BVLC 长度。请注意,BVLCI 类型字段的值为 X'81'。这用于指示这是 BACnet/IP 的 BVLC 信息,并将虚拟链路消息与 NPCI 版本字段(当前为 X'01')区分开来。(BACnet 隧道路由器发送的消息与 BACnet/IP 消息的区别在于这个初始八位字节。两者都通过 UDP 发送,原则上都可以由同一设备在 X'BAC0' 的同一 UDP 端口上接收。)
每个不同的 BACnet/IP 消息都与特定的 BVLC 功能相关联。
B/IP单播
首先要讨论的问题是设备如何相互通信。它们通过使用目标 B/IP 地址向对方发送“单播”消息来实现这一点。BACnet 消息本身是如何打包的?显而易见的解决方案是利用 UDP 数据包的“数据”部分来包含 APDU。IP 已经有一个网络层,因此最简单的解决方案似乎是仅封装 BACnet 帧的 APDU 部分。但 NPCI 可能包含重要信息,例如版本号、优先级、是否应将消息路由到非 BACnet/IP 节点等。因此,整个 NPDU 都被封装了。
另一个问题是,一些 BACnet/IP 设备可能需要知道消息是如何传送的,是通过单播还是广播寻址。我们很快就会明白为什么。由于一些商用 IP 协议实现不向接收者提供此信息,因此我们必须创建一种万无一失的方法,使寻址模式可用于更高的协议层。输入 BVLL“原始单播 NPDU”和“原始广播 NPDU”。
BVLCI 表示这是一个原始单播-NPDU。这个简单例子中的 NPCI 表明这是“等待回复的数据”。
B/IP广播
除了设备之间直接通信之外,还需要一种机制来广播消息,以便所有 B/IP 设备都能接收到该消息。我们将使用现有的标准来广播 UDP 数据包。
UDP 广播数据包被“发送”到 IP 地址,该 IP 地址包含广播设备的子网以及主机部分中的全 1。例如,如果设备的地址为 128.253.109.10,子网掩码为 255.255.255.0,则它可以使用广播地址 128.253.109.255。虽然大多数网络也允许使用 IP 广播地址 255.255.255.255,但由于某些实施者遇到了一些 IP 协议栈限制,我们已排除 BACnet/IP 的这种可能性。
BVLCI 表示这是一个原始广播 NPDU。NPCI显示这不是“等待回复的数据”,即广播数据。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.redisant.cn