IEC60870-104報文解析 —— 利用Wireshark對報文逐位元組進行解析詳細解析IEC60870-104附含模擬器以及pcap包

  • 2020 年 5 月 22 日
  • 筆記

前言 —— 

104報文較為繁瑣。

共有S幀、I幀、U幀。

簡單的說I幀是用來傳輸數據、S幀是用來信息確認、U幀用來控制。

因為S幀與U幀的報文基本無變化也太過於簡短,所以我這邊舉例子吧就不在截圖了。

 

一、U幀

U 格式幀具有不計數的控制功能,長度為 6 個位元組的固定幀長。用於控制報文。

 

 

 C:表示確認    V:表示生效 

U 格式幀使用到以下三種命令

1) 啟動 U 幀,用於啟動應用層傳輸控制命令

主站發送:680407000000 從站返回:68040B000000

07 0B為控制域

2) 停止 U 幀,用於停止應用層傳輸控制命令 

主站發送:680413000000  從站返回:680423000000

13 23為控制域

 

3) 測試 U 幀,雙方均無發送時,維持鏈路活動狀態控制命令: 

主站發送:680443000000  從站返回:680483000000
43 83為控制域

二、S幀

S 格式具有計數的監視功能, S 格式幀為短幀,長度 6 個位元組。接收方接收到 I 幀數據,但本身沒有信息要發送的情況下, S 幀用於確認接收到對方的幀。

主站發送 68 04 01 00 0e 00

從站回復 68 04 01 00 1a 00

三、I幀

I 幀的控制域包含發送序列號和接收序列號兩個參數

兩個序列號在每個 APDU 和每個方向上都應按順序加一

發送序列號和接受序列號在 0~32767 之間循環

發送方增加發送序列號而接受方增加接收序列號

接收站認可連續正確 接收的一個 APDU 或者多個 APDU,將最後一個正確接收的 APDU 的發送序列號作為接收序列號返回

這個接收序列號是對所有發送序列號小於或等於該號的 APDU 的有效確認

如只在一個方向進行較長的數據傳輸,就得在另一個方向發送 S 格式認可這些 APDU

這種 方法應該在兩個方向上採用。在創建一個 TCP 連接後,發送和接收序列號都被設置成 0

 

順便附帶一下ASDU的格式

以上只是方便與理解這個規約

好了我們進入正題

四、單點遙控

發包

 I幀共有兩層、第一層為控制域與序列計數

Byte[0] 68 只要是IEC104規約那麼開頭規定的即為是68 也就為啟動符吧

Byte[1] 0e 為長度 自此往後的長度

Byte[3][4] 1c 00  發送序號,計數

Byte[3][4] 1c 00  接收序號,計數

看下一層

Byte[0] 2d 為控制符 即為功能碼

Byte[1] 01 可變結構限定詞、若信息對象的地址不連續則為0、若信息對象的地址連續則為1

Byte[2] 06 傳輸的原因

Byte[3] 00 公共地址 即RTU站址

Byte[4] 01 00 信息體地址

接下來看IOA這個結構體內的

Byte[0][2] IOA 00 00 00 信息體地址,數據點在數據庫中的序號,低位在前高位在後

Byte[0][2] SCO 80  代表單點遙控的分合狀態

回包

跟發包都是一樣 I幀發送了數據 那麼會有S或U幀確認或控制這個信息 所以I幀的回應包與發包一致

五、時間同步命令

發包

上一層就不截圖了、與之前一樣

Byte[0] 2d 為控制符 即為功能碼

Byte[1] 01 可變結構限定詞、若信息對象毫秒低位的地址不連續則為0、若信息對象的地址連續則為1

Byte[2] 06 傳輸的原因

Byte[3] 00 公共地址 即RTU站址

Byte[4] 01 00 信息體地址

接下來看IOA這個結構體內的

Byte[0] 00 00 00 信息體地址,數據點在數據庫中的序號,低位在前高位在後

Byte[1][7] 09 88 1f 0a 0d 05 14 即為時間

  09 毫秒低位

  88 毫秒高位

  1f 分鐘

  0a 時

  0d 日與星期

  05 月

  14 年

回包

 

與發包一致

其實他的I幀的都是發什麼就回什麼、確認信息以及控制是S幀的U幀

六、舉例子

也不多截圖了、舉幾個例子吧。

單點:

68 15 F8 05 DA 00 01 03 03 00 01 0B 72 00 00  01 75 00 00 00 78 00 00 01

雙點:

68 15 F8 05 DA 00 03 03 03 00 01 0B 72 00 00  01 75 00 00 02 78 00 00 01

說明:0x01,0x03  ASDU類型:單點遙信數據。0x03  ASDU類型:雙點遙信數據

0x03  可變機構限定詞:第七位定義該幀應用數據的數目,低位在前高位在後。最高位不為1,表示每個應用數據前帶有一個3個位元組的信息體地址(inf),可以不是連續的。因為是遙測數據,所以每個信息體地址後都有一個1個位元組的開關量數據。若最高位為1,見2總召遙測報文舉例

0x0003  傳送原因:定義數據上送的原因,低位在前高位在後。3表示變化上送,若20為召喚上送,1為主動上送等

0x0b01 公共地址:主站個子站設定的地址,低位在前高位在後。由主站方確定,子站嚴格按此地址設定

0x000075每個遙信數據的信息體地址:數據點在數據庫中的序號,低位在前高位在後

0x01  信息體地址後的遙信數據值,單點可以為0或1;雙點可以為0,1,2,3

總召喚上送遙信或告警報文(單點)舉例:

68 15 F8 05 DA 00 01 83 14 00 01 0B 72 00 00  01  00  01

遙信變位或告警報文(雙點)舉例:

68 15 F8 05 DA 00 03 83 14 00 01 0B 72 00 00  01  02  03

說明:定義同2召喚遙測。不同點在於遙測是3個位元組一個量,遙信是一個位元組

SOE(雙點)報文舉例:

68 15 F8 05 DA 00 1F 01 03 00 01 OB 72 00 00 02 78 49 35 0E 01 01 00

SOE(單點)報文舉例:

68 15 F8 05 DA 00 1E 01 03 00 01 0B 72 00 00 01 78 49 35 0E 01 01 00

說明:前面定義同遙信。78 49 35 0E 01 01 00為動作時間,從後到前依次為年、月、日、時、分、毫秒(2位元組)。時間為00年1月1日14時53分18808毫秒(18秒808毫秒)

 

 

暫時先就這樣吧…

想起來再補