DoIP 基础知识
DoIP diagnositic communication over internet protocal, 基于以太網的一種診斷協議,簡單的來說就是基于TCP/IP實現的協議,基本上是用于實現UDS協議通過以太網對ECU的診斷,刷寫。因為新能源汽車使用以太網架構,已經變成了一種流行的方式,所以UDS DoIP 基于以太網的實現,也變成了一種趨勢。同時也可以根據DoIP協議自行擴展。
DoIP 并不僅僅是UDS的載體,DoIP是診斷的入口。DoIP功能:車輛發現,狀態查詢,路由激活(含安全認證),診斷數據收發。
DoIP 網絡拓撲
DoIP 網絡中各個角色:
(1) ExternalTest Equipment :
車輛外部設備是指存在車輛網絡外部,通過DoIP協議與車輛內部子網DoIP Entity實現通訊建立的設備,通常為OBD診斷儀或者其他診斷客戶端。
(2)DoIP edge Node gateway:
DoIP邊緣節點是在車輛內部,與診斷口Ethernetactivation line直連的節點,并且其中有一個連接引腳是Activation line。
這個角色是一個Gateway,子網掛著若干ECU。這個角色可以同時支持DoIp的Server和client端。
server: 測試設備可以診斷該網關下的某個節點。????
在這里我認為被診斷的就是server端,發起診斷的就是客戶端。
在OTA場景中,DoIp edge node gateway的應用層可以跑一個OTA客戶端程序,進行對內網ECU的診斷和刷寫,此時就是一個client。
(3)DoIPGateway :
DoIP網關是在車輛網絡內部,實現與本模塊及所連接多個子網內ECU通訊訪問的節點。DoIP gateway與角色二 DoIP edge node gateway區別不是很大。實際的應用場景通常會讓MCU充當這個角色,而MPU充當DoIP edge node gateway的角色,也有反過來的情況,那么該角色通常單單的跑Server端程序。
(4)DoIP node
該角色很好理解,對支持以太網連接的同時支持DoIP協議的ECU認為是DoIP node。
本章小結
整個車輛網絡由四個角色組成,外部測試設備作為客戶端,對車內網的各個支持DoIP協議棧的ECU進行診斷。(部分CAN ECU通常掛載在MCU上,由MCU進行DoIP轉DoCAN的路由)車外網的外部測試設備通過OBD-II與車內網的edge gateway進行通信,edge gateway用來使能車內網的DoIP功能。在路由打通后,發送的診斷數據根據目的地址的不同分別流向車內網的不同ECU。
端口
從DoIP名字可以看出,該協議是在TCP/IP之上的,那么要想接收DoIP協議的報文,協議書規定需要監聽一個專門分配給DoIP協議棧使用的端口號即13400,UDP,TCP都要監聽此接受端口,而發送端口是在一個范圍內的隨機值[49152~65535],當然代碼中協議棧要對對端的發送端口進行緩存,用于回送數據。
指定了端口號,客戶端和服務端可以在此端口上進行收發數據。那么對該端口收到的數據是否真的是DoIP報文,就能對該網絡報文進行解析。(有可能是網絡攻擊,有可能是其它應用恰好使用了該端口號)
對收到的報文進行解析,就涉及到DoIP協議的構成,只有符合該寫一點規范才認為是合法有效的DoIP報文。
本章小結
一直監聽13400這個端口的數據,一但發現符合DoIP協議的數據,進行通信。
協議
DoIP報文由協議頭(header)+ 負載(payload)組成
協議頭[8 byte]由下面四個字段組成
Protocol version [1 byte]
Inverse protocol version [1 byte]
Payload type [2 byte]
Payload length [4 byte]
負載[N byte] 根據實際的payload type,負載數據會不同
3.3Protocol version與Inverse protocol version
通常Protocol version為0x02,目前0x02以上的值目前是reserved狀態
Inverse protocol version是Protocol version的取反的值,此例0x02去反后為0xFD
協議書上特別說明了Protocol version可以為0xFF,設這個值的作用是,當客戶端和服務端的協議版本不匹配,可以設置此值繞過協議頭版本不匹配而拒絕請求的case。
3.4 Payload type
payload type可以代表DoIP協議棧所能支持的功能,列舉如下(特意分開了Server支持的type及Client支持的type)
如上分開描述,是因為在代碼實現上,可以將邏輯拆分。
即Server端只關心自己支持的payload type,客戶端只關心自己支持的payload type,不支持的可以忽視掉。有利于模塊拆分及組合,有利于實現上一節所講個各個角色,將來通過配置文件的配置,來表示不同的角色。
3.5 Payload length
payload length這里分配了4字節,也就是所DoIP報文最大傳輸4 GB /4294967295 bytes,即0xFFFFFFFF。它只是個允許的范圍,通常來說通過DoIP進行診斷也就幾字節到幾十字節,而升級通常ECU的升級包也就幾MB。所以4 GB只是個理論上限。
該值可以做長度的有效性驗證,因為除了診斷數據,其它payload type都是有固定長度的。
還可以做什么?其實做開發時還要考慮遇到如下情況該怎么處理
3.6 Payload
這里的負載是指的是DoIP協議的負載,當然當Payload type為診斷類型時,其負載除了DoIP自身的內容,
還包含了UDS數據,供上層UDS模塊進行進一步的解析。
因為每個Payload type負載都不同,這里不做解釋,在后續功能章節,進行詳細的介紹
Doip流程可分為三大步:
建立連接,發現車輛-建立會話-發送診斷
未清晰知識點:
利用swich將MPU,MCU,其它以太網ECU統統通過以太網進行連接,并對外網與內網進行隔離。
總結
- 上一篇: 按组排名
- 下一篇: linux 监听数据包,linux下网络