some/ip 介绍(一)之协议认识
文章目录
0 前言
- 研究some/ip协议初衷,如下表,为了解决some/ip传输安全,代码上some/ip over TLS支持,但some/ip over DTLS不支持,而在车载网络传输中为了效率选定的是UDP传输。
- 基于以上背景,研究应用层实现加密或签名的可能性
- 剧透一下:some/ip协议定义考虑了safety E2E(见2.4章节),但没有考虑security
| 序号 | 传输层协议 | 对应安全协议 | some/ip实现TLS/DTLS支持情况 |
|---|---|---|---|
| 1 | TCP | TLS | 支持 |
| 2 | UDP | DTLS | 不支持 |
1 some/ip 协议介绍
SOME/IP(Scalable service-Oriented MiddlewarE over IP) 是车载以太网专用的面向服务中间件协议,主打ECU间RPC远程调用、事件发布/订阅,深度适配车载嵌入式场景、AUTOSAR架构,支持UDP/TCP双传输、服务自动发现、大数据分片等能力。
1.1 版权与许可
- 版权:原版权归属BMW(2011-2017),2025版由Technica/KPIT维护;
- 开源协议:采用
Community Specification License 1.0,允许免费使用、二次开发、制作衍生规范,衍生版本必须向后兼容,且需提交至工作组; - 专利规则:贡献方免费开放必要专利(可按规则提交专利排除项),实现方无需缴纳专利费。
1.2 SOME/IP 设计初衷
业界已有多种RPC协议,车载场景仍自研SOME/IP,核心目标:
- 适配嵌入式ECU极低资源开销;
- 全车载场景兼容,无缝对接AUTOSAR协议栈;
- 支持从低端MCU到高端车机的全平台、全操作系统(含无OS裸机设备);
- 满足车载专属通信(周期信号、事件触发、诊断、OTA等)需求。
1.3 核心术语(车载SOME/IP通用定义)
| 术语 | 释义 |
|---|---|
| Method 方法 | 可被远程调用的函数/接口 |
| RPC | 跨ECU远程过程调用 |
| Request/Response | 请求-应答模式(同步调用) |
| Fire&Forget | 单向请求(无应答,异步) |
| Event 事件 | 服务端主动推送的消息(发布订阅) |
| Field 字段 | 远程状态属性,由 Getter(读)、Setter(写)、Notifier(变更通知) 组成(三者至少其一) |
| Eventgroup 事件组 | 多个事件/通知的逻辑聚合,统一订阅管理 |
| Client/Server | 服务使用方/服务提供方ECU |
| Endpoint 端点 | IP地址 + 四层协议(UDP/TCP) + 端口 |
1.4 全局ID体系
所有ID均为无符号整型,有固定保留值,是报文路由、服务区分的基础:
- Service ID(服务ID,16bit)
- 0x0000、0xFFFF:系统保留;
- 0xFFFE:专门用于宣告非SOME/IP协议(如诊断、网管);
- 规则:整车内不同服务必须使用不同Service ID。
- Service Instance ID(服务实例ID,16bit)
- 0x0000:保留;0xFFFF:代表该服务所有实例;
- 规则:同一服务的多个实例(同ECU/跨ECU)ID必须唯一。
- Method ID / Event ID(方法/事件ID,16bit)
- 服务内部区分方法、事件;
- 最佳实践:
0x0000~0x7FFF分配给方法,0x8000~0x8FFF分配给事件。
- Eventgroup ID(事件组ID,16bit)
- 同服务内事件组ID唯一;0x0000/0xFFFF为保留值。
1.5典型车载应用
- 车身控制、ADAS传感器数据交互(事件推送);
- 车机/仪表远程调用(请求应答);
- 诊断、OTA大文件传输(TCP/SOME/IP-TP);
- 全车ECU服务自动发现、拓扑管理(SOME/IP-SD)。
2、SOME/IP 报文格式
该章节定义SOME/IP底层帧结构、传输规则、字节序、长度限制,是报文解析/编码的依据。
2.1 传输协议 & 端口规则
- 支持传输层:UDP 优先,TCP 作为补充
- UDP:实时性好、时序可控,推荐绝大多数业务使用;
- TCP:用于超大报文、高可靠传输。
- 端口规范:
- SOME/IP-SD(服务发现)默认端口 30490(UDP/TCP),该端口仅用于服务发现,不承载业务报文;
- 动态端口范围:
49152 ~ 65535(遵循IANA规范)。
2.2 报文长度限制(车载以太网最佳实践)
为规避IP分片(车载以太网禁止分片),规范硬性约束:
- 标准IPv4+UDP:不分片最大载荷 1472 字节;
- 强制最佳实践:SOME/IP头+总载荷 ≤ 1416 字节,预留 1400字节纯业务载荷;
- 超过该限制的UDP报文,必须使用 SOME/IP-TP 分片协议;
- 规则:
Length字段 < 8字节的报文,直接丢弃。
2.3 字节序(端序)
- 所有SOME/IP头部字段强制使用网络字节序(大端);
- 载荷端序由接口规范(ARXML/FRANCA等)定义,优先使用大端。
2.4 标准SOME/IP 头部


传输顺序从上至下,所有字段大端:
| 字段 | 位宽 | 核心作用 & 规则 |
|---|---|---|
| Message ID | 32bit | 高16bit=Service ID,低16bit=Method/Event ID;整车唯一,用于报文路由 |
| Length | 32bit | 长度计算起点:Request ID 至报文末尾;<8字节报文丢弃 |
| Request ID | 32bit | 高16bit=Client ID(ECU内客户端标识),低16bit=Session ID(会话) • 非会话模式:Session ID=0 • 会话模式:从0x0001开始,0xFFFF后循环 • 响应报文必须原样拷贝请求的Request ID |
| Protocol Version | 8bit | SOME/IP协议版本,固定 0x01 |
| Interface Version | 8bit | 服务接口主版本,用于版本校验 |
| Message Type | 8bit | 报文类型(见下表),含分片标记(TP-Flag) |
| Return Code | 8bit | 返回码(错误码);请求/事件类报文强制置 0x00 |
- 扩展:E2E 安全头
若开启端到端(E2E)安全保护,E2E头插入在Return Code与载荷之间。
2.5 Message Type 报文类型(核心枚举)
分为请求、响应、事件、异常、预留ACK五大类,车载常用类型如下:
| 取值 | 名称 | 用途 |
|---|---|---|
| 0x00 | REQUEST | 普通请求(需要服务端应答) |
| 0x01 | REQUEST_NO_RETURN | Fire&Forget 单向请求(无应答) |
| 0x02 | NOTIFICATION | 事件/通知(服务端主动推送) |
| 0x80 | RESPONSE | 正常响应(请求成功) |
| 0x81 | EXCEPTION | 异常响应(请求失败) |
| 0x20+ | TP-Flag 置1 | 标识该报文为SOME/IP-TP分片 |
补充:0x40/0x41等ACK类型为预留未使用。
2.6 Return Code 返回码(错误码体系)
用于标识调用执行结果,关键码值:
| 取值 | 名称 | 含义 |
| ---- | ---- |
| 0x00 | E_OK | 执行成功(默认值) |
| 0x01 | E_NOT_OK | 未知通用错误 |
| 0x07 | E_WRONG_PROTOCOL_VERSION | 协议版本不匹配 |
| 0x08 | E_WRONG_INTERFACE_VERSION | 接口版本不匹配 |
| 0x09 | E_MALFORMED_MESSAGE | 报文解析/序列化错误 |
规则:
- REQUEST / REQUEST_NO_RETURN / NOTIFICATION 报文,Return Code 必须为 0x00;
- EXCEPTION 异常报文,Return Code 禁止为 0x00;
- 收到携带错误的报文,禁止再次回复错误报文。
2.7 响应报文 IP/端口 映射规则
响应、异常报文的网络信息必须与原请求完全反转:
- 响应源IP = 请求目的IP
- 响应目的IP = 请求源IP
- 响应源端口 = 请求目的端口
- 响应目的端口 = 请求源端口
- 传输协议(UDP/TCP)保持不变。
2.8 标准发布订阅全流程(车载最常用)
- 服务端上电 → 周期发送
OfferService(宣告服务IP、端口、事件组); - 客户端收到服务公告 → 发送
SubscribeEventgroup订阅指定事件组; - 服务端回复
SubscribeAck(告知组播地址/接收端口); - 服务端按规则推送事件/字段通知;
- 客户端下电/主动退订 → 发送
StopSubscribeEventgroup; - 服务端下电 → 发送
StopOfferService清理全网状态。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)