本文繼doip技術(一)一文之後繼續分享與doip技術相關的一些內容。首先來介紹一下支援ethernet及doip的車載網路架構。
上面這張圖簡要描述了帶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資料的五部分進行了簡要介紹,其中第五部分的資料又可以再細分為三部分源位址,標識資料由誰發出
目的位址,標識資料由誰接收
診斷命令,即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,即描述資料報中的資料型別,取值範圍如下圖所示:
上面這個**不但定義了代表不同資料型別的值,還說明了具體的資料型別應該是通過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資料完整結構的舉例:
byte 0:iso13400 版本
byte 1:iso13400 版本逐位元取反
byte 2~3:資料型別,0x8001,表明這是乙個診斷資訊的資料報
byte 4~7:資料長度,在這個例子中的值是7,表示後面有7個位元組的資料
byte 12~13:具體的診斷命令,sid是22,表示讀取,did是0xf8 10
這個資料段作為sdu傳遞給下層協議,逐層封裝成為完整的乙太網幀傳送出去。
總結:
ASP分頁技術原始碼
本程式檔名為 pages.asp 包含ado常量表檔案adovbs.inc,可從 program files common files system ado 目錄下拷貝 建立資料庫連線,這裡是oracle8.05資料庫 set conn server.createobject adodb.conne...
ASP分頁技術原始碼
asp分頁技術原始碼 頂熱 本程式檔名為 pages.asp 包含ado常量表檔案adovbs.inc,可從 program files common files system ado 目錄下拷貝 建立資料庫連線,這裡是oracle8.05資料庫 set conn server.createobje...
Webpack 原始碼(二) 如何閱讀原始碼
如果想要了解 webpack 的流程,只要閱讀 七珏 細說 webpack 之流程篇 所述的內容就夠了,講解地比較全面了 本文就不對 webpack 流程再做重複的描述,而是從另外乙個角度補充分析 webpack 原始碼 webpack 中最為重要的無非是 compiler compilation ...