
一、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