DoIP诊断入门
简介
DoIP(Diagnosis over Internet Protocol)是一种用于车辆诊断的网络通信协议。它基于现代互联网技术,允许通过以太网或IP网络进行车辆诊断和通信。
DoIP的背景是现代车辆中使用的电子控制单元(ECU)数量不断增加,以及这些ECU之间需要进行更快速、更可靠的数据交换。传统的诊断方法通常使用专用的物理连接和协议,限制了诊断的速度和灵活性。而DoIP利用了以太网和IP网络的优势,使诊断设备能够通过网络连接到车辆的ECU,实现远程诊断、编程和数据交换。
DoIP的主要特点包括:
- 高速通信:使用以太网作为物理层,实现了高速的数据传输,能够满足现代车辆复杂系统的诊断需求。
- 网络连接:通过IP网络连接车辆的电子控制单元(ECU),实现远程诊断和编程功能。
- 灵活性:支持多种传输协议,如TCP/IP、UDP/IP等,以适应不同的诊断工具和应用场景。
- 安全性:提供加密和认证机制,确保诊断通信的安全性和可靠性。

和DoCAN对比,不变的是上层的应用层还是IS14229,变化的是传输层、网络层、当然还有物理层。基于TCP/UDP,IP等协议。DoIP使用以太网作为物理层,通过TCP/IP或UDP/IP等协议在IP网络上进行通信。它采用了客户端-服务器模型,其中诊断工具作为客户端,而车辆的电子控制单元(ECU)则作为服务器。
在通信过程中,诊断工具与车辆的ECU建立连接,并通过DoIP协议进行数据交换。诊断工具发送请求消息,ECU接收并解析这些消息,然后根据请求执行相应的操作。ECU将响应消息发送回诊断工具,以提供所需的诊断信息。
DoIP协议定义了消息格式和数据结构,包括消息头、消息体和校验等字段。它还规定了不同类型的消息,如诊断请求、响应和通知等。通过这些规范,诊断工具和ECU能够准确地进行通信和数据交换。
DoIP的网络通信架构允许多个诊断工具同时与车辆的ECU进行通信,实现了多点诊断和远程访问的能力。它还支持安全性和认证机制,确保通信的保密性和可靠性。
总结而言,DoIP的网络通信协议和架构基于以太网和IP网络,通过客户端-服务器模型实现诊断工具与车辆ECU之间的通信。它定义了消息格式和规范,提供了高效、灵活和安全的诊断通信方式。 DoIP能够进行车辆发现,状态查询,路由激活(含安全认证),诊断数据收发,这些内容将在后续进行详细的展开。
DoIP的报文格式

其中payload的类型有

在DoIP中用到以下三种报文:
(1)UDP_DISCOVERY:端口类型-UDP,端口号-13400
该端口有以下两个应用场景:
被用于诊断设备发送给DoIP节点的车辆信息请求报文和DoIP节点控制报文,此时该端口在报文中被设置为目的端口。
被用于DoIP节点在没有收到请求的时候发送的UDP报文,如车辆声明报文。此时该端口同样被设置为目的端口,源端口可以为该端口,也可以由发送方动态定义。
(2)UDP_TEST_EQUIPMENT_REQUEST:端口类型-UDP,端口号-动态定义(49152-65535)
该端口由外部诊断设备在49152-65535范围内动态定义,用于诊断设备向DoIP节点发送的UDP报文,在报文中作为源端口,报文的目的端口应设置为UDP_DISCOVERY。
当DoIP节点向诊断设备发送响应的时候,报文中的目的端口应设置为UDP_TEST_EQUIPMENT_REQUEST,源端口可以为UDP_DISCOVERY,也可以有DoIP节点动态定义。
(3)TCP_DATA:端口类型-TCP,端口号-13400
该端口用于外部诊断设备和DoIP节点之间的TCP通信,如路由报文和诊断报文。当诊断设备向DoIP节点发送报文时,使用TCP_DATA作为目的端口号;当DoIP节点向诊断设备发送报文时,使用TCP_DATA作为源端口号。
我们看下DoIp Message 格式

例子:0x02 0xFD 0x0001 0x0004 0x? 0x? 0x? 0x?
1、占用1byte,对应版本信息 2012版本是0x02 ,如果是2019版本就是0x03,2019版本在前面的基础上做了加密安全连接功能以及增加了0x07错误响应码。
2、占用1byte,0x02的反码就是0xFD,0x03对应0xFC.
3、payload的类型,占用2个字节。
4、后面payload数据的长度,占用4个字节。up to 4GB,但是一次只能发1500byte。
5、紧跟payload的数据。
网络拓扑

- 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的节点。

DoIP诊断流程包括:网络连接(Network Connect)、车辆发现(vehicle discovery)、连接设立可以说是路由激活(Connect Estabishment)和诊断(Diagnostic communication)。
其中网络连接(network connection)包括Network(网络节点)、Connector(OBD-II connector 硬件接口)、Activation Line(物理线 激活线 防止干扰 13400-3 2016)和IP Address Assignment(IP地址分配 Auto-IP/DHCP/内网 static IP).
车辆发现(vehicle)包括:vehicle announcement(VIN,EID ,GID、LA和IP)和vehicle Identification(VIN,EID)。 涉及到VIN,EID ,GID、LA和IP。UDP发送,端口13400.
连接设立包括:TCP conection(三次握手 TCP socket ,ALive check)和routing activation.
交互实例

相关文章:
DoIP诊断入门
简介 DoIP(Diagnosis over Internet Protocol)是一种用于车辆诊断的网络通信协议。它基于现代互联网技术,允许通过以太网或IP网络进行车辆诊断和通信。 DoIP的背景是现代车辆中使用的电子控制单元(ECU)数量不断增加&…...
Amazon CloudFront 部署小指南(五)- 使用 Amazon 边缘技术优化游戏内资源更新发布...
内容简介 游戏内资源包括玩家的装备/弹药/材料等素材,对游戏内资源的发布和更新是游戏运营商的一个常规业务流程,使用频率会十分高,所以游戏运营商希望该流程可以做到简化和可控。针对这个需求,我们设计了 3 个架构,面…...
undefined reference to `dlopen‘ ‘SSL_library_init‘ `X509_certificate_type‘
使用Crow的时候需要注意crow依赖asio依赖OpenSSL,asio要求1.22以上版本,我使用的是1.26.0; 这个版本的asio要求OpenSSL是1.0.2,其他版本我得机器上编不过,ubuntu上默认带的OpenSSL是1.1.1; 所以我下载了OPENSSL1.2.0重…...
DHCPv6之GitHub项目Android侧验证
一、adb里面安装busybox 1、下载busybox 下载网址:Index of /downloads/binaries/1.21.1 (busybox.net),目前最新是1.21.1版本 根据项目选择busybox-armv7l ,右键另存为下载到本地目录,下载后去掉文件的后缀名,变成如…...
简单易懂的 Postman Runner 参数自增教程
目录 什么是 Postman Runner? Postman Runner 如何实现参数自增? 步骤一:设置全局参数 步骤二:将全局参数带入请求参数 步骤三:实现参数自增 资料获取方法 什么是 Postman Runner? Postman Runner 是…...
BeanFactory与Applicationcontext(1)
BeanFactory是接口,提供了IOC容器最基本的形式,给具体的IOC容器的实现提供了规范。BeanFactory是spring的“心脏”,核心容器,它也是Applicationcontext的父接口。 BeanFactory实质上并未提供过多的方法,spring容器的I…...
C++初阶之模板深化讲解
模板深化讲解 非类型模板模板的特化1.函数模板特化2.类模板特化 模板分离编译1.什么是分离编译2.模板的分离编译 模板总结 非类型模板 非类型模板(Non-Type Template)是 C 中的一种模板形式,它允许你在模板中传递除了类型以外的其他值&#x…...
Redis数据结构——整数集合
定义 整数集合是集合的实现方式之一,当一个集合只包含整数值元素时,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合的底层实现。 整数集合就是存放整数的一个数组,整数集合的结构体定义: typeof struc…...
背上大书包准备面试之CSS篇
目录 H5 新特性 css3新特性? 为什么要初始化css样式? 浏览器兼容性问题? css sprites(css精灵图)? css盒模型是什么样的? 页面中一个块元素的宽度包含了盒模型中的哪些部分?…...
linux系列基本介绍
虽然我们常说Linux操作系统,这种叫法是不正确的,严格意义上讲,Linux并不是操作系统,而是属于操作系统的一个内核,inux内核提供了操作系统的核心功能,如进程管理、内存管理、文件系统等。 Linux有很多不同的…...
vue.draggable浅尝
介绍 Vue.Draggable是一款基于Sortable.js实现的vue拖拽插件。支持移动设备、拖拽和选择文本、智能滚动,可以在不同列表间拖拽、不依赖jQuery为基础、vue 2过渡动画兼容、支持撤销操作,总之是一款非常优秀的vue拖拽组件。本篇将介绍如何搭建环境及简单的…...
Tree相关
1.树相关题目 1.1 二叉树的中序遍历(简单):递归 题目:使用中序遍历二叉树 思想:按照访问左子树——根节点——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候我们按照同样的方式遍历࿰…...
git日常操作-案例
文章目录 查看远程有那些分支 查看远程有那些分支 git ls-remote --heads origin...
cmake链接.lib库
当使用CMake编写CMakeLists.txt文件来链接其他文件夹的.lib库文件时,你需要做以下几个步骤: 设置库文件路径: 使用 link_directories() 函数设置要搜索库文件的路径。例如: link_directories(${CMAKE_SOURCE_DIR}/path/to/libra…...
SkyWalking 部署(包含ES)
SkyWalking安装 结构 首先SkyWalking主要需要oapService、webApp、Elasticsearch(可选存储)三个,接下来讲一下这三个的安装步骤,安装过程中出现了一些细小的配置错误,导致用了快两天才弄好,麻木了&#x…...
Android学习之路(2) 设置视图
一、设置视图宽高 在Android开发中,可以使用LayoutParams类来设置视图(View)的宽度和高度。LayoutParams是一个用于布局的参数类,用于指定视图在父容器中的位置和大小。 下面是设置视图宽度和高度的示例代码: …...
SIP/VoIP之常见的视频问题
除了语音通话外,视频通话也是SIP协议通话中重要的功能,在实际应用中,经常会遇到一些视频问题,如下(以h264为例) 一、 己方未显示对方视频图像 排查方法: 查看网络抓包中有没有发给已方的视频…...
docker的服务/容器缺少vim问题
背景/问题: docker的服务/容器缺少vim问题 bash: vim: command not found 在docker的mysql服务中安装Vim 1、执行apt-get update root6d8d17e320a0:/# apt-get update问题:文件下载失败 Err:1 http://security.debian.org/debian-security buster/updates InRe…...
HCIP-OpenStack
1、OpenStack概述 OpenStack是一种云操作系统,OpenStack是虚拟机、裸金属和容器的云基础架构。可控制整个数据中心的大型计算、存储和网络资源池,所有资源都通过API或Web界面进行管理。 为什么称OpenStack是云操作系统? 云一般指云计算&…...
前端:Vue.js学习
前端:Vue.js学习 1. 第一个Vue程序2. Vue指令2.1 v-if、v-else-if、v-else2.2 v-for2.3 事件绑定 v-on:2.4 v-model 数据双向绑定2.5 v-bind 绑定属性 3. Vue组件4. Vue axios异步通信5. 计算属性6. 插槽 slots7. 自定义事件内容分发 1. 第一个Vue程序 首先把vue.js拷贝到本地…...
别再只用DoHeatmap了!用pheatmap给单细胞marker基因热图加亿点细节(附完整R代码)
解锁单细胞热图高级定制:从DoHeatmap到pheatmap的工业级可视化方案 在单细胞转录组分析中,热图是展示marker基因表达模式的黄金标准工具。虽然Seurat的DoHeatmap函数提供了快速可视化的解决方案,但当我们需要发表级图表或更精细的表达模式展示…...
3步实现多平台直播:开源推流工具全攻略
3步实现多平台直播:开源推流工具全攻略 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 在直播行业蓬勃发展的今天,内容创作者面临着一个共同挑战:如何…...
【2025最新】基于SpringBoot+Vue的大型商场应急预案管理系统管理系统源码+MyBatis+MySQL
摘要 随着城市化进程的加速和商业综合体的快速发展,大型商场作为人员密集场所,其安全管理面临严峻挑战。传统应急预案管理多依赖纸质文档和人工操作,存在响应速度慢、信息更新滞后、协同效率低等问题。近年来,数字化技术在应急管理…...
OFA图像描述新手入门:无需代码基础,快速搭建图像描述AI
OFA图像描述新手入门:无需代码基础,快速搭建图像描述AI 1. 什么是OFA图像描述系统? 想象一下,你拍了一张照片,系统能自动为你写出照片里有什么、发生了什么——这就是OFA图像描述系统能做的事情。这个AI工具特别适合…...
Fish Speech-1.5中文语音惊艳案例:古诗词吟诵/方言童谣/戏曲念白生成
Fish Speech-1.5中文语音惊艳案例:古诗词吟诵/方言童谣/戏曲念白生成 你听过AI用抑扬顿挫的语调吟诵唐诗宋词吗?你听过AI用地道的方言念出童年歌谣吗?你听过AI模仿戏曲念白,字正腔圆、韵味十足吗? 今天,我…...
Claude Code 权限 / 安全审查调用流程图
Claude Code 权限 / 安全审查调用流程图 这份文档的目标不是“介绍功能”,而是帮助你 复刻 Claude Code 的权限判定链路 到你们自己的手机 Agent 里。 重点回答 4 个问题: 一个 action 从模型产生到真正执行,中间经过了哪些关卡? 哪些地方是 确定性规则,哪些地方会 请求…...
SolidWorks 扫掠实战:从零构建带倒角的方形螺旋管
1. 从零开始理解方形螺旋管建模 第一次用SolidWorks做方形螺旋管时,我盯着屏幕发呆了半小时——明明圆形螺旋管点几下就能搞定,换成方形截面怎么就报错连连?后来才发现,这种带倒角的异形螺旋管建模,关键不在于操作步骤…...
Qt QDateTime类实战:从基础操作到时区处理
1. QDateTime基础操作全解析 刚接触Qt的时间处理时,我也曾被各种时间类搞得晕头转向。直到真正用QDateTime做了几个项目后,才发现它其实是个设计得非常贴心的工具类。先来看个最简单的例子 - 获取当前时间: QDateTime now QDateTime::curren…...
在 AWS 私有环境中使用 Terraform 设置 Pypi 镜像
原文:towardsdatascience.com/set-up-a-pypi-mirror-in-an-aws-private-environment-with-terraform-f0fcc1b67cc0?sourcecollection_archive---------7-----------------------#2024-03-06 https://medium.com/florentpajot?sourcepost_page---byline--f0fcc1b67…...
Linux学习进展 计算机基本硬件结构
学习Linux系统,本质上是掌握“软件如何操控硬件”的逻辑——Linux作为开源操作系统,其内核与硬件的深度绑定的特性,决定了我们必须先理解计算机基本硬件结构,才能更清晰地明白Linux内核的调度机制、资源管理逻辑,以及后…...
