天天看點

Modbus 的RTU、ASCII、TCP傻傻搞不清楚?一文全解讀

作者:技成PLC課堂
Modbus 的RTU、ASCII、TCP傻傻搞不清楚?一文全解讀

寫在面前

今天來聊一聊Modbus,先看看今天的主要内容:

01 術語解讀

02 背景

03 協定原理

04 傳輸方式

05 Modbus RTU與Modbus ASCII有什麼差別

06 Modbus TCP及其注意點

07 功能碼作用

08 Modbus協定安全分析

01術語解讀

校驗碼:校驗碼通常是一組數字的最後一位,由前面的數字通過某種運算得出,用以檢驗該組資料的正确性。代碼作為資料在向計算機或其它裝置進行輸入時,容易産生輸入錯誤,為了減少這種輸入錯誤,編碼專家發明了各種校驗檢錯方法,并依據這些方法設定了校驗碼。常用的校驗有:累加和校驗SUM、位元組異或校驗XOR、縱向備援校驗LRC、循環備援校驗CRC……

離散量輸入:主要用來讀取單個位的資料,如IO的狀态;

線圈:開關輸出信号,主要用來寫入單個位的資料,與離散量構成組成對位的操作;

輸入寄存器:主要用來讀取16位,也就是兩個位元組的資料;

保持寄存器:主要用來寫入16位的資料;

PLC:可程式設計邏輯控制器,是一種采用一類可程式設計的存儲器,用于其内部存儲程式和執行邏輯運算、順序控制、定時、計數與算術操作等面向使用者的指令,并通過數字或模拟式輸入/輸出控制各種類型的機械或生産過程。

序列槽通信:随着計算機系統的應用和微機網絡的發展,通信功能越來越顯得重要。這裡所說的通信是指計算機與外界的資訊交換。是以,通信既包括計算機與外部裝置之間,也包括計算機和計算機之間的資訊交換。由于串行通信是在一根傳輸線上一位一位的傳送資訊,所用的傳輸線少,并且可以借助現成的電話網進行資訊傳送,是以特别适合于遠距離傳輸。

對于那些與計算機相距不遠的人-機交換裝置和串行存儲的外部裝置如終端、列印機、邏輯分析儀、磁盤等,采用串行方式交換資料也很普遍。在實時控制和管理方面,采用多台微機處理機組成分級分布控制系統中,各 CPU 之間的通信一般都是串行方式。是以串行接口是微機應用系統常用的接口。許多外設和計算機按串行方式進行通信,這裡所說的串行方式,是指外設與接口電路之間的資訊傳送方式,實際上CPU 與接口之間仍按并行方式工作。

序列槽:序列槽是計算機上一種非常通用裝置通信的協定,不要與通用串行總線Universal Serial Bus(USB)混淆。大多數計算機包含兩個基于RS232的序列槽。序列槽同時也是儀器儀表裝置通用的通信協定;很多GPIB相容的裝置也帶有RS-232口。同時,序列槽通信協定也可以用于擷取遠端采集裝置的資料。

序列槽通信的概念非常簡單,序列槽按位(bit)發送和接收位元組。盡管比按位元組(byte)的并行通信要慢,但是序列槽可以在使用一根線發送資料的同時用另一根線接收資料。它很簡單并且能夠實作遠距離通信。比如IEEE488定義并行通行狀态時,規定裝置線總常不得超過20米,并且任意兩個裝置間的長度不得超過2米;而對于序列槽而言,長度可達1200米。

典型地,序列槽用于ASCII碼字元的傳輸。通信使用3根線完成:地線、發送和接收。由于序列槽通信是異步的,端口能夠在一根線上發送資料同時在另一根線上接收資料。其他線用于握手,但是不是必須的。序列槽通信最重要的參數是波特率、資料位、停止位和奇偶校驗。對于兩個進行通行的端口,這些參數必須比對:

a.波特率:這是一個衡量通信速度的參數。它表示每秒鐘傳送的bit的個數。例如300波特表示每秒鐘發送300個bit。當我們提到時鐘周期時,我們就是指波特率。例如如果協定需要4800波特率,那麼時鐘是4800Hz。這意味着序列槽通信在資料線上的采樣率為4800Hz。通常電話線的波特率為14400,28800和36600。波特率可以遠遠大于這些值,但是波特率和距離成反比。高波特率常常用于放置的很近的儀器間的通信,典型的例子就是GPIB裝置的通信。

b.資料位:這是衡量通信中實際資料位的參數。當計算機發送一個資訊包,實際的資料不會是8位的,标準的值是5、7和8位。如何設定取決于你想傳送的資訊。比如,标準的ASCII碼是0~127(7位)。擴充的ASCII碼是0~255(8位)。如果資料使用簡單的文本(标準 ASCII碼),那麼每個資料包使用7位資料。每個包是指一個位元組,包括開始/停止位,資料位和奇偶校驗位。由于實際資料位取決于通信協定的選取,術語“包”指任何通信的情況。

c.停止位:用于表示單個包的最後一位。典型的值為1,1.5和2位。由于資料是在傳輸線上定時的,并且每一個裝置有其自己的時鐘,很可能在通信中兩台裝置間出現了小小的不同步。是以停止位不僅僅是表示傳輸的結束,并且提供計算機校正時鐘同步的機會。适用于停止位的位數越多,不同時鐘同步的容忍程度越大,但是資料傳輸率同時也越慢。

d.奇偶校驗位:在序列槽通信中一種簡單的檢錯方式。有四種檢錯方式:偶、奇、高和低。當然沒有校驗位也是可以的。對于偶和奇校驗的情況,序列槽會設定校驗位(資料位後面的一位),用一個值確定傳輸的資料有偶個或者奇個邏輯高位。例如,如果資料是011,那麼對于偶校驗,校驗位為0,保證邏輯高的位數是偶數個。如果是奇校驗,校驗位1,這樣就有3個邏輯高位。高位和低位不真正的檢查資料,簡單置位邏輯高或者邏輯低校驗。這樣使得接收裝置能夠知道一個位的狀态,有機會判斷是否有噪聲幹擾了通信或者是否傳輸和接收資料是否不同步。

02背景

早在1971年,Modicon公司首次推出了Modbus協定,ModbusRTU和Modbus ASCII誕生于此。後來施耐德電氣(SchneiderElectric)收購了Modicon公司,并在1997年推出了ModbusTCP協定。2004年,中國國家标準委員會正式把Modbus作為了國家标準,開啟了Modbus為中國工業通信做貢獻的時代。

通過此協定,控制器互相之間、控制器經由網絡和其它裝置之間可以通信。Modbus協定具有标準、開放,可以支援多種電氣接口,資料幀格式簡單緊湊,資料傳輸量大、實時性好等特點,在工業控制系統中得到了廣泛的應用,已經成為通用工業标準。深入分析Modbus協定實作原理和其安全性對提高工控系統安全性有着重要的現實意義。

ModbusRTU和ModbusASCII主要用于串行通信領域,而ModbusTCP則常用于以太網通信。現在,Modbus已經成為工業領域通信協定标準,并且現在是工業電子裝置之間相當常用的連接配接方式。

Modbus 的RTU、ASCII、TCP傻傻搞不清楚?一文全解讀

03協定原理

Modbus使用一種簡單的MasterandSlave主從協定(客戶機/伺服器協定)進行通信。客戶機作為主站,向伺服器發送請求;伺服器(從站)接到請求後,對請求進行分析并作出應答。其中使用的通信幀被稱為應用資料單元(Application Data Unit,ADU),它包括通信位址段、功能代碼段、資料段和校驗段,如下圖:

Modbus 的RTU、ASCII、TCP傻傻搞不清楚?一文全解讀

一般使用上,監控系統(HMI)都為Master,PLC、電表、儀表等都為Slave,HMI系統一直PollingSlave的各種relayandregister最新數值,然後做顯示及各種邏輯計算及控制調整等處理。

其中,功能代碼段和資料段組合稱為協定資料單元(Protocol Data Unit or Protocol Description Unit),PDU)。功能代碼段占用一個位元組,取值範圍為1~255,其中128~255為保留值,用于異常消息應答封包。1~127為功能代碼編号,其中65~72和100~110為使用者自定義編碼。

04傳輸方式

Modbus 協定是一種應用層封包傳輸協定,包括ASCII、RTU、TCP三種封包類型,協定本身并沒有定義實體層,隻是定義了控制器能夠認識和使用的消息結構,而不管它們是經過何種網絡進行通信的。

Modbus 協定使用序列槽傳輸時可以選擇RTU或ASCII模式,并規定了消息、資料結構、指令和應答方式并需要對資料進行校驗。ASCII 模式采用LRC校驗,RTU模式采用16 位CRC校驗。通過以太網傳輸時使用TCP,這種模式不使用校驗,因為TCP協定是一個面向連接配接的可靠協定。

05 Modbus RTU與Modbus ASCII有什麼差別

Modbus是一種應用層協定,它定義了與基礎網絡無關的資料單元(ADU),可以在以太網(TCP/IP)或串行鍊路上(RS232、RS485等)進行通信(以太網ADU和串行ADU略有不同)。在串行鍊路上,Modbus協定有兩種傳輸模式——ASCII模式和RTU模式。其中,ASCII是英文“American Standard Code for Information Interchange”的縮寫,中文翻譯為“美國國家資訊交換标準編碼”;RTU是英文“ Remote Terminal Unit”的縮寫,中文翻譯為“遠端終端裝置”。

首先,讓我們來看看Modbus的工作原理。

Modbus采用主從(Master-Salve)通信模式,僅有主裝置(Master)能對傳輸進行初始化,從裝置(Slave)根據主裝置的請求進行應答。典型的主裝置包括現場儀表和顯示面闆,典型的從裝置為可程式設計邏輯控制器(PLC)。

在串行鍊路的主從通信中,Modbus主裝置可以連接配接一個或N(最大為247)個從裝置,主從裝置之間的通信包括單點傳播模式和廣播模式。

在廣播模式中,Modbus主裝置可同時向多個從裝置發送請求(裝置位址0用于廣播模式),從裝置對廣播請求不進行響應。

在單點傳播模式中,主裝置發送請求至某個特定的從裝置(每個Modbus從裝置具有唯一位址),請求的消息幀中會包含功能代碼和資料,比如功能代碼“01”用來讀取離散量線圈的狀态。從裝置接到請求後,進行應答并把消息回報主裝置。

Modbus 的RTU、ASCII、TCP傻傻搞不清楚?一文全解讀

在主從裝置的通信中,可以使用ASCII模式或者RTU模式。在ASCII(AmericanStandard Code for Information Interchange)傳輸模式下,消息幀以英文冒号(“:”,ASCII3A Hex)開始,以回車和換号(CRLF,ASCII 0D and 0A Hex)符号結束,允許的傳輸的字元集為十六進制的0~9和A~F;網絡中的從裝置監視傳輸通路上是否有英文冒号(“:”),如果有的話,就對消息幀進行解碼,檢視消息中的位址是否與自己的位址相同,如果相同的話,就接收其中的資料;如果不同的話,則不予理會。

Modbus 的RTU、ASCII、TCP傻傻搞不清楚?一文全解讀

在ASCII模式下,每個8位的位元組被拆分成兩個ASCII字元進行發送,比如十六進制數0xAF ,會被分解成ASCII字元“A”和“F”進行發送,發送的字元量比RTU增加一倍。ASCII模式的好處是允許兩個字元之間間隔的時間長達1s而不引發通信故障,該模式采用縱向備援校驗(Longitudinal Redundancy Check ,LRC))的方法來檢驗錯誤,當控制器設為在Modbus 網絡上以RTU 模式通信,消息中的每個8Bit 位元組都包含兩個4 Bit 的十六進制字元,這種模式沒有開始和結束标記。其優點是: 在同樣的波特率下,可傳送更多的資料。

在RTU(RemoteTerminal Unit)模式下,每個位元組可以傳輸兩個十六進制字元,比如十六進制數0xAF,直接以十六進制0xAF(二進制:10101111)進行發送,是以它的發送密度比ASCII模式高一倍;RTU模式采用循環備援校驗(CRC),下面是對RTU模式的總結:

具體格式如下圖所示:

Modbus 的RTU、ASCII、TCP傻傻搞不清楚?一文全解讀

06 Modbus TCP及其注意點

6.1 主機和從機、服務端和用戶端

【在modbus協定中】

主機發送modbus請求,從機根據請求内容向主機傳回響應。在modbus協定中,主機總是主動方,從機總是被動方。

【在網絡應用中】

在網絡應用中存在用戶端和伺服器端,用戶端(例如浏覽器)發送請求到伺服器,伺服器向用戶端傳回内容(例如HTML文本)。

【在modbus tcp中】

主機是用戶端,而從機是伺服器端。千萬不要以為伺服器端重要,主機也重要,是以主機就是伺服器端。

6.2 是否可以多主機

通過前面的分析,主機為用戶端那麼modbustcp支援多個主機,在一個 區域網路中可存在多個主機和多個從機。從機的連接配接能力(連接配接主機的數 量)由uIP的最大TCP連接配接個數決定。

6.3 modbus TCP協定簡述

modbus TCP和modbus RTU基本相同,但是也存在一些差別:

a.從機位址變得不再重要,多數情況下忽略。從某種意義上說從機位址被IP位址取代;

b.CRC校驗變得不再重要,甚至可以忽略。由于TCP資料包中已經存在校驗,為了不重複造輪子,modbus TCP幹脆取消了CRC校驗。

TCP 模式是為了讓Modbus 資料順利在以太網上傳輸産生的,使用TCP502 端口。該協定實體層,資料鍊路層,網絡層,傳輸層都是基于TCP 協定,隻在應用層,将Modbus 協定修改後封裝進去; 接收端将該TCP 資料包拆封後,重新獲得原始Modbus 幀,然後按照Modbus 協定規範進行解析,并将傳回的資料包重新封裝進TCP 協定中,傳回到發送端。與串行鍊路傳輸的資料格式不同,TCP 模式去除了附加位址和校驗,增加了封包頭,其具體格式如圖4所示。

Modbus 的RTU、ASCII、TCP傻傻搞不清楚?一文全解讀

在modbus TCP中包含一個MBAP頭,該頭包含以下幾個部分:

區域

長度

描述

用戶端

伺服器

傳輸标志 2位元組 MODBUS 請求和響應傳輸過程中序列号 用戶端生成 應答時複制該值
協定标志 2位元組 Modbus協定預設為0 用戶端生成 應答時複制該值
長度 2位元組 剩餘部分的長度 用戶端生成 應答時由伺服器端生成
單元标志 1位元組 從機标志(從機位址) 用戶端生成 應答時複制該值

注意:

a.傳輸标志可了解為序列号,防止 MODBUS TCP通信錯位,例如後發生的響應先到了主機,而早發生的響應後到主機;

b.單元标志可了解為從機位址,此時已經不再重要。

6.4 modbus tcp 和 TCP IP的關系

modbus TCP可以了解為發生在TCP上的應用層協定,既然是TCP協定那麼一個完整的MODBUSTCP封包必然包括TCP首部,IP首部和Ethernet首部。

07功能碼作用

啟動Modbus事務處理的客戶機建立Modbus應用資料單元。功能碼(PDU中的)向伺服器訓示将執行哪種操作。

用一個位元組編碼Modbus資料單元的功能碼域。有效範圍是十制制1-255(128-255為異常響應保留)。當從客戶機向伺服器發送封包時,功能碼域通過伺服器執行哪種操作。

從客戶機向伺服器發送的封包資料域包括附加資訊,伺服器使用這個資訊執行功能碼定義的操作。這個域還包括離散項目和寄存器位址、處理項目的數量以及域中的實際資料位元組數。

在某種請求中,資料域可以是不存在的,在此情況下伺服器不需要任何附加資訊。功能碼僅說明操作。

功能碼的類型:

功能碼主要分為有效功能碼、異常功能碼和錯誤功能碼。如果在一個正确接收Modbus ADU中,不出現與請求Modbus功能有關的差錯,那麼伺服器至客戶機的響應資料會包含請求中的正常功能碼。如果出現與請求Modbus功能有關的差錯,那麼響應資料會包含一個異常碼和錯誤碼。

例如,客戶機能夠讀一組離散量輸出或輸入的開/關狀态,或者使用者能夠讀/寫一組寄存器資料内容。當伺服器對客戶機響應時,它使用功能碼域來訓示正常(無差錯)響應或出現某種差錯(稱為異常響應)。對于一個正常響應來說,伺服器僅對原始功能碼響應。

對于異常響應,伺服器傳回一個與客戶機等同的碼,設定該原始功能碼的最高有效位為邏輯1,并加該異常碼後增加錯誤碼,以通知客戶機異常原因。

有效功能碼

有效功能碼有二十幾種,但是一般使用上都以1、2、3、4、5、6、15、16等八種最為常用,以及另外特殊使用的20、21兩種,此為General Reference Register,絕大部份的Modbus裝置并不會提供此Register。于PLC上主要的控制資料有下列四種型式。此八種功能碼就是處理這些控制資料,詳細說明如下各點:

控制資料四種型式:

DI:DigitalInput(數字輸入,離散輸入),一個位址一個資料位,使用者隻能讀取它的狀态,不能修改。以一個 bit表示 On/Off,用來記錄控制信号的狀态輸入,例如:開關,接觸點,馬達運轉,超限switch…等等。于PLC上被稱為Input relay、input coil等。

DO:DigitalOutput(數字輸出,線圈輸出),一個位址一個資料位,使用者可以置位、複位,可以回讀狀态。以一個 bit表示 On/Off,用來輸出控制信号,以激活或停止馬達,警鈴,燈光…等等。于PLC上被稱為Output relay、Output coil等。

AI:Analog Input(模拟輸入,輸入寄存器),一個位址16位資料,使用者隻能讀,不能修改,以16 bits integer表示一個數值,用來記錄控制信号的數值輸入,例如:溫度、流量、料量、速度、轉速、檔案闆開度、液位、重量…等等。于PLC上被稱為Input register。

AO:AnalogOutput(模拟輸出,保持寄存器),一個位址16位資料,使用者可以寫,也可以回讀,以16 bits integer表示一個數值,用來輸出控制信号的數值,例如:溫度、流量、速度、轉速、檔案闆開度、飼料量…等等設定值。于PLC上被稱為Output register、Holding register。

Modbus 的RTU、ASCII、TCP傻傻搞不清楚?一文全解讀

08Modbus協定安全分析

Modbus 協定是典型的工控網協定,研究其安全性對于加強工業控制網絡的安全性有重要意義。一般來說,協定安全性問題可以分為兩種,一種是協定自身的設計和描述引起的安全問題; 另一種是協定的不正确實作引起的安全問題。Modbus 協定也存在着這兩方面的問題。

8.1Modbus 協定的固有問題

絕大多數工控協定在設計之初,僅僅考慮了功能實作、提高效率、提高可靠性等方面,而沒考慮過安全性問題。Modbus 協定也不例外,盡管其已經成為事實上的工業标準。從前面原理分析可以看出其本身的安全性問題是: 缺乏認證、授權、加密等安全防護機制和功能碼濫用問題。

(1)缺乏認證

認證的目的是保證收到的資訊來自合法的使用者,未認證使用者向裝置發送控制指令不會被執行。在Modbus 協定通信過程中,沒有任何認證方面的相關定義,攻擊者隻需要找到一個合法的位址就可以使用功能碼就能建立一個Modbus 通信會話,進而擾亂整個或者部分控制過程。

(2)缺乏授權

授權是保證不同的特權操作需要由擁有不同權限的認證使用者來完成,這樣可大大降低誤操作與内部攻擊的機率。目前,Modbus 協定沒有基于角色的通路控制機制,也沒有對使用者分類,沒有對使用者的權限進行劃分,這會導緻任意使用者可以執行任意功能。

(3)缺乏加密

加密可以保證通信過程中雙方的資訊不被第三方非法擷取。Modbus 協定通信過程中,位址和指令全部采用明文傳輸,是以資料可以很容易的被攻擊者捕獲和解析,為攻擊者提供便利。

(4)功能碼濫用

功能碼是Modbus 協定中的一項重要内容,幾乎所有的通信都包含功能碼。目前,功能碼濫用是導緻Modbus 網絡異常的一個主要因素。例如不合法封包長度,短周期的無用指令,不正确的封包長度,确認異常代碼延遲等都有可能導緻拒絕服務攻擊。

8.2協定實作産生的問題

雖然Modbus 協定獲得了廣泛的應用,但是在實作具體的工業控制系統時,開發者并不具備安全知識或者沒有意識到安全問題。這樣就導緻了使用Modbus 協定的系統中可能存在各種各樣的安全漏洞。

(1)設計安全問題

Modbus 系統開發者重點關注的是其功能實作問題,安全問題在設計時很少被注意到。設計安全是指設計時充分考慮安全性,解決Modbus 系統可能出現的各種異常和非法操作等問題。比如在通信過程中,某個節點被惡意控制後發出非法資料,就需要考慮這些資料的判别和處理問題。

(2)緩沖區溢出漏洞

緩沖區溢出是指在向緩沖區内填充資料時超過了緩沖區本身的容量導緻溢出的資料覆寫在合法資料上,這是在軟體開發中最常見也是非常危險的漏洞,可以導緻系統崩潰,或者被攻擊者利用來控制系統。

Modbus 系統開發者大多不具備安全開發知識,這樣就會産生很多的緩沖區溢出漏洞,一旦被惡意者利用會導緻嚴重的後果。

(3)Modbus TCP 安全問題

目前,Modbus 協定已經可以在通用計算機和通用作業系統上實作,運作于TCP /IP 之上以滿足發展需要。這樣,TCP /IP 協定自身存在的安全問題不可避免地會影響到工控網絡安全。非法網絡資料擷取,中間人,拒絕服務, IP 欺騙,病毒木馬等在IP 網際網路中的常用攻擊手段都會影響Modbus 系統安全。

8.3安全建議

目前,Modbus 系統采取的安全防護措施普遍不足,這裡參考資訊安全業内研究并結合工控系統自身的安全問題,提出了一些安全建議,能夠有效地降低工業控制系統面臨的威脅。

(1)從源頭開始

工控網絡漏洞,很大一部分是其實作過程出現的漏洞。如果從源頭開始控制,從Modbus 系統的需求設計、開發實作、内部測試和部署等階段,全生命周期的介入安全手段,融入安全設計、安全編碼以及安全測試等技術,可以極大地消除安全漏洞,降低整個Modbus 系統的安全風險。

(2)異常行為檢測

異常行為代表着可能發生威脅,不管是有沒有攻擊者,是以開發針對Modbus 系統的專用異常行為檢測裝置可以極大提高工控網絡的安全性。針對Modbus 系統,首先要分析其存在的各種操作行為,依據“主體,地點,時間,通路方式,操作,客體”等行為描述成一個六元組模型; 進而分析其行為是否屬于異常; 最終決定采取記錄或者報警等措施。

(3)安全審計

Modbus 的安全審計就是對協定資料進行深度解碼分析,記錄操作的時間、地點、操作者和操作行為等關鍵資訊,實作對Modbus 系統的安全審計日志記錄和審計功能,進而提供安全事件爆發後的時候追查能力。

(4)使用網絡安全裝置

使用入侵防禦和防火牆等網絡安全裝置。防火牆是一個串行裝置,通過設定,隻允許特定的位址通路服務端,禁止外部位址通路Modbus 伺服器,可以有效的防止外部入侵; 入侵防禦裝置可以分析Modbus協定的具體操作内容,有效地檢測并阻止來自内部/外部的異常操作和各種滲透攻擊行為,對内網提供保護功能。

免責聲明:本文轉自網絡,版權歸原作者所有,如涉及作品版權問題,請及時與我們聯系删除,謝謝!

如何擷取電氣熱門資料?

操作指引如下!

Modbus 的RTU、ASCII、TCP傻傻搞不清楚?一文全解讀