4、DoIP传输层协议:TCP与UDP在DoIP中的应用场景

聊到DoIP的传输层,很多人第一反应就是端口13400。嗯,没错,TCP和UDP都用这个端口。但为什么同一个端口要跑两种协议?它们各自负责什么?我刚开始接触DoIP时也困惑过。

说白了,DoIP的设计者把任务分得很清楚:UDP负责发现和轻量通信,TCP负责可靠的大数据交换。你想想看,一个诊断工程师在车间里拿着笔记本,第一件事是什么?肯定是先找到车上的ECU。这时候UDP就派上用场了。

4.1 UDP在DoIP中的应用场景

UDP在DoIP里主要干三件事:

  • 车辆发现:客户端发个广播,问「谁在车上?」
  • 车辆声明:ECU回应「我在这里,这是我的信息」
  • 诊断仪激活:确认诊断会话的建立

我个人习惯把UDP比作「敲门」——先确认门后面有人,再决定要不要进去聊。UDP报文结构很简单,没有握手、没有重传,发出去就不管了。这在车辆发现阶段特别合适,因为这时候你根本不知道目标在哪。

核心要点:UDP在DoIP中只用于控制面,不传输诊断数据。诊断数据必须走TCP。

我记得有一次在项目现场,客户抱怨说诊断仪连不上ECU。我抓了个包一看,UDP广播发出去后,ECU根本没回应。后来发现是网关配置把UDP广播给过滤了。嗯,这种坑踩过一次就记住了。

4.2 TCP在DoIP中的应用场景

TCP才是DoIP真正干活的协议。诊断请求、诊断响应、大数据传输,全走TCP。为什么?因为诊断数据不能丢,不能乱序。

TCP在DoIP里负责:

  • 诊断消息传输:UDS请求/响应
  • 大数据分包传输:比如刷写ECU固件
  • 连接管理:建立、维持、关闭诊断会话

你想想看,刷写一个ECU可能要传几MB的数据。如果走UDP,丢一个包就得整个重来,那效率太低了。TCP的三次握手、确认重传、流量控制,说白了就是为这种场景量身定做的。

实战技巧:抓包时注意TCP的窗口大小。如果窗口突然变成0,说明接收方处理不过来了。我曾经遇到过ECU的接收缓冲区太小,导致刷写速度上不去,最后调整了TCP窗口才解决。

4.3 DoIP的TCP端口与UDP端口(13400)

端口13400是IANA分配给DoIP的官方端口。TCP和UDP都用这个端口,但用途完全不同:

协议 端口 用途 可靠性
UDP 13400 车辆发现、声明、激活
TCP 13400 诊断消息传输、大数据交换

为什么用同一个端口?因为ECU只需要监听一个端口,简化了实现。客户端发UDP广播时,目标端口是13400;建立TCP连接时,目标端口也是13400。ECU根据IP头里的协议字段区分是UDP还是TCP。

注意:有些防火墙会默认屏蔽13400端口。部署DoIP系统时,一定要确认网络设备没有拦截这个端口。我曾经在客户现场排查了一整天,最后发现是交换机ACL把13400给封了。

4.4 DoIP的传输层可靠性机制

DoIP本身不提供传输层可靠性——它把这件事交给了TCP。但DoIP在应用层做了一些补充:

  • 超时重传:发送诊断请求后,如果超过一定时间没收到响应,应用层会重发
  • 序列号校验:DoIP报文头里有协议版本和负载类型,接收方会校验这些字段
  • 连接状态机:DoIP定义了完整的连接建立和关闭流程

说白了,DoIP的可靠性是分层实现的:TCP保证数据不丢不乱,DoIP保证语义正确。举个例子,TCP可能把两个诊断请求合并成一个包发出去,但DoIP的报文头能让接收方准确拆分。

我建议你在抓包时重点关注TCP的重传和重复ACK。如果看到大量重传,说明网络质量有问题。如果看到重复ACK,可能是ECU处理太慢。这些细节在诊断故障时特别有用。

避坑指南:我曾经遇到一个案例,诊断仪发请求后ECU没响应。抓包发现TCP连接正常,请求也发过去了,但ECU就是不回。后来发现是ECU的DoIP状态机卡在了某个状态,需要发送一个特定的控制报文才能恢复。嗯,这种问题光看TCP层是看不出来的,必须结合DoIP应用层分析。

4.5 本章知识体系

下面这张图总结了DoIP传输层的核心逻辑:

DoIP传输层协议架构 DoIP应用层 UDP 13400 车辆发现/声明/激活 TCP 13400 诊断消息/大数据传输 IP网络层 以太网链路层 图:DoIP传输层协议栈与端口分配

从这张图可以看得很清楚:UDP和TCP共享同一个端口13400,但分工完全不同。UDP在上层,负责轻量级的控制通信;TCP在下层,负责可靠的数据传输。两者通过IP层的协议字段区分。

好了,这一章的内容就到这里。记住一句话:UDP敲门,TCP干活。搞清楚了这一点,DoIP的传输层你就掌握了八成。

个人建议:刚开始学DoIP抓包时,先过滤UDP的13400端口,看看车辆发现的过程。然后再过滤TCP的13400端口,看看诊断会话的建立。这样分开看,思路会清晰很多。

专注资料整理