当前应用较多的车辆通信网络总线主要有CAN、LIN、FlexRay、MOST、LVDS等,随着车载电子系统的愈加复杂,不断增加的控制器及接口数量对网络带宽的需求增大,车内控制单元和域之间彼此通信需求也增强。这意味着传统总线将渐渐难以满足信息高速传输的需求,因此引入车载以太网技术:车内电子控制单元通过以太网技术实现相互通信并形成局域网(使用单对双绞线即可实现稳定的双全工通信,且传输速率最高可达到1000Mb/s)。
2.DoIP概述
2.1DoIP简介
所谓的DoIP其实就是基于以太网的通讯协议对UDS协议的数据进行传输,即DiagnosticcommunicationoverInternetProtocol。其本身也是一种协议,规范于ISO13400标准。由于DoIP可以传输大量数据,以及响应速度快,且可以通过以太网进行远程诊断,因此DoIP逐步成为代替传统的CAN等总线方式,成为车载网络诊断的必然趋势。
DoIP在车载领域的应用首先汽车系统的整体框架要能够支持DoIP,正因为车载以太网的快速发展,相较于传统的车载系统,目前的车载系统的整体框架都会加入一层DoIP协议层,在TCP/IP之上。并且为了更好的配合OBD诊断,远程诊断,FOTA等等技术,对整体的车载架构进行了调整,利用swich将MPU,MCU,其它以太网ECU统统通过以太网进行连接,并对外网与内网进行隔离。
简单的说,DoIP能够进行车辆发现,状态查询,路由激活(含安全认证),诊断数据收发,这些内容将在后续进行详细的展开。
DoIP(DiagnosticCommunicationoverInternetProtocol,基于IP的诊断协议)主要用于建立外部测试设备与车载网络之间的诊断连接。常见的应用场景有:
1)车辆检查和维修
2)车辆/ECU软件重编程(模块刷新)
3)车辆/ECU的下线检查和维修
在诊断服务中,DoIP相对于传统的CAN诊断具有以下显著优势:
基于DoIP和DoCAN的网络通信在OSI网络模型中的大致架构如下所示,单就协议内容来讲,可以把DoIP协议看作传输层的协议:
对应的ISO标准为ISO-13400,分以下四部分:
Part2:Transportprotocolandnetworklayerservices(协议内容的具体定义)
Part4:Ethernet-basedhigh-speeddatalinkconnector(对应车辆接插件的选型)
ISO13400定义的DoIP各部分内容在OSI网络模型中的架构如下所示:
3.DoIP通信场景
3.1直接点对点连接
单台车辆与外部设备使用双绞线点对点通信,诊断仪与车辆直连后,可以诊断单车所有DoIP节点,一般用于单车故障诊断或者ECU升级刷写等功能。这种方式意味着在进行诊断通信时,系统不会受到来自其他车辆或设备的干扰。
3.2通过网络的点对点连接(通过网络连接单台车辆与单一外部测试设备)
多个车辆和多个外部测试设备被连接到同一个网络,这意味着外部测试设备应有可能识别网络中的车辆,并选择与之建立通信的特定车辆。当然,设备与车辆本身都应具备自动接入到已存在的IP网络的能力。从车辆的角度来看,这意味着车辆应该实现识别机制,并且应该能够处理或拒绝多个连接尝试,因为其他外部测试设备可能会干扰当前建立的通信。
这种通信场景通常发生在车辆连接到现有网络或无线基础设施时,其他车辆和外部测试设备(例如维修车间网络)也使用这些网络或无线基础设施(例如多台车同时在维修店进行检车、维修)。
3.3单个外部测试设备与多个车辆的网络连接
单诊断仪连接多台车辆的形式一般用于产线上生产监控及ECU刷写等。从车辆的角度来看,这个通信场景与3.2中描述的场景相同。只有外部测试设备能够支持多个连接,这种通信场景可能发生在:例如,有一个专用的flash重编程服务器,它可以同时更新多辆汽车(例如,在经销商或制造区域)。
3.4多个外部测试设备与单个车辆的网络连接
多台诊断仪通过交换机级联,诊断同一台汽车,各诊断信道互不干扰,可实现多团队同时作业,提高整体工作效率(例如某台设备需要对车辆进行刷写,而另一台设备需要对该车辆进行诊断)。在这种情况下,车辆应能够清楚地分离负责每个逻辑链路的每个外部测试设备的诊断请求和响应。而对于外部设备,则需要有判断当前车辆是否有在与其他设备进行通讯的能力。
4.1基于DoIP的网络诊断架构
图中分为车内网(Vehiclenetwork)和车外网(Externalnetwork:此部分为外部测试设备,通常为OBD诊断仪或者其他诊断客户端),车内网和车外网之间,有两组重要的线束,其中一组是用于数据传输的以太网线,另一组是用于诊断功能激活的激活线(Activationline)。
以太网线就是我们常见的四线制TX标准网线。而激活线的设计,是用于车内诊断功能的激活。
4.1.1为什么需要激活线?
4.1.2车内网络中节点类型有哪些?
1)DoIP网关节点(DoIPgateway)
车内DoIP网关节点的作用,是实现以太网到其他网络总线(如CAN、LIN)的报文路由,这样便实现了DoIP诊断与传统网络总线的兼容。多种网络总线汇聚到DoIP网关,这大大的降低了布线的复杂性,并且提高了各总线网络中ECU的诊断效率。
2)边缘节点(DoIPedgenode)
它是直接与外部诊断仪进行物理连接的节点。边缘节点可作为一个网络交换机,将车内网与车外网组成同一子网;也可以作为一个网关,将车内网与车外网进行安全隔离,屏蔽非法的网络访问和网络攻击。实际上它同样是个网关,其次他用于连接外部测试设备,在外部设备和车内子网之间路由转发消息;相较于DoIP网关多了以太网激活线的硬线。
3)一般的DoIP节点
这些节点只支持对自身的诊断,而不具备路由功能。
4)其他网络节点(Networknode)
不具备DoIP诊断功能。
4.2一些物理连接要求
4.2.1基本物理连接要求
——支持100Mbit/s为啥还要10Mbit/s的?
如果瞬间达不到100Mbit/s速率,可以降速处理。
4.2.2车辆激活线的要求
下图是车辆和测试设备之间的物理连接示意图,其中要求通信连接线为Cat-5以上,且诊断仪到汽车OBD接口的长度不超过50m。13400-3中提供了该部分车内接口电路的两种设计方案并且所用电路元器件参数都有选型参考。
4.2.3OBD接口要求
OBD接口线如下所示:
13400-4提供了OBD接口的两种布局方案供参考:
5.DoIP协议通信原理
5.1网际协议(IP)
网际协议(IP)是用于在网络中传输数据的基本协议,是一种用于在各种传输介质上进行封包交换的端到端的数据通信协议,网际协议基于数据报,是不可靠的协议。它定义了数据如何封装、寻址、传输、路由和接收。在DoIP协议中,IP作为核心传输机制,允许诊断信息在车辆网络和诊断设备之间流动。
5.2IP地址分配
在DoIP通信中,每个设备都需要一个唯一的IP地址以便识别和通信。IP地址可以通过手动配置(静态)或通过动态主机配置协议(DHCP)自动分配。静态IP地址适用于网络结构不经常变化的环境,而DHCP适用于设备经常变动的情况,如车间诊断。
在激活线激活边缘节点网关后,每个DoIP实体应同时执行基于AutoIP和DHCP分配的IP地址分配程序;
分配结果为IP地址(IPv4)+子网掩码(仅IPv4);
如果DoIP实体集成在网络架构中,则还需默认网关地址(即默认路由器的IP地址)。
5.3DoIP中TCP原理及通信的建立
TCP是一种可靠的传输层协议,它确保数据包正确无误地从源传输到目的地。在DoIP中,TCP用于需要高可靠性的诊断通信,如ECU编程。TCP通过三次握手过程建立连接,确保两端的通信是同步的,并且通过序列号和确认应答机制保证数据的顺序和完整性。
车内所有DoIP实体均应实现TCP;
TCP使用一对端口号来标识连接,TCP连接时目的端口应当是TCP_DATA;
DoIP实体应在创建socket之后监听TCP_DATA,用于与试图连接DoIP实体的外部测试设备建立通信;
外部测试设备应支持多个TCP_DATAsocket,本地端口将在创建socket时自动选择,远程端口应为TCP_DATA。
——三次握手过程建立连接
1)第一次握手
外部测试设备发送连接请求报文段,将标志位SYN置为1,并随机产生一个序列号seq=x;把这个值发送给DoIP实体,此时外部测试设备进入SYN_Sent的状态,等待确认;
2)第二次握手
DoIP实体收到外部测试设备的SYN报文段,由SYN=1ACK=0知道外部测试设备正在请求建立连接。DoIP实体把ack=x+1;同时要发送SYN请求消息,因此把标志位SYN置成1,并随机生成序列号seq=y;DoIP实体把所有信息一并放入报文段(即SYN+ack报文段)发给外部测试设备用来确认连接请求,自此DoIP实体进入了SYN_Receive状态;
3)第三次握手
外部测试设备收到(SYN+ack)报文段检查ack是否等于x+1。如果正确,把ack=y+1,并把数据包发给DoIP实体。DoIP实体会检查ack是否等于y+1,且seq是否等于x+1,如果正确就连接成功,双方都进入Established状态,完成握手,可以开始接收数据。
5.4DoIP中UDP原理及通信的建立
与TCP不同,UDP是一种无连接的协议,它允许数据包在没有事先建立连接的情况下发送。这种方法减少了开销,使得通信更快,但也牺牲了可靠性。在DoIP中,UDP用于那些不需要确认的服务,如车辆发现或基本诊断请求。
车内所有DoIP实体均应实现UDP;
当需要外部设备对车辆IP节点进行广播或多播消息请求时,由于TCP的传输机制限制无法实现,因此须使用UDP。
——用于UDP的两个端口类型
1)UDP_DISCOVERY:外部测试设备和DoIP实体都需要监听此端口,是主动发送数据时的目的端口。
2)UDP_TEST_EQUIPMENT_REQUEST:外部测试设备向DoIP实体发送报文时给自己分配的端口。
——DoIP中的端口类型总结
DoIP协议的实现基于TCP/IP,要想接收DoIP协议的报文,则需要监听一个专门分配给DoIP协议栈使用的端口号,UDP、TCP都要监听此接收端口,而发送端口是一个动态分配的随机值,代码中协议栈要对对端的发送端口进行缓存,用于回送数据。
指定了端口号,客户端和服务端可以在此端口上进行收发数据,并对该端口收到的数据是否真的是DoIP报文进行判断解析(有可能是网络攻击,或是其它应用恰好使用了该端口号)。
总之,不管是TCP还是UDP,都包含源端口号和目的端口号,在DoIP报文中用到了以下三种端口:
——通信建立过程
DoIP实体主动广播时,以UDP_DISCOVERY或UDP_TEST_EQUIPMENT_REQUEST作为源端口,目的端口UDP_DISCOVERY,而外部测试设备则监听UDP_DISCOVERY获得消息。
当外部测试设备向DoIP实体发送UDP时,设置源端口UDP_TEST_EQUIPMENT_REQUEST,目的端口UDP_DISCOVERY。当请求发送给DoIP实体后,外部测试设备保持对UDP_TEST_EQUIPMENT_REQUEST的监听。DoIP实体接收到请求后,将源端口设置为UDP_DISCOVERY或UDP_TEST_EQUIPMENT_REQUEST,目标端口设置为DP_TEST_EQUIPMENT_REQUEST,回复响应。
5.5逻辑地址(LogicalAddress)
逻辑地址用于在DoIP网络中标识不同的设备和服务。它们是独立于物理硬件的,可以是源地址(SA)或目标地址(TA)。逻辑地址使得在网络中的数据传输不依赖于物理位置,提高了网络的灵活性和可扩展性。
物理逻辑地址唯一表示一个诊断实体,包括任一DoIP实体或连接着DoIP网关的ECU;
功能逻辑地址用于将报文发送到车内一组或所有诊断实体。
6.通信协议详解
6.1报文格式——首部格式
DoIP协议支持IPv4与IPv6协议,以及对应的地址解析ARP协议、NDP协议以及控制报文协议ICMP,前面的章节均有描述了。目前车载以太网仍以IPv4协议为主,基于对网络发展的考虑,随着地址的增加,会逐渐过渡到IPv6协议。所有统一网段的DoIP都必须使用相同的IP协议版本。
由于DoIP在OSI模型中位于传输层,故DoIP报文发送前要封装ETH首部、IP首部及TCP/UDP首部,DoIP数据作为SDU层层向下传递,直至构成完整的以太网帧,通过物理层的介质发送出去。封装格式如下所示:
以一条车辆识别请求报文为例:
接下来就是对DoIP报文段的内容做详细的拆解说明,DoIP在其报文的Payload起始段添加了DoIP报头(首部),用来区分不同的DoIP报文类型,实现不同的功能,首部包括协议版本号、版本号取反、负载类型及负载长度。
协议版本(1Byte):使用的DoIP协议的版本,取值及相应版本如下所示:
协议版本取反(1Byte):主要目的是对协议版本进行校验,确保正确的DoIP格式(如协议版本为0x03,则此值为0xFC)。
负载类型(2Byte):有以下三大类负载类型。
负载长度(4Byte):携带的实际数据的长度。
从首部的负载类型可见,总共有三类报文:节点管理类、诊断类和节点状态类。下面将针对这三类报文展开详细的介绍。
6.2节点管理类报文
节点管理类报文有以下四类:
6.2.1DoIP首部否定响应报文
——报文格式:
其中否定响应码取值情况如下所示:
——DoIP首部通用处理流程:DoIP实体收到任何类型的报文时都应先调用首部处理的流程。
——举例如下:
——请求报文的格式:
——响应报文的格式:
其中32字节的Payload2的结构如下:
DoIP实体接收到车辆信息请求之后会随机延时再回复响应报文,以防止UDP报文激增;
——车辆识别请求报文处理流程:收到车辆识别请求报文的时候,DoIP实体中的处理逻辑应当按如下流程进行: