下文開始具體分析BACNET協議中幾種基本的指令結構,本篇是分析最基本的WHO IS指令。WHO IS指令是BACNET主機向BACNET設備詢問基本信息的指令。
由於BACNET/IP協議是封裝在UDP協議當中,因此整個數據包的從低層到高層的結構如下圖所示:
在經過以太網幀、IP幀、UDP幀后,就是BACNET的數據幀。
BACNET數據幀又分為BACNET Virtual Link Control(BACNET虛擬鏈接控制層)、Network Protocol Data Unit ( 網絡協議數據單元 )、Application Protocol Data Unit(應用協議數據單元 )。
BVLC是說明BACNET協議的類型、指令、以及BVLC自身的長度,總長度為4字節。
NPDU是說明版本及一些相關的控制信息,如下圖示:
APDU是說明用戶的指令信息。
以下解析一下who is 指令的數據包結構,一些關於各個控制字節的詳細說明需要大家參考BACNET的官方說明書,因此一個控制字節往往是8個位都有意義,在博文中解析起來相當難,大家原諒哈。
who is數據包(只含BACNET協議,UDP協議已去除)
-----BVLC-------
81 代表BACNET/IP
0B 廣播
00 包長度
0C
----NPDU------
01 協議版本號
20 控制信息
FF 目的網絡地址
FF
00 目的MAC層地址長度
FF 包長度
-----APDU-----
10 APDU類型:不確認應答(unconfirmed REQ)
08 who is指令
與who is對應的i am指令數據包:
-----BVLC-------
81 代表BACNET/IP
0A 單播
00 包長度
0C
----NPDU------
01 協議版本號
00 控制信息
-----APDU-----
10 APDU類型:不確認應答(unconfirmed REQ)
00 i am指令
C4 APPLICATION TAG(這個標識會留在以后的章節講,連BACNET協議的起草人都在博客中說APPLICATION TAG和CONTEXT TAG是整個協議最難以明白的部分)
02 以下4字節為對象類型以及其ID號,在這里的對象類型為“設備(DEVICE)",ID號(INSTANCE NUMBER)是各設備獨有的ID號
00
01
C8
22 APPLICATION TAG
04 最大可接收的數據長度
00
91 APPLICATION TAG
00 是否支持數據分段
21 APPLICATION TAG
7B 生產商ID