DoIP(一)——基础概念

2023-05-16

1. DoIP概述

DoIP(Diagnostic communication over Internet Protocol)是基于车载以太网的诊断,在OSI 七层模型中属于传输层,其传输的诊断数据也是基于UDS,即DoIP是在以太网网络上传输UDS诊断数据的传输协议。DoIP带宽高,适合传输大量数据的场景,如车上的OTA软件升级。

ISO 13400-1中给出的协议体系如下:

在这里插入图片描述

2. DoIP报文格式

DoIP报文也是基于TCP或UDP,但在其报文的Payload起始段添加了DoIP报头(首部),用来区分不同的DoIP报文类型,实现不同的功能。DoIP报文的结构如下图所示:
在这里插入图片描述

3. DoIP端口

我们知道不管是TCP还是UDP,都包含源端口号和目的端口号,在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作为源端口号。

4. DoIP报头

我们把上图中DoIP的部分单独拿出来:
在这里插入图片描述

我们可以看到DoIP报文由首部和数据两部分组成,我们先来看一下首部四个参数的定义:

(1)协议版本(Protocol Version)

长度一字节,代表遵照ISO 13400 的那个版本,定义如下:

  • 0x00:Reserved
  • 0x01: DoIP ISO 13400-2:2010
  • 0x02: DoIP ISO 13400-2:2012
  • 0x03…0xFE: ISO 13400 reserved
  • 0xFF: default value for vehicle identification request messages

(2)协议版本取反(Inverse Protocol Version)

是上面协议版本字节取反后的数值,即 = 协议版本 XOR 0xFF。
例如:协议版本 = 0x02,该字节 = 0x02 ^ 0xFF = 0xFD

(3)数据类型(Payload Type)

数据类型即DoIP报文的类型,不同类型功能不同,数据部分的解析方式也不一样,我们在下一篇文章中详细介绍每一种报文类型。

(4)数据长度(Payload Length)

我们先来看最后一个参数——数据长度,就是指DoIP报文中DoIP层数据的长度,不包括DoIP报头,只是数据长度,4字节,可以为0,最大为0xFFFFFFFF(4GB)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DoIP(一)——基础概念 的相关文章

  • antd表单回显

    一 利用initialValue 适用于初始化固定的值 Form 的 initialValues 与 Item 的 initialValue 区别 xff1f 在大部分场景下 xff0c 我们总是推荐优先使用 Form 的 initialV
  • Netty远程桌面demo

    https github com leisuredong RemoteDesktop 从远端服务器获取屏幕截图展示在本地客户端窗口 xff0c 可以在服务端通过鼠标键盘控制远端机器
  • javascript:数据结构——栈

    栈结构的概念 是一种 后进先出 的数据结构 栈作用 在编程语的编译器和内存中保存变量 方法调用 栈操作 栈结构操作的方法 push xff1a 进栈 pop xff1a 出栈 peek xff1a 检查栈顶元素 isEmpty xff1a
  • javascript:数据结构——队列

    什么是对列 是一种 先进先出 的数据结构 xff08 如排队候车 xff0c 肯定是先排队的人先上车 xff09 实际用处 如打印机 队列操作 使用数组实现队列结构 使用类封装队列操作 span class token keyword co
  • javascript:数据结构——链表

    什么是链表 xff1f 链表是有序的列表 xff0c 链表是以节点的方式来存储 xff0c 是链式存储 每个节点包含item域 xff0c next指针 xff08 指向下一个节点 xff09 xff0c 即就是链表中的每一个元素都带有下一
  • JavaScript中的事件循环机制

    我们知道JavaScript语言是单线程的 xff0c 至于为啥是单线程 xff1f 假设有两个线程 xff0c 一个在页面上新增一个div xff0c 另一个线程在页面上删除div xff0c 那最终听谁的 xff1f 那JavaScri
  • 彻底搞懂递归

    什么是递归 xff1f 简单的来说 xff1a 递归就是函数自己调自己 下来我们来看几个例子让你彻底搞懂递归 一 计算n的阶乘 顾名思义阶乘就是所有小于及等于该数的正整数的积 xff08 0和1的阶乘是1 xff09 下面我们先用循环的方式
  • javascript:求最大公约数的几种方式

    什么是最大公约数 xff1f 几个数所共有的约数中最大的一个 即可以整除这几个数的最大的数 叫做这几个数的最大公约数 方法一 xff1a 计算机思维 span class token keyword function span span c
  • javascript深浅拷贝的实现和区别

    什么是深拷贝和浅拷贝 所谓拷贝就是赋值 xff0c 把a的值赋值给b 区别 最明显的区别就是 xff1a 把a的值赋值给b xff0c 然后你改变b xff0c 看a会不会有变化 xff0c 如果a变了那就是浅拷贝 xff0c 如果a没有变
  • javascript判断数据类型的几种方法

    首先先回顾一下javascript的数据类型都有哪些 xff1f 基本数据类型 xff1a number xff0c undefined xff0c boolean xff0c string xff0c null 复杂数据类型 xff1a
  • O-ComTool修复中文显示问题

    O ComTool Pro我个人认为是一款很好用的串口调试软件 xff0c hex与ascii互转 xff0c 报文格式化 xff0c 打印窗口停留 xff0c 加载发送文件 xff0c 内容复制等细节体验很棒 xff0c 但是有一个问题体
  • 类的关系(泛化, 实现,关联,聚合,组合,依赖)

    类的关系 在UML类图中 xff0c 常见的有以下几种关系 泛化 xff08 Generalization xff09 实现 xff08 Realization xff09 xff0c 关联 xff08 Association xff0c
  • XMLHttpRequest获取后台response返回的数据

    XMLHttpRequest获取后台response返回的数据 开发MVC网站的过程中遇到令人头疼的bug 在js中通过XMLHttpRequest获取后台返回的数据竟然是当前页面的Html代码 xff01 xff01 xff01 后台Co
  • npm 安装 chromedriver依赖超时,导致项目打包进程失败

    npm 安装 chromedriver依赖超时 xff0c 导致项目打包进程失败 网络上大部分解决方式是npm 安装换源 xff1a npm install chromedriver chromedriver cdnurl 61 http
  • 12个Visual Studio调试效率技巧

    在这篇文章中 xff0c 我们假定读者了解VS基本的调试知识 xff0c 如 xff1a F5 开始使用调试器运行程序F9 在当前行设置断点F10 运行到下一个断点处F5 从被调试的已停止程序恢复执行F11 步进到函数内 xff08 如果当
  • 思岚RPLIDAR A2激光雷达使用及问题解决

    思岚RPLIDAR A2激光雷达使用及问题解决1 下载源码第一步 xff0c 下载雷达源代码 xff0c 第一种方法是输入下列网址 xff1a http slamtec com rplidar a2 download xff0c 界面有雷达
  • 雷达调制

    雷达通常有两种基本类型 xff1a 连续波 xff08 CW xff09 雷达和脉冲雷达 连续波雷达发射连续波 xff0c 并且发射的同时可以接收反射回来的的回波信号 xff0c 即收发可以同时进行 脉冲雷达间歇式发射脉冲周期信号 xff0
  • 各类优化算法综述

    目录 优化算法综述 数学规划法 精确算法 xff08 exact algorithm xff09 启发式 VS 元启发式 启发式算法 元启发式算法 What is the difference between heuristics and
  • Qt与halcon联合开发实现基于形状的模板匹配

    目录 前言 一 基于形状的模板匹配是什么 xff1f 二 具体实现 1 算子介绍 2 关键代码实现 总结 前言 第一次在CSDN写博客 xff0c 准备写一个简单的形状匹配算子的用法及实现的介绍 一 基于形状的模板匹配是什么 xff1f 基
  • VMware Wrokstation Ubuntu18虚拟机遇到ip能ping通,但是浏览器却无法访问情况

    VMware Wrokstation Ubuntu18虚拟机遇到ip能ping通 xff0c 但是浏览器却无法访问情况 解决方案 xff1a 安装防火墙 xff0c 先查询端口有没有权限 xff0c 没有就添加端口外部访问权限 xff0c

随机推荐