SOME/IP有那么难吗?
今天,我们将和大家分享一下汽车以太网中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有那么难吗?相关推荐
- 看完这个,你还觉得SOME/IP测试难吗?
从4月份直播开始到现在我们累计收集问题不下200个,于是我们专门针对童鞋们提出的这些问题做了一次分析,其中占比最高的居然是SOME/IP?但是SOME/IP真的有那么难吗?其实在怿星往期的文章中已经有 ...
- 从《沙丘》到《三体》,科幻IP影视化改编究竟难在哪?
来源:中国数字科技馆 要说近一个月幻圈最热的消息是什么,非<三体>改编莫属了. 今年十月底,网飞版<三体>剧集公布了12位主演的选角结果,并宣布将由<权利的游戏>主 ...
- 网站流量UV是什么意思?什么是流量UV/PV/IP
雅虎统计基础数据定义 PV(访问量): 即Page View, 即页面浏览量或点击量,用户每次刷新即被计算一次. UV(独立访客): 即Unique Visitor,访问您网站的一台电脑客户端为一个访 ...
- VMware Fusion DHCP方式下如何指定虚拟机IP地址
默认情况下,vmware fusion中的虚拟机,网卡设置成dhcp(动态分配 )时,会分配一个IP地址,但这个IP通常很难记,如果我们想为某台虚拟机挑一个好记的IP地址,可以按如下步骤操作: 命令行 ...
- IP地址与网络上的其他系统有冲突
原文链接: http://news.duba.net/help/ipct.shtml 金山毒霸工程师发现近期咨询IP地址与网络上其他系统有冲突的案例很多,特别分析了这一现象的原因,并给出了解决办法. ...
- Tcp/ip协议 详解
文章目录 什么是 TCP/IP? TCP/IP 内部 TCP 使用固定的连接 IP 是无连接的 IP 路由器 TCP/IP TCP/IP 寻址 域名 TCP/IP 协议族 TCP/IP 邮件 什么是 ...
- 「小猪佩奇」:成功儿童IP背后的商业逻辑和方法论
作者:周佳晓 全文共 5343 字 6 图,阅读需要 12 分钟 一个成功的儿童IP需要来自儿童端和家长端的双向驱动力,缺一不可. 对于儿童端,业界已经有充分的实践和探索,并摸索出成熟套路:然而对于家 ...
- 多线程爬取免费代理ip池 (给我爬)
多线程爬取免费代理ip池 (给我爬) 文章目录 多线程爬取免费代理ip池 (给我爬) 安装的库 IP 隐藏 代理ip 多线程爬取 读入代理ip 写入代理ip 验证代理ip 解析网页得到代理ip 获取网 ...
- 网址,URL,域名,IP地址,DNS,域名解析(转载)
一.基本常识 互联网上的所有数据都是存储在主机(服务器)上 互联网中的所有主机都拥有唯一的IP地址 互联网中任意两台主机通信都是通过IP地址来实现 上网的实质 就是获取网址对应主机上的数据并在用户主机 ...
最新文章
- python设置坐标轴刻度值字体大小_python 设置xlabel,ylabel 坐标轴字体大小,字体类型...
- 850 USB 烧录模式
- 2019.9.19最小生成树知识点总结
- axios vue 回调函数_vue中ajax请求与axios包完美处理
- vSphere 故障排错:针对 Virtual Machine 的故障排查
- CRM Online Outlook Client Configuration Wizard
- SSIS:错误信息总结
- 鼠标单击元素输出对应元素的索引号
- 【实习之T100开发】T100 单档程序开发,java工程师面试突击中华石杉
- 记一次服务器被入侵,没想到我轻松搞定了它~
- 【自学Python】Python类型转换
- 互联网如何基于4P理论做运营?
- Adversarial Semantic Hallucination for Domain Generalized Semantic Segmentation
- 小红帽学前端 | 1.3 常用 HTML 元素
- Opencv去除高光的算法--Highlights Removal
- 金蝶-增值税调整软件同步处理办法
- git log 命令详解
- 别着急学软件!先掌握科学有效的UI设计自学姿势(超全面)
- 道路建设 (Ver. I)
- IBM服务器修改时间为24小时制,产品国际化——日期和时间格式(二)
热门文章
- 第四篇:奇点临近,时代呼唤物联网的到来!
- NOI试题 (题目+答案)1.编程基础之输入输出
- 绝对值不等式 AcWing 104. 货仓选址
- (附源码)计算机毕业设计SSM幼儿园管理系统
- ubuntu上下左右wasd错乱
- cvpr2020 人脸检测与识别_古有照妖镜,今有换脸识别机,微软 CVPR 2020力作,让伪造人脸无处遁形...
- 初中级前端面试题(万字长文)
- 【C++探索之旅】开宗明义+第一部分第一课:什么是C++?
- Ubuntu下安装deb包命令
- 高通华裔工程师跳楼自杀,任职7年后遭解雇