BACnet协议-(基于ISO 8802-3 UDP)(2)

1、模拟设备的工具界面如下:

2、使用yet another bacnet explorer 用作服务,用于发现设备,界面如下:


3、通过wireshark 抓包如下:

(1)、整体包如下:
(2)、mac头
(3)、IP头

自动对应

(4)、UDP头
(4)、BACnet头
(5)、NPDU

BACnet NPDU 数据结构字段包含如下内容:

  1. Version (0x01):

    • 这是 BACnet NPDU 的版本号,遵循 ASHRAE 135-1995 的标准。
  2. Control (0x20):

    • 控制字段,这个字节包含一些标志位,用于指示 NPDU 的内容和功能。

    • bit7 (0): 指示 NPDU 是否包含 BACnet APDU。此值为 0,表示该 NPDU 包含 APDU。

    • bit6 (0): 保留位,必须为 0。

    • bit5 (1): 目的地址标识符为 DNET、DLEN 和 Hop Count,这表明该帧有目的网络信息。

    • bit4 (0): 保留位,必须为 0。

    • bit3 (0): 源地址字段缺失。

    • bit2 (0): 无需期待应答。

    • bit1 (0): 该消息的优先级为普通消息。

    • bit0 (0) : 此位为优先级控制字段,值为 0,表示这不是一个生命安全或关键设备消息。

      Bit Description If 1 If 0
      7 APDU NPDU 传递网络层消息 NPDU 包含 BACnet APDU
      6 Reserved Reserved Reserved
      5 Destination Specifier 包含DNET DLEN DADR 不包含DNET DLEN DADR
      4 Reserved Reserved Reserved
      3 Source Specifier 包含SNET SLEN SADR 不包含SNET SLEN SADR
      2 Expecting reply 等待回复 不用回复
      1,0 Priority 11=生命安全,10=关键设备,01=紧急 00=正常
  3. Destination Network Address (65535):

    • 这是目的网络地址,设置为 65535,表示广播到目标网络。
  4. Destination MAC Layer Address Length (0):

    • 此字段长度为 0,表示目标网络是广播,无需具体的 MAC 地址。
  5. Hop Count (255):

    • 路由跳数被设置为 255,这意味着该消息可以通过 255 个路由器传输,这是 BACnet 允许的最大跳数。
(6)、APDU-Who-Is

一个未确认的 Who-Is 请求

(7)、APDU-I-Am

一个未确认的I-Am请求

APDU 分析:

  1. APDU Type: Unconfirmed-REQ (1):

    • 该帧类型为未确认请求 (Unconfirmed-REQ),值为 1。
    • 这是 BACnet 协议中一种未确认服务请求消息。
  2. Unconfirmed Service Choice: I-Am (0):

    • 未确认服务选择为 I-Am(值为 0)。
    • I-Am 消息用于设备向网络广播其存在以及设备标识信息。
  3. Object Identifier:

    • Object Type: device (8)
    • Instance Number: 3473435
    • 对象标识符指示了设备对象,类型为 device,实例号为 3473435。该标识符用于唯一标识网络中的设备。
    • C4 //应用程序标记 12(对象标识符),长度 4;
      高4bit是对象标识符,低4bit是长度4,
    • 02 35 00 1b // 对象标识符指示了设备对象,
      高10bit是类型,=0b0000 0010 00 = 8 为 类型device,
      低22bit为实例号,为=0b11 0101 0000 0000 0001 1011 = 0x35001b = 3473435 该标识符用于唯一标识网络中的设备。
  4. Maximum APDU Length Accepted:

    • 值为 1464
    • 这表示该设备支持的最大 APDU 长度为 1464 字节。
      22 //Application Tag 2 (Unsigned Integer), length 2,高4bit表示数据类型(Unsigned Integer),低4bit数据长度
      05 b8 //最大 APDU 长度: 480
  5. Segmentation Supported:

    • 值为 segmented-both (0)
    • 表明设备支持分段传输(segmented-both),意味着设备可以在发送和接收时都支持数据分段。
      91 //Application Tag 9 (Enumerated), length 1,高4bit表示数据类型(Enumerated枚举),低4bit数据长度
      00 //设备支持分段传输(segmented-both
  6. Vendor ID:

    • Vendor Identifier 为 260,标识符表示该设备的供应商为 BACnet Stack at SourceForge
      22 //Application Tag 2 (Unsigned Integer), length 2,高4bit表示数据类型(Unsigned Integer),低4bit数据长度
      01 04 //Vendor Identifier 为 260,标识符表示该设备的供应商为 BACnet Stack at

该 APDU 是一个未确认的 I-Am 请求,广播设备的存在以及一些关键信息,如设备的唯一对象标识符、最大支持的 APDU 长度、设备是否支持分段传输,以及设备的供应商信息。

这些数据表明设备正在向网络中的其他设备声明其身份和能力,并不要求应答。这种消息通常用于初始发现或服务请求广播的场景。

相关推荐
海绵波波10713 小时前
Webserver(4.8)UDP、广播、组播
单片机·网络协议·udp
橘色的喵15 小时前
Linux编程:DMA增加UDP 数据传输吞吐量并降低延迟
linux·udp·dma·网络驱动·低延迟·吞吐量·nic
charlie1145141911 天前
从0开始的STM32之旅8 串口通信(II)
stm32·单片机·嵌入式硬件·c·串口通信
孤寂大仙v1 天前
【C++】AVL树
开发语言·数据结构·c++·c
C++忠实粉丝1 天前
计算机网络socket编程(1)_UDP网络编程实现echo server
linux·服务器·网络·c++·网络协议·计算机网络·udp
重生之我是数学王子2 天前
网络编程 UDP编程 Linux环境 C语言实现
linux·c语言·开发语言·网络·网络协议·udp
charlie1145141913 天前
嵌入式Linux入门具备:C语言基础与基本驱动学习(2):Linux GIibc IO基础
c语言·学习·c·io·嵌入式软件
Lingwl4 天前
Node.js UDP通信 dgram 组播
前端·网络·网络协议·udp·node.js
Selina K4 天前
使用UDP实现发送和接收
qt·网络协议·udp
charlie1145141915 天前
从0开始的STM32之旅 7 串口通信(I)
stm32·单片机·嵌入式硬件·c