以太网SOME/IP协议解读

来源:汽车电子联盟“标准的网络七层架构,SOME/IP (Scalable service-Oriented MSOME/IP (Scalable service-Oriented MiddlewarE over IP) 是车载以太网通信引入的一个概念,位于OSI 7层模型的层4之上。在以CAN总线为主的车载网络中,通信过程是面向信号的(除了诊断通信之外),这是一种根据发送者需求实现的通信过程,当发送者发现信号的值变化了,或者发送周期到了,就会发送信息,而不考虑接收者是否有需求。而SOME/IP则不同,它是在接收方有需求的时候才发送,这种方法的优点在于总线上不会出现过多不必要的数据,从而降低负载。”01—服务说明服务是SOME/IP的最核心的一个概念,属于会话层的协议。在一个服务中,定义了Server和Client两个不同角色:Server提供服务,Client调用服务。对于同一个服务,只能存在一个Server,但可以同时存在多个Client调用服务。一个Service由0~多个Event/Method/Field组成。与CAN相比,面向服务的通讯方式能够大大降低总线的负载率。在以CAN总线为主的车载网络中,通信过程是面向信号的(除了诊断通信之外),这是一种根据发送者需求实现的通信过程,当发送者发现信号的值变化了,或者发送周期到了,就会发送信息,而不考虑接收者是否有需求。而SOME/IP则不同,它是在接收方有需求的时候才发送,这种方法的优点在于总线上不会出现过多不必要的数据,从而降低负载。在车载网络中,某个ECU有时会需要调用实现在其他ECU上的个服务,这个时候它俩就分别扮演了client和server的角色,而SOME/IP就是实现这种远程服务调用的接口。1.1 Method调用或引用一个进程/函数/子程序,通常由Client发起,并由Server答复。Request是最常见的一种Method,由Client向Server请求数据;Response是Request的结果,由Server答复Client的Request。而Method Fire & Forget方式,只Client向Server发起,但Server对该请求不回复。1.2 Event一个单向的数据传输,只能是on change类型,用于Server主动向订阅(Subscribe)了相关服务的Client发布(Publish)信息。1.3 Field由以下三项内容构成:Notifier:通知,Server的Client订阅了服务后第一时间主动向其发送数据。Getter:获取,由Client向Server请求数据。Setter:设置,由Client修改Server的数据。

NOTIFICATION又分为Event和Field 两类,这两类通知都需要首先使用SOME/IP-SD(Service Discovery)来进行服务订阅,然后才能发布通知。区别在于,Event是某一时刻的快照,只是事件通知,而Field除了事件通知之外,还具有Getter和Setter的功能,即对信息进行读写的操作。SOME/IP-SD可以被当作SOME/IP的一种特殊服务,前面提到过,client可以远程调用server提供的服务,或者订阅server发布的内容,那么client是怎么知道server提供哪些服务呢,就是通过SOME/IP-SD来实现服务发现过程的。02—解析SOME/IP的格式

2.1 Message Type说明

2.2 Payload说明通常在传输数据时,为了使数据传输更可靠,要把原始数据分批传输,并且在每一批数据的头和尾都加上一定的辅助信息,比如数据量的大小、校验位等,这样就相当于给已经分批的原始数据加一些外套,这些外套起标示作用,使得原始数据不易丢失,一批数据加上“外套”就形成了传输通道的基本传输单元,叫做数据帧或数据包,而其中的原始数据就是payload。SOME/IP 数据的格式:上图是SOME/IP数据的格式,除了最下面的Payload之外都属于SOME/IP的header。SOME/IP消息由报头header和有效负载Payload组成。消息ID:服务ID和事件/方法ID的组合Length:包含从请求ID到SOME/IP消息结束的长度(以字节为单位)请求ID:允许提供者和订阅者区分同一方法、事件、getter或setter的多个并行使用协议版本:包含SOME/IP协议版本的8位字段接口版本:包含服务接口主要版本的8位字段消息类型:用于区分消息类型返回码:用于指示请求是否已成功处理。Message Type [8 Bit],它有以下几种取值:REQUEST (期待响应的请求)REQUEST_NO_RETURN(不期待响应的请求)NOTIFICATION(事件通知)RESPONSE(响应消息)ERROR(报错消息)03—SOME/IP服务发现SD由于以太网数据传输服务需要由Server和Client两个部分共同完成,因此在进行数据传输之前,需要准备一系列的工作来确认Server和Client之间是否已建立网络连接。其次,Client还要询问Server能否提供所需的服务,满足数据传输需求,并对服务的Event进行订阅。这些工作都是通过SOME/IP服务发现(Service Discovery)实现的。服务发现的报文格式与一般的SOME/IP报文相同,但是其Message ID固定为0xFFFF8100。3.1 主要功能定位服务实例    检测服务实例是否在运行(即服务实例的状态)    发布/订阅行为的管理3.2 SD报文解析

SOME/IP SD报文也是一种SOME/IP的数据报文,是在SOME/IP数据报文的前提上进行了扩展需求,增加了Entry、Option等字段;Entries用于同步服务实例的状态和发布/订阅的管理,Options用于传输Entries的附加信息。SOME/IP SD数据报文的ServiceID(0xFFFF)、MethodID(0x8100)、Request ID(0x0000)、ProtocolVersion(0x01)、Interface Version(0x01)、MessageType(0x02)、ReturnCode(0x00)等等属性都是一个固定值。3.2.1 EntryEntry字段是为服务实例的“入口”,该入口包含服务实例以及需要订阅的事件组的信息。基本上是通过Entry来实现提供服务、发现服务,以及订阅事件组的功能。

供服务用Entries

供EventGroup用Entries

报文中Type内容解释如下:

对于Offer/ StopOfferService、Subscribe/ StopSubscribe和SubscribeAck/ Nack,每一组Entries都共用了Type值,但通过TTL字段可以分辨出究竟是开始或是停止提供服务,是订阅或者取消订阅,是订阅成功应答或者订阅失败应答:当TTL = 0时,表示报文对应的服务实例失效,此时对应的Type类型分别就是停止提供服务、停止订阅事件以及订阅失败应答。3.2.2 Options

每一个Option都是有一个2字节的Length字段、1字节的Type字段和1字节的保留位开始的。Length字段指示的长度是从保留位开始的。Options的类型如下表所示:

3.3 SD状态机

不管是Server还是Client,都有同样的状态机,但是他们的状态机具有不同的行为。状态服务端行为客户端行为Down       Service不可用服务未被应用请求,则停留在该状态;收到OfferService,启动TTL计时器,此时服务若被应用请求,进入Main;Init进入条件:服务准备完毕;During:收到Find Service报文后服务端忽略此消息;退出条件:服务不可用进入Down ;INITIAL_DELAY,当定时器超时进入Repetition。进入条件:服务被请求后进入此阶段;During:等待INITIAL_DELAY时间;退出条件:如果收到OfferService,取消计时器,进入Main ;服务请求释放进入Down ;计时器超时发送第一个Find service,进入Repetition。Repetition作用:让客户端快速找到有哪些Service,During:收到某客户端的FindService,会延迟一定时间后,发送单播OfferService给服务请求端;收到SubscribeEventgroup后,发送单播Ack/Nack,启动此订阅Entry的TTL计时器;如果收到StopSubscribeEventgroup,停止此订阅Entry的TTL计时器;退出条件:如果服务不可用,离开此阶段进入Down ,并发送StopOfferService通知所有客户端。作用:重复发送Find service;退出条件:收到Offer Service,停止发送计数和计时,立即进入Main触发发送SubscribeEventgroup;服务请求被释放,进入Down ,有订阅,则发送StopSubscribeEventgroup。Main作用:周期性发OfferServie;During:收到某客户端的FindService,不影响发送计数,发送单播OfferService给服务请求端;收到SubscribeEventgroup后,发送单播Ack/Nack,启动此订阅Entry的TTL计时器;收到StopSubscribeEventgroup后,停止此订阅Entry的TTL计时器;退出条件:服务不可用,离开此阶段进入Down,并发送StopOfferService。作用:不周期发送Find Service,不必要负载;During:收到Offer Service,触发发送SubscribeEventgroup;收到StopOfferService,则停止所有计时器;退出条件:服务请求被释放,进入Down Phase;若有订阅,则发送StopSubscribeEventgroup。04—SOME/IP序列化4.1 概念序列化(Serialization)指的是将数据结构或对象依据事先定义的规则转换成二进制串的过程;反序列化(Deserialization)指的是将二进制串依据相同规则重新构建成数据结构或对象的过程。4.2 说明在AUTOSAR中是指数据在PDU中的表达形式,可以理解为来自应用层的真实数据转换成固定格式的字节序,以实现数据在网络上的传输。软件组件将数据从应用层传递到RTE层,在RTE层调用SOME/IP Transformer,执行可配置的数据序列化(Serialize)或反序列化(Deserialize)。SOME/IP Serializer将结构体形式的数据序列化为线性结构的数据;SOME/IP Deserializer将线性结构数据再反序列化为结构体形式数据。在服务端,数据经过SOME/IP Serializer序列化后,被传输到服务层的COM模块;在客户端,数据从COM模块传递到SOME/IP Deserializer反序列化后再进入RTE层。如下图参考Autosar Com过程

4.3 举例一个unit32类型数据(0x12345678)的序列化。

05—RPC远程调用机制远程调用机制包括以下几种:请求/响应(R/R)通信客户端发送一条Request消息,该消息由服务端Response。(带返回值的函数调用)

客户端向服务器调用方法,无需服务器响应消息的请求称为fire&forget。(空函数调用)

与CAN报文类似,当客户端订阅Event Group后,当发生某些特定事件时(周期更新、值发生改变或值改变了),服务器就会给客户端发送Event报文。(应用数据转换)

06—管理整个网络中服务的状态6.1 通信机制SOME/IP通过以太网提供面向服务的通讯,采用SOME/IP-Service Discovery定位服务实例,并检测服务的运行状态,同时发布订阅处理功能。

客户端收到需要的服务,会发送订阅报文,服务端给出订阅ACK后,开始发送Event。所有需要Event或NotificationEvent的客户端必须在运行时间中利用SOME/IP-SD在某个server上注册。

1.服务发现通信行为对每一个服务实例或事件组,服务发现在发送条目时必须至少包含初始等待阶段、重复阶段和主阶段。2.初始等待阶段随机等待一段时间后发送报文(发现服务和提供服务条目)。3.重复阶段服务发现实现时必须在重复阶段等待一段时间,且发送的条目数量有限制。如果发送的条目数量设置为0,则必须跳过重复阶段。在初始等待阶段之后服务实例进入主阶段。4.主阶段在进入主阶段之后,必须等待一段时间后发送第一条报文,循环发送提供服务报文。当某ECU的服务实例停止服务时,必须发送停止提供服务条目。服务端的状态机如下图所示:

客户端在Down阶段如收到提供服务条目,可内部调用服务请求;如未收到提供服务条目,则进入初始等待阶段等待一段时间后进入重复阶段发送报文,接收到提供服务条目,进入主阶段。当收到服务实例停止服务时,服务停止,仍停留在主阶段。客户端的状态机如下图所示:

6.2 SOME/IP与AUTOSAR在AUTOSAR架构中,SOME/IP-SD模块位于AUTOSAR BSW Mode Manager module(BswM)和AUTOSAR Socket Adaptor module (SoAd)之间,如图11所示。BswM模块提供了通用模式请求和服务请求之间的连接。SoAd模块则处理以太网堆栈和Sd模块之间的服务请求。通过配置SoAd中的SocketConnection表,可以接收其他ECU的Sd模块发来的单播和多播报文。

(0)

相关推荐

  • TCP/IP,http,RPC、SOA、长连接短连接

    TCP/IP 建立TCP需要三次握手才能建立(客户端发起SYN,服务端SYN ACK,客户端ACK), 断开连接则需要四次握手(客户端和服务端都可以发起,FIN-ACK-FIN-ACK). 为什么连接 ...

  • 【思唯网络】TCPIP 常见协议

    一.DHCP协议 动态主机配置协议        Client:68        Server:67      基于C/S模型运行 DHCP报文类型(UDP封装): (1)DHCP discover ...

  • 网络协议 2 - IP 地址和 MAC 地址

    了解完网络协议,我们会发现,网络通信的五层模型里,有两个很重要的概念:IP 地址和 MAC 地址. 那么 IP 地址是怎么来的,又是怎么没的?MAC 地址与 IP 地址又有什么区别? 这回答上面问题前 ...

  • 爬虫遇到 Socket,莫慌,肝就完了!

    爬虫遇到 Socket,莫慌,肝就完了!

  • 为何路由器需要DHCP服务?

    能否从专业的角度解释DHCP的必要性? 大多数交换机是没有DHCP的,但同样也能通过mac地址在多台设备之间传输数据.那么为什么路由器需要DHCP?     题主的真正想表达的是,为何交换机通过MAC ...

  • c# TCP/IP协议利用Socket的简单通信

    完全是基础,新手可以随意看看,大牛可以关闭浏览页了,哈哈. TCP/IP协议 TCP/IP是一系列网络通信协议的统称,其中最核心的两个协议是TCP和IP.TCP称为传输控制协议,IP称为互联网络协议. ...

  • TCP/IP协议中的端口

    本文所述端口都是逻辑意义上的端口,是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等. 我们这里将要介绍的就是逻辑意义上的端口. ...

  • TCP/IP协议是网络协议中的核心协议,含三次握手,四次分手

    一.网络协议 国际标准化组织(International Standard Organization,ISO)公布了开放系统互连参考模型(OSI/RM).OSI/RM是一种分层的体系结构,参考模型共有 ...

  • 太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

  • 太厉害了,终于有人能把TCP/IP协议讲的明明白白了

    从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议.实际生活当中有时也确实就是指这两种协议.然而在很多情况下,它只是利用 IP 进行通信时所必须用到的协议群的统称.具体来说 ...

  • IP协议源码分析

    IP协议 是网络的最重要部分,毫不夸张地说,正是因为有 IP协议 才有了互联网.而 IP协议 最重要的是 IP地址,IP地址 就好像我们的家庭住址一样,用于其他人方便找到我们的位置. 当然,这篇文章并 ...

  • 面试时,你是否被问到过TCP/IP协议?

    看到这句话,有没有感到很熟悉呀?相信很多人在面试的时候都被要求,很多人会觉得我们在实际开发中一般用不到这些知识,所以对这些东西不屑一顾. 但是小编认为想要成为一个完美的网工,那么对这些基础知识必须要有 ...

  • 电力IEC104规约协议解读(含源码下载)

    说明:文章大部分内容参考自网络,填写原创是因为转载只能填写一个连接 主要参考文章: https://www.cnblogs.com/meandme/p/10112380.html https://bl ...

  • 面试干货:TCP/IP 协议的经典面试知识点总结

    今天给大家推荐的是,TCP/IP协议的经典面试知识点总结,希望对大家有帮助,谢谢. 简介 我们平时经常听到的TCP/IP协议,其实是一个协议族: 只不过因为TCP.IP是其中最核心的协议,所以平时统称 ...