DoIP协议基础:从零开始理解车载以太网诊断

各位同学好,我是老张。今天咱们来聊聊DoIP协议的基础知识。说实话,我刚接触DoIP那会儿也是一头雾水——ISO 13400标准那么厚一本,光看目录就够呛。但做测试这么多年,我总结出一个道理:搞懂协议,先搞懂它为什么存在

DoIP协议概述:它到底解决什么问题?

DoIP,全称是Diagnostic over Internet Protocol。说白了,就是把传统的诊断协议(比如UDS)跑在以太网上

你可能会问:为什么非要用以太网?CAN不好吗?嗯,这个问题我当年也问过师傅。答案是:带宽不够用了

传统CAN总线最高也就1Mbps,而现代汽车里,一个ECU刷写软件动不动就几十MB。你想想看,用CAN刷个固件,等半小时都算快的。但DoIP用以太网,100Mbps甚至1Gbps,刷写时间直接降到几分钟。

我在2018年参与过一个项目,客户要求OTA升级时间不超过5分钟。当时用CAN根本做不到,最后就是靠DoIP搞定的。所以你看,DoIP不是炫技,是刚需

核心要点:

  • DoIP = 诊断协议 + 以太网传输
  • 主要解决高带宽需求(刷写、大数据量诊断)
  • 兼容现有的UDS诊断服务(ISO 14229)

ISO 13400标准解读:别被厚度吓到

ISO 13400标准分了好几个部分,但咱们做测试的,重点关注这几个:

标准部分 内容 我的评价
ISO 13400-1 概述和应用场景 看看就行,了解背景
ISO 13400-2 传输层和网络层要求 核心部分,必须吃透
ISO 13400-3 基于IEEE 802.3的物理层 了解即可,测试中很少直接碰
ISO 13400-4 DoIP实体和测试用例 做自动化测试的圣经

我个人习惯是:先啃第2部分和第4部分。第2部分告诉你协议怎么工作,第4部分告诉你测试怎么设计。至于第1部分和第3部分,用到的时候再翻就行。

我记得第一次看ISO 13400-2时,被那些状态机搞得晕头转向。后来我画了个流程图,把DoIP实体的状态转换理清楚了,才豁然开朗。所以建议大家:别死读书,动手画图

DoIP在车载网络中的角色:它不是孤岛

DoIP在车载网络里扮演什么角色?我打个比方:它就像车子的"网络诊断接口"

传统诊断用CAN,诊断仪直接连到OBD接口的CAN线上。但DoIP不一样,它通过以太网连接,可以走TCP/IP协议栈。这意味着:

  • 远程诊断成为可能——通过4G/5G网络,你在办公室就能诊断千里之外的车
  • 多ECU并行诊断——以太网带宽大,可以同时跟多个ECU通信
  • 与车载其他系统融合——比如和车载娱乐系统共用以太网骨干网

但这里有个坑:DoIP不是万能的。我在一个项目里见过有人想用DoIP替代所有CAN诊断,结果发现有些老旧的ECU根本不支持以太网。所以实际项目中,DoIP和CAN诊断往往是共存的,网关负责协议转换。

实战小贴士:

做DoIP测试时,一定要搞清楚被测ECU的逻辑地址物理地址。我曾经因为搞混了这两个地址,浪费了整整一天去排查连接问题。

物理层与传输层:数据是怎么跑起来的?

物理层这块,DoIP用的是标准以太网物理层,最常见的是100BASE-TX(100Mbps)和1000BASE-T(1Gbps)。但车载环境特殊,所以衍生出了BroadR-Reach(现在叫100BASE-T1)这种单对双绞线的方案。

嗯,这里要注意:100BASE-T1和普通以太网不兼容。你拿个普通网线插上去是没用的。我刚开始做测试时就犯过这个错,还以为是设备坏了。

传输层就更关键了。DoIP在传输层主要用TCPUDP两种协议:

协议 用途 特点
TCP 诊断消息传输(路由激活、诊断请求/响应) 可靠、有序、适合大数据量
UDP 车辆发现、车辆声明、DoIP实体状态 快速、无连接、适合广播

为什么这么设计?你想想看:诊断数据不能丢,所以用TCP保证可靠性。但车辆发现呢?你总不能让诊断仪先跟每辆车建立TCP连接再问"你在不在"吧?那效率太低了。所以用UDP广播,谁在线谁应答。

我写自动化测试脚本时,最常处理的就是TCP连接的超时重传UDP广播的监听。这里分享一个经验:UDP广播的监听端口一定要绑定对,DoIP标准里用的是UDP端口13400,别搞错了。

避坑指南:

我曾经在测试DoIP车辆发现时,发现总是收不到某些ECU的响应。排查了半天,原来是ECU的UDP广播地址配置错了,发到了错误的子网。所以做测试前,一定要确认网络配置,特别是子网掩码和广播地址。

小结:DoIP协议栈的层次关系

最后,我用一个简单的层次图来总结DoIP协议栈:

+----------------------------+
|      应用层 (UDS)           |  ← 诊断服务(读故障码、刷写等)
+----------------------------+
|       DoIP协议层            |  ← 封装/解封装UDS消息
+----------------------------+
|       TCP/UDP传输层         |  ← 可靠传输/快速广播
+----------------------------+
|       IP网络层              |  ← 路由、寻址
+----------------------------+
|       以太网物理层          |  ← 100BASE-T1 / 100BASE-TX
+----------------------------+

做自动化测试时,你主要跟DoIP协议层TCP/UDP层打交道。物理层和IP层通常由操作系统和硬件处理,但理解它们有助于排查底层问题。

好了,这一章就到这里。下一章我们会深入DoIP的连接建立和车辆发现机制,到时候我会带大家写第一个DoIP自动化测试脚本。记得提前装好Python和scapy库。

有什么问题,欢迎在课程群里讨论。我是老张,咱们下章见。


公众号:蓝海资料掘金营,微信deep3321