SOME/IP协议详解[2 SOME/IP通信机制]

本文详细介绍了车载以太网SOME/IP协议的传输层协议选择,包括TCP、UDP和SOME/IP-TP,并重点讲解了服务发现机制,包括FindService、OfferService、Subscribe和SubscribeACK过程。此外,还阐述了EventGroupID在事件管理中的作用以及远程进程调用(RPC)的四种通信模式:Request/Response、Fire&Forget、NotificationEvent和Field访问。

目录

2.1 SOME/IP 传输层协议

2.2 SOME/IP-SD服务发现(Service Discovery)

2.2.1 FindService & OfferService服务查找

2.2.2 Subscribe & SubscribeACK服务订阅

2.3 远程进程调用(RPC)

2.3.1 Request/Response

2.3.1.1 规范标准

2.3.2 Fire&Forget

2.3.2.1 规范标准

2.3.3 Notification Event

2.3.3.1 规范标准

2.3.4 Field

2.3.4.1 规范标准

2.3.5 四种通信形式总结


本章探讨车载ECU需要按照何种规则来实现数据的传输,因此熟悉这部分内容将对车载以太网SOME/IP的开发与测试至关重要。

2.1 SOME/IP 传输层协议

SOME/IP 使用的传输层协议可以是TCP、UDP或SOME/IP-TP。

  • 如果传输的数据长度超过了1400字节,并且没有严苛的时间延迟要求,使用TCP传输
  • 如果有时间延迟的要求(小于100毫秒),使用UDP传输
  • 如果传输的数据长度超过1400字节,同时要求较小的延迟,可以使用SOME/IP-TP;SOME/IP-TP支持UDP之上大数据传输。

具体使用哪一种传输层协议跟具体的应用场景有关,如果以上提到的传输层协议均不能满足需求,用户还可以选择其他协议,比如1722等。

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

2.2 SOME/IP-SD服务发现(Service Discovery)

SD机制是SOME/IP实现服务信息共享的核心机制,如其全称ServiceDiscovery,它实现了服务发现的功能,主要是为了实现在车载以太网中告知客户端当前服务实例的可用性及访问方式。

要了解SD需要首先了解SOME/IP的通信架构,SOME/IP服务于分布式系统,采用服务器客户端无规则分布模式,即任何一个车内以太网节点都可能是Server或是Client,甚至是同时作为Server和Client。

服务发现分为两个过程,SOME/IP通过这四种报文来实现服务发现:

  • 一个是查找和提供服务的过程,即FindService和OfferService
  • 一个是订阅和响应的过程,即Subscribe和SubscribeACK

在通过SOME/IP协议传输数据之前,我们需要知道当前整个车载网络到底存在哪些服务,服务的可用性如何,客户端如何订阅服务端所提供的服务。

如下图5所示即为SOME/IP-SD的基本功能,展现了Client与Server之间的交互关系。

图5 SOME/IP-SD Client与Server交互关系图

由上图可知,SOME/IP 服务发现流程可以分为以下三大基本步骤:

  • Client通过发送Find Service的报文去寻找车载网络中可用的服务实例;
  •         Server接收到Client的Find Server后通过UDP发送Offer Service响应;
  • Client通过发送Subcribe Event Group去订阅相关Event;

        Server检查Client是否满足订阅条件,如果满足回复ACK,如果不满足,则回复NACK;

SOME/IP协议中,Event Group ID是一种用于标识一组相关事件的机制。

Event Group ID32位无符号整数表示,每个服务实例可以定义多个Event Group ID。一个Event Group ID通常对应于一组相关事件,例如同一服务实例上的不同状态变化事件或不同错误类型的事件。

当一个服务实例需要向其它服务实例或客户端通知事件发生时,它可以使用Event Group ID来标识这些事件。例如,当一个服务实例的状态发生变化时,它可以向其它服务实例或客户端发送一个事件通知,其中包含该状态变化事件的Event Group ID

使用Event Group ID可以将相关事件分组,并使其易于管理和监视。例如,当一个服务实例发送一个事件通知时,其它服务实例可以根据Event Group ID过滤接收到的通知,只处理他们感兴趣的事件。这可以减少不必要的网络流量和处理负担,提高系统的效率和可靠性。

此外,Event Group ID还可以用于路由事件通知。当一个服务实例发送一个事件通知时,其它服务实例可以根据Event Group ID将通知路由到正确的接收方,以确保通知被正确处理。这可以帮助服务实例和客户端更好地管理和处理事件通知,提高系统的可维护性和可扩展性。

总之,Event Group ID

评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大魔王库巴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值