4. DoIP车辆发现与连接建立
DoIP(Diagnostic over IP)诊断的第一步不是发诊断报文,而是先"找到车、连上、拿到诊断权限"。这一节围绕三个关键动作展开:车辆识别请求(Vehicle Identification Request)、车辆公告(Vehicle Announcement)与路由激活请求(Routing Activation Request)。理解它们各自跑在UDP还是TCP、携带什么参数、失败时如何判断,是后续刷写验证能否顺利进行的前提。
一、发现阶段:UDP广播找车
当诊断仪(CANoe)还不知道目标车辆的IP地址时,无法直接建立TCP连接。此时使用UDP广播,把车辆识别请求发到受限广播地址255.255.255.255,目的端口固定为13400(DoIP标准端口)。车辆收到后,通过车辆公告/识别响应单播回传自己的信息,典型字段包括:
- VIN(车辆识别号,17位)
- 逻辑地址(Logical Address),如
0x0E00表示某ECU网关 - 车辆IP地址与端口
- 进一步动作(Further Action),如
0x00表示无需中央安全认证即可继续
如果已知车辆IP,也可以跳过广播,直接向该IP的13400端口发UDP识别请求,这叫定向识别。广播方式适合"不知道车在哪"的首次发现,定向方式适合已知网段、快速复连的场景。
二、连接阶段:TCP三次握手与路由激活
拿到车辆IP后,CANoe向该IP的13400端口发起TCP连接。TCP连接建立只代表"网络通了",并不代表"允许诊断"。真正的诊断权限由路由激活决定:诊断仪通过TCP发送路由激活请求,携带激活类型(Activation Type)和源地址(Source Address)。车辆侧校验后返回路由激活响应,结果码常见有:
| 结果码 | 含义 | 常见原因 |
|---|---|---|
| 0x10 | 成功 | 激活通过,可发诊断 |
| 0x00 | 未知源地址 | 源地址未在车辆白名单 |
| 0x01 | 所有Socket已占用 | 并发连接数超限 |
| 0x02 | 源地址不匹配 | 源地址与已激活连接冲突 |
| 0x03 | 已激活 | 重复激活同一源地址 |
| 0x04 | 需要认证 | 需先完成安全认证 |
只有收到0x10,后续的诊断请求(如0x22读数据、0x31例程控制、刷写相关服务)才会被车辆接受。否则车辆会直接拒绝或丢弃诊断报文。
三、CANoe中的实际操作
在CANoe中,DoIP通信通常通过DoIP节点或诊断控制台(Diagnostic Console)配合DoIP配置完成。关键配置项包括:
- 本机IP与网卡:必须与车辆在同一网段,例如车辆
192.168.1.10,本机设为192.168.1.100,子网掩码255.255.255.0。 - 源地址(Source Address):诊断仪逻辑地址,常用
0x0E80或按项目规定,必须与车辆白名单一致。 - 激活类型:默认
0x00(默认激活),部分项目要求0x01(WWH-OBD)或0xE0(中央安全)。 - 目标地址:车辆公告返回的逻辑地址,如
0x0E00。
发送车辆识别请求时,CANoe的Trace窗口会显示UDP报文;收到公告后,再手动或自动发起TCP连接与路由激活。建议在Trace中同时打开DoIP解析,直接看到结果码,而不是只看原始字节。
四、常见故障排查
1. 收不到车辆公告。先确认本机IP是否与车辆同网段,防火墙是否拦截UDP 13400;再确认广播是否被交换机/VLAN隔离。若用定向识别,检查目标IP是否正确。
2. TCP连接失败。车辆IP可达但端口不通,可能是车辆DoIP未使能、端口被占用或路由未配置。用ping和telnet 车辆IP 13400快速判断。
3. 路由激活被拒绝。这是最常见的问题。若返回0x00,说明源地址不在车辆允许列表,需核对项目规定的诊断仪地址;若返回0x02,说明该源地址已被其他连接占用,需关闭重复连接;若返回0x04,需先完成安全认证再激活。
五、可复用的排查清单
| 检查项 | 正常表现 | 异常处理 |
|---|---|---|
| 本机IP/掩码 | 与车辆同网段 | 改网卡IP或车辆网段 |
| UDP 13400 | 能收到公告 | 查防火墙、VLAN、广播地址 |
| TCP 13400 | 三次握手成功 | 查车辆DoIP使能、端口占用 |
| 源地址 | 与白名单一致 | 按项目规定修改 |
| 激活类型 | 返回0x10 | 换0x00/0x01/0xE0重试 |
| 并发连接 | 无重复激活 | 关闭多余Socket |