DoIP技术(二)

2024-05-26 17:32
文章标签 技术 doip

本文主要是介绍DoIP技术(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文继DoIP技术(一)一文之后继续分享与DoIP技术相关的一些内容。首先来介绍一下支持ethernet及DoIP的车载网络架构。

带ethernet节点的车载网络架构示意图

上面这张图简要描述了带ethernet节点的车载网络和外部网络中的测试设备之间的关联。在车载网络中,必须有且只有一个DoIP edge node gateway,它作为汽车对外部诊断设备的唯一接口。此外,还可能存在以下几种类型的节点:

  1. 支持DoIP,同时作为gateway,在它背后还有子网络
  2. 不支持DoIP,但是支持ethernet通信
  3. 不支持ethernet,从而也就不可能支持DoIP

对于外部测试设备来说,它们必须只能和DoIP edge node gateway直接连接并通信,与车载网络中其他ECU的通信必须由DoIP edge node gateway路由。

数据链路层与物理层

根据ISO-13400的要求,DoIP通信在物理层支持100BASE-TX (100 Mbit/s Ethernet) 和10BASE-T (10 Mbit/s Ethernet) 两种制式。DoIP设备的MAC地址也符合IEEE 802.3 的要求。

传输层与网络层

ISO-13400规定,DoIP通信在传输层上必须同时支持UDP和TCP,并将UDP和TCP的使用场合进行了定义,对所使用的端口号也进行了定义。后面稍微详细说明一下。

ISO-13400规定,DoIP通信在网络层上使用IPv6协议,但是为了后向兼容的原因,也支持IPv4。此外,对于IPv4来说,还要支持地址解析协议(ARP ),对于IPv6来说,还要支持邻居发现协议(NDP) ,这两个协议是用于在只知道IP地址的情况下获取MAC地址的。

 

DoIP的数据格式

DoIP的数据格式

上图展示了DoIP的数据格式,在DoIP技术(一)中我们已经对DoIp数据的五部分进行了简要介绍,其中第五部分的数据又可以再细分为三部分

  1. 源地址,标识数据由谁发出
  2. 目的地址,标识数据由谁接收
  3. 诊断命令,即UDS或OBD中定义的具体的诊断请求或响应

在本篇中,我将对这几部分数据的取值范围进行举例说明:

DoIP数据的前两个部分分别是DoIP版本和DoIP版本逐比特取反,DoIP版本的取值范围如下:

0x00: reserved

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

0x02: DoIP ISO 13400-2:2012

0x03…0xFE: reserved by this part of ISO 13400

0xFF: default value for vehicle identifcation request messages

 

DoIP数据的第三个部分是data type,即描述数据包中的数据类型,取值范围如下图所示:

DoIP数据类型概览

上面这个表格不但定义了代表不同数据类型的值,还说明了具体的数据类型应该是通过UDP还是TCP来发,并定义了应该在哪个端口上发。

其中最常用的数据类型应该是0x8001,0x8002,0x8003了,代表的含义分别是诊断消息、诊断消息正响应和诊断消息负响应。

0x0001至0x0004用于汽车标识上报或请求,只能通过UDP报文来发送这种命令,主要用于在汽车和诊断仪进入网络之后、诊断连接建立之前的车辆发现过程。

0x0005 和0x0006标识的Routing activation request 和 response用于在socket建立之后,进行诊断通信的请求。

0x0007和0x0008用于Alive check,用于检查当前建立的诊断连接socket是否仍然在使用中,如果不再使用,则关闭socket释放资源。

 

DoIP数据的第三个部分是data length,这个很简单,就是标识后面的user data到底有多少。

DoIP数据的第五部分很简单,分别用来标识数据的发送者和接收者,以及具体的诊断数据。

下图是一个DoIP数据完整结构的举例:

DoIP数据完整结构举例

byte 0:ISO13400 版本

byte 1:ISO13400 版本逐比特取反

byte 2~3:数据类型,0x8001,表明这是一个诊断信息的数据包

byte 4~7:数据长度,在这个例子中的值是7,表示后面有7个字节的数据

byte 8~9:源地址

byte 10~11:目的地址

byte 12~13:具体的诊断命令,SID是22,表示读取,DID是0xF8 10

这个数据段作为SDU传递给下层协议,逐层封装成为完整的以太网帧发送出去。

 

总结:

这篇文章主要介绍了DoIP数据的结构,即DoIP数据各个字节位置表示什么含义。在下一篇文章中,我将对DoIP节点内部对诊断逻辑连接的管理以及DoIP通信的建立过程进行介绍。

这篇关于DoIP技术(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1005118

相关文章

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

金融业开源技术 术语

金融业开源技术  术语 1  范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时

系统架构设计师: 信息安全技术

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师: 信息安全技术前言信息安全的基本要素:信息安全的范围:安全措施的目标:访问控制技术要素:访问控制包括:等保

前端技术(七)——less 教程

一、less简介 1. less是什么? less是一种动态样式语言,属于css预处理器的范畴,它扩展了CSS语言,增加了变量、Mixin、函数等特性,使CSS 更易维护和扩展LESS 既可以在 客户端 上运行 ,也可以借助Node.js在服务端运行。 less的中文官网:https://lesscss.cn/ 2. less编译工具 koala 官网 http://koala-app.

Spring的设计⽬标——《Spring技术内幕》

读《Spring技术内幕》第二版,计文柯著。 如果我们要简要地描述Spring的设计⽬标,可以这么说,Spring为开发者提供的是⼀个⼀站式的轻量级应⽤开发框架(平台)。 作为平台,Spring抽象了我们在 许多应⽤开发中遇到的共性问题;同时,作为⼀个轻量级的应⽤开发框架,Spring和传统的J2EE开发相⽐,有其⾃⾝的特点。 通过这些⾃⾝的特点,Spring充分体现了它的设计理念:在

java线程深度解析(六)——线程池技术

http://blog.csdn.net/Daybreak1209/article/details/51382604 一种最为简单的线程创建和回收的方法: [html]  view plain copy new Thread(new Runnable(){                @Override               public voi