廣東工業(yè)大學 鐘其源
BACnet報文分析
廣東工業(yè)大學 鐘其源
所謂通信協議,是指計算機網絡中各自主節(jié)點在進行數據(包括控制信息)交換時必須遵守事先約定的規(guī)程或規(guī)則。BACnet標準作為智能樓宇自控網絡的通信協議,網絡里各個子系統的互操作要求它們必須認識這個交流的“語言”。而很多非標準的子系統和控制器,無法接入BACnet系統上,這就需要我們找到一個“翻譯“,也就是網關,協議的轉換器,這時候我們就會覺得對BACnet報文分析顯得尤為重要。
BACnet協議;報文分析;編碼
BACnet的報文其實就是一串數字,我們可以借助VTS軟件對主流的應用服務進行分析。而要全面搞懂報文,必須深入了解BAC-net協議本身結構,因為是BACnet網絡與外界Internet連接,它重新定義一個微協議層,稱為虛擬鏈路數據層,“BVLL“,位于網絡層和ip協議層之間,作用是進行BACnet廣播管理,并提供向其他通信協議擴展的擴展機制,這種擴展方式利用ip用戶數據包(UDP)進行BACnet信息傳輸,UDP是無連接服務,優(yōu)點是靈活方便和比較速度,但是不能保證不丟包,VTS測試軟件也是基于UDP進行數據的傳輸,在報文上把UDP的端口號”BAC0“放在目標地址的ip地址后。至于其他層協議的數據結構編碼我將結合VTS軟件和實際的例子給大家分析講解。
圖1
現在我對本地的BACnet設備發(fā)送一個廣播who-is,前面四個字節(jié)表示一個廣播地址,“C0 A8 FF BA“為”192.168.1.255“,”BA C0“為UDP的端口號。接下來的四個字節(jié)為虛擬鏈路層的報文結構,”81 0A 00 0C“,”81”表示低層通信協議僅限為ip協議,是一種特定類型,”0A“是BVLL協議報文根據功能區(qū)分的第十種報文類型,表示用于對等設備節(jié)點間信息的單播。目前定義了12種類型,”0A“是比較主流的類型,”00 0C“表示協議報文的總長度,由以上報文數據可知道,從”81“開始到”08“的確只有12個字節(jié)長度。
接著是網絡層。路由就在網絡層負責轉發(fā),它如果是本地內局域網數據轉播時,NPDU中的所有與地址有關的域均可以缺省,網絡層可以根據數據鏈路層中的DA(本地MAC目的地址)和SA(本地MAC源地址)確定發(fā)送方和接收方的地址。所以在該who-is服務請求是本地廣播,查詢到達某一BACnet網絡的路由器,類型編號為”00”,在上述報文中是“01 20 FF 00 FF”,“01”說明BAC-net協議的版本號,規(guī)定此字節(jié)為1.“X20”是控制域,即“0010 0000”表示BACnet報文類型,存在目標地址和網絡號的一個正常報文,其中“FF”表示最終目的網絡號,為“FFFF”時表示全局廣播,“00”表示目的地址的長度為0,還有一個“FF”是Hop Count(轉發(fā)計數)表示用于記錄報文經過BACnet路由器的次數,因為它是一個本地廣播的報文,如果DNET存在,則此域必須存在,且初始化為X”FF”。
接著到應用層的報文數據結構,這一層相對復雜,服務原語分證實服務和非證實服務,同樣由數據報文的格式決定。上述報文中“10 08”為應用層的報文,其中“10”即“0001 0000”表示的是第一種類型非證實服務的請求原語,它只是單向的尋找設備,不是證實服務,沒有SEG(報文分段),沒有more-follows(報文分段接受窗口)?!?8”是BACnet非證實服務里面包括的CHOICE第8鐘類型選擇。圖2所示表示這類服務的框架。
圖2 服務框架圖
BACnet協議里面定義35個服務原語類型,每一種類型的選擇都有明確的編碼規(guī)則,從上述簡單的一個非證實服務,可知道里面的選擇性很多,比如BVLL協議的功能、不是本地廣播都會相應的改變數據報文,不過它們的對應關系還是相當明確,只要熟知了報文,對開發(fā)BACnet協議轉其他協議的網關具有很好的指導作用。證實服務涉及到用戶數據編碼,里面有很多應用標記,上下文標記,雖然麻煩,但是規(guī)則還是差不多,根據它們的編碼結構圖慢慢解析就可以。
[1]梁華,劉賢德,惠曉實.基于面向對象技術的樓宇自控網絡協議的實現[J].智能建筑與城市信息,2013,10(12):35-37.
[2]董春橋.BACnet標準在我國推廣和應用的思考[J].智能建筑與城市信息,2013,10(12):33-35.
[3]石巖,劉賢德,惠曉實.BACnet 的服務[J].工程設計CAD與智能建筑,2000,7(2):12-16.
鐘其源,廣東工業(yè)大學碩士研究生,研究方向:智能樓宇。