01.概述
所謂的DoIP其實就是基于以太網(wǎng)的通訊協(xié)議對UDS協(xié)議的數(shù)據(jù)進行傳輸,即Diagnostic communication over Internet Protocol。其本身也是一種協(xié)議,規(guī)范于ISO13400標準。由于DoIP可以傳輸大量數(shù)據(jù),以及響應速度快,且可以通過以太網(wǎng)進行遠程診斷,因此DoIP逐步成為代替?zhèn)鹘y(tǒng)的CAN等總線方式,成為車載網(wǎng)絡(luò)診斷的必然趨勢。
DoIP在車載領(lǐng)域的應用首先汽車系統(tǒng)的整體框架要能夠支持DoIP,正因為車載以太網(wǎng)的快速發(fā)展,相較于傳統(tǒng)的車載系統(tǒng),目前的車載系統(tǒng)的整體框架都會加入一層DoIP協(xié)議層,在TCP/IP之上。并且為了更好的配合OBD診斷,遠程診斷,F(xiàn)OTA等等技術(shù),對整體的車載架構(gòu)進行了調(diào)整,利用swich將MPU,MCU,其它以太網(wǎng)ECU統(tǒng)統(tǒng)通過以太網(wǎng)進行連接,并對外網(wǎng)與內(nèi)網(wǎng)進行隔離。
當然,DoIP并不僅僅只是UDS的載體,雖然在ISO13400標準中內(nèi)容不多,但是它也有自己的一些邏輯,不可能說在TCP/IP之上加了一層封裝就完成了自己的任務,這樣的話安全性就沒有保證了,畢竟車載以太網(wǎng)通過網(wǎng)絡(luò)能夠?qū)④噧?nèi)與車外進行網(wǎng)絡(luò)的連接,而DoIP又是診斷的入口,這個門口如果不好好看住,會存在安全性的問題的。
簡單的說,DoIP能夠進行車輛發(fā)現(xiàn),狀態(tài)查詢,路由激活(含安全認證),診斷數(shù)據(jù)收發(fā),這些內(nèi)容將在后續(xù)進行詳細的展開。
有了DoIP,那么UDS的數(shù)據(jù)傳輸就可以搭載在DoIP之上,并在DoIP前序邏輯都OK的情況下,進行UDS的傳輸。當然DoIP之上也可以不搭載UDS數(shù)據(jù),這屬于客戶定制,能夠滿足以太網(wǎng)傳輸?shù)囊恍┢渌厥庑枨蟆?/p>
02.DoIP的網(wǎng)絡(luò)拓撲
在ISO13400-2中有如下一張圖,比較具有代表性,我們本文主要就根據(jù)此網(wǎng)絡(luò)拓撲圖來介紹DoIP的網(wǎng)絡(luò)拓撲
從圖中不難看出,整車的網(wǎng)絡(luò)拓撲被分為了兩個部分,即內(nèi)部網(wǎng)絡(luò)和外部網(wǎng)絡(luò),圖中的network node可以默認為支持以太網(wǎng)連接的某個節(jié)點,如,雷達,攝像頭等,但是不支持DoIP協(xié)議,不過大家可以對名稱中含有DoIP前綴的節(jié)點進行網(wǎng)絡(luò)分析。從圖中我們很容易看出DoIP的網(wǎng)絡(luò)拓撲有以下幾個角色組成,
1.External test equipment
此部分為外部測試設(shè)備,通常為OBD診斷儀或者其他診斷客戶端
2. DoIP edge node gateway
此部分和DoIP gateway有什么區(qū)別?其實沒什么區(qū)別,唯一的區(qū)別就是多了個使能線的判斷,從圖中可以看出External test equipment和DoIP edge node gateway之間有一條線叫做Activation line。那么這條線的功能就是對協(xié)議棧進行使能作用的,當然External test equipment和DoIP edge node gateway之間不只是Activation line相連的,這個圖只是功能示意圖,少了很多細節(jié),其實是通過標準的OBD-II接頭相連的,其中一個針腳就是Activation line。具體可以看ISO 13400-4的介紹。
回過來,這個角色的作用是什么?
首先它是個gateway,作為一個網(wǎng)關(guān)它的子網(wǎng)內(nèi)掛載著若干ECU,與DoIP gateway一樣
其次它是車內(nèi)網(wǎng)與車外網(wǎng)交互的一個入口,具有控制著DoIP協(xié)議棧是否工作的一個開關(guān)功能。
該角色可以同時支持Server端和Client端,Server好理解,測試設(shè)備可以診斷該網(wǎng)關(guān)下的某個ECU節(jié)點。那么Client端是怎么回事呢?想象一下,如果DoIP edge node gateway作為入口,那么怎樣和內(nèi)部其它子網(wǎng)的DoIP ECU進行交互呢?當然是由DoIP edge node gateway進行轉(zhuǎn)發(fā)。這只是其中一個應用場景,當進行轉(zhuǎn)發(fā)的時候會進行身份切換,即由Server端切換到Client端。另外一個場景是OTA升級,DoIP edge node gateway的應用層可以跑一個OTA客戶端程序,進行對內(nèi)網(wǎng)ECU的診斷及刷寫,此時就是一個Client身份。
3. DoIP gateway
DoIP gateway與角色二 DoIP edge node gateway區(qū)別不是很大。實際的應用場景通常會讓MCU充當這個角色,而MPU充當DoIP edge node gateway的角色,也有反過來的情況,那么該角色通常單單的跑Server端程序。
4. DoIP node
該角色很好理解,對支持以太網(wǎng)連接的同時支持DoIP協(xié)議的ECU認為是DoIP node。
該角色通常單單的跑Server端程序。
整個車輛網(wǎng)絡(luò)由四個角色組成,外部測試設(shè)備作為客戶端,對車內(nèi)網(wǎng)的各個支持DoIP協(xié)議棧的ECU進行診斷。(部分CAN ECU通常掛載在MCU上,由MCU進行DoIP轉(zhuǎn)DoCAN的路由)車外網(wǎng)的外部測試設(shè)備通過OBD-II與車內(nèi)網(wǎng)的edge gateway進行通信,edge gateway用來使能車內(nèi)網(wǎng)的DoIP功能。在路由打通后,發(fā)送的診斷數(shù)據(jù)根據(jù)目的地址的不同分別流向車內(nèi)網(wǎng)的不同ECU。
03.DoIP的接收方式和協(xié)議格式
3.1 端口
從DoIP名字可以看出,該協(xié)議是在TCP/IP之上的,那么要想接收DoIP協(xié)議的報文,協(xié)議書規(guī)定需要監(jiān)聽一個專門分配給DoIP協(xié)議棧使用的端口號即13400,UDP,TCP都要監(jiān)聽此接受端口,而發(fā)送端口是在一個范圍內(nèi)的隨機值[49152~65535],當然代碼中協(xié)議棧要對對端的發(fā)送端口進行緩存,用于回送數(shù)據(jù)。
指定了端口號,客戶端和服務端可以在此端口上進行收發(fā)數(shù)據(jù)。那么對該端口收到的數(shù)據(jù)是否真的是DoIP報文,就行對該網(wǎng)絡(luò)報文進行解析。(有可能是網(wǎng)絡(luò)攻擊,有可能是其它應用恰好使用了該端口號)
對收到的報文進行解析,就涉及到DoIP協(xié)議的構(gòu)成,只有符合該寫一點規(guī)范才認為是合法有效的DoIP報文。
3.2 協(xié)議格式
DoIP報文由協(xié)議頭(header)+ 負載(payload)組成
協(xié)議頭[8 byte]由下面四個字段組成
Protocol version [1 byte]
Inverse protocol version [1 byte]
Payload type [2 byte]
Payload length [4 byte]
負載[N byte] 根據(jù)實際的payload type,負載數(shù)據(jù)會不同
3.3Protocol version與Inverse protocol version
通常Protocol version為0x02,目前0x02以上的值目前是reserved狀態(tài)
Inverse protocol version是Protocol version的取反的值,此例0x02去反后為0xFD
協(xié)議書上特別說明了Protocol version可以為0xFF,設(shè)這個值的作用是,當客戶端和服務端的協(xié)議版本不匹配,可以設(shè)置此值繞過協(xié)議頭版本不匹配而拒絕請求的case。
3.4 Payload type
payload type可以代表DoIP協(xié)議棧所能支持的功能,列舉如下(特意分開了Server支持的type及Client支持的type)
DoIP SERVER
DoIP Client
如上分開描述,是因為在代碼實現(xiàn)上,可以將邏輯拆分。
即Server端只關(guān)心自己支持的payload type,客戶端只關(guān)心自己支持的payload type,不支持的可以忽視掉。有利于模塊拆分及組合,有利于實現(xiàn)上一節(jié)所講個各個角色,將來通過配置文件的配置,來表示不同的角色。
3.5 Payload length
payload length這里分配了4字節(jié),也就是所DoIP報文最大傳輸4 GB /4294967295 bytes,即0xFFFFFFFF。它只是個允許的范圍,通常來說通過DoIP進行診斷也就幾字節(jié)到幾十字節(jié),而升級通常ECU的升級包也就幾MB。所以4 GB只是個理論上限。
該值可以做長度的有效性驗證,因為除了診斷數(shù)據(jù),其它payload type都是有固定長度的。
還可以做什么?其實做開發(fā)時還要考慮遇到如下情況該怎么處理
1. 數(shù)據(jù)粘連
2. 數(shù)據(jù)截斷
3. 異常的超大size
4. 超過協(xié)議??梢蕴幚韘ize
3.6 Payload
這里的負載是指的是DoIP協(xié)議的負載,當然當Payload type為診斷類型時,其負載除了DoIP自身的內(nèi)容,
還包含了UDS數(shù)據(jù),供上層UDS模塊進行進一步的解析。
因為每個Payload type負載都不同,這里不做解釋,在后續(xù)功能章節(jié),進行詳細的介紹
04.DoIP診斷啟動與使用
4.1 連接建立
DoIP實體內(nèi)管理著一個DoIP connection table ,用來記錄和維護診斷通信的邏輯連接。上圖就是這個表中的一個元素,即一個邏輯連接的狀態(tài)機。上圖中的方框就是連接所處的狀態(tài),[Step]是狀態(tài)之間跳轉(zhuǎn)時發(fā)生的事情。
[Step1] 當一個新的套接字建立,邏輯連接的狀態(tài)就從“l(fā)isten”跳轉(zhuǎn)到“socket initialized”,同時啟動一個定時器, initial inactivity timer。
[Step2] 當DoIP實體接收到tester發(fā)來的一個routing activation信息后,邏輯連接的狀態(tài)就從“socket initialized”跳轉(zhuǎn)到“Registered [Pending for Authentication]” ,此時 initial inactivity timer被停止,啟動一個名為general inactivity timer的定時器。
[Step3] 在完成Authentication之后,邏輯連接的狀態(tài)就從“Registered [Pending for Authentication]”跳轉(zhuǎn)到“Registered [Pending for Confrmation]” 。
[Step4] 在完成Confrmation之后,邏輯連接的狀態(tài)就從“Registered [Pending for Confrmation]”跳轉(zhuǎn)到“Registered [Routing Active] ” 。
[Step5] 如果initial timer 或general inactivity timer 過期后仍沒收到后續(xù)請求,或者authentication 和 confrmation 被拒絕了,又或者外部測試設(shè)備對alive check 消息沒有響應,則邏輯連接進入“Finalize”狀態(tài)。
[Step6]進入Finalize后,此時TCP套接字將被關(guān)閉,并重新回到“l(fā)isten”狀態(tài)。
4.2 車輛發(fā)現(xiàn)
當DoIP實體和外部測試設(shè)備都連接到一個網(wǎng)絡(luò)中時,它們會利用DHCP協(xié)議獲得一個屬于自己的IP地址。在網(wǎng)絡(luò)中,路由器作為DHCP server,為新加入到該網(wǎng)絡(luò)中的設(shè)備分配IP地址。在獲取IP地址之后,有兩種車輛發(fā)現(xiàn)的方法,如上圖所示。一種方法是車輛主動上報自己的信息3次。如果測試設(shè)備沒有收到車輛主動上報的信息,則會發(fā)送一個identification request,如果網(wǎng)絡(luò)中有車輛的話,車輛對這個請求進行響應,測試設(shè)備便發(fā)現(xiàn)了被測車輛。
4.3 會話建立
在診斷儀發(fā)現(xiàn)車輛之后,會把車輛添加到自己的車輛列表中。當用戶選擇這個列表中的某輛車,如果連接建立成功,用戶就可以對車輛進行診斷了。
接下來用戶給汽車發(fā)出診斷信息,網(wǎng)關(guān)會根據(jù)信息接收對象把診斷信息轉(zhuǎn)發(fā)給網(wǎng)絡(luò)中相關(guān)的ECU,當?shù)玫紼CU 的響應之后,網(wǎng)關(guān)再把最終的響應發(fā)送給診斷儀。當用戶選擇退出時,用于DoIP通信的這個套接字就被關(guān)閉了。
下圖是一個DoIP數(shù)據(jù)完整結(jié)構(gòu)的數(shù)據(jù)舉例:
DoIP數(shù)據(jù)完整結(jié)構(gòu)舉例
byte 0:ISO13400 版本
byte 1:ISO13400 版本逐比特取反
byte 2~3:數(shù)據(jù)類型,0x8001,表明這是一個診斷信息的數(shù)據(jù)包
byte 4~7:數(shù)據(jù)長度,在這個例子中的值是7,表示后面有7個字節(jié)的數(shù)據(jù)
byte 8~9:源地址
byte 10~11:目的地址
byte 12~13:具體的診斷命令,SID是22,表示讀取,DID是0xF8 10
這個數(shù)據(jù)段作為SDU傳遞給下層協(xié)議,逐層封裝成為完整的以太網(wǎng)幀發(fā)送出去。
審核編輯:湯梓紅
-
以太網(wǎng)
+關(guān)注
關(guān)注
40文章
5433瀏覽量
171908 -
CAN
+關(guān)注
關(guān)注
57文章
2756瀏覽量
463868 -
通訊協(xié)議
+關(guān)注
關(guān)注
10文章
276瀏覽量
20368
原文標題:詳解以太網(wǎng)診斷DoIP
文章出處:【微信號:談思實驗室,微信公眾號:談思實驗室】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論