车载以太网网络测试-27【SOME/IP-SD简述】
文章目录
- 1 摘要
- 2 SOME/IP-SD协议介绍
- 2.1 定义与作用
- 2.2 SOMEIP/SD协议通俗易懂的理解
- 2.2.1 SOMEIP/SD协议是什么?
- 2.2.2 通信流程(简化)
- 2.2.3 车载功能示例
- 2.2.4 类比理解
- 2.3 SOME/IP-SD报文结构
- 2.3.1 Flags
- 2.3.1.1 REBOOT (Bit 7)
- 2.3.1.2 UNICAST (Bit 6)
- 2.3.1.3 Explicit Initial Data Control Flag(Bit 5)
- 3 总结
1 摘要
SOME/IP-SD(Scalable service-Oriented MiddlewarE over IP - Service Discovery) 是基于IP的可扩展面向服务中间件中的服务发现协议,是汽车电子和嵌入式系统中实现动态服务发现与通信的核心组件。该协议规范详细说明了协议SOME/IP服务发现(SOME/IP-SD)的格式、消息序列和语义。本文将对SOME/IP-SD协议进行详细介绍。
2 SOME/IP-SD协议介绍
2.1 定义与作用
- 定义
(1) SOME/IP-SD 是 AUTOSAR(汽车开放系统架构) 标准的一部分,扩展自 SOME/IP 协议,专为车载网络设计。
(2) 它基于IP网络(如以太网),用于在分布式系统中动态发现、注册和订阅服务,支持服务的可用性通知和生命周期管理。
(3) 协议遵循发布/订阅模式,服务提供者(Provider)和消费者(Client)通过SD报文交互,无需静态配置。
- 核心作用
(1) 动态服务发现
- 自动探测服务:客户端无需预先知道服务提供者的地址和端口,通过SD报文动态发现服务实例。
- 服务注册/注销:服务启动时向网络广播其存在,关闭时通知其他节点释放资源。
(2) 服务状态管理
- 服务可用性通知:通过 Offer/Stop Offer 报文告知网络服务的上线/下线状态。
- 事件订阅:客户端可订阅服务状态变化(如传感器数据更新),服务端通过 Subscribe/Subscribe Ack 报文响应。
(3) 网络优化
- 多播与单播结合:初始发现阶段使用多播(如IPv4
239.255.0.0
),后续通信切到单播以减少流量。 - TTL(生存时间)控制:通过配置报文生存时间,避免无效服务占用网络资源。
(4) 负载均衡与冗余
- 多实例支持:同一服务可由多个节点提供(如冗余ECU),SD协议帮助客户端选择最优实例。
- 服务优先级:通过配置服务优先级字段实现关键服务(如刹车控制)的快速响应。
2.2 SOMEIP/SD协议通俗易懂的理解
2.2.1 SOMEIP/SD协议是什么?
-
SOMEIP(Scalable service-Oriented MiddlewarE over IP):
可以理解为车载系统的“服务语言”,它让车内不同ECU(电子控制单元,类似小电脑)之间通过以太网/IP网络互相调用服务(比如读取传感器数据、控制空调等)。 -
SD(Service Discovery):
相当于“服务广播系统”。当某个ECU提供服务(比如“我可以提供车速数据”),它会通过SD协议广播通知其他ECU;其他ECU需要服务时,也能通过SD快速找到它。
2.2.2 通信流程(简化)
-
服务上线:
- 比如车速传感器ECU启动后,通过SD协议广播:“大家好!我是车速服务,我的IP是192.168.1.10,需要车速数据可以找我!”
- 其他ECU(如仪表盘ECU)收到这条广播后,会记录下这个服务的地址。
-
服务请求:
- 仪表盘ECU需要显示车速时,通过SOMEIP协议向车速传感器ECU发送请求:“请告诉我当前车速!”
- 车速传感器回复:“当前车速是60km/h”。
-
服务下线:
- 如果车速传感器ECU关闭,它会通过SD协议广播:“我要下线了,别找我了!”
- 仪表盘ECU收到后,会停止请求车速数据(或切换备用传感器)。
2.2.3 车载功能示例
场景:自动空调调节:
-
服务注册:
- 温度传感器ECU:通过SD广播:“我能提供车内温度数据!”
- 空调控制ECU:通过SD广播:“我能调节空调温度!”
-
服务调用:
- 车机系统(中控屏)需要自动调节空调时:
- 通过SD找到温度传感器ECU,用SOMEIP请求当前温度(比如“25℃”)。
- 通过SD找到空调控制ECU,用SOMEIP发送指令:“请把温度调到22℃”。
- 空调ECU收到指令后,控制风扇和压缩机工作。
- 车机系统(中控屏)需要自动调节空调时:
-
动态变化:
- 如果用户手动关闭空调,空调控制ECU会通过SD通知其他ECU:“我现在不可用!”
- 车机系统会显示“空调已关闭”,并停止发送调节指令。
2.2.4 类比理解
为什么用SOMEIP/SD?
- 灵活性:ECU可以动态加入或退出网络(比如插拔新设备)。
- 省资源:只有需要服务的ECU才会通信,避免无效广播。
- 标准化:不同厂商的ECU只要支持SOMEIP/SD,就能互相协作。
类比理解
- SOMEIP:像手机APP调用微信支付接口——APP(仪表盘)向微信(车速传感器)请求服务(支付/车速数据)。
- SD:像外卖平台的商家列表——你需要订餐(服务)时,先看看哪些商家(ECU)在线,然后直接联系。
这样是不是更清晰了呢? 😊
2.3 SOME/IP-SD报文结构
依照惯例我们先来看下SOME/IP-SD的报文格式如下图11所示:
SOME/IP-SD(Scalable service-Oriented MiddlewarE over IP - Service Discovery)报头是用于服务发现和通信管理的消息头部结构,基于SOME/IP协议扩展而来。SOME/IP-SD报文本质上属于SOME/IP报文的一个特定类型,它在标准SOME/IP协议框架的基础上进行了功能扩展。这种扩展主要通过引入两类关键字段实现:
-
Entry字段
负责维护服务实例的状态同步,并管理服务发布与订阅的交互关系。 -
Option字段
用于承载与Entry相关的补充信息,为Entry字段的功能实现提供必要的辅助数据。
这种设计使SOME/IP-SD在保留SOME/IP核心通信能力的同时,增加了服务发现和动态管理的特性。
以下是其核心字段的详细说明:
- 报文头部 (Header)解析
字段 | 长度(字节) | 描述 |
---|---|---|
Message ID | 4 | 固定值 0xFFFF8100 |
Length | 4 | 从 Request ID 开始到报文结束的总长度 |
Request ID | 4 | 客户端标识符 (通常为 0x00000000) |
Protocol Version | 1 | 固定值 0x01 |
Interface Version | 1 | 固定值 0x01 |
Message Type | 1 | 0x02 (表示是 NOTIFICATION 消息) |
Return Code | 1 | 固定值 0x00 |
- 服务发现特定字段
字段 | 长度(字节) | 描述 |
---|---|---|
Flags | 1 | 包含重启标志和单播标志 |
Reserved | 3 | 保留字段,设置为 0 |
Entry Array Length | 4 | 入口数组的总长度 |
Entry Array | 可变 | 包含一个或多个 Entry |
Option Array Length | 4 | 选项数组的总长度 |
Option Array | 可变 | 包含一个或多个 Option |
2.3.1 Flags
SOME/IP-SD 头部应该以一个名为 Flags 的 8 位字段开始,参见下图中 Flags 的表示。
在 SOME/IP(Scalable service-Oriented MiddlewarE over IP)协议中,Service Discovery(SD) 的 Flags 字段 是消息头中的一个重要部分,用于控制或标记 SOME/IP-SD 消息的行为和属性。以下是关于 Flags 字段的详细说明:
SOME/IP-SD 消息头的 Flags 字段占 1 字节(8 bits),结构如下:
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
REBOOT | UNICAST | Explicit Initial Data Control Flag | 保留 | 保留 | 保留 | 保留 | 保留 |
2.3.1.1 REBOOT (Bit 7)
-
作用:标识服务实例是否刚刚重启。
-
取值:
1
:表示服务实例在发送此消息前经历了重启(需要重新同步状态)。0
:正常操作状态。
-
用途:用于通知客户端或服务发现代理,服务实例可能丢失了之前的订阅或状态信息,需要重新初始化。
-
工作机制:
- 初始化状态:
- 系统每次重启后,Reboot Flag 初始设置为 1
- 该状态持续保持,直到 Session ID 完成一次完整循环(从最大值绕回到 1)
- Session ID 完成绕回后,Reboot Flag 重置为 0
- 状态管理要求:
需要为以下每种通信场景维护独立的状态记录:
发送方向:
- 多播通信:维护单一计数器
- 单播通信:为每个通信对端维护独立计数器
接收方向:
- 多播通信:为每个发送方维护独立计数器
- 单播通信:为每个通信对端维护独立计数器
- 重启检测逻辑:
通过比较通信对端当前数据包(new)和上次接收数据(old)的状态值进行判断:
有效重启条件:
a) 状态变化检测:当 old.reboot=0 → new.reboot=1 时
b) 持续重启检测:当 old.reboot=1 ∧ new.reboot=1 ∧ old.session_id ≥ new.session_id 时
关键点说明:
- 该机制要求为每个通信对端关系(源地址+目标地址)维护独立的状态记录
- 发送和接收方向需要分别维护各自的计数器集合
- 设计上避免了依赖不可靠的通信环境进行状态判断
2.3.1.2 UNICAST (Bit 6)
- 作用:指示服务实例是否支持单播通信(即直接响应请求到客户端地址)。
- 取值:
1
:服务实例支持单播响应(客户端可以直接通信)。0
:服务实例仅通过组播通信(默认)。
- 用途:优化网络流量,避免不必要的组播通信。
注意:
Unicast Flag 是历史 SOME/IP 版本的遗留,仅出于兼容性原因保留。除此之外的使用非常有限。
2.3.1.3 Explicit Initial Data Control Flag(Bit 5)
-
位置:Flags 字段的第 5 位(从 0 开始计数,即第 6 个比特位)。
-
功能:
该标志用于指示服务实例是否在 服务发现报文(Service Discovery Entry) 中显式携带初始数据(Initial Data)。- 0(默认):不携带初始数据。客户端需要通过后续请求(如
Get
或Subscribe
)主动获取数据。 - 1:服务实例会在
OfferService
或SubscribeAck
报文中直接包含初始数据(通过Event
或Field
类型的 Entry 传输)。
- 0(默认):不携带初始数据。客户端需要通过后续请求(如
-
使用场景
-
服务提供方(Server)
- 在
OfferService
条目中设置该标志位,表示服务实例会直接发布初始数据(例如配置参数、状态快照等),无需客户端额外请求。 - 适用于数据量较小或需要快速同步的场景(如车辆启动时ECU状态的立即同步)。
- 在
-
客户端(Client)
- 在
Subscribe
请求中可设置该标志位,要求服务端在SubscribeAck
响应中立即返回当前数据(避免轮询或等待首次事件通知)。
- 在
- 注意事项
- 兼容性:客户端和服务端需协商支持该功能(例如通过 SOME/IP-SD 协议版本或服务合约定义)。
- 性能权衡:显式传输初始数据可能增加单个报文大小,需根据数据量和实时性需求权衡使用。
- 与
TTL
字段的关系:即使设置了该标志,数据的有效期仍受TTL
(Time To Live)限制。
相关协议行为:
-
REBOOT 标志
- 当服务实例重启后,应在首次发送的
OfferService
或FindService
消息中设置此标志。 - 客户端收到带
REBOOT
标志的消息后,可能需要重新订阅事件或恢复状态。
- 当服务实例重启后,应在首次发送的
-
UNICAST 标志
- 若服务实例支持单播,客户端可以直接通过单播地址(而非组播)发送请求(如
SubscribeEventgroup
)。 - 单播通信可减少网络负载,但需确保客户端和服务实例的地址可达。
- 若服务实例支持单播,客户端可以直接通过单播地址(而非组播)发送请求(如
Flags 之后,SOME/IP-SD 头部应该有一个名为 Reserved 的 24 位字段。
3 总结
以上介绍了SOME/IP-SD协议的定义与作用、通信流程简述以及报文的结构简单介绍,希望能对大家学习SOME/IP-SD协议有所帮助,后续还会继续介绍SOME/IP-SD协议的其他重要内容,有任何问题欢迎大家留言一起讨论、交流、进步!
相关文章:

车载以太网网络测试-27【SOME/IP-SD简述】
文章目录 1 摘要2 SOME/IP-SD协议介绍2.1 定义与作用2.2 SOMEIP/SD协议通俗易懂的理解2.2.1 SOMEIP/SD协议是什么?2.2.2 通信流程(简化)2.2.3 车载功能示例2.2.4 类比理解 2.3 SOME/IP-SD报文结构2.3.1 Flags2.3.1.1 REBOOT (Bit 7)2.3.1.2 U…...
云南安全员考试报名需要具备哪些条件?
云南安全员考试分为 A、B、C 三类,不同类别报名条件有所不同,具体如下: 安全员 A 证 年龄 18 周岁以上。具有中专及以上的文化程度、中级及以上专业技术职称(法定代表人除外)。其中分管安全生产的副总经理(…...
Android Binder线程池饥饿与TransactionException:从零到企业级解决方案(含实战代码+调试技巧)
简介 在Android系统中,Binder作为进程间通信(IPC)的核心机制,承载着大量跨进程调用任务。然而,当Binder线程池资源耗尽时,可能导致严重的线程饥饿问题,最终引发TransactionException异常,甚至导致应用崩溃或系统卡顿。本文将从零开始,系统讲解Binder线程池的工作原理…...
FFmpeg 超级详细安装与配置教程(Windows 系统)
FFmpeg 是一款功能强大的开源多媒体处理工具集,能够进行音视频的编码、解码、转码、混流、推流、滤镜、格式转换等多种操作。本教程将详细介绍如何在 Windows 系统上安装和配置 FFmpeg,并提供一些常用的使用示例,助你从入门到基本掌握。 目录…...

【Redis8】最新安装版与手动运行版
1. 下载 Redis 百度网盘 2. 解压后直接运行 redis-server.exe 3. 使用安装版 双击 install_redis_service.bat 输入安装路径(请提前创建好安装路径)后直接回车下一步直接回车即可,因为是使用配置模板文件为默认解压出来的,然后…...
PyQt 探索QMainWindow:打造专业的PyQt5主窗
在PyQt5的世界里,窗口的创建和管理是构建图形用户界面(GUI)的基础。QMainWindow作为主窗口类,为开发者提供了强大而灵活的应用程序框架。今天,就让我们一起深入了解QMainWindow的奥秘。 QMainWindow简介 QMainWindow…...

Spring Boot 集成 Elasticsearch【实战】
前言: 上一篇我们简单分享了 Elasticsearch 的一些概念性的知识,本篇我们来分享 Elasticsearch 的实际运用,也就是在 Spring Booot 项目中使用 Elasticsearch。 Elasticsearch 系列文章传送门 Elasticsearch 基础篇【ES】 Elasticsearch …...

06算法学习_58. 区间和
58. 区间和 06算法学习_58. 区间和题目描述:个人代码:学习思路:第一种写法:题解关键点: 个人学习时疑惑点解答: 06算法学习_58. 区间和 卡码网题目链接: 59. 螺旋矩阵 II 题目描述: 58. 区间…...
如何在Java中进行PDF合并
引言 Java 开发者在处理 PDF 文档时,常常需要增强文档工作流的功能。市场上有多种 Java PDF SDK 库可供选择,其中一项关键功能就是 PDF 合并。 PDF 合并在许多场景中都非常重要,例如: 1 优化用户下载流程 2 合并多份报告 3…...

Python爬虫之路(14)--playwright浏览器自动化
playwright 前言 你有没有在用 Selenium 抓网页的时候,体验过那种「明明点了按钮,它却装死不动」的痛苦?或者那种「刚加载完页面,它又刷新了」的抓狂?别担心,你不是一个人——那是 Selenium 在和现代前…...

Python开启智能之眼:OpenCV+深度学习实战
开篇导言 场景痛点 "某汽车零部件厂每月因人工质检遗漏损失300万,直到部署了基于Python的视觉检测系统..." 传统质检效率低下、成本高昂 深度学习技术带来的产业变革 Python在视觉识别领域的独特优势 一、技术架构解析 1.1 系统组成模块 图表 代码 下载 检测结…...

华为模拟器练习简单的拓扑图(3台路由器和2台pc)
1、题目要求 根据下图,pc1连通pc2,实现不同网段直接的互通 2、思路整理 2.1 根据图上的要求,为主机和路由器相连接的端口设置对应IP地址(子网掩码都是24位),路由器连接pc的那个端口,是主机pc的网关 2.2 …...

uniapp生成的app,关于跟其他设备通信的支持和限制
以下内容通过AI生成,这里做一下记录。 蓝牙 移动应用(App)通过蓝牙与其他设备通信,是通过分层协作实现的。 一、通信架构分层 应用层(App) 调用操作系统提供的蓝牙API(如Android的BluetoothA…...
如何提高独立服务器的安全性?
独立服务器相对于其它服务器来说,整体的硬件设备都是独立的同时还有着强大的服务器性能,其中CPU设备能够决定着服务器的运算能力,所以独立服务器的安全性受到企业格外的重视,严重的话会给企业造成巨大的资金损失。 那么࿰…...
机器学习第十八讲:混淆矩阵 → 诊断模型在医疗检查中的误诊情况
机器学习第十八讲:混淆矩阵 → 诊断模型在医疗检查中的误诊情况 资料取自《零基础学机器学习》。 查看总目录:学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章:DeepSeek R1本地与线上满血版部署:超详细手把手指南 混淆…...

Proxmox 主机与虚拟机全部断网问题排查与解决记录
Proxmox 主机与虚拟机全部断网问题排查与解决记录 关键词:Proxmox、e1000e、板载网卡、断网、网络桥接、Hardware Unit Hang、网卡挂死 背景 近期在使用 Proxmox VE 管理服务器时,遇到一个奇怪的问题:每当在某个虚拟机中执行某些操作&#x…...

力扣560.和为K的子数组
文章目录 题目介绍题解 题目介绍 题解 前缀和哈希表(两数之和): 代码如下: class Solution {public int subarraySum(int[] nums, int k) {int n nums.length;int[] s new int[n 1];for (int i 0; i < n; i) {s[i 1] …...

MySQL——4、表的约束
表的约束 1、空属性2、默认值3、列描述4、zerofill5、主键6、自增长7、唯一键8、外键9、综合案例 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性…...

新浪、京东golang一面整理
Mysql怎么去查询的,什么时候走索引,什么时候不走 微服务治理 我们要做到服务上下线对调用方无感知,熔断限流需要考虑,还要考虑监控和告警,链路追踪,安全,支持灰度发布、蓝绿部署、快速缩容扩容…...
Kotlin 协程 (二)
Kotlin 协程提供了丰富的功能,能够高效地处理并发和异步任务。以下是对 Kotlin 协程中常见概念和功能的详细讲解,包括它们的定义、作用、使用场景以及最佳实践。 1. 协程核心概念 1.1 CoroutineScope 定义:CoroutineScope 是协程作用域的抽…...

[250516] OpenAI 升级 ChatGPT:GPT-4.1 及 Mini 版上线!
目录 ChatGPT 迎来重要更新:GPT-4.1 和 GPT-4.1 mini 正式上线用户如何访问新模型?技术亮点与用户体验优化 ChatGPT 迎来重要更新:GPT-4.1 和 GPT-4.1 mini 正式上线 OpenAI 宣布在 ChatGPT 平台正式推出其最新的 AI 模型 GPT-4.1 和 GPT-4.…...

【完整版】基于laravel开发的开源交易所源码|BTC交易所/ETH交易所/交易所/交易平台/撮合交易引擎
功能说明 源码简介与安装环境说明: 开源交易所,基于laravel开发的交易所 | BTC交易所 | ETH交易所 | 交易所 | 交易平台 | 撮合交易引擎。本项目有完整的撮合交易引擎源码、后台管理(后端前端)、前台(交易页面、活动页…...

Android Framework学习七:Handler、Looper、Message
文章目录 简介LooperMessageMessageQueueHandlerFramework学习系列文章 简介 Looper当做一台传送装置,MessageQueue是传送带,传送带上放的是Message,Handler用于发送Message分发与接收处理。 Looper frameworks/base/core/java/android/app…...

MyBatis:简化数据库操作的持久层框架
1、什么是Mybatis? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由 apachesoftwarefoundation 迁移到了google code,由谷歌托管,并且改名为MyBatis 。 2013年11月迁移到Github。 iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框…...

【001】RenPy打包安卓apk 流程源码级别分析
1. 入口在下图 2. SDK版本及代码入口 (renpy-8.3.7-sdk) 由于SDK一直在升级,本文采用 标题中的版本进行分析,整体逻辑变化不太大。 实际执行逻辑是调用的rapt 2.1 点击按钮实际执行逻辑 def AndroidIfState(state, needed, acti…...

物理信息神经网络(PINNs)在悬臂梁分析中的应用研究
一、引言 物理信息神经网络(Physics-Informed Neural Networks, PINNs)是近年来兴起的一种结合深度学习与传统物理建模的创新方法。本文将探讨PINNs在悬臂梁力学分析中的应用,展示如何利用这一技术解决工程力学中的经典问题。 二、PINNs基本原理 PINNs的核心思想是…...

论文浅尝 | HOLMES:面向大语言模型多跳问答的超关系知识图谱方法(ACL2024)
笔记整理:李晓彤,浙江大学硕士,研究方向为大语言模型 论文链接:https://arxiv.org/pdf/2406.06027 发表会议:ACL 2024 1. 动机 多跳问答(Multi-Hop Question Answering, MHQA)技术近年来在自然语…...
npm、pnpm、yarn 各自优劣深度剖析
在前端开发领域,包管理工具是开发者的得力助手,它们负责处理项目中的依赖安装、更新与管理。npm、pnpm、yarn 是目前最主流的三款包管理工具,它们在功能上有诸多相似之处,但在实际使用中又各有优劣。本文将结合包管理工具常见问题…...

jenkins使用Send build artifacts over SSH发布jar包目录配置
本测试用ruoyi-plus的代码。 1 [GitLab 自动触发 Jenkins 构建_jenkins构建触发器没有build when a change is pushed to git-CSDN博客](https://blog.csdn.net/wangyiyungw/article/details/81776972) 2 [jenkins使用Send build artifacts over SSH遇到的坑-CSDN博客](https…...

uni-app小程序登录后…
前情 最近新接了一个全新项目,是类似商城的小程序项目,我负责从0开始搭建小程序,我选用的技术栈是uni-app技术栈,其中就有一个用户登录功能,小程序部分页面是需要登录才可以查看的,对于未登录的用户需要引…...