Some/IP和DoIP有什么区别?

Some/IP和DoIP有什么区别?

参考链接:https://www.zhihu.com/question/469486990

最基本的,一个autosar标准,一个iso标准

想要知道SOME/IP和DoIP协议的区别,首先你得知道什么是SOME/IP,什么是DoIP

什么是SOME/IP协议?

SOME/IP

在CAN总线的车载网络中,通信过程是面向信号的

当ECU的信号的值发生了改变,或者发送周期到了,就会发送消息,而不考虑接收者是否需要,这样就会造成总线上出现不必要的信息,占用了带宽

而SOME/IP的出现就是为了解决这一问题,它和CAN网络发送机制不同,它是接收者有需要时才会发送,避免了无效信息对总线造成的影响

SOME/IP

“Scalable service-Oriented MiddlewarE over IP,通过网络提供面向服务的通信,不能写作Some/IP等

既然SOME/IP是一种提供服务的通信协议,我们就可以把请求服务的ECU看成是client,而提供服务的ECU就是server

SOME/IP作为一种通信协议,它也有自己的数据结构,根据官方文档

SOME/IP由Header + Payload构成,其中协议头部里的字段是:

  • Message ID

4个字节,对应用程序方法的RPC调用或识别事件,方法和事件正好对应着Message ID的两个组成部分:Service ID和Method ID

什么是RPC?

“Remote Procedure Call,A method call from one ECU to another that is transmitted using messages,使用消息从一个ECU对另一个ECU里的方法进行调用
  • Length

4个字节,它是从Request ID开始一直到Payload的结尾的字节数

  • Request ID

4个字节,它由Client ID和Session ID组成

其中Client ID是请求服务的ECU的唯一标识符,它能够让提供服务的ECU区分来自不同的客户端的SOME/IP报文

Session ID是区分来自同一发送者的消息的唯一标识符,它会随着请求/响应消息的增加而增加,如果响应Session ID和请求Session ID不匹配,则订阅者必须忽略响应

当生成响应消息时,server端会把Request ID复制到响应消息

  • Protocol Version

1个字节,SOME/IP协议版本号

  • Interface Version

1个字节,接口版本号

  • Message Type

1个字节,用于区分不同类型的消息

request(0x00)消息如果没有错误发生应该以response(0x80)响应,如果发生错误,则发送error(0x81),也可以发送没有没有响应消息的request(0x01)

notification(0x02)属于事件通知类服务,由client向server订阅服务内容,然后server会自动给client发布服务内容

notification分为两类:Event和Field,这两类都需要先使用SOME/IP-SD对服务进行订阅,这是前提,然后再用常规的SOME/IP notification类型消息发布通知内容

Event的过程是:client发SOME/IP-SD给server订阅,server告知订阅结果,server发布通知内容,server发布的方式有三种:

  • 循环发送-以固定的时间发送更新后的值
  • 更新后发送-一旦值发生改变就会发送
  • 大于特定的值-与旧值的差值达到某个条件时发送

而Field在Event的基础上,还可以对信息进行getter/setter

TP标志类型的消息和上面的一般类型逻辑相同

  • Return Code

1个字节,返回码用来表示请求是否已成功处理

传输层

SOME/IP属于应用层,它就需要依赖传输层的TCP/UDP协议,一个SOME/IP服务可以通过以下方式传达所有方法、事件和通知

至于哪种SOME/IP用TCP,哪种用UDP,可以根据SOME/IP的服务类型和TCP/UDP的特性来考虑(TCP是可靠的单播,UDP是不可靠的单播和多播),比如一个ECU需要给多个ECU发布服务内容时,就需要依赖UDP传输

SOME/IP-SD

SOME/IP是client和server对服务内容的请求和响应,但是client如何知道server有哪些服务可提供呢?常规的SOME/IP消息并不具有这样的功能,所以就有了SOME/IP-SD协议,可用于汽车网络中的服务发布/订阅

SOME/IP-SD

“Service Discovery Protocol,服务发现协议,是SOME/IP协议的一种类型,它用于:
  • 找到服务
  • 检测服务是否正在运行
  • 实现发布/订阅处理

SOME/IP可用在TCP/UDP协议上,但是SOME/IP-SD只能用在UDP上,因为SOME/IP-SD只是为了发现服务,并不需要TCP的可靠性连接等特性

SOME/IP-SD协议结构

你会发现字段Message ID、Protocol Version、Interface Version、Message Type、Return Code的值都是固定的,SOME/IP-SD的Service ID是0xFFFF,Method ID是0x8100

SOME/IP-SD有两种发现机制:

  • Find Service Entry

在服务的当前状态未知的情况下,由client向server发送请求可用的服务

  • Offer Service Entry

主动告知其他通信节点它可用的服务

什么是DoIP协议?

UDS诊断作为汽车ECU里的一个服务功能,位于应用层,它的实现需要有网络的支撑,我们把基于CAN总线实现的UDS诊断称为 DoCAN,基于Ethernet实现的UDS诊断称为 DoIP

DoIP

Diagnostic communication over Internet Protocol,我们把通过以太网协议,承载UDS数据,实现诊断通信的这种方式称为DoIP

DoIP的好处有哪些呢?

相比DoCAN中CAN网络的封闭性,DoIP由于Ethernet的互联互通,可以实现车与车、车与人的远距离诊断通信

DoIP在传输层以下的规范遵循ISO 13400,而应用层还是遵循ISO 14229不变,这样可以保证UDS诊断在不同车载网络上的可移植性

基于OSI模型的DoIP映射

ISO 13400-2规定了外部测试设备与车辆ECU之间的诊断通信要求,包括:

  • 网络层协议IP
  • 传输层协议TCP/UDP
  • 对网关的要求(网关如何集成到现有网络总)
  • 对测试设备的要求(如何发现车辆并建立通信)

支持DoIP的车辆网络架构图如下

车辆网络架构示意图

从这张图上可以看出:汽车内部必须有一个DoIP的总网关,它作为和外部的诊断设备DoIP通信的唯一接口


网络层要求

MAC层

没什么可说的,和标准的以太网物理链路层一样,都是基于IEEE 802.3

网络层

和标准以太网网络层一样,但是需要注意的一点是,DoIP在以太网IP层首先IPv6协议,同时兼容IPv4

传输层

TCP

除了遵循TCP协议的标准规范外,DoIP在TCP协议上还应遵守:

  • 支持DoIP的ECU的诊断服务创建的socket必须监听在端口号13400上,外部测试设备通过连接此端口建立连接
  • 每个支持DoIP的ECU必须支持n+1个并发的TCP socket连接,这是为了防止有多个外部测试设备同时和ECU进行诊断通信
  • 外部测试设备创建的socket应选择本地端口,本地端口即系统随机的端口

TCP连接的过程

TCP socket连接过程

UDP

UDP协议在DoIP中的作用和使用的端口号为:

车辆发现的两种方式:

  • DoIP设备启动后,通过UDP向13400端口广播发送vehicle announcement message,源端口号为13400或随机,里面包含此DoIP设备的基本信息,外部测试设备需要监听13400来接收这些信息
  • 外部测试设备通过UDP广播发送request消息,目标端口号是13400,DoIP设备监听在13400端口,接收此request并响应

DoIP Protocol

DoIP报文的结构

DoIP报文结构,侵删

DoIP Header

DoIP Header,侵删

  • 其中Inverse Protocol Version是对Protocol Version的依比特取反
  • 而Payload Type则是表示这个DoIP报文的用途

Payload Type

其中最常用的几个:

  • 0x0001和0x0004用于汽车诊断连接建立之前的车辆发现过程
  • 0x0005和0x0006用于tcp socket连接成功后的诊断连接请求与响应
  • 0x8001、0x8002、0x8003分别表示诊断消息、诊断消息正响应、诊断消息负响应
  • 0x0007和0x0008用于检查建立的诊断连接是否仍然在使用中,如果不再使用,则关闭socket

从中可以看出DoIP诊断通信前需要做的事:

  • 车辆发现,有两种方式
  • DoIP设备启动后,首先通过UDP广播的形式把一条DoIP报文(vehicle announcement message,Payload Type为0x0004)发给网络上的所有的其他节点,其中就包括诊断仪,目的端口是13400,其中这条消息携带了DoIP设备的DoIP版本、VIN、logical address等信息,这条信息会发送三次,而之前监听在13400端口的诊断仪接收到这条信息,就知道了DoIP设备的基本信息
  • 如果诊断仪没有收到,还有一种办法,就是诊断仪这边主动请求,通过UDP广播的形式,主动发一条DoIP request消息(Payload Type为0x0001),目的端口号是13400,而之前启动后就一直监听在13400的DoIP设备,接收到这条消息后,就会回复一条携带自己信息的response给诊断仪

  • 建立TCP连接
“诊断仪通过创建tcp socket,然后调用connect方法向DoIP设备发起TCP连接请求(目的ip是DoIP设备ip,目的端口号是13400),而DoIP设备在启动前已经通过创建tcp socket监听在13400端口,接收到tcp连接请求后就会完成三次握手
  • 建立诊断连接
“在TCP连接建立后,诊断仪还需要发送一条Routing activation request的DoIP报文给DoIP设备,DoIP设备收到后会回复一条Routing activation response的DoIP报文,此时诊断连接建立,双方可以诊断通信

网关

汽车网络中由于同时存在多种网络,而造成不同网络上的诊断功能无法互相通信,这时候就需要网关的作用

比如说:
对于DoCAN和DoIP,网关起到的作用就是接收、解封装、封装、发送
DoCAN报文需要发给DoIP设备,网关会先把DoCAN的CAN网络头部剥离,留下UDS数据,然后再用这个UDS数据封装一条完整的DoIP报文,发出去
DoIP报文需要发给DoCAN设备,网关会先把DoIP的所有头部剥离,留下UDS数据,然后用这个UDS数据封装一条完整的DoCAN报文,发出去

  • 7
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SOME/IP(Scalable service-Oriented MiddlewarE over IP)和DOIP(Diagnostics over Internet Protocol)是两种在汽车领域中使用的不同协议,它们有一些区别和联系。 区别: 1. 功能目的:SOME/IP是一种通信协议,用于在汽车电子控制单元(ECU)之间进行服务导向的通信。而DOIP是一种诊断协议,用于在汽车网络中进行诊断和故障排除。 2. 通信方式:SOME/IP协议基于IP网络,并使用UDP或TCP作为传输层协议。它支持点对点通信和发布/订阅模式。而DOIP协议也基于IP网络,但通常使用TCP作为传输层协议,以实现可靠的诊断通信。 3. 应用领域:SOME/IP主要用于汽车领域中的ECU之间的通信,支持各种功能交互和服务调用。而DOIP主要用于汽车诊断系统中的诊断工具与ECU之间的通信,用于读取故障码、执行诊断测试等诊断操作。 联系: 尽管SOME/IPDOIP是两种不同的协议,但它们可以在汽车系统中共同存在并相互配合使用。在某些情况下,SOME/IP协议可用于在ECU之间传输诊断数据,同时DOIP协议可用于诊断工具与ECU之间的通信。这种结合可以实现诊断数据的传输和故障排除,同时支持其他功能交互。 总之,SOME/IPDOIP是在汽车领域中使用的不同协议,SOME/IP用于服务导向的通信,而DOIP用于诊断。尽管有区别,它们可以在某些情况下相互配合使用,以实现更全面的汽车系统功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值