doip 源码_汽车DoIP通讯协议的前世今生
— Part 5: Conformance test specifcation
我這里只有前四個,不知道第五個測試標準是否已經定義完了。
DoIP的優勢有以下幾點:
更快的診斷響應
傳輸大量數據的時間更短(用于軟件刷新和參數下載)
使得遠程的直接診斷成為可能
ISO13400定義的DoIP診斷中各層次所使用的標準號
上圖展示了DoIP通信完整協議棧所使用的標準號。
ISO13400-1處于應用層(層7)之上,是對一些通用信息、應用場景的描述。
應用層基于ISO14229-1和ISO14229-5,前者是UDS的完整定義,后者是UDS通過網絡協議傳輸的實現。
會話層(層5),ISO14229-2對于所有的診斷通信都是一樣的,目的是為上層提供統一的接口,使上層應用不需要隨著底層通信技術的變化而改變。
傳輸層和網絡層(層4和層3)由ISO13400-2定義,ISO13400-2中規定了DoIP通信在傳輸層中使用TCP和UDP協議,在網絡層中使用IPv4或IPv6。此標準中還定義了專屬于DoIP通信的信息內容,這些信息和上層的診斷命令共同構成了傳給TCP或UDP協議的SDU。
ISO13400-2定義了DoIP診斷通信對Ethernet數據鏈路層(層2)和物理層(層1)的要求,比如,規定DoIP通信在這兩層上支持100BASE-TX (100 Mbit/s Ethernet) 和10BASE-T (10 Mbit/s Ethernet) 兩種方案。
DoIP數據的基本結構
DoIP數據映射到以太網幀中
DoIP數據作為SDU層層向下傳遞,直至構成完整的以太網幀,通過物理層的介質發送出去。DoIP的數據內容分為5個部分:
所使用的ISO13400版本信息,占用1個字節
所使用的ISO13400版本信息依比特取反,占用1個字節
數據類型,占用2個字節(標識本幀數據的用途,比如用于上報或請求車輛信息、診斷命令、診斷邏輯鏈接激活、alive check等)
數據長度,占用4個字節(標識后面的數據長度)
診斷數據,長度為0至2的32次方減1,這里的數據又分為sender address、receiver address、 應用數據這三部分。
應用場景
ISO13400中定義了DoIP的4種使用場景,如下四幅圖所示:
點對點直連
多臺外部測試設備分別和多臺汽車在局域網內通過交換機點對點連接
一臺外部測試設備跨越本地網絡與多臺車輛連接
外部測試設備的多個應用層實體(在一臺硬件或多臺硬件上)與單個車輛連接
路由機制
根據隱藏在Gateway后面的控制器的診斷類型的不同(比如有的通過DoIP,有的通DoCAN等),DoIP的路由機制可以分為兩種,分別是CutThrough(以太網對以太網) 和Store&Forward-Routing (以太網對CAN, CAN FD 和LIN等)。
我用PPT粗略地畫了兩個示意圖展示一下:
CutThrough
Store&Forward-Routing
原理很簡單,當網關后面被診斷的ECU也支持DoIP時,則網關每收到一個以太網幀,只需要更改以太網幀包頭中的地址信息即可轉發出去。而如果網關后面被診斷的ECU不支持Ethernet,則網關需要完整地接收所有的診斷數據之后,再從應用層開始重新組織適合其他總線傳輸的數據幀。
接下來介紹一下支持ethernet及DoIP的車載網絡架構。
帶ethernet節點的車載網絡架構示意圖
上面這張圖簡要描述了帶ethernet節點的車載網絡和外部網絡中的測試設備之間的關聯。在車載網絡中,必須有且只有一個DoIP edge node gateway,它作為汽車對外部診斷設備的唯一接口。此外,還可能存在以下幾種類型的節點:
支持DoIP,同時作為gateway,在它背后還有子網絡
不支持DoIP,但是支持ethernet通信
不支持ethernet,從而也就不可能支持DoIP
對于外部測試設備來說,它們必須只能和DoIP edge node gateway直接連接并通信,與車載網絡中其他ECU的通信必須由DoIP edge node gateway路由。
數據鏈路層與物理層
根據ISO-13400的要求,DoIP通信在物理層支持100BASE-TX (100 Mbit/s Ethernet) 和10BASE-T (10 Mbit/s Ethernet) 兩種制式。DoIP設備的MAC地址也符合IEEE 802.3 的要求。
傳輸層與網絡層
ISO-13400規定,DoIP通信在傳輸層上必須同時支持UDP和TCP,并將UDP和TCP的使用場合進行了定義,對所使用的端口號也進行了定義。后面稍微詳細說明一下。
ISO-13400規定,DoIP通信在網絡層上使用IPv6協議,但是為了后向兼容的原因,也支持IPv4。此外,對于IPv4來說,還要支持地址解析協議(ARP ),對于IPv6來說,還要支持鄰居發現協議(NDP) ,這兩個協議是用于在只知道IP地址的情況下獲取MAC地址的。
DoIP的數據格式
DoIP的數據格式
上圖展示了DoIP的數據格式,在DoIP技術(一)中我們已經對DoIp數據的五部分進行了簡要介紹,其中第五部分的數據又可以再細分為三部分
源地址,標識數據由誰發出
目的地址,標識數據由誰接收
診斷命令,即UDS或OBD中定義的具體的診斷請求或響應
在本篇中,我將對這幾部分數據的取值范圍進行舉例說明:
DoIP數據的前兩個部分分別是DoIP版本和DoIP版本逐比特取反,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
DoIP數據的第三個部分是data type,即描述數據包中的數據類型,取值范圍如下圖所示:
DoIP數據類型概覽
上面這個表格不但定義了代表不同數據類型的值,還說明了具體的數據類型應該是通過UDP還是TCP來發,并定義了應該在哪個端口上發。
其中最常用的數據類型應該是0x8001,0x8002,0x8003了,代表的含義分別是診斷消息、診斷消息正響應和診斷消息負響應。
0x0001至0x0004用于汽車標識上報或請求,只能通過UDP報文來發送這種命令,主要用于在汽車和診斷儀進入網絡之后、診斷連接建立之前的車輛發現過程。
0x0005 和0x0006標識的Routing activation request 和 response用于在socket建立之后,進行診斷通信的請求。
0x0007和0x0008用于Alive check,用于檢查當前建立的診斷連接socket是否仍然在使用中,如果不再使用,則關閉socket釋放資源。
DoIP數據的第三個部分是data length,這個很簡單,就是標識后面的user data到底有多少。
DoIP數據的第五部分很簡單,分別用來標識數據的發送者和接收者,以及具體的診斷數據。
下圖是一個DoIP數據完整結構的舉例:
DoIP數據完整結構舉例
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是0xF8 10
這個數據段作為SDU傳遞給下層協議,逐層封裝成為完整的以太網幀發送出去。
DoIP實體內部管理診斷邏輯連接
DoIP連接狀態
DoIP實體內管理著一個DoIP連接表(DoIP connection table ),用來記錄和維護診斷通信的邏輯連接。上圖就是這個表中的一個元素,即一個邏輯連接的狀態機。上圖中的方框就是連接所處的狀態,[DoIP-XXX]是狀態之間跳轉時發生的事情。
[DoIP-127] 當一個新的套接字建立,邏輯連接的狀態就從“listen”跳轉到“socket initialized”,同時啟動一個定時器, initial inactivity timer。
[DoIP-128] 當DoIP實體接收到tester發來的一個routing activation信息后,邏輯連接的狀態就從“socket initialized”跳轉到“Registered [Pending for Authentication]” ,此時 initial inactivity timer被停止,啟動一個名為general inactivity timer的定時器。
[DoIP-129] 在完成Authentication之后,邏輯連接的狀態就從“Registered [Pending for Authentication]”跳轉到“Registered [Pending for Confrmation]” 。
[DoIP-130] 在完成Confrmation之后,邏輯連接的狀態就從“Registered [Pending for Confrmation]”跳轉到“Registered [Routing Active] ” 。
[DoIP-132] 如果initial timer 或general inactivity timer 過期后仍沒收到后續請求,或者authentication 和 confrmation 被拒絕了,又或者外部測試設備對alive check 消息沒有響應,則邏輯連接進入“Finalize”狀態,此時TCP套接字將被關閉,并重新回到“listen”狀態。
建立連接和車輛發現過程
在網絡環境中建立連接和車輛發現的過程
當DoIP實體和外部測試設備都連接到一個網絡中時,它們會利用DHCP協議獲得一個屬于自己的IP地址。在網絡中,路由器作為DHCP server,為新加入到該網絡中的設備分配IP地址。在獲取IP地址之后,有兩種車輛發現的方法,如上圖所示。一種方法是車輛主動上報自己的信息3次。如果測試設備沒有收到車輛主動上報的信息,則會發送一個identification request,如果網絡中有車輛的話,車輛對這個請求進行響應,測試設備便發現了被測車輛。
DoIP 診斷通信會話建立和診斷消息發送過程
DoIP會話示例
上圖中紅線標識的內容就是在第二部分“ 建立連接和車輛發現過程”中的內容。在診斷儀發現車輛之后,會把車輛添加到自己的車輛列表中。當用戶選擇這個列表中的某輛車,就會發生藍線標識出的過程,即在第一部分“ DoIP實體內部管理診斷邏輯連接”所描述的內容,如果連接建立成功,用戶就可以對車輛進行診斷了。
接下來的過程就很簡單了,用戶給汽車發出診斷信息,網關會根據信息接收對象把診斷信息轉發給網絡中相關的ECU,當得到ECU 的響應之后,網關再把最終的響應發送給診斷儀。當用戶選擇退出時,用于DoIP通信的這個套接字就被關閉了。
【本文完】
總結
以上是生活随笔為你收集整理的doip 源码_汽车DoIP通讯协议的前世今生的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: He Fei ,First ,Good
- 下一篇: sasl java_javaSASL_S