根据互联网中的定义, OSI模型中,由软件(进程)或者硬件(输入/输出芯片)实现的活跃部分称之为实体Entity,用于进行信息的发送或者接收。实体是子系统中的活动单元,每一层被拆分成多个实体,同一层内的通讯由不同子系统上的对等实体(Peer-Entity)来实现。
1、DoIP诊断网络架构
整个DoIP诊断网络架构由所有的Entity实体与外部的测试设备组成。有简单的外部设备点对点与车内单独某个DoIP实体连接,或是在一个复杂的分布式网络中,多台测试设备通过DoIP网关与多台车辆中的多个DoIP实体以及子网进行连接通信。
DoIP的应用场景具体有三个:
1. 售后模式 车辆的检测与维修
在维修厂里,外部的检修设备不需要使用传统ALDL口硬线连接,通过TCP/IP协议与车辆建立直接联系,并按照指令顺序将可靠请求发送给车辆DoIP实体,而后模块反馈出车辆实时的错误追溯信息。
2.产品/工厂模式 车辆ECU的模块刷新
外部刷新设备根据既定的刷新流程步骤,通过以太网或TCP/IP协议在进行安全访问及模块解锁后与车辆内部模块IP网络建立通信。车辆内部网络对外部刷新设备传输过来的Op及标定文件应支持下载以及写入操作。产品模式下,工程开发工具往往实现的是设备与模块DoIP实体点对点的通讯与刷新,但在工厂模式下,采取的则是刷新设备对整车进行的并行刷新操作。
3. 在工厂模式总装终检线工位进行检测维修
在工厂制造环节,外部检测设备会按照指定顺序,对接入IP网络的车辆进行终检工位的完整性测试。与售后模式下有所不同的是,在工厂环节,外部测试设备通常会与整车多个模块的多个DoIP实体进行连接以及并行通讯。
2、诊断连接场景
单台车与外部设备使用双绞线点对点通信
这种方式意味着在进行IP诊断时,系统不会受到来自其他车辆或者设备的干扰,通常用IP寻址或者自动配置。
通过无线网络连接单车与单一外部测试设备
在这种场景下,意味着无线网络中可能会存在多辆车或者多个设备,因此无论是车或者是设备都应具备判别机制,能在网络下识别出所需要连接的对象,并且拒绝来自其他车辆或者设备的请求信号。当然,设备与车辆本身都应具备自动接入到已存在的IP网络的能力。应用场景如维修厂。
单设备与多辆车进行无线连接
在该场景下,只有外部测试设备需要有点对多连接的能力(sockets),如在工厂里某一台产线整车刷新服务器需要同时对多台车辆进行并行刷新。
单车与多个外部设备连接,但只允许同时只建立一条通道
车辆具备了与多部设备连接的能力,对于车辆来说,需要具备区分诊断请求还是反馈的能力。而对于外部设备,则需要有判断当前车辆是否有在与其他设备进行通讯的能力。该情况会发生在工厂模式下,在某些网络重叠区域,某台设备需要对车辆进行模块的刷新,而另一台设备则需要对该车辆进行检修时。
3、DoIP之通信建立
ISO 13400-2文档详细定义了整车电子模块组件如何通过TCP/IP协议与外部刷新诊断设备建立通信连接。其中包括作为IP节点的汽车网关如何加入到现有网络中,及外部刷新诊断设备如何在网络中检测到车辆并与其内部IP组件建立有效通讯。
其中,DoIP架构模型必须实现以下特征:
- — 汽车与设备具备检测对方并加入到网络的能力
- — 汽车具有声明存在且被检测到的能力
- — 获取车辆基本状态信息 (如Power Mode状态)
- — 通信建立,如双方通信请求建立,保持,以及对网关的控制等
- — 汽车网关实现诊断设备与车辆子网组件之间的数据路由
- — 错误状态处理
DoIP Entity
DoIP实体是任意一个满足DoIP协议的host,其中包括DoIP节点及DoIP网关
DoIP Gateway
DoIP网关是在车辆网络内部,实现与本模块及所连接多个子网内ECU通讯访问的节点
DoIP Node
DoIP节点是在车辆网络内部,遵守DoIP协议,但不具备路由DoIP数据到连接子网内功能的节点
DoIP Edge Node
DoIP边缘节点是在车辆内部,与诊断口Ethernet activation line直连的节点
External Test Equipment
车辆外部设备是指存在车辆网络外部,通过DoIP协议与车辆内部子网DoIP Entity实现通讯建立的设备
In-vehicle Test Equipment
车辆内部设备与外部设备拥有同样功能,但不具备Activation硬线,车辆身份请求及DCHP服务(自动为接入网中的DoIP节点分配不同的IP地址)
针对协议定义,虽从名字上看TCP/IP协议仅包括传输控制协议(TCP)与网际协议(IP),但实际上TCP/IP是协议簇,包含了除这两种以外的用户数据报协议(UDP),文件传输(FTP)和地址解析协议(ARP)等。这里着重介绍TCP与UDP,这两者都是传输层协议,且在后续建立通讯中起到非常重要的作用。
4、DoIP中TCP原理及通信建立
TCP(Transmission Control Protocol)传输控制协议是一种面向连接的协议,即必须与对方建立可靠连接后才能进行数据交互。这个建立过程就是「三次握手」,即建立TCP连接时,需Client与Server端总共发3次包来确认连接的建立。
DoIP建立TCP通讯时,通常成对出现端口,一个用于发送,称之为远程端口(remote port);
另一个用于接收,称之为本地端口(local port)。
但一个host的发送端口相对也就是对方host的接收端口。
每个DoIP Entity需对TCP_DATA端口进行监听,TCP_DATA端口号通常为13400,以便外部设备能与节点建立通讯。
5、DoIP中UDP原理及通信建立
UDP(User Data Protocol)用户数据报协议是一种非连接,不保证可靠性的传输层协议,也就是传输数据前Client与Server不需建立连接。只需要知道对方IP地址及端口号,即能够直接发送数据包,只是不能保证是否能够到达。但相比TCP,UDP的速度更快,因此对于需要实时同步传输,但不要求可靠到达的数据,优先考虑UDP协议。
在下载数据的场景下,当要求数据精确无误时,由于UDP会出现丢数据的情况,因而就应采用更安全的TCP。但在高速网络保证下,传输数据延迟以及稳定性得以改善的情况下,若丢帧后采用应用层控制数据重传,则也能够保证UDP传输的可靠性。
DoIP场景下,通过两个UDP端口:UDP_DISCOVERY和UDP_TEST_EQUIPMENT_REQUEST
来建立通讯并进行远程数据控制,尤其需要外部设备对车辆IP节点进行广播消息请求时,须使用UDP,由于TCP机制所在,无法实现广播与多播。
过程如下,DoIP以UDP_DISCOVERY或动态定义端口来作为Source Port,向UDP_DISCOVERY广播报文数据,而外部诊断设备则始终监听UDP_DISCOVERY端口来获取消息。
当外部诊断设备需要发送数据时,同样将目标端口设置为UDP_DISCOVERY,源端口UDP_TEST_EQUIPMENT_REQUEST则是动态定义,范围为(49152~65535)。当请求发送给DoIP后,诊断设备保持对UDP_TEST_EQUIPMENT_REQUEST的监听。 DoIP反馈请求时,把目标端口设置为UDP_TEST_EQUIPMENT_REQUEST,具体实现过程参考下图:
6、诊断连接
6.1 连接状态
DoIP实体内管理着一个DoIP connection table ,用来记录和维护诊断通信的逻辑连接。上图就是这个表中的一个元素,即一个逻辑连接的状态机。上图中的方框就是连接所处的状态,[Step]是状态之间跳转时发生的事情。
[Step1] 当一个新的套接字建立,逻辑连接的状态就从“listen”跳转到“socket initialized”,同时启动一个定时器, initial inactivity timer。
[Step2] 当DoIP实体接收到tester发来的一个routing activation信息后,逻辑连接的状态就从“socket initialized”跳转到“Registered [Pending for Authentication]” ,此时 initial inactivity timer被停止,启动一个名为general inactivity timer的定时器。
[Step3] 在完成Authentication之后,逻辑连接的状态就从“Registered [Pending for Authentication]”跳转到“Registered [Pending for Confrmation]” 。
[Step4] 在完成Confrmation之后,逻辑连接的状态就从“Registered [Pending for Confrmation]”跳转到“Registered [Routing Active] ” 。
[Step5] 如果initial timer 或general inactivity timer 过期后仍没收到后续请求,或者authentication 和 confrmation 被拒绝了,又或者外部测试设备对alive check 消息没有响应,则逻辑连接进入“Finalize”状态。
[Step6]进入Finalize后,此时TCP套接字将被关闭,并重新回到“listen”状态。
6.2 建立连接和车辆发现
当DoIP实体和外部测试设备都连接到一个网络中时,它们会利用DHCP协议获得一个属于自己的IP地址。在网络中,路由器作为DHCP server,为新加入到该网络中的设备分配IP地址。在获取IP地址之后,有两种车辆发现的方法,如上图所示。一种方法是车辆主动上报自己的信息3次。如果测试设备没有收到车辆主动上报的信息,则会发送一个identification request,如果网络中有车辆的话,车辆对这个请求进行响应,测试设备便发现了被测车辆。
6.3 会话建立
在诊断仪发现车辆之后,会把车辆添加到自己的车辆列表中。当用户选择这个列表中的某辆车,如果连接建立成功,用户就可以对车辆进行诊断了。
接下来用户给汽车发出诊断信息,网关会根据信息接收对象把诊断信息转发给网络中相关的ECU,当得到ECU 的响应之后,网关再把最终的响应发送给诊断仪。当用户选择退出时,用于DoIP通信的这个套接字就被关闭了。