SOME/IP介绍
什么是SOME/IP?
SOME/IP (可扩展服务导向中间件协议,Scalable Service Oriented MiddlewarE over IP)
- ”可扩展“-在不同硬件平台、不同操作系统或嵌入式固件已经不同应用软件的以后设备之间的可扩展性和互操作性
- ”面向服务“-表明它是一种面向服务的基本协议。因此仅当客户端请求或服务器通知特定订阅者时,才在客户端-服务器配置中交换数据 ,这就确保了永远不会浪费带宽,并且仅在需要的时间和地点进行数据通信/交换。
- ”中间件“-它也是一种中间件。即其位于应用层,有自己的通用协议层来处理更具体的操作及应用;
- ”基于IP“-它也是一个基于以太网的协议。 它使用类似的硬件接口,确保高达 100Mbps 的带宽。 同时数据通过中间件(即应用层)通过网络电缆使用 TCP/IP 或 UDP 协议进行通信。 当客户端需要来自服务器的数据时,它可由客户端使用
TCP 协议进行请求。 如果服务器必须将数据传送给所有活动的订阅者,则可通过 UDP 协议传输。 UDP
协议上的数据通信可以是单播、多播或广播。
OSI七层协议模型
首先,我们需要了解在计算机领域的一种标准化网络通信协议框架。也就是OSI七层协议模型,是ISO国际标准化提出的一个试图使各种计算机在世界范围内互连为网络的标准框架。
- (第7层)应用层
位于OSI参考模型层次结构的最顶层,由网络应用实现。这些应用产生要在网络上传输的数据。应用层还为应用服务提供访问网络的窗口,并向用户显示接收到的信息。。该层协议有HTTP(超文本传输协议)、SMTP(电子邮件传输协议)、FTP(文件传输协议)、DNS(用于将域名转换为IP地址的分布式数据库系统,它允许用户通过输入易于记忆的域名来访问互联网上的资源,而无需记住复杂的IP地址)等。 - (第6层)表示层
也叫翻译层。表示层负责提取应用层的数据如文字、图像、音频等,并按照网络传输所需的格式进行转换、加密/解密、压缩。该层协议有JPEG、MPEG、GIF、HTML、ASCII、TLS/SSL(加密保护协议)等。 - (第5层)会话层
负责建立连接,管理连接,终止两个设备之间的会话。提供身份验证和安全性。该层协议有RPC(远程过程调用,用于分布式系统)、NetBIOS(网上基本输入输出系统,用于局域网通信)、PPTP(点对点隧道协议,用于虚拟专网VPN)等. - (第4层)传输层
为应用层提供服务,并从网络层获取服务。传输层负责完整消息的端到端传递,将来自会话层的信息进行分段重组,并提供成功数据传输的确认,在发现错误时重传数据。该层协议有TCP(传输控制协议,有连接可靠)、UDP(用户数据报协议,无连接不可靠)等 - (第3层)网络层
网络层用于将数据从一台主机传输到位于不同网络中的另一台主机。它还负责数据包路由,即从可用的路由中选择传输数据包的最短路径。该层协议IP协议(网际互连协议) - (第2层)数据链路层
负责节点到节点的消息传递。它的主要功能是确保数据在物理层上无误地从一个节点传输到另一个节点。数据链路层将从网络层接收到的数据包进一步划分为帧,并在帧中封装发送者和接收者的MAC地址。 - (第1层)物理层
负责设备之间的实际物理连接。它传输的信息单位是比特,负责从一个节点向另一个节点传输单个比特。
TCP/IP四层or五层模型
是TCP/IP在OSI基础上进一步划分的
SOME/IP的分层结构
基于TCP/IP的五层协议,SOME/IP位于应用层。
SOME/IP的消息类型
SOME/IP通过网络提供面向服务的通信。它基于列出服务提供的功能的服务定义。服务可以由零个或多个Event(事件)、Method(方法)和Field(字段)的组合组成。
Event(事件)
提供数据,这些数据周期性地或在发生更改时从提供程序发送到订阅程序。
发送策略:
- cyclic update 周期发送
例,每过50ms发送一次信息。 - update on change 有变化时发送
例,当车门状态由开启变为关闭时,发送信息。 - epsilon change 变化超过阈值时发送
例,当预测值和当前值之间的差大于阈值时,才发送更新
Method(方法)
为订阅者提供了发出在提供者端执行的远程过程调用的可能性。
-
RR Method(Request/Response)
请求/相应方法,即Clinet客户端发送请求给Server,Server受到请求后,再给Client恢复响应。属于同步调用
-
F&F Method (Fire/Forget)
发射后不管,翻译过来听起来很奇怪吧。实际上Fire/Forget这个词汇最早是描述一种导弹制导方式。即在发射后不需要进一步的外部干预,例如目标照明或有线制导,并且可以在发射器不在目标视线内的情况下击中目标。在这里表示Client客户端只对Server服务器发送请求,无需响应。
Field(字段)
以下三个字段中的一个或多个的组合:
- Notifier 通知 :将有关更改的数据从提供者发送到订阅者
- Getter 获取:订阅者可以调用它来显式地向提供者查询值
- Setter 设置:当订阅者想要改变提供者端的值时,可以调用它。
Field/Notifier与Event的区别:
Field/Notifier的发送策略和Event一致,区别在于当第一订阅成功时, Field/Notifier的Server服务端会主动发送一个字段值,此时Client客户端可以立即获得Field的初始值,不用等待事件触发。
SOME/IP的传输协议
SOME/IP支持两种传输协议:用户数据报协议(UDP)和传输控制协议(TCP)
TCP
TCP添加了额外的功能来实现可靠的通信。TCP不仅处理比特错误,还处理分段、丢失、重复、重新排序和网络拥塞。
UDP
UDP是一种非常精简的传输协议,只支持最重要的功能(多路复用和使用校验和进行错误检测)
在车辆内部,许多应用需要非常短的超时时间才能快速做出反应。使用UDP可以更好地满足这些要求,因为应用程序本身可以处理不太可能发生的错误。例如,在使用循环数据的情况下,最好的方法通常是等待下一次数据传输,而不是尝试修复上一次数据传输。UDP的主要缺点是它不处理分段。因此,只能传输较小的数据块。
使用规则:
- 仅当需要传输非常大的数据块(> 1400 Mbps)并且在错误情况下没有硬延迟要求时,才使用TCP
- 如果需要非常严格的延迟要求(<100 ms)以防止错误,则使用UDP
- 如果需要传输非常大的数据块(> 1400 KB),并且存在错误情况下的硬延迟要求,则将UDP与SOME/IP-TP一起使用
SOME/IP的报文格式
SOME/IP由Header(报文头)和 Payload构成,其中协议头部里的字段是:
-
Message ID (Service ID/Method ID) [32 Bits]
消息ID(服务ID/方法ID)[32位]
报文唯一的标识符 -
Length [32 Bits]
长度[32位]
Length字段后包括数据的长度 -
Request ID (Client ID/Session ID) [32 Bits]
请求ID(客户端ID/会话ID)[32位]
Client ID:区分请求同一服务Service的不同客户端
Session ID:同一客户端请求同一服务Service的次数
-
Protocol Version [8Bits]
协议版本[8位] -
Interface Version [8 Bits]
接口版本[8位] -
Message Type [8 Bits]
消息类型[8位]
值 | 字段 | 描述 |
---|---|---|
0x00 | REQUEST | 期望有响应的请求 |
0x01 | REQUEST_NO_RETURN | 不期望有响应的请求 |
0x02 |