关于DoIP 协议的理解
目錄
1. 數(shù)據(jù)鏈路層與物理層
2. 傳輸層與網(wǎng)絡(luò)層
3. DoIP數(shù)據(jù)幀格式
3.1 幀格式說(shuō)明
3.2 DoIP-協(xié)議版本
3.3 DoIP-Data Type
3.4 DoIP-Data length
4. 診斷連接
4.1 連接狀態(tài)
4.2 建立連接和車輛發(fā)現(xiàn)
4.3 會(huì)話建立
5. 診斷發(fā)送
5.1 請(qǐng)求DID F810讀取
1. 數(shù)據(jù)鏈路層與物理層
根據(jù)ISO-13400的要求,DoIP通信在物理層支持100BASE-TX (100 Mbit/s Ethernet) 和10BASE-T (10 Mbit/s Ethernet) 兩種制式。
2. 傳輸層與網(wǎng)絡(luò)層
DoIP設(shè)備的MAC地址也符合IEEE 802.3 的要求。
ISO-13400規(guī)定,DoIP通信在傳輸層上必須同時(shí)支持UDP和TCP,并將UDP和TCP的使用場(chǎng)合進(jìn)行了定義,對(duì)所使用的端口號(hào)也進(jìn)行了定義。
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地址的。
ARP格式包
NDP數(shù)據(jù)包
可參考?https://blog.csdn.net/zhishenluo/article/details/103729512?
3. DoIP數(shù)據(jù)幀格式
3.1 幀格式說(shuō)明
以太網(wǎng)幀(具體參考網(wǎng)絡(luò)幀)
IP段
TCP段
UDP段
DoIP段
?
3.2 DoIP-協(xié)議版本
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
?
【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釋放資源。
【0x8001,0x8002,0x8003】,分別代表的含義分別是診斷消息、診斷消息正響應(yīng)和診斷消息負(fù)響應(yīng)。
3.4 DoIP-Data length
?
就是標(biāo)識(shí)后面的user data的長(zhǎng)度。
此外源地址和目標(biāo)地址可以參考UDS中定義即可,用戶數(shù)據(jù)即為診斷相關(guān)服務(wù)數(shù)據(jù)。
4. 診斷連接
4.1 連接狀態(tài)
DoIP實(shí)體內(nèi)管理著一個(gè)DoIP connection table ,用來(lái)記錄和維護(hù)診斷通信的邏輯連接。上圖就是這個(gè)表中的一個(gè)元素,即一個(gè)邏輯連接的狀態(tài)機(jī)。上圖中的方框就是連接所處的狀態(tài),[Step]是狀態(tài)之間跳轉(zhuǎn)時(shí)發(fā)生的事情。
[Step1] 當(dāng)一個(gè)新的套接字建立,邏輯連接的狀態(tài)就從“l(fā)isten”跳轉(zhuǎn)到“socket initialized”,同時(shí)啟動(dòng)一個(gè)定時(shí)器, initial inactivity timer。
[Step2] 當(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í)器。
[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 過(guò)期后仍沒(méi)收到后續(xù)請(qǐng)求,或者authentication 和 confrmation 被拒絕了,又或者外部測(cè)試設(shè)備對(duì)alive check 消息沒(méi)有響應(yīng),則邏輯連接進(jìn)入“Finalize”狀態(tài)。
[Step6]進(jìn)入Finalize后,此時(shí)TCP套接字將被關(guān)閉,并重新回到“l(fā)isten”狀態(tài)。
4.2 建立連接和車輛發(fā)現(xiàn)
當(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è)車輛。
4.3 會(huì)話建立
?
在診斷儀發(fā)現(xiàn)車輛之后,會(huì)把車輛添加到自己的車輛列表中。當(dāng)用戶選擇這個(gè)列表中的某輛車,如果連接建立成功,用戶就可以對(duì)車輛進(jìn)行診斷了。
接下來(lái)用戶給汽車發(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)閉了。
5. 診斷發(fā)送
5.1 請(qǐng)求DID F810讀取
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是0xF810
其他診斷服務(wù)類似。
總結(jié)
以上是生活随笔為你收集整理的关于DoIP 协议的理解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python qt 拖拽组件使用方法_P
- 下一篇: 2019.04.24笔记