问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

汽车网络通讯协议详解:SOME/IP及SOME/IP-SD

创作时间:
作者:
@小白创作中心

汽车网络通讯协议详解:SOME/IP及SOME/IP-SD

引用
CSDN
1.
https://m.blog.csdn.net/Jessica_zhu1/article/details/143589819

SOME/IP(Scalable Service-Oriented Middleware over IP)是一种基于IP的可扩展服务导向中间件协议,广泛应用于汽车网络通讯领域。本文将详细介绍SOME/IP的定义、分层结构、消息类型、传输协议、报文格式、序列化与反序列化等核心概念,并深入介绍SOME/IP-SD的服务发现订阅机制。

SOME/IP介绍

什么是SOME/IP?

SOME/IP(可扩展服务导向中间件协议,Scalable Service Oriented MiddlewarE over IP)是一种专为汽车网络设计的通讯协议,具有以下特点:

  • 可扩展性:在不同硬件平台、操作系统或嵌入式固件的设备之间具有良好的可扩展性和互操作性。
  • 面向服务:仅在客户端请求或服务器通知特定订阅者时交换数据,确保带宽不被浪费。
  • 中间件:位于应用层,有自己的通用协议层来处理具体的操作和应用。
  • 基于IP:使用以太网协议,支持高达100Mbps的带宽,数据通过TCP/IP或UDP协议进行通信。

OSI七层协议模型

在理解SOME/IP之前,我们需要了解OSI七层协议模型:

  • 应用层(第7层):产生要在网络上传输的数据,协议有HTTP、SMTP、FTP、DNS等。
  • 表示层(第6层):负责数据的转换、加密/解密、压缩,协议有JPEG、MPEG、TLS/SSL等。
  • 会话层(第5层):建立、管理和终止会话,提供身份验证和安全性,协议有RPC、NetBIOS等。
  • 传输层(第4层):负责端到端的数据传输,协议有TCP、UDP等。
  • 网络层(第3层):负责数据包路由,协议有IP协议。
  • 数据链路层(第2层):负责节点到节点的消息传递,封装MAC地址。
  • 物理层(第1层):负责设备之间的物理连接,传输比特信息。

TCP/IP四层模型

TCP/IP模型在OSI基础上进一步划分,SOME/IP位于应用层。

SOME/IP的消息类型

SOME/IP通过网络提供面向服务的通信,基于服务定义的功能列表。服务可以由Event、Method和Field的组合构成。

Event(事件)

提供周期性或变化时从提供者发送到订阅者的数据。

  • 周期性更新:定期发送数据。
  • 变化时更新:当数据发生变化时发送。
  • 阈值更新:当变化超过设定阈值时发送。

Method(方法)

允许订阅者在提供者端执行远程过程调用。

  • RR Method(Request/Response):客户端发送请求,服务器响应。
  • F&F Method(Fire/Forget):客户端发送请求后无需等待响应。

Field(字段)

Field可以包含以下一个或多个:

  • Notifier:将更改数据从提供者发送到订阅者。
  • Getter:订阅者可以显式查询提供者值。
  • Setter:订阅者可以改变提供者端的值。

Field/Notifier与Event的主要区别在于,当第一次订阅成功时,Field/Notifier的Server会主动发送一个字段值,而Event则需要等待事件触发。

SOME/IP的传输协议

SOME/IP支持两种传输协议:TCP和UDP。

  • TCP:提供可靠通信,处理比特错误、分段、丢失、重复、重新排序和网络拥塞。
  • UDP:精简的传输协议,只支持多路复用和错误检测,适合需要快速响应的应用。

使用规则:

  • 需要传输大块数据(>1400Mbps)且对错误有严格延迟要求时使用TCP。
  • 需要非常严格的延迟要求(<100ms)时使用UDP。
  • 需要传输大块数据(>1400KB)且有严格延迟要求时使用UDP与SOME/IP-TP。

SOME/IP的报文格式

SOME/IP报文由Header和Payload组成,Header包含以下字段:

  • Message ID (Service ID/Method ID) [32 Bits]
  • Length [32 Bits]
  • Request ID (Client ID/Session ID) [32 Bits]
  • Protocol Version [8Bits]
  • Interface Version [8 Bits]
  • Message Type [8 Bits]
  • Return Code [8 Bits]

带E2E通信保护的SOME/IP报文格式在返回代码之后增加了E2E报文头。

序列化与反序列化

序列化是将数据结构转换为可传输的字节流格式,反序列化则是重建对象的原始状态。序列化的目的是保持传输数据的完整性和可传递性。

基本数据类型的序列化

基本数据类型包括布尔值、无符号整数、有符号整数和浮点数等,每种类型都有固定的位数。

结构体的序列化

结构体成员按顺序序列化,可以增加Length Field表示结构体中数据元素的字节长度。

字符串序列化

字符串序列化支持UTF-8、UTF-16BE和UTF-16LE编码,定长字符串以BOM开头,变长字符串在BOM前增加Length Field。

数组序列化

数组序列化包括定长数组和变长数组,变长数组需要配置Length Field。

SOME/IP-SD (服务发现/订阅)

SOME/IP-SD是基于SOME/IP的报文,主要用于服务发现寻址和发布/订阅,通过UDP进行传输。

SOME/IP-SD报文格式

SOME/IP-SD报文格式在SOME/IP报头基础上增加了Flags、Reserved、Length of Entries Array、Entries Array、Length of Options Array和Options Array等字段。

Entries Array包含Service Entry和Eventgroup Entry两类:

  • Service Entry:用于服务寻址,包含Type Field、Index、Service ID、Instance ID、Major Version、TTL和Minor Version等字段。
  • Eventgroup Entry:用于事件订阅,包含Type Field、Index、Service ID、Instance ID、Major Version、TTL、Reserved、Counter和Eventgroup ID等字段。

Options Array包含以下几种类型:

  • Endpoint Option:用于发送信号的端点信息,包括IPv4和IPv6端点选项。
  • Multicast Option:用于服务器/客户端的多播地址信息,包括IPv4和IPv6多播选项。
  • Configuration Option:用于传输配置字符串。
  • Load Balancing Option:用于服务实例的优先级和权重设置。

不同类型的Entry允许携带的Option类型及个数关系如下:

类型
Endpoint
Multicast
Configuration
Load Balancing
FindService
0
0
0-1
0-1
OfferService
1-2
0
0-1
0-1
StopOffer Service
1-2
0
0-1
0-1
Subscribe Eventgroup
0-2
0-1
0-1
0-1
StopSubscribe Eventgroup
0-2
0-1
0-1
0-1
Subscribe EventgroupAck
0
0-1
0-1
0-1
Subscribe EventgroupNack
0
0
0-1
0-1
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号