日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

doip 源码_汽车DoIP通讯协议的前世今生

發(fā)布時(shí)間:2023/12/9 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 doip 源码_汽车DoIP通讯协议的前世今生 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

— Part 5: Conformance test specifcation

我這里只有前四個(gè),不知道第五個(gè)測(cè)試標(biāo)準(zhǔn)是否已經(jīng)定義完了。

DoIP的優(yōu)勢(shì)有以下幾點(diǎn):

更快的診斷響應(yīng)

傳輸大量數(shù)據(jù)的時(shí)間更短(用于軟件刷新和參數(shù)下載)

使得遠(yuǎn)程的直接診斷成為可能

ISO13400定義的DoIP診斷中各層次所使用的標(biāo)準(zhǔn)號(hào)

上圖展示了DoIP通信完整協(xié)議棧所使用的標(biāo)準(zhǔn)號(hào)。

ISO13400-1處于應(yīng)用層(層7)之上,是對(duì)一些通用信息、應(yīng)用場(chǎng)景的描述。

應(yīng)用層基于ISO14229-1和ISO14229-5,前者是UDS的完整定義,后者是UDS通過(guò)網(wǎng)絡(luò)協(xié)議傳輸?shù)膶?shí)現(xiàn)。

會(huì)話層(層5),ISO14229-2對(duì)于所有的診斷通信都是一樣的,目的是為上層提供統(tǒng)一的接口,使上層應(yīng)用不需要隨著底層通信技術(shù)的變化而改變。

傳輸層和網(wǎng)絡(luò)層(層4和層3)由ISO13400-2定義,ISO13400-2中規(guī)定了DoIP通信在傳輸層中使用TCP和UDP協(xié)議,在網(wǎng)絡(luò)層中使用IPv4或IPv6。此標(biāo)準(zhǔn)中還定義了專屬于DoIP通信的信息內(nèi)容,這些信息和上層的診斷命令共同構(gòu)成了傳給TCP或UDP協(xié)議的SDU。

ISO13400-2定義了DoIP診斷通信對(duì)Ethernet數(shù)據(jù)鏈路層(層2)和物理層(層1)的要求,比如,規(guī)定DoIP通信在這兩層上支持100BASE-TX (100 Mbit/s Ethernet) 和10BASE-T (10 Mbit/s Ethernet) 兩種方案。

DoIP數(shù)據(jù)的基本結(jié)構(gòu)

DoIP數(shù)據(jù)映射到以太網(wǎng)幀中

DoIP數(shù)據(jù)作為SDU層層向下傳遞,直至構(gòu)成完整的以太網(wǎng)幀,通過(guò)物理層的介質(zhì)發(fā)送出去。DoIP的數(shù)據(jù)內(nèi)容分為5個(gè)部分:

所使用的ISO13400版本信息,占用1個(gè)字節(jié)

所使用的ISO13400版本信息依比特取反,占用1個(gè)字節(jié)

數(shù)據(jù)類型,占用2個(gè)字節(jié)(標(biāo)識(shí)本幀數(shù)據(jù)的用途,比如用于上報(bào)或請(qǐng)求車輛信息、診斷命令、診斷邏輯鏈接激活、alive check等)

數(shù)據(jù)長(zhǎng)度,占用4個(gè)字節(jié)(標(biāo)識(shí)后面的數(shù)據(jù)長(zhǎng)度)

診斷數(shù)據(jù),長(zhǎng)度為0至2的32次方減1,這里的數(shù)據(jù)又分為sender address、receiver address、 應(yīng)用數(shù)據(jù)這三部分。

應(yīng)用場(chǎng)景

ISO13400中定義了DoIP的4種使用場(chǎng)景,如下四幅圖所示:

點(diǎn)對(duì)點(diǎn)直連

多臺(tái)外部測(cè)試設(shè)備分別和多臺(tái)汽車在局域網(wǎng)內(nèi)通過(guò)交換機(jī)點(diǎn)對(duì)點(diǎn)連接

一臺(tái)外部測(cè)試設(shè)備跨越本地網(wǎng)絡(luò)與多臺(tái)車輛連接

外部測(cè)試設(shè)備的多個(gè)應(yīng)用層實(shí)體(在一臺(tái)硬件或多臺(tái)硬件上)與單個(gè)車輛連接

路由機(jī)制

根據(jù)隱藏在Gateway后面的控制器的診斷類型的不同(比如有的通過(guò)DoIP,有的通DoCAN等),DoIP的路由機(jī)制可以分為兩種,分別是CutThrough(以太網(wǎng)對(duì)以太網(wǎng)) 和Store&Forward-Routing (以太網(wǎng)對(duì)CAN, CAN FD 和LIN等)。

我用PPT粗略地畫了兩個(gè)示意圖展示一下:

CutThrough

Store&Forward-Routing

原理很簡(jiǎn)單,當(dāng)網(wǎng)關(guān)后面被診斷的ECU也支持DoIP時(shí),則網(wǎng)關(guān)每收到一個(gè)以太網(wǎng)幀,只需要更改以太網(wǎng)幀包頭中的地址信息即可轉(zhuǎn)發(fā)出去。而如果網(wǎng)關(guān)后面被診斷的ECU不支持Ethernet,則網(wǎng)關(guān)需要完整地接收所有的診斷數(shù)據(jù)之后,再?gòu)膽?yīng)用層開(kāi)始重新組織適合其他總線傳輸?shù)臄?shù)據(jù)幀。

接下來(lái)介紹一下支持ethernet及DoIP的車載網(wǎng)絡(luò)架構(gòu)。

帶ethernet節(jié)點(diǎn)的車載網(wǎng)絡(luò)架構(gòu)示意圖

上面這張圖簡(jiǎn)要描述了帶ethernet節(jié)點(diǎn)的車載網(wǎng)絡(luò)和外部網(wǎng)絡(luò)中的測(cè)試設(shè)備之間的關(guān)聯(lián)。在車載網(wǎng)絡(luò)中,必須有且只有一個(gè)DoIP edge node gateway,它作為汽車對(duì)外部診斷設(shè)備的唯一接口。此外,還可能存在以下幾種類型的節(jié)點(diǎn):

支持DoIP,同時(shí)作為gateway,在它背后還有子網(wǎng)絡(luò)

不支持DoIP,但是支持ethernet通信

不支持ethernet,從而也就不可能支持DoIP

對(duì)于外部測(cè)試設(shè)備來(lái)說(shuō),它們必須只能和DoIP edge node gateway直接連接并通信,與車載網(wǎng)絡(luò)中其他ECU的通信必須由DoIP edge node gateway路由。

數(shù)據(jù)鏈路層與物理層

根據(jù)ISO-13400的要求,DoIP通信在物理層支持100BASE-TX (100 Mbit/s Ethernet) 和10BASE-T (10 Mbit/s Ethernet) 兩種制式。DoIP設(shè)備的MAC地址也符合IEEE 802.3 的要求。

傳輸層與網(wǎng)絡(luò)層

ISO-13400規(guī)定,DoIP通信在傳輸層上必須同時(shí)支持UDP和TCP,并將UDP和TCP的使用場(chǎng)合進(jìn)行了定義,對(duì)所使用的端口號(hào)也進(jìn)行了定義。后面稍微詳細(xì)說(shuō)明一下。

ISO-13400規(guī)定,DoIP通信在網(wǎng)絡(luò)層上使用IPv6協(xié)議,但是為了后向兼容的原因,也支持IPv4。此外,對(duì)于IPv4來(lái)說(shuō),還要支持地址解析協(xié)議(ARP ),對(duì)于IPv6來(lái)說(shuō),還要支持鄰居發(fā)現(xiàn)協(xié)議(NDP) ,這兩個(gè)協(xié)議是用于在只知道IP地址的情況下獲取MAC地址的。

DoIP的數(shù)據(jù)格式

DoIP的數(shù)據(jù)格式

上圖展示了DoIP的數(shù)據(jù)格式,在DoIP技術(shù)(一)中我們已經(jīng)對(duì)DoIp數(shù)據(jù)的五部分進(jìn)行了簡(jiǎn)要介紹,其中第五部分的數(shù)據(jù)又可以再細(xì)分為三部分

源地址,標(biāo)識(shí)數(shù)據(jù)由誰(shuí)發(fā)出

目的地址,標(biāo)識(shí)數(shù)據(jù)由誰(shuí)接收

診斷命令,即UDS或OBD中定義的具體的診斷請(qǐng)求或響應(yīng)

在本篇中,我將對(duì)這幾部分?jǐn)?shù)據(jù)的取值范圍進(jìn)行舉例說(shuō)明:

DoIP數(shù)據(jù)的前兩個(gè)部分分別是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數(shù)據(jù)的第三個(gè)部分是data type,即描述數(shù)據(jù)包中的數(shù)據(jù)類型,取值范圍如下圖所示:

DoIP數(shù)據(jù)類型概覽

上面這個(gè)表格不但定義了代表不同數(shù)據(jù)類型的值,還說(shuō)明了具體的數(shù)據(jù)類型應(yīng)該是通過(guò)UDP還是TCP來(lái)發(fā),并定義了應(yīng)該在哪個(gè)端口上發(fā)。

其中最常用的數(shù)據(jù)類型應(yīng)該是0x8001,0x8002,0x8003了,代表的含義分別是診斷消息、診斷消息正響應(yīng)和診斷消息負(fù)響應(yīng)。

0x0001至0x0004用于汽車標(biāo)識(shí)上報(bào)或請(qǐng)求,只能通過(guò)UDP報(bào)文來(lái)發(fā)送這種命令,主要用于在汽車和診斷儀進(jìn)入網(wǎng)絡(luò)之后、診斷連接建立之前的車輛發(fā)現(xiàn)過(guò)程。

0x0005 和0x0006標(biāo)識(shí)的Routing activation request 和 response用于在socket建立之后,進(jìn)行診斷通信的請(qǐng)求。

0x0007和0x0008用于Alive check,用于檢查當(dāng)前建立的診斷連接socket是否仍然在使用中,如果不再使用,則關(guān)閉socket釋放資源。

DoIP數(shù)據(jù)的第三個(gè)部分是data length,這個(gè)很簡(jiǎn)單,就是標(biāo)識(shí)后面的user data到底有多少。

DoIP數(shù)據(jù)的第五部分很簡(jiǎn)單,分別用來(lái)標(biāo)識(shí)數(shù)據(jù)的發(fā)送者和接收者,以及具體的診斷數(shù)據(jù)。

下圖是一個(gè)DoIP數(shù)據(jù)完整結(jié)構(gòu)的舉例:

DoIP數(shù)據(jù)完整結(jié)構(gòu)舉例

byte 0:ISO13400 版本

byte 1:ISO13400 版本逐比特取反

byte 2~3:數(shù)據(jù)類型,0x8001,表明這是一個(gè)診斷信息的數(shù)據(jù)包

byte 4~7:數(shù)據(jù)長(zhǎng)度,在這個(gè)例子中的值是7,表示后面有7個(gè)字節(jié)的數(shù)據(jù)

byte 8~9:源地址

byte 10~11:目的地址

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

這個(gè)數(shù)據(jù)段作為SDU傳遞給下層協(xié)議,逐層封裝成為完整的以太網(wǎng)幀發(fā)送出去。

DoIP實(shí)體內(nèi)部管理診斷邏輯連接

DoIP連接狀態(tài)

DoIP實(shí)體內(nèi)管理著一個(gè)DoIP連接表(DoIP connection table ),用來(lái)記錄和維護(hù)診斷通信的邏輯連接。上圖就是這個(gè)表中的一個(gè)元素,即一個(gè)邏輯連接的狀態(tài)機(jī)。上圖中的方框就是連接所處的狀態(tài),[DoIP-XXX]是狀態(tài)之間跳轉(zhuǎn)時(shí)發(fā)生的事情。

[DoIP-127] 當(dāng)一個(gè)新的套接字建立,邏輯連接的狀態(tài)就從“l(fā)isten”跳轉(zhuǎn)到“socket initialized”,同時(shí)啟動(dòng)一個(gè)定時(shí)器, initial inactivity timer。

[DoIP-128] 當(dāng)DoIP實(shí)體接收到tester發(fā)來(lái)的一個(gè)routing activation信息后,邏輯連接的狀態(tài)就從“socket initialized”跳轉(zhuǎn)到“Registered [Pending for Authentication]” ,此時(shí) initial inactivity timer被停止,啟動(dòng)一個(gè)名為general inactivity timer的定時(shí)器。

[DoIP-129] 在完成Authentication之后,邏輯連接的狀態(tài)就從“Registered [Pending for Authentication]”跳轉(zhuǎn)到“Registered [Pending for Confrmation]” 。

[DoIP-130] 在完成Confrmation之后,邏輯連接的狀態(tài)就從“Registered [Pending for Confrmation]”跳轉(zhuǎn)到“Registered [Routing Active] ” 。

[DoIP-132] 如果initial timer 或general inactivity timer 過(guò)期后仍沒(méi)收到后續(xù)請(qǐng)求,或者authentication 和 confrmation 被拒絕了,又或者外部測(cè)試設(shè)備對(duì)alive check 消息沒(méi)有響應(yīng),則邏輯連接進(jìn)入“Finalize”狀態(tài),此時(shí)TCP套接字將被關(guān)閉,并重新回到“l(fā)isten”狀態(tài)。

建立連接和車輛發(fā)現(xiàn)過(guò)程

在網(wǎng)絡(luò)環(huán)境中建立連接和車輛發(fā)現(xiàn)的過(guò)程

當(dāng)DoIP實(shí)體和外部測(cè)試設(shè)備都連接到一個(gè)網(wǎng)絡(luò)中時(shí),它們會(huì)利用DHCP協(xié)議獲得一個(gè)屬于自己的IP地址。在網(wǎng)絡(luò)中,路由器作為DHCP server,為新加入到該網(wǎng)絡(luò)中的設(shè)備分配IP地址。在獲取IP地址之后,有兩種車輛發(fā)現(xiàn)的方法,如上圖所示。一種方法是車輛主動(dòng)上報(bào)自己的信息3次。如果測(cè)試設(shè)備沒(méi)有收到車輛主動(dòng)上報(bào)的信息,則會(huì)發(fā)送一個(gè)identification request,如果網(wǎng)絡(luò)中有車輛的話,車輛對(duì)這個(gè)請(qǐng)求進(jìn)行響應(yīng),測(cè)試設(shè)備便發(fā)現(xiàn)了被測(cè)車輛。

DoIP 診斷通信會(huì)話建立和診斷消息發(fā)送過(guò)程

DoIP會(huì)話示例

上圖中紅線標(biāo)識(shí)的內(nèi)容就是在第二部分“ 建立連接和車輛發(fā)現(xiàn)過(guò)程”中的內(nèi)容。在診斷儀發(fā)現(xiàn)車輛之后,會(huì)把車輛添加到自己的車輛列表中。當(dāng)用戶選擇這個(gè)列表中的某輛車,就會(huì)發(fā)生藍(lán)線標(biāo)識(shí)出的過(guò)程,即在第一部分“ DoIP實(shí)體內(nèi)部管理診斷邏輯連接”所描述的內(nèi)容,如果連接建立成功,用戶就可以對(duì)車輛進(jìn)行診斷了。

接下來(lái)的過(guò)程就很簡(jiǎn)單了,用戶給汽車發(fā)出診斷信息,網(wǎng)關(guān)會(huì)根據(jù)信息接收對(duì)象把診斷信息轉(zhuǎn)發(fā)給網(wǎng)絡(luò)中相關(guān)的ECU,當(dāng)?shù)玫紼CU 的響應(yīng)之后,網(wǎng)關(guān)再把最終的響應(yīng)發(fā)送給診斷儀。當(dāng)用戶選擇退出時(shí),用于DoIP通信的這個(gè)套接字就被關(guān)閉了。

【本文完】

總結(jié)

以上是生活随笔為你收集整理的doip 源码_汽车DoIP通讯协议的前世今生的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。