自动驾驶技术栈——DoIP通信协议

news2025/5/13 6:23:57

一、DoIP协议简介

DoIP,英文全称是Diagnostic communication over Internet Protocol,是一种基于因特网的诊断通信协议。

DoIP协议基于TCP/IP等网络协议实现了车辆电子控制单元(ECU)与诊断应用程序之间的通信,常用于汽车行业的远程诊断、远程车辆维修、车载固件的OTA升级等场景。

DoIP协议的设计初衷是为了解决基于CAN总线的传统诊断通信在应用时出现的带宽有限、灵活性不足、不方便远程访问等问题。早期的诊断通信方式是使用CAN总线进行数据传输,将诊断服务运行在ISO-15765标准定义的DoCAN协议上,而基于ISO-13400标准的DoIP协议结合了现代车载以太网和TCP/IP协议的优势,为车载诊断通信提供了更大的吞吐量和更快的响应速度,让汽车只要连接了以太网便可以实现诊断通信。

二、DoIP协议的优点

支持身份校验和加解密功能,以防止未经授权的网络访问和数据盗窃。

硬件上采用了标准以太网设备和电缆,不需要额外接入VCI转换器,降低了硬件成本。

支持高效的海量数据处理,节省了ECU固件刷写的时间。

基于标准的TCP/IP协议进行通信,可以与其他现有的以太网协议进行集成和交互。

应用广泛,逐渐被越来越多的汽车制造商和诊断工具制造商采用,有望成为汽车行业的诊断通信标准。

采用网络编程即可实现,配置和部署灵活,支持多种应用场景。

三、DoIP协议的潜在风险

通信过程依赖以太网的传输质量,会因为网速导致诊断设备和车辆之间的响应速度变慢。

随着现代汽车的联网程度越来越高,采用DoIP协议进行通信会增加汽车遭受网络攻击的风险,即使在TCP通信阶段使用TLS加密,也存在很多安全漏洞,比如网络中的恶意代码可以伪装成DoIP网关并截获通信数据。

整个DoIP协议栈的代码是基于TCP/IP协议的API进行开发的,和大多数网络编程场景一样,会存在丢包、传输延迟等底层问题。

四、DoIP协议的分层

DoIP协议的传输层:采用TCP/UDP协议进行实现。

DoIP协议的网络层:采用IP协议进行实现。

DoIP协议的应用层or会话层:采用UDS诊断协议进行实现。

DoIP协议将标准的UDS消息封装在TCP/IP协议的数据包中,让UDS消息可以通过以太网或WLAN进行传输。

五、DoIP协议的消息体结构

DoIP报文的消息体组成:DoIP Header + DoIP Payload。

DoIP Header:主要用来区分协议的版本。

DoIP Payload:主要用来标注发送方地址SA、接收方地址TA、诊断消息体。

1.DoIP报文头部的构成:

(1).协议版本(Proto Version)

参数长度:1字节

含义:表示正在使用的 DoIP 协议版本,例如0x01、0x02、0x03。

举例:

0x00: 预留

0x01: DoIP ISO/IDS 13400-2:2010

0x02: DoIP ISO 13400-2:2012

0x03: DoIP ISO 13400-2:2019

(2).协议版本的反码(Inv Version)

参数长度:1字节

含义:表示协议版本的按位取反,例如协议版本为0x03,则此值为0xFC。

(3).载荷类型(Payload Type)

参数长度:2字节

含义:常用的载荷类型有车辆识别、诊断消息传输和路由激活等。

常见的载荷类型:

(4).载荷长度(Payload Length)

参数长度:4字节

含义:表示除去Header的长度以后,DoIP报文的数据包部分的长度。

完整的DoIP报文样例:

2.DoIP报文的消息体构成

发送方地址(Source Address)

接收方地址(Target Address)

诊断命令(UDS Message)

六、DoIP网络拓扑结构

协议文档ISO13400-2中提供的结构如下:

整车的网络拓扑分为两部分,即内部网络和外部网络。

关键元素:

1.外部测试设备(External test equipment)

OBD诊断工具或其他诊断仪,可以理解为DoIP协议中的客户端。

2.DoIP网关(DoIP Gateway)

该网关负责转发DoIP消息,为了寻址方便,DoIP网关中通常存储了ECU的地址map。

它同时连接了IP网络和非IP网络上的DoIP节点,并向这些节点转发诊断消息。

通常采用MCU设备来扮演DoIP网关角色。

3.DoIP边缘节点网关(DoIP edge node gateway)

它的功能与DoIP网关类似,它的子网上也挂载了多个ECU。

外部测试设备和DoIP边缘节点网关之间有一条称为激活线的线路,该线路可以使DoIP协议生效。

该网关是车载网络和车载外网络之间的接入点,它负责将车内网络与车外网络进行隔离,避免非法的网络访问。

通常采用MPU设备来扮演DoIP边缘节点网关角色。

4.DoIP节点(DoIP Node)

物理结构上,DoIP节点是指保持以太网连接并支持DoIP协议的ECU设备。

代码实现上,DoIP节点是指运行在ECU设备上的各种诊断应用程序。

5.网络节点(Network Node)

连接在IP网络上但没有实现DoIP协议的节点。

补充:激活线的作用是减少电磁干扰和降低网络带宽 ,在不需要诊断通信的时候,将激活线对应的电压拉低,需要诊断通信的时候,将激活线对应的电压拉高。

七、DoIP协议的通信场景

ISO-13400协议文档中介绍了多个场景,这里列举两种最常见的,帮助理解。

1.诊断仪与车辆的一对一连接,用于对特定的车辆进行诊断,排除其他设备的干扰。

2.诊断仪与车辆的一对多连接,用于同时刷写多个车辆上的ECU固件。

八、DoIP协议端口分配

1.车辆发现场景

涉及到多播通信,采用UDP通信端口,端口名是UDP_DISCOVERY,端口号是13400。

2.诊断会话场景

需要先建立连接,采用TCP通信端口,端口名是TCP_DATA,端口号是13400。

车辆发现与诊断会话的通信时序如下:

九、DoIP通信时序图

DoIP通信分为五个阶段:

step.01.建立物理连接,激活线将DoIP网关激活。

step.02.车辆发现。

step.03.选择车辆并建立TCP连接。

step.04.建立诊断会话。

step.05.诊断请求与响应。

1.会话建立时序

2.外部测试仪发起连接时的IP分配时序

参考阅读

DoIP UDS Server Demo — RAPIDSEA 1.2 documentation

DoIP vs. Traditional Protocols in Vehicle Maintenance Guide in 2025

https://embitel-stage.embdev.in/wp-content/uploads/DoIP-Factsheet-Embitel.pdf

Guide to the ISO13400 Protocol - UDS on automotive DoIP protocol

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2374458.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ 与 Go、Rust、C#:基于实践场景的语言特性对比

目录 ​编辑 一、语法特性对比 1.1 变量声明与数据类型 1.2 函数与控制流 1.3 面向对象特性 二、性能表现对比​编辑 2.1 基准测试数据 在计算密集型任务(如 10⁷ 次加法运算)中: 在内存分配测试(10⁵ 次对象创建&#xf…

如何更改默认字体:ONLYOFFICE 协作空间、桌面编辑器、文档测试示例

在处理办公文件时,字体对提升用户体验至关重要。本文将逐步指导您如何在 ONLYOFFICE 协作空间、桌面应用及文档测试示例中自定义默认字体,以满足个性化需求,更好地掌控文档样式。 关于 ONLYOFFICE ONLYOFFICE 是一个国际开源项目&#xff0c…

设计模式之工厂模式(二):实际案例

设计模式之工厂模式(一) 在阅读Qt网络部分源码时候,发现在某处运用了工厂模式,而且编程技巧也用的好,于是就想分享出来,供大家参考,理解的不对的地方请多多指点。 以下是我整理出来的类图: 关键说明&#x…

基于VeRL源码深度拆解字节Seed的DAPO

1. 背景与现状:从PPO到GRPO的技术演进 1.1 PPO算法的基础与局限 Proximal Policy Optimization(PPO)作为当前强化学习领域的主流算法,通过重要性采样比率剪裁机制将策略更新限制在先前策略的近端区域内,构建了稳定的…

zst-2001 历年真题 软件工程

软件工程 - 第1题 b 软件工程 - 第2题 c 软件工程 - 第3题 c 软件工程 - 第4题 b 软件工程 - 第5题 b 软件工程 - 第6题 0.未完成:未执行未得到目标。1.已执行:输入-输出实现支持2.已管理:过程制度化,项目遵…

基于WSL用MSVC编译ffmpeg7.1

在windows平台编译FFmpeg,网上的大部分资料都是推荐用msys2mingw进行编译。在win10平台,我们可以采用另一种方式,即wslmsvc 实现window平台的ffmpeg编译。 下面将以vs2022ubuntu22.04 为例,介绍此方法 0、前期准备 安装vs2022 &…

java命令行打包class为jar并运行

1.创建无包名类: 2.添加依赖jackson 3.引用依赖包 4.命令编译class文件 生成命令: javac -d out -classpath lib/jackson-core-2.13.3.jar:lib/jackson-annotations-2.13.3.jar:lib/jackson-databind-2.13.3.jar src/UdpServer.java 编译生成class文件如下 <

vue注册用户使用v-model实现数据双向绑定

定义数据模型 Login.vue //定义数据模型 const registerData ref({username: ,password: ,confirmPassword: })使用 v-model 实现数据模型的key与注册表单中的元素之间的双向绑定 <!-- 注册表单 --><el-form ref"form" size"large" autocompl…

Nacos源码—8.Nacos升级gRPC分析六

大纲 7.服务端对服务实例进行健康检查 8.服务下线如何注销注册表和客户端等信息 9.事件驱动架构源码分析 一.处理ClientChangedEvent事件 也就是同步数据到集群节点&#xff1a; public class DistroClientDataProcessor extends SmartSubscriber implements DistroDataSt…

SpringBoot 自动装配原理 自定义一个 starter

目录 1、pom.xml 文件1.1、parent 模块1.1.1、资源文件1.1.1.1、resources 标签说明1.1.1.2、从 Maven 视角&#xff1a;资源处理全流程​ 1.1.2、插件 1.2、dependencies 模块 2、启动器3、主程序3.1、SpringBootApplication 注解3.2、SpringBootConfiguration 注解3.2.1、Con…

【C++进阶篇】多态

深入探索C多态&#xff1a;静态与动态绑定的奥秘 一. 多态1.1 定义1.2 多态定义及实现1.2.1 多态构成条件1.2.1.1 实现多态两个必要条件1.2.1.2 虚函数1.2.1.3 虚函数的重写/覆盖1.2.1.4 协变1.2.1.5 析构函数重写1.2.1.6 override和final关键字1.2.1.7 重载/重写/隐藏的对⽐ 1…

《AI大模型应知应会100篇》第60篇:Pinecone 与 Milvus,向量数据库在大模型应用中的作用

第60篇&#xff1a;Pinecone与Milvus&#xff0c;向量数据库在大模型应用中的作用 摘要 本文将系统比较Pinecone与Milvus两大主流向量数据库的技术特点、性能表现和应用场景&#xff0c;提供详细的接入代码和最佳实践&#xff0c;帮助开发者为大模型应用选择并优化向量存储解…

Java学习手册:客户端负载均衡

一、客户端负载均衡的概念 客户端负载均衡是指在客户端应用程序中&#xff0c;根据一定的算法和策略&#xff0c;将请求分发到多个服务实例上。与服务端负载均衡不同&#xff0c;客户端负载均衡不需要通过专门的负载均衡设备或服务&#xff0c;而是直接在客户端进行请求的分发…

Docker私有仓库实战:官方registry镜像实战应用

抱歉抱歉&#xff0c;离职后反而更忙了&#xff0c;拖了好久&#xff0c;从4月拖到现在&#xff0c;在学习企业级方案Harbor之前&#xff0c;我们先学习下官方方案registry&#xff0c;话不多说&#xff0c;详情见下文。 注意&#xff1a;下文省略了基本认证 TLS加密&#xff…

Redis+Caffeine构建高性能二级缓存

大家好&#xff0c;我是摘星。今天为大家带来的是RedisCaffeine构建高性能二级缓存&#xff0c;废话不多说直接开始~ 目录 二级缓存架构的技术背景 1. 基础缓存架构 2. 架构演进动因 3. 二级缓存解决方案 为什么选择本地缓存&#xff1f; 1. 极速访问 2. 减少网络IO 3…

【计算机网络】NAT技术、内网穿透与代理服务器全解析:原理、应用及实践

&#x1f4da; 博主的专栏 &#x1f427; Linux | &#x1f5a5;️ C | &#x1f4ca; 数据结构 | &#x1f4a1;C 算法 | &#x1f152; C 语言 | &#x1f310; 计算机网络 上篇文章&#xff1a;以太网、MAC地址、MTU与ARP协议 下篇文章&#xff1a;五种IO模型与阻…

Python训练打卡Day21

常见的降维算法&#xff1a; # 先运行预处理阶段的代码 import pandas as pd import pandas as pd #用于数据处理和分析&#xff0c;可处理表格数据。 import numpy as np #用于数值计算&#xff0c;提供了高效的数组操作。 import matplotlib.pyplot as plt #用于绘…

node .js 启动基于express框架的后端服务报错解决

问题&#xff1a; node .js 用npm start 启动基于express框架的后端服务报错如下&#xff1a; /c/Program Files/nodejs/npm: line 65: 26880 Segmentation fault "$NODE_EXE" "$NPM_CLI_JS" "$" 原因分析&#xff1a; 遇到 /c/Program F…

并发笔记-信号量(四)

文章目录 背景与动机31.1 信号量&#xff1a;定义 (Semaphores: A Definition)31.2 二元信号量 (用作锁) (Binary Semaphores - Locks)31.3 用于排序的信号量 (Semaphores For Ordering)31.4 生产者/消费者问题 (The Producer/Consumer (Bounded Buffer) Problem)31.5 读写锁 (…

【HTOP 使用指南】:如何理解主从线程?(以 Faster-LIO 为例)

htop 是 Linux 下常用的进程监控工具&#xff0c;它比传统的 top 更友好、更直观&#xff0c;尤其在分析多线程或多进程程序时非常有用。 以下截图就是在运行 Faster-LIO 实时建图时的 htop 状态展示&#xff1a; &#x1f50d; 一、颜色说明 白色&#xff08;或亮色&#xf…