3. DoIP通信建立:TCP连接建立流程、UDP广播与单播、车辆声明与身份识别、连接保活机制

好,咱们进入DoIP通信建立这个环节。说实话,这是整个远程刷写和OTA升级的“敲门砖”。连接都建不起来,后面啥都别谈。我当年调试第一版DoIP协议栈时,就在这个阶段卡了整整两周——车辆声明收不到,TCP连接死活挂不上。后来发现是UDP广播端口搞错了。嗯,咱们今天就把这块彻底讲透。

3.1 TCP连接建立流程

DoIP的TCP连接,说白了就是诊断仪(Tester)和车辆(Gateway)之间的一条专用数据通道。它走的是标准的TCP三次握手,但有个关键点——端口号是固定的13400。

我个人习惯把流程拆成三步:

  1. 客户端发起SYN:诊断仪向车辆IP的13400端口发SYN包。
  2. 车辆回复SYN+ACK:车辆网关收到后,回复SYN+ACK,表示“我准备好了”。
  3. 客户端发送ACK:诊断仪再回一个ACK,连接建立。

你想想看,这跟普通TCP没啥区别对吧?但坑就在后面——DoIP要求连接建立后,客户端必须在5秒内发送一个路由激活请求(Routing Activation Request)。否则车辆会主动断开连接。我遇到过不少供应商的测试工具,就是忘了这一步,结果连接刚建好就被踢了。

关键点:TCP连接只是“管道”,路由激活才是真正的“身份认证”。

3.2 UDP广播与单播

DoIP的UDP通信,主要干两件事:车辆发现车辆声明。这里有个设计上的巧妙之处——它用了两种UDP报文:广播和单播。

UDP广播:诊断仪往网段内的广播地址(比如192.168.1.255)发一个“车辆识别请求”(Vehicle Identification Request)。所有支持DoIP的车辆都会回复。我在项目中遇到过一个问题:如果车辆和诊断仪不在同一个子网,广播就传不过去。这时候就得靠单播了。

UDP单播:诊断仪知道车辆的IP地址后,可以直接发单播的“车辆识别请求”。车辆回复时也是单播。说白了,广播是“广撒网”,单播是“精准打击”。

这里有个小技巧:实际项目中,我建议先发广播,如果没收到回复,再尝试单播。因为有些车载网络环境里,广播会被交换机过滤掉。

避坑指南:我曾经在测试中发现,某些网关对UDP广播的回复有延迟(超过2秒)。诊断仪如果超时设置太短,就会漏掉车辆。建议把超时时间设到3秒以上。

3.3 车辆声明与身份识别

车辆声明(Vehicle Announcement)是车辆主动发出的UDP广播报文。它通常在以下三种情况下触发:

  • 车辆上电初始化完成
  • 诊断仪发送了“车辆识别请求”
  • 车辆网络状态发生变化(比如从休眠唤醒)

车辆声明报文里包含什么?我列个表给你看:

字段 长度(字节) 说明
协议版本 1 当前DoIP协议版本号(如0x02)
车辆标识符(VIN) 17 车辆唯一识别码
逻辑地址 2 网关的DoIP逻辑地址
EID(实体ID) 6 通常是MAC地址
GID(组ID) 6 用于分组管理,可自定义

身份识别这块,我建议你重点关注VIN和逻辑地址的匹配。有一次我在现场调试,发现两辆车回复了相同的VIN——原来是产线刷写时VIN没更新。嗯,这种问题在售后阶段会非常头疼。

注意:车辆声明报文是UDP广播,所以同一网段内所有设备都能收到。如果有多辆车同时回复,诊断仪需要根据VIN或EID来区分。千万别把A车的刷写包发到B车上去了。

3.4 连接保活机制

连接建好了,身份也确认了,但问题来了——如果诊断仪和车辆之间长时间没有数据交互,TCP连接会不会被中间设备(比如路由器、防火墙)切断?答案是:会。

DoIP协议定义了一个保活机制(Alive Check)。具体做法是:

  • 车辆网关会定期发送Alive Check Request(UDP单播)给诊断仪。
  • 诊断仪必须在规定时间内回复Alive Check Response
  • 如果车辆连续几次没收到回复,就会认为诊断仪已离线,主动断开TCP连接。

保活间隔是多少?ISO 13400标准里建议是2秒。但我个人习惯设成3秒——太频繁会增加网络负载,太慢又可能被中间设备切断。你想想看,刷写一个大文件可能要十几分钟,中间如果因为保活超时而断开,那可就前功尽弃了。

另外,保活机制还有一个隐藏作用:检测诊断仪是否异常退出。比如诊断仪程序崩溃了,TCP连接可能还没断开(半开连接)。车辆通过保活超时就能及时发现,释放资源。

实战建议:在刷写过程中,建议诊断仪主动发送一些“空数据包”(比如UDS的TesterPresent服务),配合DoIP的保活机制一起用。双重保障,更稳妥。

好了,DoIP通信建立这块就讲到这里。说白了,TCP连接是“路”,UDP广播是“喊话”,车辆声明是“亮身份”,保活机制是“续命”。四者缺一不可。下一章咱们聊聊路由激活和诊断会话控制——那才是真正开始干活的地方。