DoIP看这篇就够了,吐血整理

简介: DoIP看这篇就够了,吐血整理

1 概述

DoIP全称为基于IP网络的诊断通信Diagnostic communication over Internet Protocol,由ISO 13400标准定义,是基 于IP的汽车诊断协议。由于DoIP可以传输大量数据,以及响应速度快,且可以通过以太网进行远程诊断,因此DoIP逐步成为代替传统的CAN等总线方式,成为车载网络诊断的必然趋势。DoIP诊断经由通用的统一诊断服务 UDS协议引入诊断服务,通过传输控制协议TCP、用户数据报协议UDP和以太网协议IP,完成外部测试设备与ECU间的诊断通信。在OSI 7层模型中,ISO 13400规定了DoIP的传输层、网络层、数据链路层和物理层。应用层和会话层部分和基于CAN总线诊断一样采用ISO 14229实现。当然,DoIP并不仅仅只是UDS的载体,虽然在ISO13400标准中内容不多,但是它也有自己的一些逻辑,不可能说在TCP/IP之上加了一层封装就完成了自己的任务,这样的话安全性就没有保证了,毕竟车载以太网通过网络能够将车内与车外进行网络的连接,而DoIP又是诊断的入口,这个门口如果不好好看住,会存在安全性的问题的。

2 网络拓扑

下图为未来整车架构的网络拓扑图,根据该拓扑结构,5个域控制器:车身、 动力总成、底盘、信息娱乐、高级驾驶员辅助系统ADAS, 通过以太网作为主干网连接,每个域内部均可使用不同网 络,当域与域之间需要信息交流时,报文可经由域控制器 路由转发到目标网络。

9dd1a7154f86b0e5f724c2cb0c5cc256_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

注意图中的一些关键信息可参考DoIP中的以下几个关键概念来理解:

  • DoIP entity(DoIP实体):实现DoIP协议的节点,即DoIP gateway或者DoIP node;
  • DoIP gateway( DoIP网关):实现DoIP协议,并能进行协议转发的节点;
  • DoIP node(DoIP节点):实现DoIP协议,但不能进行协议转发的节点;
  • DoIP edge node(DoIP边缘节点):连接以太网激活线的DoIP节点,此部分和DoIP gateway有什么区别?其实没什么区别,唯一的区别就是多了个使能线的判断,从图中可以看出External test equipment和DoIP edge node gateway之间有一条线叫做Activation line。那么这条线的功能就是对协议栈进行使能作用的,当然External test equipment和DoIP edge node gateway之间不只是Activation line相连的,这个图只是功能示意图,少了很多细节,其实是通过标准的OBD-II接头相连的,其中一个针脚就是Activation line。
  • Network Node(网络节点):连在IP网络上,但不能实现DoIP的节点。
  • External test equipment:此部分为外部测试设备,通常为OBD诊断仪或者其他诊断客户端
  • 端口:指定了端口号,客户端和服务端可以在此端口上进行收发数据。我们知道不管是TCP还是UDP,都包含源端口号和目的端口号,在DoIP报文中用到了以下三种端口:
  1. 1.UDP_DISCOVERY:端口类型-UDP,端口号-13400,该端口有以下两个应用场景:
    1) 被用于诊断设备发送给DoIP节点的车辆信息请求报文和DoIP节点控制报文,此时该端口在报文中被设置为目的端口。
    2) 被用于DoIP节点在没有收到请求的时候发送的UDP报文,如车辆声明报文。此时该端口同样被设置为目的端口,源端口可以为该端口,也可以由发送方动态定义。
  2. 2.UDP_TEST_EQUIPMENT_REQUEST:端口类型-UDP,端口号-动态定义(49152-65535):该端口由外部诊断设备在49152-65535范围内动态定义,用于诊断设备向DoIP节点发送的UDP报文,在报文中作为源端口,报文的目的端口应设置为UDP_DISCOVERY。当DoIP节点向诊断设备发送响应的时候,报文中的目的端口应设置为UDP_TEST_EQUIPMENT_REQUEST,源端口可以为UDP_DISCOVERY,也可以有DoIP节点动态定义。
  3. 3.TCP_DATA:端口类型-TCP,端口号-13400:该端口用于外部诊断设备和DoIP节点之间的TCP通信,如路由报文和诊断报文。当诊断设备向DoIP节点发送报文时,使用TCP_DATA作为目的端口号;当DoIP节点向诊断设备发送报文时,使用TCP_DATA作为源端口号。

20fc60d0a1048fe7691e7c51073558aa_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

DoIP在车载领域的应用首先汽车系统的整体框架要能够支持DoIP,正因为车载以太网的快速发展,相较于传统的车载系统,目前的车载系统的整体框架都会加入一层DoIP协议层,在TCP/IP之上。并且为了更好的配合OBD诊断,远程诊断,FOTA等等技术,对整体的车载架构进行了调整,利用swich将MPU,MCU,其它以太网ECU统统通过以太网进行连接,并对外网与内网进行隔离。

DoIP架构模型必须实现以下特征:

①车辆与测试设备 能够加入到网络中并识别对方;②汽车具有声明存在且被 检测到的能力;③获取车辆基本状态信息(如Power Mode 状态);④通信建立,如双方通信请求建立,保持,以及对 网关的控制等;⑤汽车网关实现诊断设备与车辆子网组件 之间的数据路由;⑥错误状态处理。

3 DoIP帧格式

DoIP报文由DoIP报头和Payload(有效载荷)组成,具体如下图所示。

89569b8585ca708d4d94931d9d9c40a4_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

daca3eab880d21014d882964a5b35702_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

1)DoIP报头包含:DoIP协议版本号,目前为0x02(DoIP

2012)。

2)协议版本号取反,目前为0xFD。注意:协议书上特别说明了Protocol version可以为0xFF,设这个值的作用是,当客户端和服务端的协议版本不匹配,可以设置此值绕过协议头版本不匹配而拒绝请求的case。

3)Payload类型,分为3大类:

①节点管理类,包含DoIP报头否定应答、车辆声明及标识、路由激活、在线检查;

②车辆信息类,包含DoIP实体状态、诊断电源模式信息;

③诊断数据类,包含诊断报文。

关于每个类型的含义如下表所示,具体含义参考标准即可。

8960c965d2ca55906a1f8649b4a6cf94_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

4 DoIP状态机和通信流程

07a0b2bbe37f6841f5d0d4d1e6408929_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

DoIP实体内管理着一个DoIP connection table ,用来记录和维护诊断通信的逻辑连接。上图就是这个表中的一个元素,即一个逻辑连接的状态机。上图中的方框就是连接所处的状态,[Step]是状态之间跳转时发生的事情。

[Step1] 当一个新的套接字建立,逻辑连接的状态就从“listen”跳转到“socket initialized”,同时启动一个定时器, initial inactivity timer。

[Step2] 当DoIP实体接收到tester发来的一个routing activation信息后,逻辑连接的状态就从“socket initialized”跳转到“Registered [Pending for Authentication]” ,此时 initial inactivity timer被停止,启动一个名为general inactivity timer的定时器。

[Step3] 在完成Authentication之后,逻辑连接的状态就从“Registered [Pending for Authentication]”跳转到“Registered [Pending for Confrmation]” 。

[Step4] 在完成Confrmation之后,逻辑连接的状态就从“Registered [Pending for Confrmation]”跳转到“Registered [Routing Active] ” 。

[Step5] 如果initial timer 或general inactivity timer 过期后仍没收到后续请求,或者authentication 和 confrmation 被拒绝了,又或者外部测试设备对alive check 消息没有响应,则逻辑连接进入“Finalize”状态。

[Step6]进入Finalize后,此时TCP套接字将被关闭,并重新回到“listen”状态。

5  DoIP通信流程

通信的建立

当一辆车和外部测试设备都连接到DoIP网络中,并且IP 地址配置完成,DoIP实体将通过车辆公告信息广播其VIN、 EID、GID和逻辑地址3次,外部测试设备通过广播发送车辆 识别请求来触发车辆识别响应,从而完成车辆声明及标识 步骤。打开Socket(套接字)是外部测试设备向车辆内部DoIP 实体发起连接的第一步,必须在交换任何报文前完成,一 旦建立了连接,必须执行一些初始化操作。为了激活初始 化连接中的路由,外部测试设备将发送一个路由激活请求 消息到DoIP实体。如果外部测试设备符合条件,DoIP实体 将发送一个路由激活成功的响应,此时就可以对有效的 DoIP报文(如DoIP诊断报文)进行转发或处理。DoIP会话 示例如下图所示。

02c3d3d96896018a533848032cddba30_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

报文头的处理

每个DoIP实体(实现了DoIP协议的节点)将按下图中指定的顺序处理所有DoIP报文的通用DoIP报头结构

c4e34075f2c209f624d467b54de33f7b_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

如果接收到来自DoIP实体不正确的DoIP报文,外部测 试设备不得发送通用DoIP报头的否定应答报文。通用DoIP 报头否定应答报文只能用于确定先前发送的DoIP报文的错 误条件。

相关文章
|
Linux Android开发 虚拟化
我花了半个月,整理出了这篇Linux内核开发学习指南(学习路线+知识点梳理)
我花了半个月,整理出了这篇Linux内核开发学习指南(学习路线+知识点梳理)
|
人工智能 Cloud Native
整理书单
我的书单
145 0
整理书单
|
Web App开发 大数据
吐血整理50个吊炸天的超实用网站
吐血整理50个吊炸天的超实用网站
|
测试技术 uml
【吐血整理】一文读懂UML
【吐血整理】一文读懂UML
【吐血整理】一文读懂UML
|
算法 架构师 Java
肝了三天三夜整理出这份36万字全网最牛的开源高并发编程PDF!!
在 冰河技术 微信公众号中的【高并发】专题,更新了不少文章,有些读者反馈说,在公众号中刷历史文章不太方便,有时会忘记自己看到哪一篇了,当打开一篇文章时,似乎之前已经看过了,但就是不知道具体该看哪一篇了。相信很多小伙伴都会有这样的问题。那怎么办呢?最好的解决方案就是我把这些文章整理成PDF电子书,免费分享给大家,这样,小伙伴们看起来就方便多了。今天,我就将 冰河技术 微信公众号【高并发】专题中的文章,整理成《深入理解高并发编程(第1版)》 分享给大家,希望这本电子书能够给大家带来实质性的帮助。后续,我也会持续在 冰河技术 微信公众号中更新【高并发】专题,如果这本电子书能够给你带来帮助,请关注 冰
655 0
肝了三天三夜整理出这份36万字全网最牛的开源高并发编程PDF!!
|
存储 Web App开发 自然语言处理
近期面试题整理汇总(持续更新)(下)
• 变量提升与函数提升 • 变量提升: 在变量定义语句之前, 就可以访问到这个变量(undefined) • 函数提升: 在函数定义语句之前, 就执行该函数 • 先有变量提升, 再有函数提升
152 0
近期面试题整理汇总(持续更新)(下)
|
Web App开发 缓存 移动开发
近期面试题整理汇总(持续更新)(中)
我们经常在 url 中看到 #,这个 # 有两种情况,一个是我们所谓的锚点,比如典型的回到顶部按钮原理、Github 上各个标题之间的跳转等,路由里的 # 不叫锚点,我们称之为 hash,大型框架的路由系统大多都是哈希实现的。
206 0
近期面试题整理汇总(持续更新)(中)
|
Web App开发 设计模式 移动开发
近期面试题整理汇总(持续更新)(上)
1.HTML和CSS Html5新增标签和属性
162 0
近期面试题整理汇总(持续更新)(上)

相关实验场景

更多