一文了解什么是DoIP协议(超详细)
UDS診斷作為汽車ECU里的一個服務功能,位于應用層,它的實現需要有網絡的支撐,我們把基于CAN總線實現的UDS診斷稱為DoCAN,基于Ethernet實現的UDS診斷稱為DoIP
DoIP
DoIP
Diagnostic communication over Internet Protocol,我們把通過以太網協議,承載UDS數據,實現診斷通信的這種方式稱為DoIP
DoIP的好處有哪些呢?
相比DoCAN中CAN網絡的封閉性,DoIP由于Ethernet的互聯互通,可以實現車與車、車與人的遠距離診斷通信
DoIP在傳輸層以下的規范遵循ISO 13400,而應用層還是遵循ISO 14229不變,這樣可以保證UDS診斷在不同車載網絡上的可移植性
ISO 13400-2規定了外部測試設備與車輛ECU之間的診斷通信要求,包括:
- 網絡層協議IP
- 傳輸層協議TCP/UDP
- 對網關的要求(網關如何集成到現有網絡總)
- 對測試設備的要求(如何發現車輛并建立通信)
支持DoIP的車輛網絡架構圖如下
從這張圖上可以看出:汽車內部必須有一個DoIP的總網關,它作為和外部的診斷設備DoIP通信的唯一接口
網絡層要求
MAC層
沒什么可說的,和標準的以太網物理鏈路層一樣,都是基于IEEE 802.3
網絡層
和標準以太網網絡層一樣,但是需要注意的一點是,DoIP在以太網IP層首先IPv6協議,同時兼容IPv4
傳輸層
TCP
除了遵循TCP協議的標準規范外,DoIP在TCP協議上還應遵守:
- 支持DoIP的ECU的診斷服務創建的socket必須監聽在端口號13400上,外部測試設備通過連接此端口建立連接
- 每個支持DoIP的ECU必須支持n+1個并發的TCP socket連接,這是為了防止有多個外部測試設備同時和ECU進行診斷通信
- 外部測試設備創建的socket應選擇本地端口,本地端口即系統隨機的端口
TCP連接的過程
UDP
UDP協議在DoIP中的作用和使用的端口號為:
車輛發現的兩種方式:
- DoIP設備啟動后,通過UDP向13400端口廣播發送vehicle announcement message,源端口號為13400或隨機,里面包含此DoIP設備的基本信息,外部測試設備需要監聽13400來接收這些信息
- 外部測試設備通過UDP廣播發送request消息,目標端口號是13400,DoIP設備監聽在13400端口,接收此request并響應
DoIP Protocol
DoIP報文的結構
DoIP Header
- 其中Inverse Protocol Version是對Protocol Version的依比特取反
- 而Payload Type則是表示這個DoIP報文的用途
Payload Type
其中最常用的幾個:
- 0x0001和0x0004用于汽車診斷連接建立之前的車輛發現過程
- 0x0005和0x0006用于tcp socket連接成功后的診斷連接請求與響應
- 0x8001、0x8002、0x8003分別表示診斷消息、診斷消息正響應、診斷消息負響應
- 0x0007和0x0008用于檢查建立的診斷連接是否仍然在使用中,如果不再使用,則關閉socket
從中可以看出DoIP診斷通信前需要做的事:
- 車輛發現,有兩種方式
- DoIP設備啟動后,首先通過UDP廣播的形式把一條DoIP報文(vehicle announcement message,Payload Type為0x0004)發給網絡上的所有的其他節點,其中就包括診斷儀,目的端口是13400,其中這條消息攜帶了DoIP設備的DoIP版本、VIN、logical address等信息,這條信息會發送三次,而之前監聽在13400端口的診斷儀接收到這條信息,就知道了DoIP設備的基本信息
- 如果診斷儀沒有收到,還有一種辦法,就是診斷儀這邊主動請求,通過UDP廣播的形式,主動發一條DoIP request消息(Payload Type為0x0001),目的端口號是13400,而之前啟動后就一直監聽在13400的DoIP設備,接收到這條消息后,就會回復一條攜帶自己信息的response給診斷儀
- 建立TCP連接
診斷儀通過創建tcp socket,然后調用connect方法向DoIP設備發起TCP連接請求(目的ip是DoIP設備ip,目的端口號是13400),而DoIP設備在啟動前已經通過創建tcp socket監聽在13400端口,接收到tcp連接請求后就會完成三次握手
- 建立診斷連接
在TCP連接建立后,診斷儀還需要發送一條Routing activation request的DoIP報文給DoIP設備,DoIP設備收到后會回復一條Routing activation response的DoIP報文,此時診斷連接建立,雙方可以診斷通信
網關
汽車網絡中由于同時存在多種網絡,而造成不同網絡上的診斷功能無法互相通信,這時候就需要網關的作用
比如說:
對于DoCAN和DoIP,網關起到的作用就是接收、解封裝、封裝、發送
DoCAN報文需要發給DoIP設備,網關會先把DoCAN的CAN網絡頭部剝離,留下UDS數據,然后再用這個UDS數據封裝一條完整的DoIP報文,發出去
DoIP報文需要發給DoCAN設備,網關會先把DoIP的所有頭部剝離,留下UDS數據,然后用這個UDS數據封裝一條完整的DoCAN報文,發出去
總結
以上是生活随笔為你收集整理的一文了解什么是DoIP协议(超详细)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++内联函数(inline funct
- 下一篇: C语言程序顺序结构1交换变量,如何将c语