今天,我们将和大家分享一下汽车以太网中SOME/IP的概念。SOME/IP全称为Scalable Service-Oriented MiddlewarE over IP,也就是位于IP协议层以上的一种面向服务的可伸缩的中间件。听上去很拗口对不对?别急,接下来就让我们揭开它的“神秘面纱”。

首先了解SOME/IP在各种以太网通信协议中的位置,可查阅我们往期文章《汽车以太网协议知多少》,其中,包含了对OSI七层模型的简单介绍。

服务和服务接口

区别于传统CAN/LIN等总线面向信号(Signal-Oriented)的通信方式,SOME/IP用于面向服务(Service-Oriented)的通信,这也是以太网在汽车领域应用的最大优势所在。面向服务的通信传输是服务的相关信息,汽车以太网应用方面最重要的是面向服务的架构,简称为SOA(Service Oriented Architecture)。SOA的核心是服务,服务可以简单理解为是实现某种功能的函数或算法。至于面向服务通信与面向信号通信的具体区别,可查阅《面向服务通信与面向信号通信》。

服务提供者作为服务端(Server),服务消费者作为客户端(Client),服务实现是借助于远程过程调用机制(RPC),客户端和服务端通过中间件进行信息的传输,而中间件是应用层软件和底层硬件之间的软件统称。

数据路径中,服务接口(Service Interface)是描述服务与外界通信的接口。而SOME/IP作为中间件所打包的数据内容,也就是服务接口的内容。SOME/IP所对应的服务接口包含以下四种形式:

  • Method(方法):客户端发送请求,服务端回复响应;是一种有问有答的对话方式;

  • F&F Method(单向方法):客户端发送请求,服务端不需要响应;是一种只问不答的对话方式;

  • Event(事件):客户端向服务端订阅一个事件,服务端向客户端发布该事件;当该事件发生时,服务端就会自动给订阅了该事件的客户端发送相关的通知(Notification),是一种类似于生活中订阅报纸期刊的方式;即订阅之后不用询问会主动通知的对话方式;

  • Fields(字段):是服务里一系列的属性值(Attributes),这些属性值可以通过设置器(Setter)、获取器(Getter)和通知器(Notifier)进行操作,可以理解成一组参数通过Method(Setter/Getter为Method的方式)和Event(Notifier为Event的方式)的组合进行操作。

SOME/IP格式

SOME/IP协议在OSI七层网络结构中位于应用层,在AUTOSAR中位于BSW的服务层。从功能上讲,SOME/IP是一种将服务接口进行打包或解包的中间件:从应用层发送的数据(就是服务相关的信息以及前文提到的服务接口中的内容),按照SOME/IP的格式打包后,再传递到下层的TCP/IP层,再进行逐层打包和封装,最终通过物理层以比特流的形式进行传输;接收时则按照与打包相反的规则进行解包。

SOME/IP报文由消息头(Header)和数据段(Payload)组成,消息头是按照固定格式排列的有效信息,这些有效信息包括报文ID、请求ID、协议版本、接口版本以及处理之后(序列化)的服务接口信息等内容。SOME/IP报文格式如下图所示。报文ID包括Service ID和Method ID,Service ID指的是Service本身的ID值;Method ID是指服务接口中的不同内容的ID,每个服务接口中定义的所有方法、单向方法、事件等都需要设置一个ID值;Session ID是从1开始增加的循环值,用于使得Request与Response相配对;Message Type主要分为请求、请求无响应、通知、响应、错误几种类型。

SOME/IP SD

SD(Service Discovery)是服务的信息清单及管理机制,也是一种服务,主要实现服务寻址及事件订阅两种功能。SD用来对服务进行寻址时,服务提供者(Server端)通过服务发现(SD)通知其他ECU(Client端)某服务可用,并间接地通知该服务的地址(Server端地址);服务消费者(Client端)了解到某服务状态后,能够调用该服务的相关内容。SD用来事件订阅时,专门针对Event类型的接口,可以通过SD实现对Event所在的Event group进行订阅、停止订阅等操作。

SOME/IP SD报文也是一种SOME/IP报文,是在SOME/IP报文的基础上进行了扩展,增加了Entry、Option等字段;SOME/IP SD报文的ServiceID(0xFFFF)、MethodID(0x8100)、Request ID(0x0000)、ProtocolVersion(0x01)、Interface Version(0x01)、MessageType(0x02)、ReturnCode(0x00)等属性都是固定值。Entry字段可以理解为服务实例的“入口”,该入口包含服务实例以及需要订阅的事件组的信息。服务提供者和消费者通过SD中的Entry实现提供服务、发现服务,以及订阅事件组的功能,即服务提供者可以告知其他节点服务的“入口”在哪里,服务消费者也可以通过该“入口”找到自己所需要的服务;也能够实现订阅事件组、取消订阅事件组等功能。

Entry分为两种类型:面向服务(Service)的Entry和面向事件组(Eventgroup)的Entry,两种类型的Entry都是16字节大小。对于面向服务的Entry,可分为发现服务(FindService)、提供服务(OfferService)和停止提供服务(StopOfferService);对于面向Eventgroup的Entry,可分为订阅事件组(SubscribeEventgroup)、肯定应答(SubscribeEventgroupAck)、否定应答(SubscribeEventgroupNAck)和停止订阅事件组(StopSubscribeEventgroup)。Entry字段格式和Type值如下图所示:

Option字段用来传输Entry的附加信息,包括对于服务实例的IP地址、传输协议、端口号等有效信息。Option根据可变数据段内容,主要分为以下几种:

1)Configuration Option

2)Endpoint Option

3)Multicast Option

Configuration Option 包含的是字符串信息,可以用来表示主机名称、服务以及服务实例的名称等多种可以转化为字符串的信息;Endpoint Option又分为IPv4 Endpoint Option和IPv6 Endpoint Option,此类Option中会包含IP地址、传输协议(UDP或TCP)和服务端的端口号;Multicast Option分为IPv4 Multicast Option和IPv6 Multicast Option,此类Option中会包含组播IP地址、UDP协议以及组播端口号。每种类型的Option Type都有对应的Type值,Option字段格式和Type值如下图所示:

“Entry入口”和“Option选项”的基本内容摆在这里,还是不太好理解,我们再来举个形象一些的例子。“入口”中定义的是一个服务的基本信息,就像一个人的姓名(Service ID)和单位名称(Instance ID);而“选项”会有很多个,这里面每一个选项可以定义一个属性信息,比如这个人单位地址信息(e.g. IPv4 Endpoint Option)或邮箱地址(ConfigurationOption)或联系电话(Configuration Option)等内容。

如果是某一个车载智能摄像头节点,提供一个限速标志的智能检测服务,那应该如何体现呢?上电之后,该节点会主动广播发送一个“OfferService”的SD报文出去通知大家;通知的报文里,Entry上会注明该服务的ID,所在节点实例(Instance ID),所提供的服务的版本号等信息;同时Entry会附带一些Option,比如通过IPv4 Endpoint Option,告知大家该服务的Socket是多少,比如通过Configuration Option,告知大家该服务的秘钥信息。这样该节点就把服务的各种相关信息就通知给客户端了,哪个客户端需要这个服务,就会主动跟这个服务建立联系了。

SOME/IP应用

除本文提到的SOME/IP的概念与报文格式、SD的概念与格式以外,SOME/IP还有序列化、UDP报文分段、通信数据库开发、通信仿真等内容,日后再慢慢展开。

SOME/IP相关参数的设计是汽车以太网面向服务的架构(SOA)设计中的主要设计内容,在本文中介绍的服务、服务的提供者、消费者、服务接口的各种方法、事件、字段等内容,以及文中未提到的TCP/IP通信中的配置信息,都是以太网SOA设计中的主要内容,因此对SOME/IP中各种参数的理解,对于整个架构和通信设计都非常重要。

随着汽车绿色智能互联的快速发展,对汽车运行时的高灵活性、车辆内部与外部服务的可关联、服务和软件的扩展与升级等需求都提出了更高的要求,此时面向服务架构(Service Oriented Architecture)的优势也变得越来越凸显。SOME/IP作为面向服务架构的通信基础,将会得到越来越多的应用。

以上为本次分享的内容。后续我们将继续与您分享更多关于汽车以太网技术的专题介绍。

SOME/IP有那么难吗?相关推荐

  1. 看完这个,你还觉得SOME/IP测试难吗?

    从4月份直播开始到现在我们累计收集问题不下200个,于是我们专门针对童鞋们提出的这些问题做了一次分析,其中占比最高的居然是SOME/IP?但是SOME/IP真的有那么难吗?其实在怿星往期的文章中已经有 ...

  2. 从《沙丘》到《三体》,科幻IP影视化改编究竟难在哪?

    来源:中国数字科技馆 要说近一个月幻圈最热的消息是什么,非<三体>改编莫属了. 今年十月底,网飞版<三体>剧集公布了12位主演的选角结果,并宣布将由<权利的游戏>主 ...

  3. 网站流量UV是什么意思?什么是流量UV/PV/IP

    雅虎统计基础数据定义 PV(访问量): 即Page View, 即页面浏览量或点击量,用户每次刷新即被计算一次. UV(独立访客): 即Unique Visitor,访问您网站的一台电脑客户端为一个访 ...

  4. VMware Fusion DHCP方式下如何指定虚拟机IP地址

    默认情况下,vmware fusion中的虚拟机,网卡设置成dhcp(动态分配 )时,会分配一个IP地址,但这个IP通常很难记,如果我们想为某台虚拟机挑一个好记的IP地址,可以按如下步骤操作: 命令行 ...

  5. IP地址与网络上的其他系统有冲突

    原文链接: http://news.duba.net/help/ipct.shtml 金山毒霸工程师发现近期咨询IP地址与网络上其他系统有冲突的案例很多,特别分析了这一现象的原因,并给出了解决办法. ...

  6. Tcp/ip协议 详解

    文章目录 什么是 TCP/IP? TCP/IP 内部 TCP 使用固定的连接 IP 是无连接的 IP 路由器 TCP/IP TCP/IP 寻址 域名 TCP/IP 协议族 TCP/IP 邮件 什么是 ...

  7. 「小猪佩奇」:成功儿童IP背后的商业逻辑和方法论

    作者:周佳晓 全文共 5343 字 6 图,阅读需要 12 分钟 一个成功的儿童IP需要来自儿童端和家长端的双向驱动力,缺一不可. 对于儿童端,业界已经有充分的实践和探索,并摸索出成熟套路:然而对于家 ...

  8. 多线程爬取免费代理ip池 (给我爬)

    多线程爬取免费代理ip池 (给我爬) 文章目录 多线程爬取免费代理ip池 (给我爬) 安装的库 IP 隐藏 代理ip 多线程爬取 读入代理ip 写入代理ip 验证代理ip 解析网页得到代理ip 获取网 ...

  9. 网址,URL,域名,IP地址,DNS,域名解析(转载)

    一.基本常识 互联网上的所有数据都是存储在主机(服务器)上 互联网中的所有主机都拥有唯一的IP地址 互联网中任意两台主机通信都是通过IP地址来实现 上网的实质 就是获取网址对应主机上的数据并在用户主机 ...

最新文章

  1. python设置坐标轴刻度值字体大小_python 设置xlabel,ylabel 坐标轴字体大小,字体类型...
  2. 850 USB 烧录模式
  3. 2019.9.19最小生成树知识点总结
  4. axios vue 回调函数_vue中ajax请求与axios包完美处理
  5. vSphere 故障排错:针对 Virtual Machine 的故障排查
  6. CRM Online Outlook Client Configuration Wizard
  7. SSIS:错误信息总结
  8. 鼠标单击元素输出对应元素的索引号
  9. 【实习之T100开发】T100 单档程序开发,java工程师面试突击中华石杉
  10. 记一次服务器被入侵,没想到我轻松搞定了它~
  11. 【自学Python】Python类型转换
  12. 互联网如何基于4P理论做运营?
  13. Adversarial Semantic Hallucination for Domain Generalized Semantic Segmentation
  14. 小红帽学前端 | 1.3 常用 HTML 元素
  15. Opencv去除高光的算法--Highlights Removal
  16. 金蝶-增值税调整软件同步处理办法
  17. git log 命令详解
  18. 别着急学软件!先掌握科学有效的UI设计自学姿势(超全面)
  19. 道路建设 (Ver. I)
  20. IBM服务器修改时间为24小时制,产品国际化——日期和时间格式(二)

热门文章

  1. 第四篇:奇点临近,时代呼唤物联网的到来!
  2. NOI试题 (题目+答案)1.编程基础之输入输出
  3. 绝对值不等式 AcWing 104. 货仓选址
  4. (附源码)计算机毕业设计SSM幼儿园管理系统
  5. ubuntu上下左右wasd错乱
  6. cvpr2020 人脸检测与识别_古有照妖镜,今有换脸识别机,微软 CVPR 2020力作,让伪造人脸无处遁形...
  7. 初中级前端面试题(万字长文)
  8. 【C++探索之旅】开宗明义+第一部分第一课:什么是C++?
  9. Ubuntu下安装deb包命令
  10. 高通华裔工程师跳楼自杀,任职7年后遭解雇