關於DoIP 協議的理解

目錄

1. 數據鏈路層與物理層

2. 傳輸層與網絡層

3. DoIP數據幀格式

3.1 幀格式說明

3.2 DoIP-協議版本

3.3 DoIP-Data Type

3.4 DoIP-Data length

4. 診斷連接

4.1 連接狀態

4.2 建立連接和車輛發現

4.3 會話建立

5. 診斷髮送

5.1 請求DID F810讀取


1. 數據鏈路層與物理層

根據ISO-13400的要求,DoIP通信在物理層支持100BASE-TX (100 Mbit/s Ethernet) 和10BASE-T (10 Mbit/s Ethernet) 兩種制式。

2. 傳輸層與網絡層

DoIP設備的MAC地址也符合IEEE 802.3 的要求。

ISO-13400規定,DoIP通信在傳輸層上必須同時支持UDP和TCP,並將UDP和TCP的使用場合進行了定義,對所使用的端口號也進行了定義。

ISO-13400規定,DoIP通信在網絡層上使用IPv6協議,但是爲了後向兼容的原因,也支持IPv4。此外,對於IPv4來說,還要支持地址解析協議(ARP ),對於IPv6來說,還要支持鄰居發現協議(NDP) ,這兩個協議是用於在只知道IP地址的情況下獲取MAC地址的。

ARP格式包

NDP數據包

可參考 https://blog.csdn.net/zhishenluo/article/details/103729512 

3. DoIP數據幀格式

3.1 幀格式說明

以太網幀(具體參考網絡幀)

IP段

TCP段

UDP段

DoIP段

 

3.2 DoIP-協議版本

0x00: reserved

0x01: DoIP ISO/DIS 13400-2:2010

0x02: DoIP ISO 13400-2:2012

0x03…0xFE: reserved by this part of ISO 13400

0xFF: default value for vehicle identifcation request messages

3.3 DoIP-Data Type

preview

 

【0x0001至0x0004】用於汽車標識上報或請求,只能通過UDP報文來發送這種命令,主要用於在汽車和診斷儀進入網絡之後、診斷連接建立之前的車輛發現過程。

【0x0005 和0x0006】標識的Routing activation request 和 response用於在socket建立之後,進行診斷通信的請求。

【0x0007和0x0008】用於Alive check,用於檢查當前建立的診斷連接socket是否仍然在使用中,如果不再使用,則關閉socket釋放資源。

0x8001,0x8002,0x8003】,分別代表的含義分別是診斷消息、診斷消息正響應和診斷消息負響應。

3.4 DoIP-Data length

 

就是標識後面的user data的長度。

此外源地址和目標地址可以參考UDS中定義即可,用戶數據即爲診斷相關服務數據。

4. 診斷連接

4.1 連接狀態

DoIP實體內管理着一個DoIP connection table ,用來記錄和維護診斷通信的邏輯連接。上圖就是這個表中的一個元素,即一個邏輯連接的狀態機。上圖中的方框就是連接所處的狀態,[Step]是狀態之間跳轉時發生的事情。

[Step1] 當一個新的套接字建立,邏輯連接的狀態就從“listen”跳轉到“socket initialized”,同時啓動一個定時器, initial inactivity timer。

[Step2] 當DoIP實體接收到tester發來的一個routing activation信息後,邏輯連接的狀態就從“socket initialized”跳轉到“Registered [Pending for Authentication]” ,此時 initial inactivity timer被停止,啓動一個名爲general inactivity timer的定時器。

[Step3] 在完成Authentication之後,邏輯連接的狀態就從“Registered [Pending for Authentication]”跳轉到“Registered [Pending for Confrmation]” 。

[Step4] 在完成Confrmation之後,邏輯連接的狀態就從“Registered [Pending for Confrmation]”跳轉到“Registered [Routing Active] ” 。

[Step5] 如果initial timer 或general inactivity timer 過期後仍沒收到後續請求,或者authentication 和 confrmation 被拒絕了,又或者外部測試設備對alive check 消息沒有響應,則邏輯連接進入“Finalize”狀態。

[Step6]進入Finalize後,此時TCP套接字將被關閉,並重新回到“listen”狀態。

4.2 建立連接和車輛發現

preview

當DoIP實體和外部測試設備都連接到一個網絡中時,它們會利用DHCP協議獲得一個屬於自己的IP地址。在網絡中,路由器作爲DHCP server,爲新加入到該網絡中的設備分配IP地址。在獲取IP地址之後,有兩種車輛發現的方法,如上圖所示。一種方法是車輛主動上報自己的信息3次。如果測試設備沒有收到車輛主動上報的信息,則會發送一個identification request,如果網絡中有車輛的話,車輛對這個請求進行響應,測試設備便發現了被測車輛。

4.3 會話建立

 

在診斷儀發現車輛之後,會把車輛添加到自己的車輛列表中。當用戶選擇這個列表中的某輛車,如果連接建立成功,用戶就可以對車輛進行診斷了。

接下來用戶給汽車發出診斷信息,網關會根據信息接收對象把診斷信息轉發給網絡中相關的ECU,當得到ECU 的響應之後,網關再把最終的響應發送給診斷儀。當用戶選擇退出時,用於DoIP通信的這個套接字就被關閉了。

5. 診斷髮送

5.1 請求DID F810讀取

preview

byte 0:ISO13400 版本

byte 1:ISO13400 版本逐比特取反

byte 2~3:數據類型,0x8001,表明這是一個診斷信息的數據包

byte 4~7:數據長度,在這個例子中的值是7,表示後面有7個字節的數據

byte 8~9:源地址

byte 10~11:目的地址

byte 12~13:具體的診斷命令,SID是22,表示讀取,DID是0xF810

其他診斷服務類似。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章