DoIP协议设计思路浅析

智能化对车载网络的通信效率要求大幅提升,CAN/LIN等传统车载通信协议已经远不能满足需求,取而代之的是车载以太网通信协议。车载以太网正逐渐取代车载网络中的传统通信协议,这种通信基础设施的更新换代,也催生了立足于车载通信网络之上的诊断协议的变化。UDS是通用诊断协议的标准描述,在CAN网络时代,UDS基于CAN协议实现,被称为UdsOnCan,而基于以太网实现的UDS,则被成为DoIP协议,即Diagnose On Ip。

DoIP协议为车辆诊断协议提供了基于ip的标准实现方式,按照网络分层的观念,我们可以认为DoIP协议是工作在TCP/IP之上的又一个应用层协议,如果我们解析一个DoIP数据报文,会发现DoIP协议正是处于TCP/IP之上,如下图所示:

展开DoIP协议,协议内容包含了DoIP版本号、版本号的逆、消息类型、UDS消息的长度、源地址及目的地址,如下图所示:

DoIP的内容与TCP极为相似,都包含源地址与目的地址,以及负载的长度(和负载内容UDS数据),因此我们可以认为DoIP之于UDS的作用,类似于TCP之于HTTP的作用,明确这一点有助于我们理解DoIP通信协议的设计特点。

TCP为了建立传输通道,需要指定源端口地址及目的端口地址,并通过消息校验码、消息长度及消息序列号等一系列手段保证传输通道的可靠性,如下图所示:

同理,DoIP协议为实现将消息从一个逻辑单元传输到另一个逻辑单元的目标,也包含了源逻辑地址(Source Address)、目标逻辑地址(Target Address)以及一个简单的头部。在协议字段的设计上,DoIP远没有TCP复杂,因此DoIP所实现的传输控制功能,也远远没有TCP协议复杂,这是可以理解的,因为我们可以将DoIP看成一个嵌套的传输层控制协议,它嵌套在TCP之上,既然TCP已经实现了IP网络层复杂的传输控制,那么留给DoIP的工作,就为数不多了,主要包含如三几个方面:

  1. 逻辑地址、网络的有效性检查;
  2. UDS诊断消息的长度检查;
  3. 检查是否造成内存溢出;

如果上面的检查全部通过,DoIP将把UDS请求消息从源逻辑地址传输至目标逻辑地址。目标ECU收到DoIP请求消息之后,会首先发送一帧ACK报文,然后才会发送实际的诊断报文,如下图所示:

对于DoIP单独回复一次ACK的设计,初学者肯定会比较好奇,为什么要这么设计呢?结合前面的分析,如果我们理解了DoIP属于UDS的传输控制层,那么我们就能参透其中的原因。因为UDS涉及到了逻辑寻址,类似与TCP协议中的寻址,因此通信中需要完成一些传输层的工作,如检查逻辑地址的合法性、payload的长度等等,没有问题则返回一帧ACK,如下图所示:

接着返回一帧带UDS报文的消息,如下图:

否则返回NCK,附带否定响应的具体原因。

DoIP这种参考TCP的设计,是一种严格的分层设计思路,将通信控制和业务数据分开传输,DoIP专门负责通信传输,而UDS相对于DoIP则属于应用层协议,专门负责诊断业务的实现。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

车联网安全杂货铺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值