浅析DOIP系统机制(二)

汽车ECU开发 2023-10-09 08:55
接着前天的文章浅析DOIP系统机制(一)
1.DoIP系统网络层和传输层
ISO 134001-2定义了用于车辆诊断的网络层和传输层协议以及服务,是DoIP协议的主要部分,内容通过需求、表格和状态机三个部分来共同表示。通常,在状态机中规定了通信过程的动作的顺序,转换流程在需求中指定。其中包括了车辆终端在网络中IP地址的分配、车辆识别、连接建立、通信协议消息格式、到车辆节点的数据路由、状态信息和错误处理。可以将这些流程划分为DoIP通信的三、个主要阶段,分别为:车辆识别、路由激活和诊断通信阶段。
1.2.DoIP报头格式和报头处理

由于DoIP现协议是基于以太网技术的车辆诊断协议,所以诊断数据在OSI参考模型各分层传递方式与传统以太网一致。DoIP协议规范了网络通信中TCP/UDP数据包中有效载荷(Payload)部分内容,在TCP/IP与更高层诊断协议之间提供了统一接口,DoIP报文由DoIP报头和有效载荷组成,其中有效载荷根据DoIP报文的不同功能有不同的类型,其与传统以太网帧的关系如下图所示。

DoIP报头 由协议版本 、反向协议版本、有效载荷类型和有效载荷长度组成,下表展示了DoIP报头结构。

协议版本用来表示DoIP协议版本的编号,其范围为0x00到0xFF。0x01代表ISO/DIS13400-2:2010,是第一版DoIP协议草案;0x02代表ISO13400-2:2012;0x03代表目前最新的ISO13400-2:2019。0xFF为默认值,用于在客户端DoIP实体支持多个协议版本,且没有有关实体支持的DoIP版本信息时,测试设备发送的DoIP报文才使用此默认值。但是建议提前确认好使用的协议版本,以便数据传输的可靠性,一般以最新版本为准。

反向协议版本是协议版本与16进制字节0xFF之间逻辑异或运算的结果,该值与DoIP协议版本配合起到协议版本验证的作用,以确保能接收到正确的DoIP报文。

有效载荷类型用于标识DoIP通信中使用的不同类型报文,也 可 被 称 为 DoIP 报 文 类 型 。其 中 主 要 分 为 三 种 分 组 :节 点 管 理 报 文 、车辆信息报文和诊断报文,三个分组下又被分成了不同类型报文,包括对应传输层协议如下表所示。

节点管理消息:用于节点管理的消息组成。从通信阶段来看,车辆识别和路由激活阶段的消息,以及车辆与测试设备连接后用于查询测试设备是否仍处于活跃状态的活动检查消息一起属于该类别。

车辆信息消息:用于收集执行诊断之前可能有用的DoIP实体和特定车辆的信息,例如检索当前被诊断车辆的诊断电源模式以及其他车辆工作条件信息,以此来判断当前车辆条件是否适合进行诊断。

诊断消息:封装有上层的诊断协议,在本文中讨论的为目前应用较为广泛的UDS协议。

有效载荷长度:用来表示包含DoIP报文是数据的长度,该长度以字节为单位,且不包括DoIP报头字节。根据DoIP报文有效载荷类型的不同,有的类型长度固定,有的类型长度可变。但是范围需要控制在0到4294967295个字节,这要求在数据传输之前根据报文类型的不同对数据的大小进行计算以确保数据完整正确的传输。

1.3  DoIP 报头处理

DoIP报头一方面能够标识其为DoIP报文,另一方面通过DoIP协议中的报头处理机制,能够屏蔽错误或无法处理等情况的报文,如果报文不能被正确的处理,DoIP实体需要响应一个长度为1字节的否定响应代码(Not Acknowledge,NACK)。否定应答代码用来指示在DoIP报头中检测到的特定错误,并指示接收到否定响应代码的DoIP实体执行后续操作。需要注意的是,如果出现特殊的错误情况,不得进行否定响应,具体情况可参考ISO 13400文档。

下表展示了ISO 13400文档中描述的5种错误报文对应的否定响应代码和跟进操作,包括如何处理消息和通信连接,并对未来可能出现的情况保留的更新空间。

下面将结合ISO 13400文档中相关“需求”,进一步讨论DoIP报头处理机制是如何在数据传输之初提供可靠性保障,并解释这些机制背后的思想。

需求[DoIP-039]指出,DoIP实体应该忽略带有否定响应代码(NACK)的DoIP报文,换句话说,否定响应只有DoIP实体发送至测试设备单向有效,而在另一个方向无效。随后的[DoIP-040]指出测试设备不得发送带有错误响应代码(NACK)的报文。这两个需求共同阻止DoIP实体与测试设备之间来回重复的错误响应代码(NACK)发送,避免了恶意消耗带宽的网络攻击手段。

需求[DoIP-031]指出,接收节点应忽略任何以多IP或广播IP为源地址的数据包。从安全角度来说,有助于防止攻击者将此类数据发送至合法主机,如防止DoIP实体回复多播或广播地址。

需求[DoIP-041]到[DoIP-045]包含了上面表格中几种不同类型错误的详细描述和采取跟进操作,ISO13400-2:2019文档中图16通过状态机描述了对DoIP报头检查顺序,也就是说定义了按照什么顺序处理消息和Socket连接。这两点有助于减轻由协议版本或DoIP报文类型识别错误而产生的数据解析歧义。

[DoIP-041]规定DoIP实体接收到的DoIP报头中协议版本和反向协议版本应为ISO 13400标准中规定的值,对报文协议版本进行提前确认有助于保证了数据解析的正确性。此机制也是一种简单的数据完整性检查机制,但其仅覆盖8个报头字节的前两个字节,显然无法较好确保数据完整。

[DoIP-042]的要求与[DoIP-041]类似,DoIP报文类型需要满足ISO 13400标准规定的值。由于这些值定义明确,因此DoIP实体能够明确接收的是哪种类型报文。针对协议的攻击一般采用发送随机消息,发送的数据无意义,以上两种检测机制有效降低了这类攻击的效果。

[DoIP-043]和[DoIP-044]的规定类似,都是对有效载荷长度的检查,区别在[DoIP-043]是将有效载荷长度与接收实体设置的最大处理长度比较,检查是否有处理能力,而[DoIP-044]则是与接收实体中内存最大容量相关,可能出现满足最大处理长度但内存空间被占用,暂时无法接收的情况。此机制可以防止数据溢出,避免占用接收实体过多资源,某些网络攻击也会利用数据溢出使ECU产生故障。

[DoIP-045]规定接收数据的DoIP实体应检测有效载荷长度与DoIP报文类型要求的长度是否匹配。如果两者不匹配,则该报文的内容存在问题,接收实体不需要处理。

1.4 DoIP报头传输层端口分配

由于DoIP是基于Socket的网络通信方式,所以实现通信之前,需要对数据传输使用的端口进行分配。ISO 13400文档依据不同的功能对TCP和UDP协议的端口使用进行了建议。

在建立TCP通信过程中,测试设备自动选择端口号作为发送端口,向车内DoIP实体的13400端口发送消息;建立UDP通信过程分为两类,一类是测试设备主动发送的请求报文,另一类是测试设备被动接收的报文,这两类报文的目标端口都是13400端口。下表展示了DoIP诊断过程中各类报文的端口使用情况。

以上端口名称与端口号的对应关系为,
TCP_DATA:13400
UDP_DISCOVERY:13400

UDP_TEST_EQUIPMENT_REQUEST:动态分配。

1.5 DoIP诊断的主要阶段

车辆识别
车辆识别阶段作用于车辆与测试设备建立连接的初期,为了测试设备能够准确的识别目标车辆和DoIP实体,并明确建立连接的目标IP地址以及其安装在哪辆车上。该阶段包括三种类型的DoIP报文,分别为车辆声明、车 辆 识 别 请 求  和 车 辆 识 别 响 应 。车辆声明和车辆识别响应由车辆端或DoIP实体端发送至测试设备,车辆识别请求由测试设备发送至车辆端或DoIP实体端,详细信息如下表所示。

下面将分别介绍上述三种类型DoIP报文,报文名称后括号内的16进制数为对应DoIP报文类型标识符。
车辆识别请求:不包含任何应用数据,只为了测试设备主动要求建立连接。车辆识别请求消息的DoIP报文分为三种情况,分别为无有效载荷车辆识别请求(0x0001)、有效载荷为EID的车辆识别请求(0x0002)和有效载荷为VIN的车辆识别请求(0x0003)。区别在于有效载荷内容分别为空、6字节的EID和17字节的VIN。采取哪种情况的车辆识别请求根据实际需求而定,由测试设备希望通过EID还是VIN识别到特定的车辆决定。车辆识别请求三种DoIP报文有效载荷中的格式如下图所示。
其中,EID为DoIP实体的唯一ID,由于要求具有唯一特性,一般建议采用网络接口的MAC地址作为该DoIP实体的EID,且MAC地址在长度与ISO 13400中要求EID长度一致,都为6字节。VIN文称车辆识码,车辆唯一标识序列号,由17个英文和数字组成,在数据类型上由17个字节的ASCII码组成。

车辆声明(0x0004)和车辆识别响应(0x0004):拥有同样的有效载荷结构,其内容都为描述DoIP实体基本信息的数据,但车辆声明和车辆识别响应的应用场景不同。车辆声明用于在没有接收到测试设备请求的情况下,主动向网络广播自己的信息,测试设备依据需求判断是否需要与正在广播的DoIP实体建立连接。车辆识别响应是DoIP实体接收到车辆识别请求后,对请求作出的积极响应(如上文提到的包含EID或VIN的车辆识别请求)。车辆声明和车辆识别响应有效载荷的结构如下图所示。

路由激活

ISO 13400规定,当测试设备需要通过车载DoIP网关将报文路由到车辆内部网络之前,需要执行路由激活阶段,用于激活TCP_DATA Socket上的路由。该阶段包括路由激活请求和路由激活响应。路由激活请求报文由测试设备发送至DoIP实体,路由激活响应由DoIP实体发送至测试设备,详细信息如下表所示。

路由激活请求报文(0x0005)的有效载荷中包含测试设备的源地址(SourceAddress,SA)、激活类型(Activation Type)、保留给ISO 13400-2今后扩展使用的部分和可以主机厂自定义的部分。其有效载荷的格式如下图所示。

源地址(Source Address,SA)的类型为上文中描述的逻辑地址,此处源地址为路由激活报文发送方,也就是测试设备的逻辑地址,地址范围应遵守ISO13400-2:2019中的规定,用于标识该报文由哪个测试设备发出。

激活类型(Activation Type)用来指示不同的身份验证或确认路由激活的特定类型。具体来说分为默认激活模式、法规要求的诊断通信激活(例如全球调和车载诊断系统(WWH-OBD))和由主机厂定义的激活类型,如主机厂可能需要在路由激活过程中添加安全验证。

ISO保留部分为未来文档完善升级保留了空间,目前默认用0x00填充。

主机厂自定义部分非强制要求项(Mandatory),由企业根据自身需求决定是否在有效载荷中保留此项。

路由激活响应报文(0x0006)为对路由激活请求报文的响应,是在车内DoIP实体成功接收到路由激活请求报文,并通过一系列验证处理,允许车辆外部报文路由到车内之前发送的报文。其有效载荷的格式如下图所示。

测试设备地址(Logical Address Of Client DoIP Entity)和实体地址(LogicalAddress Of DoIP Entity)分别为测试设备与车内发送路由激活响应报文的DoIP实体的逻辑地址,车内进行路由激活响应的节点一般为车内的DoIP边缘接或车载网络各网段的入口节点。

响应代码(Response Code)为DoIP实体对路由请求报文的响应状态,如果车内节点拒绝路由激活请求,则通过该响应代码告知测试设备拒绝原因,成功的路由激活意味着接下来可以通过TCP_DATA路由诊断消息到车内网络。不同响应代码的含义在ISO13400-2:2019中有明确的规定,其中包含强制要求和主机厂可自定义部分。成功的路由激活是测试设备与车内DoIP实体进行诊断通信的前提。

ISO保留部分为未来文档完善升级保留了空间,目前默认用0x00填充。

OEM保留项为主机厂功能扩展使用,与路由请求中保留项一样,是可选项。

诊断通信

在完成车辆识别和路由激活后,诊断数据才能通过网络在车辆与测试设备之间传输,从诊断通信阶段才开始正式的诊断数据的交互。诊断通信报文因为其特定的格式,被允许路由(诊断请求)到车辆网络,并从车辆网络路由(诊断响应)回测试设备,DoIP实体对诊断请求的响应包括肯定响应和否定响应。但当车辆中的DoIP实体向测试设备发送诊断消息时,测试设备不应响应。值得注意的是,DoIP协议增加了对DoIP诊断报文响应,这一点需要与对DoIP上层的高层协议(如UDS协议)的响应区分开,对DoIP报文的响应,包含对逻辑地址、诊断数据长度等信息的响应,后文中会做详细介绍;对高层协议的响应(包括肯定响应和否定响应)被填充在诊断响应报文(DoIP报文)的有效载荷中。

诊断通信阶段的报文有4种,分别为诊断请求和诊断响应报文、DoIP报文ACK响应报文和DoIP报文NACK响应报文,其中诊断请求报文和诊断响应报文有效载荷的格式一致,用于承载高层协议的诊断数据(UDS诊断数据),且其报文类型标识符一致,都为0x8001;DoIP报文ACK响应报文和DoIP报文NACK响应报文结构相似,用于对DoIP报文的响应,响应过程不涉及高层协议,唯一的区别在于响应代码是ACK还是NACK。ACK代表肯定的响应,即当前DoIP报文可以通过检测,并能将高层协议的诊断数据传输到目标车内的DoIP实体进行处理;NACK代表否定响应,即当前DoIP报文的信息未通过检测,则高层协议的诊断数据无法被车内DoIP实体处理。

诊断请求(0x8001)和诊断响应(0x8001)报文有效载荷的格式如下图所示。

源逻辑地址(Source Address)和目标逻辑地址(Target Address)分别为测试设备和车内网络中目标DoIP实体的逻辑地址,用来标识发送方和接收方是否与路由激活阶段建立连接的一致。需要注意的是,不论当前报文为诊断请求还是诊断响应报文,其源逻辑地址都为测试设备的逻辑地址,目标逻辑地址都为车内网络中DoIP实体的逻辑地址。

用户数据(User Data)为高层协议的诊断数据内容(如ISO 14229-1中要求的诊断请求和诊断响应),高层协议的诊断请求和响应被将填充到“用户数据”中,随DoIP诊断通信报文的请求被路由到目标车内DoIP实体。如果网路中的诊断数据的目标节点是不支持DoIP协议的CAN节点,则数据应该通过支持DoIP协议的节点将接收到的用户数据通过CAN总线转发给目标CAN节点,并将CAN节点的诊断响应打包在DoIP报文中发送到网络中,如果其他种类的车载网络节点有同样的需求,也通过类似的方式实现诊断数据的转发。

DoIP报文ACK(0x8002)和NACK(0x8003)响应报文有效载荷的格式如下所示。

接收到以上两种DoIP报文的测试设备会根据有效载荷中ACK或NACK响应代码的含义进行下一步操作。两种响应代码的范围都是0x00至0xFF,其中,ACK代码的值为0x00时指示能够正确接收诊断报文,0x01到0xFF由ISO 13400-2:2019文档保留,暂时不开放使用;NACK代码比较多,不同的代码表示不能正确接收DoIP诊断请求报文的原因,下表展示了NACK代码的内容。

-end-

分享不易,恳请点个【👍】和【在看】

汽车ECU开发 专注于汽车电子ECU软件开发,技术分享。
评论
  • 根据Global Info Research项目团队最新调研,预计2030年全球封闭式电机产值达到1425百万美元,2024-2030年期间年复合增长率CAGR为3.4%。 封闭式电机是一种电动机,其外壳设计为密闭结构,通常用于要求较高的防护等级的应用场合。封闭式电机可以有效防止外部灰尘、水分和其他污染物进入内部,从而保护电机的内部组件,延长其使用寿命。 环洋市场咨询机构出版的调研分析报告【全球封闭式电机行业总体规模、主要厂商及IPO上市调研报告,2025-2031】研究全球封闭式电机总体规
    GIRtina 2025-01-06 11:10 103浏览
  • 彼得·德鲁克被誉为“现代管理学之父”,他的管理思想影响了无数企业和管理者。然而,关于他的书籍分类,一种流行的说法令人感到困惑:德鲁克一生写了39本书,其中15本是关于管理的,而其中“专门写工商企业或为企业管理者写的”只有两本——《为成果而管理》和《创新与企业家精神》。这样的表述广为流传,但深入探讨后却发现并不完全准确。让我们一起重新审视这一说法,解析其中的矛盾与根源,进而重新认识德鲁克的管理思想及其著作的真正价值。从《创新与企业家精神》看德鲁克的视角《创新与企业家精神》通常被认为是一本专为企业管
    优思学院 2025-01-06 12:03 113浏览
  • 每日可见的315MHz和433MHz遥控模块,你能分清楚吗?众所周知,一套遥控设备主要由发射部分和接收部分组成,发射器可以将控制者的控制按键经过编码,调制到射频信号上面,然后经天线发射出无线信号。而接收器是将天线接收到的无线信号进行解码,从而得到与控制按键相对应的信号,然后再去控制相应的设备工作。当前,常见的遥控设备主要分为红外遥控与无线电遥控两大类,其主要区别为所采用的载波频率及其应用场景不一致。红外遥控设备所采用的射频信号频率一般为38kHz,通常应用在电视、投影仪等设备中;而无线电遥控设备
    华普微HOPERF 2025-01-06 15:29 125浏览
  • 根据环洋市场咨询(Global Info Research)项目团队最新调研,预计2030年全球无人机锂电池产值达到2457百万美元,2024-2030年期间年复合增长率CAGR为9.6%。 无人机锂电池是无人机动力系统中存储并释放能量的部分。无人机使用的动力电池,大多数是锂聚合物电池,相较其他电池,锂聚合物电池具有较高的能量密度,较长寿命,同时也具有良好的放电特性和安全性。 全球无人机锂电池核心厂商有宁德新能源科技、欣旺达、鹏辉能源、深圳格瑞普和EaglePicher等,前五大厂商占有全球
    GIRtina 2025-01-07 11:02 63浏览
  • 村田是目前全球量产硅电容的领先企业,其在2016年收购了法国IPDiA头部硅电容器公司,并于2023年6月宣布投资约100亿日元将硅电容产能提升两倍。以下内容主要来自村田官网信息整理,村田高密度硅电容器采用半导体MOS工艺开发,并使用3D结构来大幅增加电极表面,因此在给定的占位面积内增加了静电容量。村田的硅技术以嵌入非结晶基板的单片结构为基础(单层MIM和多层MIM—MIM是指金属 / 绝缘体/ 金属) 村田硅电容采用先进3D拓扑结构在100um内,使开发的有效静电容量面积相当于80个
    知白 2025-01-07 15:02 66浏览
  • 这篇内容主要讨论三个基本问题,硅电容是什么,为什么要使用硅电容,如何正确使用硅电容?1.  硅电容是什么首先我们需要了解电容是什么?物理学上电容的概念指的是给定电位差下自由电荷的储藏量,记为C,单位是F,指的是容纳电荷的能力,C=εS/d=ε0εrS/4πkd(真空)=Q/U。百度百科上电容器的概念指的是两个相互靠近的导体,中间夹一层不导电的绝缘介质。通过观察电容本身的定义公式中可以看到,在各个变量中比较能够改变的就是εr,S和d,也就是介质的介电常数,金属板有效相对面积以及距离。当前
    知白 2025-01-06 12:04 167浏览
  • 大模型的赋能是指利用大型机器学习模型(如深度学习模型)来增强或改进各种应用和服务。这种技术在许多领域都显示出了巨大的潜力,包括但不限于以下几个方面: 1. 企业服务:大模型可以用于构建智能客服系统、知识库问答系统等,提升企业的服务质量和运营效率。 2. 教育服务:在教育领域,大模型被应用于个性化学习、智能辅导、作业批改等,帮助教师减轻工作负担,提高教学质量。 3. 工业智能化:大模型有助于解决工业领域的复杂性和不确定性问题,尽管在认知能力方面尚未完全具备专家级的复杂决策能力。 4. 消费
    丙丁先生 2025-01-07 09:25 80浏览
  • 本文介绍Linux系统更换开机logo方法教程,通用RK3566、RK3568、RK3588、RK3576等开发板,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。制作图片开机logo图片制作注意事项(1)图片必须为bmp格式;(2)图片大小不能大于4MB;(3)BMP位深最大是32,建议设置为8;(4)图片名称为logo.bmp和logo_kernel.bmp;开机
    Industio_触觉智能 2025-01-06 10:43 87浏览
  • By Toradex 秦海1). 简介嵌入式平台设备基于Yocto Linux 在开发后期量产前期,为了安全以及提高启动速度等考虑,希望将 ARM 处理器平台的 Debug Console 输出关闭,本文就基于 NXP i.MX8MP ARM 处理器平台来演示相关流程。 本文所示例的平台来自于 Toradex Verdin i.MX8MP 嵌入式平台。  2. 准备a). Verdin i.MX8MP ARM核心版配合Dahlia载板并
    hai.qin_651820742 2025-01-07 14:52 40浏览
  • 在智能家居领域中,Wi-Fi、蓝牙、Zigbee、Thread与Z-Wave等无线通信协议是构建短距物联局域网的关键手段,它们常在实际应用中交叉运用,以满足智能家居生态系统多样化的功能需求。然而,这些协议之间并未遵循统一的互通标准,缺乏直接的互操作性,在进行组网时需要引入额外的网关作为“翻译桥梁”,极大地增加了系统的复杂性。 同时,Apple HomeKit、SamSung SmartThings、Amazon Alexa、Google Home等主流智能家居平台为了提升市占率与消费者
    华普微HOPERF 2025-01-06 17:23 141浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦