点击上方蓝字谈思实验室
获取更多汽车网络安全资讯
车载以太网是指将传统的工业以太网技术应用在汽车电控领域,车载以太网也是采用标准的OSI网络七层架构。
车载以太网对应的OSI模型架构图
车载以太网架构中的上层(5-7层)协议中,我们常见的是用于诊断和软件刷新的DoIP协议和用于测量和标定的XCP协议。
其中的SOME/IP是什么协议呢?它有什么用呢?
01
SOME/IP的基本概念
SOME/IP是Scalable service-Oriented MiddlewarE over IP的缩写,表示“运行于IP之上的可扩展的面向服务的中间件”。
1.1中间件Middleware
SOME/IP的定义有点绕口,有很多修饰词,但我们要知道它最终是1个中间件Middleware。
中间件是指位于应用程序和基础软件之间的软件层,其中的基础软件主要是指操作系统、网络或数据库等。
中间件可以为不同的系统或组件的通信、集成和管理提供标准化和可重用的模块。
结合车载以太网来看,中间件是在客户机和服务器之间增加的一层软件,它主要有2个作用,1个是解决不同应用程序之间的通信,另1个就是解决不同网络之间的通信,中间件使应用程序和网络通信之间解耦,解决了应用程序对网络过分依赖的问题,使得应用程序的编写更加灵活。
SOME/IP是AutoSAR标准的一部分,具有良好的兼容性和标准化特性,可以用于不同的操作系统,比如AUTOSAR、GENIVI、OSEK,甚至可以在裸机(无操作系统)上使用。
1.2面向服务Service-oriented
SOME/IP协议是提供面向服务的通信,适合基于问/答和事件型的网络通信,通信路径的建立是在程序运行过程中建立起来的。
面向服务的通讯的基本原理是允许通信不在系统设计阶段预定义,这个与我们常用的CAN总线就有明显的区别,CAN总线是面向信号的,而信号都是在系统设计阶段预先定义好的,比如DBC。
面向信号的通讯是静态的、固定的,即当信号值变化或发送周期到达时就会发送信息,不考虑接收方是否真正需要这些信息。
而面向服务的特点是基于需求,是动态的。它是在接收方有需求时才进行数据传输,这种方式可以避免不必要的数据传输,降低了网络负载。
面向信号与面向服务
1.3可扩展的Scalable
这里的可扩展Scalable是指SOME/IP可以从小型平台扩展到大型平台。SOME/IP的设计允许服务根据需要进行扩展,这种可扩展性使得汽车软件系统能够适应不断变化的需求和技术进步,而无需大规模的重构。
02
SOME/IP的主要特性
2.1 支持事件通信event communication
事件型通信是个单向的通信,由服务提供方产生和发送,汽车中有些数据可以基于事件通信生成,比如挡位的变化。
基于事件通信的数据可以是变化时发出,也可以是周期发出。可以是单播,也可以是多播,接收方少时用单播更方便,接收方多时用多播更省带宽。
2.2 支持RPC通信
RPC是指远程过程调用(Remote Procedure Call),它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易,RPC采用的是客户机/服务器模式。
RPC通信可以是单向的,也可以是双向的,当调用方不需要知道结果,也就是不需要执行方反馈信息时,就使用单向的RPC。反之,如果需要知道结果,则必须使用双向RPC通信。
2.3支持字段通信 Field communication
字段通信中分为获得方getters、设置方setters和通知事件notification events。如果主要特性参数都保存在1个中心部件时,车辆中的其它部件就需要对这个部件中的参数进行设置和使用。
2.4 支持传输协议TCP/UDP
SOME/IP是运行在IP之上,但不是直接运行在IP网络层之上,它与IP协议之间隔着1个传输层。实际上,它是基于TCP/IP或UDP/IP来传输数据的。
当通信特性为时间严格time critical的通信时,运行在UDP之上,当时间不严格time uncritical而数据量较大时,运行在TCP之上。
2.5 其它
SOME/IP通过唯一的标识符identifiers来区分不同的服务service.这些标识符是根据汽车的不同服务制定的。
SOME/IP还支持1个服务中的不同实例,这是因为有些系统设计为1个服务带有不同的实例,有些系统设计为每个服务都对应1个实例。
SOME/IP还可以支持事件分组,支持把多个RPC方法、事件和场合并在1个服务中。
此外,通过SOME/IP-SD协议(服务发现协议)可以使得客户端能够发现服务器上可用的服务,大大简化了服务的注册和查找过程。
03
SOME/IP 的消息格式Message Format
SOME/IP消息格式也叫Serialization序列化,序列化描述了数据在协议数据单元PDU中的表示方法。PDU将作为UDP或TCP消息中的有效负载,然后在基于IP的汽车网络中传输。
SOME/IP的消息结构由报头Header和负载Payload组成,其中报头由消息ID、长度、请求ID、协议版本、接口版本、消息类型和返回码组成。
SOME/IP 消息结构
3.1 消息ID/ Message ID
消息ID有32位,可以用于标识1个应用中远程调用RPC的方法Method ,也可以用于标识1个服务的事件 Event。消息ID的分配取决于系统设计,在整车电控系统中是唯一的。
消息ID的前16位是服务Service ID,后16位是方法Method ID 。
Message ID组成
其中的Method ID用于区分服务元素,可以是methods,也可以是events。通常建议Method和Event通过最高位来区分,最高位是0时表示Method,1表示Event或Notification。
当Message ID代表Method ID时,由于最高位为0,Method ID占据低位 15 Bit,所以其范围是0x0000-0x7FFF。
当Message ID代表Event ID时,由于最高位为1,Event ID占据低位 15 Bit,所以它的起始地址是0x8000,建议的使用范围是0x8000-0x8FFF。
无论当前的Message ID表示的是Method ID ,还是 Event ID, 高位 的16 Bit 都是代表 Service ID。
3.2 长度/length
Length长度字段是32位,用于记录通信数据的字节总数。
Length
第1个字节从Length后面的Request ID/Client ID算起,截止到本消息的最后1个字节。
3.3 请求ID/ Request ID
当服务器和客户端在并行使用同一个method,getter或setter时,可以通过请求ID来区分。由于同一个method可以被多次(并行)调用,所以每个Request ID必须是唯一的,其对应的响应Response也是唯一的,这两个是成对出现的。
提供方(服务器)在产生响应消息时,会拷贝 Request ID。所以实施方(客户端)可以根据需要定义Client-IDs,而提供方并不需要预先知道 Request ID的分配或定义,因为它只需要拷贝发送过来的Request ID即可。
Request ID组成
Client ID用于区分不同的客户对象,也就是ECU内部的不同调用客户端,当ECU中有多个客户端调用同一个method时,就可以通过Clicent ID来区分这些客户端。
Session ID是用于区分不同的会话,是区分来自同一发送者的连续消息或请求的唯一标识符。Session ID无效时,数值为0x00。
Session ID有效时,他的数值范围是0x1~0xFFFF。会话ID在每次调用后会根据不同的用例递增,当数值增加到0xFFFF时,再回到0x1开始循环。
Client ID还支持在整车中唯一标识,比如将高字节定为可配置的前缀或固定的数值,用来表示诊断地址或某个特定应用的客户端标识。
3.4 Protocol version 与Interface vesion
协议版本共8位,用于标识所用的SOME/IP 报头格式,不包括有效载荷payload的格式。当SOME/IP协议升级,报头格式更改后,这个协议版本号都会递增;注意如果SOME/IP协议升级时,只是有效载荷的格式更改了,则这个版本号是不变的。
接口版本号共8位,包含了服务接口的主版本号。
协议版本与接口版本
3.5 Message Type
Message Type共8位,用来标记消息类型。
消息类型目前共分为10种类型:
10种消息类型
这里最常用的就是常规请求消息0x00,这个请求发出后,如果系统正常,会返回一个响应消息0x80,如果系统异常,会返回一个错误消息0x81。
当然也可以发送一个不需要响应的请求消息0x01。通过通知notification1个已存在的回调接口来更新数值。
消息类型中的第5位(0-7位)是TP传输标志位,当数据量很大,需要分段传输时,此位置1,此时消息类型的数据为0x20。所以消息类型的后5种类型其实是与前5种是对应的关系,比如0x00对应了0x20,0x01对应0x21,直到最后1个0x81对应了0xa1。
3.6 返回码Return Code
返回码Return Code共8位,用于表示1个请求是否被成功处理。
Return Code
MD遭受了一起严重的黑客入侵事件,黑客Intelbroker 大规模泄漏了AMD的数据。AMD当即发起了调查,在一份声明中表示:“我们正在与执法官员和第三方托管合作伙伴密切合作,调查该指控和数据的意义。”
Message Type不同,Return Code也会不同。大部分类型的返回码是E_OK(0x00),但如果是ERROR类型就不可能是 0x00,而是对应的错误编码。
响应及错误码需要参考对应的编码
3.7 有效载荷Payload
Payload有效载荷就是需要传输的参数数据,可能由事件event的数据元素或方法method的参数组成。
SOME/IP有效载荷字段的容量大小不是固定的,是可变的,这是因为它的大小实际上是取决于SOME/IP下层所使用的传输协议,也就是UDP或TCP。
如果是UDP协议,SOME/IP有效载荷在0到1400 Bytes之间,也就是最大1400字节;如果是TCP协议,由于TCP支持有效载荷的分段传输,因此会自动支持更大的容量。
04
SOME/IP 消息通信类型
根据SOME/IP的消息规范,可以总结出SOME/IP共有4种通信类型:R & R (Request & Response)、F & F (Fire & Forget)、Notification和Event。
4.1 R&R (Request & Response)
最常见的通信模式之一是请求/响应模式。通信一方的客户端发送请求消息,通信另一方的服务器给予响应。
Request & Response
4.2 F&F (Fire & Forget)
不需要响应的请求称为Fire & Forget,也就是通信一方的客户端发送 Request,另一方的服务器不需要发回响应Response 。
Fire & Forget
4.3 Notification Event
Notification描述的是一种发布-订阅 Publish-Subscribe的 通信机制,通信一方的服务器Server 端会主动推送服务给通信另一方的客户端订阅方。
在特定的情况下,服务器会发送给客户端1个事件event,比如1个更新的数值或1个事件已发生的标志。
Notification Event
Notification常用3种不同的策略发送:
Cyclic Update :按固定的时间周期发送数据的更新值,比如每100ms发送1次。
Update On Change:当数值改变时,立刻发送,比如门开信号。
Epsilon Change :只有在当前值与预测值之间的差值大于一定的 epsilon值时才会发送消息。
4.4 Fields
Fields是一些字段,每个字段都可以表示不同的状态并具有有效值,订阅字段的消费者在订阅后会立即获得字段值作为初始事件initial event。
Fields
字段Field是 Setter、Getter 与 Notification 的结合,1个Field操作至少要包含1个 Setter、Getter 或Notification 。
Notification前面已经介绍过,当客户端订阅字段时,通知程序会发送一条事件消息event message,将字段的值传输给客户端。发送方式会遵循Notification的Cyclic Update 、Update On Change 和Epsilon Change 3种不同的策略。
这里主要对Setter和Getter做下说明。
Setter实际上是1个请求/响应的调用,由 Client 发起 Request,在Request中的payload中设置需求值,并且在 Response中的payload要同步返回这个值,代表 Client向Server针对某个字段进行赋值操作。
Getter也是1个请求/响应的调用,由 Client发起Request,Request需要包含一个空的 payload,Server端收到 Request 后将该字段的值填充到Response中的payload 中。
05
小结
SOME/IP是一个运行于IP网络协议之上的面向服务的中间件,它位于应用层和基础软件之间,它的主要内容是服务发现、远程服务调用和读写服务信息。目的是优化车载网络中的数据传输和通信过程。
与传统的面向信号的CAN总线不同,SOME/IP是面向服务,是需求驱动的通信,只有在接收方有需求时才进行数据传输,避免了不必要的数据传输,可以降低网络负载。
SOME/IP允许服务根据需要进行扩展,更适应汽车软件系统不断变化的需求和技术进步。能减少网络拥塞,提高数据传输的效率和可靠性。
总之,SOME/IP协议通过引入需求驱动的通信、服务发现与管理、高灵活性与扩展性、提高网络效率和良好的兼容性与标准化等特性,提升了车载网络的性能和可靠性,从而成为现代汽车电子架构中的重要组成部分。
end
专业社群
部分入群专家来自:
新势力车企:
特斯拉、合众新能源-哪吒、理想、极氪、小米、宾理汽车、极越、零跑汽车、阿维塔汽车、智己汽车、小鹏、岚图汽车、蔚来汽车、吉祥汽车、赛力斯......
外资传统主流车企代表:
大众中国、大众酷翼、奥迪汽车、宝马、福特、戴姆勒-奔驰、通用、保时捷、沃尔沃、现代汽车、日产汽车、捷豹路虎、斯堪尼亚......
内资传统主流车企:
吉利汽车、上汽乘用车、长城汽车、上汽大众、长安汽车、北京汽车、东风汽车、广汽、比亚迪、一汽集团、一汽解放、东风商用、上汽商用......
全球领先一级供应商:
博世、大陆集团、联合汽车电子、安波福、采埃孚、科世达、舍弗勒、霍尼韦尔、大疆、日立、哈曼、华为、百度、联想、联发科、普瑞均胜、德赛西威、蜂巢转向、均联智行、武汉光庭、星纪魅族、中车集团、赢彻科技、潍柴集团、地平线、紫光同芯、字节跳动、......
二级供应商(500+以上):
Upstream、ETAS、Synopsys、NXP、TUV、上海软件中心、Deloitte、奇安信、为辰信安、云驰未来、信大捷安、信长城、泽鹿安全、纽创信安、复旦微电子、天融信、奇虎360、中汽中心、中国汽研、上海汽检、软安科技、浙江大学......
人员占比
公司类型占比
原文始发于微信公众号(谈思实验室):车载以太网为什么要用SOME/IP?
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论