您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center 汽车系统工程   模型库  
会员   
   
OCSMP 认证培训
5月27-28日 线上直播
网络安全原理与实践
5月21-22日 北京+线上
基于模型的数据治理与数据中台
5月19-20日 北京+线上
     
   
 订阅
SOME/IP 赢了吗?——车载 SOA 中间件选型的胜利与边界
 
作者:机器人不喝咖啡
 
  137   次浏览      7 次
 2026-5-7
 
编辑推荐:
本文主要介绍了车载 SOA 中间件选型的胜利与边界相关内容。希望对你的学习有帮助。
本文来自于微信公众号机器人不喝咖啡 ,由火龙果软件Alice编辑,推荐。

有一种胜利,叫所有人选了同一张牌。但没人告诉你这张牌的背面印着什么。

第一章:信号死了吗?

2024 年,一辆高端智能电动车的中央计算平台上跑了大约 200 个软件服务。感知服务、定位服务、路径规划服务、车速服务、空调控制服务、灯光管理服务……它们有的每 10ms 就要交换一次数据,有的一分钟才说一句话,有的只在车启动时出现一次,然后就消失了。

你可能会问:CAN 总线不是也能通信吗?发个 Message ID 不就完了?

能。但不等于"够了"。

CAN 的通信模型建立在一个基本假设上:**"我提前知道这个世界上有哪些人,每个人会说什么,以及他们什么时候说。"** 这假设在 20 个 ECU、200 条信号的年代完全成立。DBC 文件就是这份"世界说明书"——每个 Message ID 的含义、周期、信号布局,白纸黑字写得清清楚楚。所有人照着同一本字典说话,20 年没出过问题。

但到了 200 个服务——其中一大半是在 OTA 更新中动态部署进来的新东西——世界从一个"已知的列表"变成了"不知道谁会来,也不知道谁会走"的开放集市。

想象一个具体的场景:你的车刚收到一个 OTA,新增了"记忆泊车"功能。这个功能需要调用摄像头服务(获取地下车库的图像)、定位服务(获取车辆在 B3 层的位置,这个位置是 CAN 总线上的轮速/方向盘组合推算出来的)、车身控制服务(控制方向盘、刹车、油门)。但这些服务之间的依赖关系——谁提供什么、谁需要什么、数据格式是什么——在上一个版本的 DBC 文件中根本不存在。

如果你还靠 DBC 文件来管理通信,你就得在每次 OTA 推送新功能时,重新发布一份"全车信号词典",并确保所有 ECU 都刷了最新版本。 这在一辆有 100+ ECU、来自 20 家不同 Tier1 的量产车上,等于每次 OTA 都要重新协调全供应链。

CAN 的字典装不下这个开放集市。

这不是 CAN 不够好。CAN 从来没有被设计来处理"动态发现、按需连接、运行时生命周期管理"这样的需求。CAN 是被设计来在发动机舱的电磁噪声里可靠地传送 8 个字节的短消息——它完成这个任务到今天仍然是世界上最好的方案。

问题变了,答案也得变。

所谓"从信号到服务",本质是:你不再预先把所有可能的对话写进一份永不更新的合同里,而是允许对话的关系在运行时被发现、建立、断开、重新建立。信号的字典关上了——服务的大门打开了。

第二章:为什么是 SOME/IP ——五个约束下的最优解

现在你是一个车企的 EEA 架构师。你决定:车里的软件要服务化。你需要选一个中间件协议。

什么叫中间件?就是在"网络能传包"(TCP/UDP/IP)和"业务能做事"(规划、控制、感知)之间的那一层。"我不需要知道对方的 IP 地址,不需要手动建立连接,不需要操心数据格式对不对——中间件帮我搞定。"

你打开市面上所有选项:SOME/IP、DDS、MQTT、gRPC、Zenoh……有些名字你可能在互联网后端听过,有些是军工行业用了 20 年的老兵。

你怎么选?

你的办公桌上其实已经放了五个无法讨价还价的前提条件。每个选中间件的人都知道它们在那,但很少有人把它们一起摊开来看。

第一道约束:AUTOSAR ——不是"选了"SOME/IP,而是"造了"SOME/IP

这个行业有一个事实标准叫 AUTOSAR。不管你对它什么感情,你的 ECU 供应商(博世、大陆、安波福……)的软件平台都是 AUTOSAR Classic 或 Adaptive 的。

AUTOSAR 有一整套方法论:用 ARXML 定义所有通信接口 → 工具链自动生成配置和代码 → ECU 上电后按配置运行。这不是一个"协议选择",这是一个生态锁定。

但这里有一段关键的历史,很多人不知道:

SOME/IP 不是从一堆候选方案中被"选出来"的。它是 BMW 从 AUTOSAR 内部"造出来"的。

2011 年前后,BMW 面临一个具体工程问题:新一代车型(7 系、i 系列)要引入车载以太网做信息娱乐和 ADAS 数据传输,但 CAN 的信号模型无法支撑服务化架构。BMW 需要一个中间件协议——既要比 CAN 灵活(支持动态服务发现、RPC 调用),又要比 DDS 简单(状态机可控、能跑在资源受限的 ECU 上、能嵌入 AUTOSAR 工具链)。

当时 DDS 已经是 OMG 标准,军工和航天用了近十年。但 DDS 的商业实现(RTI Connext、PrismTech OpenSplice)定价面向国防预算,单节点 License 费用高昂;更关键的是,DDS 社区对汽车行业的 AUTOSAR 方法论——模型驱动、ARXML 配置、编译时确定一切——兴趣不大。DDS 的哲学是"运行时发现一切",AUTOSAR 的哲学是"编译前决定一切"。这两个哲学在 2011 年没有人愿意花工程量做调和。

BMW 的解决方案是:自己设计一个"刚好够用"的协议。Lars Völker(BMW 工程师,后来成为 SOME/IP 规范的主要作者)主导了协议设计,目标极其明确——满足车载以太网上的服务通信需求,同时能无缝嵌入 AUTOSAR 的 ARXML 配置流程。不多做一件事。

2012 年,BMW 把 SOME/IP 带进 AUTOSAR 联盟。因为 BMW 是 AUTOSAR 的核心成员(Premium Member),协议直接进入标准化流程。2014 年 AUTOSAR R4.2 发布时,SOME/IP 已经是 Classic Platform 的正式通信协议。2017 年 Adaptive AUTOSAR 发布时,SOME/IP 直接成为 ara::com(Adaptive 的服务通信模块)的默认传输绑定——不是"推荐使用",是默认就在那里。用了 Adaptive,就自动获得了 SOME/IP。

这不是一个"市场竞争中胜出"的故事。这是一个"在联盟内部从零造标准"的故事。 SOME/IP 生来就是 AUTOSAR 的一部分——它从第一天就被设计成能被 ARXML 描述、能被工具链生成代码、能被 Conformance Test 验证的形状。DDS 要做到这些,需要一层适配层把自己"削"成 AUTOSAR 能接受的形状。

DDS 正式进入 AUTOSAR 是 R20-11 版本(2020 年底),作为 ara::com 的另一种可选 network binding。比 SOME/IP 晚了 6 年。在汽车行业,6 年意味着两到三个整车开发周期。等你 2021 年能用 AUTOSAR 原生 DDS binding 的时候,SOME/IP 已经跑了十几款量产车型。

不是 DDS 不够好。是 DDS 来自另一个世界——一个不用 ARXML、不走 AUTOSAR 工具链、不需要跟 20 家 Tier1 签精确到 bit 的接口合同的世界。它来到汽车的门口时,门里已经有了一个从内部长出来的答案。

第二道约束:供应链不是一家人

你的 ECU 不是你自己做的。是 Tier1(博世/大陆/安波福/德赛西威)做的。

Tier1 拿到你的需求("这个 ECU 要提供路径规划服务,接收定位输入,输出轨迹给控制……")之后要完成开发、测试、交付。交付的不只是代码,还有一份"我保证这符合你说的每一项需求"的测试报告。

谁来验证这份测试报告?谁来判断"这个服务确实提供了路径规划能力"?这需要一个双方都认可的接口定义格式。

在 AUTOSAR 的世界里,这个格式叫 ARXML。它精确到 bit 级别——这个 Service ID 下包含哪些 Method,每个 Method 的参数类型和序列化规则,Event 的触发条件和周期。OEM 定义了这份 ARXML,Tier1 照着做,交付时用工具链做 Conformance Test——自动对比"实际实现的服务行为"和"ARXML 里定义的预期行为"。

SOME/IP 的序列化规则是专为这种"编译前已精确知道所有数据结构、运行时不做 schema 动态变更"的场景设计的。你在 ARXML 里定义了一个 struct,工具链就能生成序列化代码——字节序固定、长度固定、格式固定。认证工程师可以逐行审计这份生成代码。

DDS 用的是 OMG IDL——它当然也能描述类型,但 DDS 的哲学是"数据为中心":类型是灵活的,QoS 是丰富的,发现是去中心化的。你会得到 22 种 QoS 策略的自由度——但 OEM-Tier1 之间的合同不需要 22 种自由,合同需要的是精确到 bit 的可审计性。

SOME/IP 给你的不是"最好的通信",而是"最好的接口合同"。

第三道约束:认证路径要可穷举

功能安全(ISO 26262)有一个基本要求:你必须列出所有可能的故障模式,并证明系统对每一种都有安全响应。

对 CAN 总线来说,这个清单是可控的:

  • 消息丢了?下一帧在路上(周期发送)。

  • BIT 位翻转了?CRC 校验会抓到(CAN 的 CRC-15 对错误有已知的漏检概率)。

  • 节点不发了?Node Missing 监控会报故障。

  • 总线短路了?Error Passive 机制会隔离故障节点。

CAN 的故障模式空间很小——因为协议本身的状态机小。物理层两根线,链路层一个控制器,应用层按 DBC 配死的信号位——每层只有一个状态机,状态机之间的交叉是有限的。

现在把 Ethernet + TCP/IP + UDP + SOME/IP-SD + Service Discovery + Event + RPC 全栈摊开。每一层有独立的状态机:

  • Ethernet MAC/PHY:自协商、链路断开/恢复、CRC 错误

  • IP:路由表变化、TTL 过期、分片重组超时

  • UDP:无连接、无确认——丢包了应用层才知道

  • TCP(部分场景使用):重传超时、拥塞窗口、连接建立/断开

  • SOME/IP-SD:Find/Offer/Subscribe/StopOffer 四个事件引发状态迁移

  • SOME/IP 会话:Session ID 管理、序列化格式校验、超时

这些状态机的组合空间,**不是"每层状态数 × 层数",而是"每层状态数的乘积"**。一个 UDP 丢包 + SOME/IP-SD Subscribe 丢包 + Service 仍处于 Down 状态 = 客户端认为服务已订阅但服务端不知道。这种跨层故障组合,CAN 世界根本没有发生过,因为 CAN 只有一层。

ISO 26262 要求功能安全工程师把所有这些组合枚举清楚。如果组合空间太大了——不能穷举——你就不能声称这条链路是 ASIL 级别的。

这就是为什么 ASIL-D 的制动信号到今天仍然走 CAN-FD,不走 Ethernet + SOME/IP。不是 Ethernet 不可靠,是 Ethernet 协议栈的故障模式空间太大,目前的认证方法论还吃不下。

值得一提的是,行业正在推动这个边界的突破。冗余以太网链路 + SOME/IP E2E Protection + TSN 时间同步的方案,正在多个 Zonal Architecture 平台上进行 ASIL-D 级别的认证验证。以太网进入安全关键领域不是"能不能"的问题,而是"认证路径和工程验证还需要多久"的问题——但当下,CAN-FD 仍然是安全关键链路的默认答案。

SOME/IP 的选择在这里其实是一个妥协:它选择了比 DDS 简单得多的状态机(SOME/IP-SD 只有四个核心事件,RTPS 的发现协议有两阶段八卦式对等发现,远比 SOME/IP-SD 复杂),使得功能安全分析至少是"有可能逼近穷举"的。

SOME/IP 为什么比 DDS "简单"?因为它在每一个设计节点上都选择了 "够用即可" 而不是 **"提供所有选项"**。

  • SOME/IP-SD:单播或多播发现,找到服务就结束。DDS RTPS:两阶段对等八卦式发现,每个参与者维护全局拓扑。

  • SOME/IP 的 QoS:基本靠底层 TSN 配。DDS:22 种 QoS 策略,你可以配"持续性 + 可靠性 + 活跃性 + 所有权 + 分区 + ……"——每一种组合都是一个新的状态空间维度。

  • SOME/IP 的安全性:E2E Protection(CRC + Counter + Timeout),轻量但够用。DDS:DDS-Security 规范有认证、加密、访问控制三个插件——功能全,但组合了更多状态。

这就是为什么认证工程师对 SOME/IP 的态度是"虽然也不是完全可控,但至少我能搭一个逼近穷举的分析框架"。对 DDS 的态度是"你的 QoS 组合数大概是天文数字,你让我怎么穷举?"

第四道约束:车载网络的拓扑是"树",不是"云"

这是最容易被忽视的一道约束——因为汽车工程师觉得"当然是树"是理所当然的,而互联网工程师觉得"当然是云"是理所当然的。

在车里,ECU 是固定位置的。域控制器知道下面挂了多少个子控制器,每个控制器的 IP 地址是预先配置的,网络拓扑是出厂后不会变的。

CAN 的共享总线是"所有人在一条线上"——这叫物理层上的广播。车载以太网不是——它是交换机拓扑,点到点连接,每段线路只有两个端点。你没法像 CAN 那样"在总线上喊一嗓子所有人都听到",因为物理上不存在这条总线。

但车载以太网的拓扑是已知的、确定的、固定不变的。域控制器的位置你知道,子 ECU 的 MAC 地址你知道,交换机之间的布线你知道——所有东西在出厂时就已经定了。

这个约束意味着什么?

意味着你不需要 DDS 的全局分布式发现。DDS 的 RTPS 协议花了很多精力解决"在大规模分布式系统中,参与者动态加入/离开,如何处理全局拓扑一致性"——这个问题的前提是"拓扑随时在变化"。DDS 假设网络是一个不确定的云——节点来,节点走,节点之间可以自由地形成对等关系,没有一个中央调度器。

但在车里,网络是一棵树——层次分明,静态配置。你不需要八卦式发现来维护拓扑一致性,你只需要一个简单的注册机制:客户端问 "有没有路径规划服务?",域控制器上的 SD 多播或服务注册表返回 "有,地址是 192.168.1.10:30000"。结束。

SOME/IP 的设计假定了"我知道网络长什么样",而 DDS 的设计假定了"我不知道网络长什么样,而且它随时可能变"。这两个假设对应两个完全不同的复杂度起点。

车载树形拓扑 vs 机器人网状拓扑

车载以太网之所以能用 SOME/IP 这种相对简单的方式实现服务发现,是因为静态拓扑把很多复杂问题消解了。这就是在文章开头写到的:"车载以太网 + 交换机拓扑 → 不需要 CAN 那种共享总线广播",但同样的交换机拓扑也意味着"不需要 DDS 那种去中心化发现"。

第五道约束:时间敏感——车不想"多等 5ms"

车里的时间尺度跟数据中心不一样。

数据中心里,一个 RPC 调用 100ms 算快。在车里,车速信号的端到端延迟如果超过 2ms,已经在挑战 ISO 26262 对特定功能的时间约束。SOME/IP 跑在 UDP 上(事件类通信几乎都走 UDP),没有连接建立开销,没有 TCP 重传风暴,没有拥塞控制——要么包到了,要么没到。没到就等下一帧。

DDS RTPS 也跑在 UDP 上——但它的"可靠性 QoS"会在应用层做重传。在数据中心这是优势(无线网络丢包率 10%),在车上这是劣势——车里的 Ethernet 丢包率极低(通常是物理链路噪声导致的 BER,不是网络拥塞导致的丢包),重传机制基本用不上,反而引入了协议处理开销。

第三章:SOME/IP 的四件套——车载 SOA 的最小必要集合

理解了约束,再来看 SOME/IP 的机制,你会看透它每个设计选择的来源。

但这章的重点不在于罗列四种消息类型和四次握手的细节——如果你需要协议层面的参考实现,去看 AUTOSAR 的 PRS_SOMEIP 规范文件即可。这里要讲的,是这四个设计选择背后的工程直觉,以及每个选择在"约束 vs 能力"之间的妥协。

Service Discovery:不需要八卦的"找到你"

在互联网后端的世界里,"服务发现"是一个被解决了的问题——丢一个 DNS 记录、搭一个 Etcd 集群、跑一个 Consul agent,服务注册、健康检查、负载均衡全都搞定。

在车上不行。为什么?因为你没有 etcd。车里没有"集群",车里是固定的物理拓扑,域控制器是天然的中央登记处,子 ECU 是不会动态迁移的。

所以 SOME/IP-SD 的设计是 **"不需要维护全局拓扑一致性的服务发现"**。协议只需要支持四个动作:

1.Find Service(客户端:我需要一个路径规划服务,有吗?)

2.Offer Service(服务端:我有路径规划服务,这是我的 IP 和端口)

3.Subscribe(客户端:好,请给我发每 100ms 一次的车道线数据,同时通知我目标列表的更新事件)

4.Stop Offer Service(服务端:我下线了,别找我了)

没有"所有节点之间定期交换拓扑视图"的八卦机制——不需要。没有"分布式一致性算法选举一个 Leader 来管理拓扑"——不需要。

SOME/IP-SD 做反的事:它不会去做 DDS 那种两阶段八卦式发现,不是因为做不到——而是因为不需要。车载网络是一棵树,树顶就是一个天然的中心节点,你不需要去维护一个你根本不在其中的分布式全局拓扑。

SOME/IP SD 状态机

Request/Response:二进制 RPC,但没有 REST 的包袱

SOME/IP 的 RPC 不是像 curl 一条 REST API 那样发个 JSON 请求收 HTTP 200。RPC 走的是请求-响应的基本语义——调用方发请求,提供方返回结果。具体到协议上,SOME/IP-PRC 采用的是直接基于 TCP 或 UDP 的一对一调用。

它选择二进制序列化而不是 JSON/XML/Protobuf——原因是 ARXML。所有数据类型在 ARXML 中编译前已知。工具链可以根据 ARXML 配置直接生成零拷贝级别的序列化代码,不需要运行时做 schema 动态反射。对功能安全审计来说,这是一条极大的好消息:你可以审计生成的代码,而不用审计一个通用的 JSON 解析器的状态机(JSON 解析器的状态机异常复杂——格式错误的输入、嵌套层级攻击、浮点数精度异常——都是故障模式)。

当消息长度超过 UDP 以太网帧的限制时(约 1400 字节的 payload),SOME/IP 会用 SOME/IP-TP(传输协议)做分段。大数据(比如地图 tile、固件升级包)可以被切分、传输、再组装——不牺牲二进制格式的确定性,同时在需要时扩展长度限制。

Event:订阅,但不需要 22 种 QoS

SOME/IP 的 Event 是一个简化版的发布-订阅——客户端订阅感兴趣的事件组,服务端在有新事件时通过通知推送数据。这就是第二章写到的"像车速这种每 10ms 变化一次的信号,SOME/IP 用的是 Event 模式"——客户端不轮询,订阅后等推。

它跟 DDS 的发布-订阅的核心区别不在于"发布-订阅"这个模式——两者都支持——而在于"DDS 的发布-订阅有 22 种 QoS 自由度":

  • Reliability:可靠(有确认和重试机制)还是尽力(发完不管)?

  • Durability:新订阅者能不能收到订阅前发的历史消息?

  • Liveliness:如果发布者失联了,订阅者怎么知道?

  • Ownership:同一个主题有多个发布者,订阅者接收谁的?

  • Partition:在同一主题内,能不能在逻辑上进一步划分出不同的子域?

对于机器人编队——无人机之间在你追我赶的 3D 空间中飞行,网络是 WiFi/5G 无线,拓扑随时变化——这每一种 QoS 策略都是实际需要、会在通信中产生不同结果的执行行为。

对于汽车 EEA——Ethernet 有线网络,拓扑固定,丢包率极低,域控制器是天然的通信中枢——你不需要 Ownership(一个服务只有一个提供者),不需要 Durability(新订阅的客户端等到下一帧就行,不需要读历史),不需要复杂的 Liveliness(心跳就够了)。

SOME/IP 的 QoS 基本上是靠 TSN(Time-Sensitive Networking)在底层实现的——你不需要应用层重传(Reliability = Best Effort),你只需要 TSN 保证帧按时到达。

这里有一个重要的洞见:在车上,QoS 由底层网络保证;在机器人集群里,QoS 必须由中间件保证。这是 SOME/IP 和 DDS 在"复杂度预算"分配上的根本分歧。

Field:被低估的设计

SOME/IP 有一个设计经常被忽略:Field。

Field 是 Getter、Setter 和 Notifier 的三合一。

  • Getter:你想读取某个属性——比如当前的目标车速。一问一答。

  • Setter:你想修改某个属性——比如把目标车速设为 120。一设一确认。

  • Notifier:你关心这个属性的变化——"目标车速一旦变化,主动通知我"。事件式自动推送。

这三个访问模式合在一个 Field 上——而不是拆成三个独立的 API、三个独立的 IDL 定义。

为什么这个设计好? 因为一个物理量在车上天然就支持这三种访问模式。车速既是"可以被读取的状态",也是"可以被设定的目标",也是"变化时需要被推送的事件"。Field 的设计反映了物理世界的本质——一个物理量的访问模式和变更模式是同一种东西的两种视角,不是两个东西。

对比一下互联网的 API 设计惯式。你用 REST 获取温度——GET /temperature,你设置温度——POST /temperature。想监控温度变化?你得自己写一个轮询循环,隔几秒 GET 一次。温度本身是一个东西,但你的代码里有三个不相关的 REST 端点。SOME/IP Field 把这三件事重新合并成一个东西——一个属性值、一个设置接口、一个变化通知——合在一起,就是一个属性的完整生命周期。

SOME/IP Field 三合一设计

第四章:同一道题,两个行业的相反答案

现在我们来回答那个最核心的问题。

前面讲了 SOME/IP 是 BMW 从 AUTOSAR 内部造出来的。但这只解释了"它怎么进来的",没有解释"为什么机器人行业没有选同样的路"。如果 DDS 在协议功能上比 SOME/IP 更强大——更丰富的 QoS、更灵活的拓扑、更完整的去中心化发现——那为什么汽车行业要费劲从头造一个"更弱"的协议,而不是直接用现成的 DDS?

或者反过来问:既然 SOME/IP 这么简单,为什么机器人行业不用它,非要选复杂得多的 DDS?

这里没有谁对谁错。两个行业面对的是同一道题,完全不同的约束条件。

DDS 的视角:给机器人一个"全局数据空间"

DDS(Data Distribution Service)的核心思想在一个词上:Data-Centric(以数据为中心)。

传统的面向服务通信是 **"谁有问题,问别人"**——A 需要路径,就问 B:"请帮我规划路径",B 返回结果。通信的主体是"请求-响应"关系。

DDS 做反的事:它创建一个全局数据空间(Global Data Space),每个节点把自己的数据发布到这个空间里——"我的位置是(x=10, y=20, z=5),我的速度是 3m/s,我的电量是 80%"。其他节点不需要问"你的位置在哪?",因为它们已经订阅了这个主题,数据更新会自动到达。

通信的主体从"调用关系"转移到了"数据本身"。

这就是为什么 ROS2 选了 DDS。

ROS(Robot Operating System)是机器人领域的标准中间件框架。ROS1 有一个中央 Master 节点——所有节点启动后去 Master 注册,通信时向 Master 查询对端地址,然后建立 P2P 连接。

这个架构在单机器人上没问题。在多机器人集群中会出问题:如果 Master 挂了(比如无人机撞树了),所有节点失去注册中心,整个集群通信瘫痪。如果一组新机器人加入,它们需要先知道 WiFi 内网 Master 的 IP——在野外部属场景下,这个 IP 可能不存在。

DDS 解决了所有这些问题:

  • 去中心化:没有 Master。节点之间通过 RTPS 协议自动发现对等体。

  • 动态拓扑:节点加入,通过八卦式发现自动获知网络中所有主题和发布者。

  • 不可靠网络:QoS = RELIABLE 模式在应用层补发丢包。WiFi 丢包 10%,补发就是了。

  • 场景自由度:Partitions 可以把同一主题在不同物理区域(无人机编队 A 和编队 B)的通信隔离开;Ownership 可以在多冗余发布者(同一个传感器数据的两个发布者)之间切换。

DDS 提供了机器人行业需要的所有灵活性。而灵活性在车里不是首要命题。

车的反命题:我需要确定性,不需要自由度

把 DDS 放进一辆车里,你会发现它的每个优势都在跟车的约束条件对冲:

1. 去中心化 vs 集中式 EEA

车有中央计算平台。有域控制器。有 Zone Controller。通信层级是树状的——从中央计算平台往下到 Zone Controller,再到传感器和执行器。

你不需要八卦式发现来维护一个不存在的"对等拓扑"。域控制器是天然的服务注册中心——车出厂时每根 Ethernet 线接在哪里是已知的,不需要运行时去探测。

2. 动态拓扑 vs 固定拓扑

车上的网络拓扑在生产线上就焊死了。交换机的 MAC 表是预配的。ECU 不会热插拔(除了 OBD 诊断口,但那不是 SOA 的一部分)。

动态发现对机器人是生存需求——对车是多余功能。而且这个"多余"在功能安全审计中是有代价的:既然是动态发现,就意味着"可能有节点在你不知道的时候加入并发布了一个跟你冲突的 Service ID"——这种场景在车里不存在,但在安全分析中需要证明它不存在或无害。

3. 不可靠网络 vs Ethernet 有线

DDS 的可靠性 QoS 设计前提是"网络会丢包"。车载 Ethernet 的丢包率是 BER(Bit Error Rate)级别的——物理链路上的位错误,不是拥塞丢包。在 100BASE-T1 的 BER = 10^-9 级别下,丢包概率已经小到可以用 CRC + Counter + Timeout(SOME/IP 的 E2E Protection)来覆盖,不需要应用层的确认和重传协议。

4. 灵活性 vs 认证可行性

DDS 的 22 种 QoS 策略——每一种打开了都是新的状态空间维度。你跟功能安全工程师说"我们有 22 种 QoS 可以选择",功能安全工程师会说"你的组合空间大概是 2^22 级别,你怎么证明所有组合下系统行为都是安全的?"

ROS2 的设计文档的原话是:"DDS 的灵活性代价是复杂性"。这个代价在机器人行业(没有 ISO 26262 要求)可以承受——在汽车行业,不可承受。

同样的问题,不同的约束 → 不同的最优解

约束维度 机器人(ROS2/DDS) 汽车(AUTOSAR/SOME/IP)
拓扑 动态(节点随时加入/离开) 静态(出厂固定,树状层级)
网络 不可靠(WiFi/5G) 可靠(Ethernet 有线)
中心节点 不能有(单点故障) 天然中心(域控制器)
功能安全 没有 ISO 26262 ASIL-A 到 ASIL-D
生态 开源社区 AUTOSAR 方法论 + 商业工具链
供应链 自研为主 Tier1/OEM 合同制交付
QoS 需求 需要丰富的选择性 需要 TSN 保证确定性

结论:SOME/IP 不是"更好的 DDS"。SOME/IP 是 BMW 在五个硬约束下,从 AUTOSAR 内部造出来的"刚好够用"的协议——放弃了 DDS 的灵活性和功能丰富度,换取了认证可行性、供应链可操作性、和生态原生嵌入。

机器人行业选了 DDS 也不是"机器人不懂车"。机器人的约束条件跟车几乎完全相反——本质上是"无线、移动、无主节点、无安全认证",而车是"有线、固定、有主节点、有 ISO 26262"。两个行业各自造了(或选了)适合自己约束条件的答案。

SOME/IP 与 DDS 协议栈对比

第五章:其他竞争者为什么也没有赢

SOME/IP 的对手不只是 DDS。

MQTT:太轻

MQTT 是物联网的宠儿——发布-订阅,轻量,一个 Broker + 三个字节的最小协议开销。Facebook Messenger 用它,AWS IoT Core 用它。

为什么没在车上成为 SOA 的主协议?

因为 MQTT 的设计哲学是 **"客户端足够傻,Broker 足够聪明"**。它解决了海量低功耗 IoT 设备的接入问题——这些设备连 TCP 栈都跑不完整,更不可能自己维护复杂的服务发现和调用关系。

但车上的 ECU 不是低功耗传感器。车上跑 Linux/QNX 的算力是够的。你不需要把复杂度推到 Broker 上——你需要的是 ECU 之间直接进行结构化服务调用。MQTT 的发布-订阅没有 RPC 语义(调用-响应),没有 Field 语义(Getter/Setter/Notifier),没有 Service Discovery。它是最轻的发布-订阅协议,缺了 SOA 需要的太多东西。

MQTT 在物联网赢了,因为物联网需要"最轻的发布-订阅"。车上需要的是"完整的服务通信语义"。

gRPC/protobuf:太互联网

Google 的 gRPC + Protobuf 在数据中心是王者——HTTP/2 传输,IDL 定义服务,自动生成客户端和服务端 stub,支持流式调用。用在车载 SOA 上有什么不好?

三个问题:

1.没考虑功能安全。Protobuf 的动态反射(dynamic reflection)和变长编码在功能安全审计中是噩梦——你没法在编译前确定所有数据的内存布局。Auto 行业的 ARXML 是"编译时已知一切"的理念,protobuf 是"运行时也可以解析未知类型"的理念——两个理念在安全审计上是正交的。

2.HTTP/2 协议栈有更多状态机。TLS + HTTP/2 的 HPACK 头压缩、流优先级、流控制、PING 心跳……每一层都是新的状态空间,层层叠加后的故障模式空间比 SOME/IP + UDP 大得多。

3.没有车载的生态支持。AUTOSAR 不支持 gRPC。你的 Tier1 供应商不做 gRPC。你的工具链不生成 gRPC 接口文件。一切从头集成不是一个选项——在车上,生态比协议功能更重要。

Zenoh:太新

Zenoh 是一个相对较新的零开销发布-订阅/查询协议——由 Eclipse 基金会主导,理论设计上可以跑在从微控制器到云的任何东西上。延迟极低,吞吐极高,支持 P2P 和 Broker 混合拓扑。

它看起来很优雅——在理论上。但在今天的车厂 EEA 架构决策会议上,Zenoh 有三个做不到的事:

  • 没有 AUTOSAR 集成(AUTOSAR 联盟没有采纳 Zenoh 的计划)

  • 没有十年量产验证(第一个量产车型用 Zenoh 大概是 2027 年以后)

  • 没有 Tier1 支持(你的供应商不会给你提供 Zenoh 的 ECU 中间件)

"太新"在互联网行业是一个加分项——用最新的技术就是竞争优势。在汽车行业,"太新"是一个暂停信号——你需要十年量产数据来通过 ASIL 认证的前提条件。

第六章:这场胜利的边界——SOME/IP 没赢的地方

到这里,SOME/IP 的胜利看似完整——但胜利有边界。

第一道边界:安全关键链路

ASIL-D 的制动、转向、安全气囊——这些信号不走 Ethernet + SOME/IP。

走的是 CAN/CAN-FD。原因在第二章第三道约束中已经解释过:Ethernet 全栈的故障模式空间太大,目前的功能安全方法论无法穷举。ASIL-D 要求"确定性保证"——CAN 能保证(可穷举的故障模式),Ethernet + SOME/IP 只能保证"有逼近穷举的分析框架"。

SOME/IP 赢了 SOA 的"服务层",但它没有赢"安全关键执行层"。车载通信是两层的——服务层(SOME/IP)解决了灵活性问题,执行层(CAN/CAN-FD)解决了安全性问题。两层的共存不是因为技术做不到统一,是因为"灵活性"和"确定性"在物理上就不可兼得。

第二道边界:AI 原生管道

AIDV 时代的 E2E 端到端——从摄像头传感器进来的原始像素开始,到控制指令从网络出去——整条数据流的底层通信不走 SOME/IP。

NVIDIA DRIVE AGX 上的推理管线是这样的:摄像头数据经 ISP 处理后,通过 NvMedia 直接加载进 GPU 显存。推理过程中张量通过 NvSciStream 在 GPU、PVA(可编程视觉加速器)、DLA(深度学习加速器)之间零拷贝传递。整条路径从传感器输入到控制指令输出,始终留在异构计算单元的内存空间里,从不触碰 CPU 也不经过序列化/反序列化。

SOME/IP 需要的"序列化 → 加协议头 → UDP 封装 → 发送 → 接收 → 解析头 → 反序列化"七步——对 E2E 神经网络推理来说,每一步都是在浪费延迟。SOME/IP 在这里输不是因为它"不够好",而是因为它所在的抽象层面(结构化消息、服务调用)和 AI 管道的抽象层面(张量流、GPU 显存传输、零拷贝)不在同一层上。

所以 AIDV 时代的中间件正在分化出两条线:

  • CPU 域:SOME/IP 继续处理配置、监控、诊断、OTA、座舱服务编排等——需要结构化语义的场景

  • AI 域:私有栈(NVIDIA DriveOS、Tesla 自研、华为自研)处理张量搬运、传感器数据流、推理管线的 DMA 描述符——需要零拷贝的场景

SOME/IP 赢了服务化这一战。但 AI 来了,它发现这场战争的定义已经变了——从"如何组织服务"变成了"如何避免把张量序列化成消息"。

第三道边界:中国车企的绕过

中国的新势力(蔚来、小鹏、理想)和传统转型车企(比亚迪、吉利)走了另一条路。

他们大量选择了绕过 Adaptive AUTOSAR——直接用 QNX/Linux 做底层操作系统,用自研或开源中间件(vsomeip、自研 RPC 框架)做服务通信,自研整车通信框架。

注意:他们绕过的是 Adaptive 的 ara::com 封装,不是绕过 SOME/IP 协议本身。vsomeip 是 GENIVI/COVESA 维护的 SOME/IP 开源实现——换句话说,中国车企用的仍然是 SOME/IP 的消息格式、服务发现、通信序列化规范,只是不使用 AUTOSAR 的工具链和框架。

更深一层的原因是:中国车企的软件迭代速度要求(每月 OTA 推送新功能)和 Adaptive 的方法论(ARXML 模型驱动、强类型、编译时验证)存在节奏冲突。他们要的是一周内写一个服务然后上线——不是在 ARXML 里配完、等工具链生成代码、做 Conformance Test、再部署。自研框架给了他们速度。

所以,SOME/IP 协议本身在中国市场的渗透率可能比 AUTOSAR Adaptive 框架的渗透率高得多。 这是一个有趣的现象:协议标准赢了,但架构标准没赢。

收束:胜利,但不彻底

回到标题的那个问题:SOME/IP 赢了吗?

答案是:它赢了域集中时代。

SOME/IP 定义了从 2015 年到今天,车载 SOA 通信的"共同语言"——让 Tier1、OEM、工具链厂商、认证机构在同一个协议上达成共识。它在五个硬约束下(AUTOSAR 生态、供应链合同、认证可穷举、静态拓扑、确定性需求)给出了唯一可行的方案。这不是因为它是"最好的"——是因为它从 AUTOSAR 内部长出来,天生就是五个约束的形状。BMW 没有选择一个现成的协议来适配汽车的约束——而是在约束里直接把协议造了出来。

但 EEA 正在走向下一站。从域集中到中央计算+区域式,从基于服务的软件架构到 AI 原生的推理管线。在中央计算芯片上,通信瓶颈正在从"怎么让两个 CPU 上的服务互相调用"变成"怎么让 GPU 显存里的张量零拷贝地到达 PVA"——这个问题,SOME/IP 从来不是答案。

SOME/IP 教会了整个行业一件事:服务化通信可以用一种精确、可配置、可认证的方式实现。 它可能是第一个车载中间件标准——它不会是最后一个。

SOME/IP 的胜利是域集中时代的胜利。而下一场战争的规则,正在被 Thor 和 Blackwell 重写。

   
137   次浏览       7 次
相关文章

中央计算的软件定义汽车架构设计
汽车电子控制系统中的软件开发过程
一文读懂汽车芯片-有线通信芯片
OTA在汽车上有哪些难点痛点?
相关文档

汽车设计-汽车的整体结构及动力系统
自动驾驶汽车软件计算框架
SysML在汽车领域的应用实践
电子电气架构-大陆汽车系统架构平台
相关课程

AutoSAR原理与实践
功能安全管理体系(基于ISO26262)
MBSE(基于模型的系统工程)
基于SOA的汽车电子架构设计与开发

最新活动计划
OCSMP 认证培训 5-27[在线]
企业网络安全防护体系 5-20[北京]
基于模型的数据治理 5-19[北京]
具身智能技能与实践 6-11[厦门]
AI Spec Coding工程化实践 6-17[北京]
Open Claw和Agent Skill实战 6-25[北京]
 
 
最新文章
ASPICE中配置管理是个什么东西?
了解软件安全分析与组件鉴定
掌握Autosar ComStack的精髓!
基于整车功能的正向诊断需求开发
搞定Autosar SWC开发秘籍,码住!
汽车OTA更新的系统性威胁评估
最新课程
基于SOA的汽车电子架构设计与开发
Auto SAR原理与实践
AUTOSAR架构与实践(从CP到 AP )
AUTOSAR架构建模方法与工具(EA)
ASPICE4.0核心开发过程指南
MBSE(基于模型的系统工程)
更多...   
成功案例
某知名车企 AUTOSAR应用设计与开发
吉利汽车 MBSE工程体系汽车建模及评估
某整车企业 《功能需求分析与设计》
富奥汽车零部件 建模工具EA
零跑汽车 建模工具EA及服务
北汽福田 建模工具EA
小鹏汽车 建模工具EA
更多...