SOME/IP協議詳解 基礎解讀 涵蓋SOME/IP協議解析 SOME/IP通訊機制 協議特點 錯誤處理機制

車載以太網協議棧總共可劃分為五層,分別為物理層,數據鏈路層,網絡層,傳輸層,應用層,其中今天所要介紹的內容SOME/IP就是一種應用層協議

SOME/IP協議內容按照AUTOSAR中的描述,我們可以更進一步的拆分為三類子協議:應用層的SOME/IP標準協議,SOME/IP-SD協議以及TP層的SOME/IP-TP協議。

SOME/IP協議特點

特點

描述

Serialization(序列化)

在ECU內部進行序列化及反序列化以實現信息的高效傳輸

Remote Procedure Calls(遠程調用)

該協議可以傳遞消息(作為字段發送)以及方法的遠程調用(實現過程/函數調用)

Service Discovery(服務發現)

SOME/IP協議的數據通信發生在客戶端-服務器模型中,同時服務器提供客戶端可以訂閱的許多不同服務。該協議允許客戶端動態查找服務、訂閱服務并配置對服務的訪問。

Publish/Subscribe(發布與訂閱)

SOME/IP中的數據通信通過發布/訂閱進行。客戶端可以訂閱服務器提供的服務,服務器可以向活躍的訂閱者發布通知。

Segementation of UDP message

每當服務器必須向活動訂閱者發送通知時,他們是通過UDP協議發送的。SOME/IP能夠在不需要任何分段的情況下傳送大型UDP消息。

SOME/IP協議解析

如果應用了 E2E 通信保護,則 E2E 報頭將放置在 Return Code 之后,具體取決于為 E2E 報頭選擇的偏移值。默認偏移值為 64 位,這將 E2E 報頭恰好放置在 Return Code 和 Payload 之間。

SOME/IP協議Header包含Message ID,Request ID, Protocal Version 以及Interface Version。

各字段解釋如下:

Item

Description

Message ID

前2個字節為Service ID,后2個字節為Method ID(每個服務僅定義一個唯一的Service ID,Method ID的最高位為0即為方法(包括Method Filed.Getter及Filed.Setter),最高位為1就為事件(包括Event和Filed.Notify))

Length

標識從Request ID開始至SOME/IP報文結束的長度

Request ID

前2個字節為Client ID,用來識別一個客戶端;后2個字節為Session ID,用來識別同一個客戶端的多次請求。(其中Client ID可通過配置前綴或者固定值來實現唯一性,可不進行Session處理,如果需要,則Session ID需根據各自的用例從0x0001遞增)

Protocol Version

協議版本號,目前固定為1

Interface Version

用來識別服務接口的主版本號,由用戶定義

Message Type

用來識別不同的消息類型,Message Type(8Bits)的Bit5標識TP-Flag,當TP-Flag=1時,標識一個TP類型的Message Type (當SOME/IP下層通信協議為UDP,且SOME/IP傳輸大數據(>1452Bytes)時,將使用SomeIpTp進行分段)

Return Code

用來指示Message是否被成功處理了,或針對請求中的錯誤內容進行反饋

E2E Header

可選是否使能,并且可變長度(默認長度是8Bytes),可選使用一種E2E profile(常用E2E Profile4)

Payload

有效載荷,序列化和反序列化定義了 PDU 中所有數據結構的確切位置,并且考慮了內存對齊

Message Type

用來識別不同的消息類型,目前存在的類型如下所示,其中TP表示分包的報文,按照AUTOSAR標準(R21-11)定義如下:

ID

Name

Description

0x00

REQUEST

A request expecting a response

請求并期待響應

0x01

REQUEST_NO_RETURN

A fire&forget request

請求但不期待響應

0x02

NOTIFICATION

A request for a notification expecting no response

通知/事件回調的請求,不期待有響應

0x40

REQUEST_ACK

Acknowledgment for REQUEST (optional)

REQUEST的ACK確認

0x41

REQUEST_NO_RETURN_ACK

Acknowledgment for REQUEST_NO_RETURN (informational)

REQUEST_NO_RETURN的ACK確認

0x42

NOTIFICATION_ACK

Acknowledgment for NOTIFICATION (informational)

NOTIFICATION的ACK確認

0x80

RESPONSE

The response message

響應

0x81

ERROR

The response containing an error

響應中包含的錯誤

0x20

TP_REQUEST

TP segment of a Request Message for methods

TP請求并期待響應

0x21

TP_REQUEST_NO_RETURN

TP segment of a Request Message for Fire & Forget methods

TP請求但不期待響應

0x22

TP_NOTIFICATION

TP segment of an Event (Notification) Message

TP通知/事件回調的請求,不期待有響應

0xA0

TP_RESPONSE

TP segment of a Response Message for methods

TP響應

0xA1

TP_ERROR

TP segment of an Error Message for methods

TP響應中包含的錯誤


Return Code

用來指示Message是否被成功處理了,或針對請求中的錯誤內容進行反饋,如下為AUTOSAR(R21-11)中定義的Return Code類型:

ID

Name

Description

0x00

E_OK

沒有錯誤發生

0x01

E_NOT_OK

發生了未定義的錯誤

0x02

SOMEIPXF_E_UNKNOWN_SERVICE

未知的服務ID

0x03

SOMEIPXF_E_UNKNOWN_METHOD

未知的Method ID

0x04

SOMEIPXF_E_NOT_READY

應用程序未就緒

0x05

SOMEIPXF_E_NOT_REACHABLE

運行該服務的系統不可用

0x06

SOMEIPXF_E_TIMEOUT

發生超時

0x07

SOMEIPXF_E_WRONG_PROTOCOL_VERSION

SOME/IP協議版本不支持

0x08

SOMEIPXF_E_WRONG_INTERFACE_VERSION

接口版本不匹配

0x09

SOMEIPXF_E_MALFORMED_MESSAGE

反序列化錯誤

0x0A

SOMEIPXF_E_WRONG_MESSAGE_TYPE

接收到不符合預期的消息類型

0x0B

E_E2E_REPEATED

E2E重復錯誤

0x0C

E_E2E_WRONG_SEQUENCE

E2E錯誤的時序

0x0D

E_E2E

沒有進一步的E2E錯誤

0x0E

E_E2E_NOT_AVAILABLE

E2E不可用

0x0F

E_E2E_NO_NEW_DATA

沒有E2E計算的新數據

0x10-0x1F

RESERVED

預留給到SOME/IP一般性錯誤

0x20-0x5E

RESERVED

預留給到服務及方法的特定錯誤

Payload的序列化與反序列化

SOME/IP報文收發的過程中,上層應用所定義的Method、Event、Field參數都是面向用戶的struct,string等,序列化就是將這些輸出參數轉換為字節流的過程;而反序列化的過程正好相反,就是將字節流反向解析成struct、string等具體的參數。

大小端:

SOME/IP報文的payload(負載)大小端(字節序)指的是數據在內存中的存儲和傳輸順序。在計算機系統中,數據的存儲和傳輸順序主要有兩種標準:大端字節序(Big-Endian)和小端字節序(Little-Endian)。

-大端字節序(Big-Endian):是指數據的高位字節存放在低地址處,而低位字節存放在高地址處。也就是說,從內存的起始位置開始,第一個字節是最高位字節。

-小端字節序(Little-Endian):是指數據的低位字節存放在低地址處,而高位字節存放在高地址處。在這個模式下,內存起始位置存放的是最低位字節。

SOME/IP報文的payload部分可以采用上述兩種字節序中的任何一種,這取決于數據交換雙方的協議約定或者通信端點的實現。在網格協議中,端字節序通常由協議規范明確指出。開發者在處理SOME/IPP報文時,必須確保發送方和接收方在端字節序上保持一致,以避免數據解析錯誤。

SOME/IP通信機制

服務發現(Service Discovery)

服務發現的通信機制是通過SOME/IP-SD協議實現的,主要是為了實現在車載以太網中告知客戶端當前服務實例的可用性及訪問方式,可通過Find Service 和Offer Service來實現。

SOME/IP 服務發現流程可以分為以下三大基本步驟:

Client通過發送Find Service的報文去尋找車載網絡中可用的服務實例;

Server接收到Client的Find Server后通過UDP發送Offer Service響應;

Client通過發送Subcribe Event Group去訂閱相關Event;

Server檢查是否滿足Client是否滿足訂閱條件,如果滿足回復ACK,如果不滿足,則回復NACK;

Client成功訂閱相關事件后,Server會按照事件本身屬性來實現對已訂閱該事件的Client的發布;

遠程進程調用(RPC)

遠程進程調用主要可分為四種通信模式:

Request/Response通信模式

可歸納為Method中的一種;其基本通信模型如下圖所示:

Request-Response模型作為一種最為常見的通信方式,其主要任務就是客戶端發送請求信息,服務端接收到請求,進行相關處理之后進行相應的響應。

Fire&Forget通信模式

可歸納為Method中的一種;

該通信模型的主要任務就是客戶端向服務端發送請求,服務端無需進行任何響應,有點類似診斷服務中的抑制正響應。

Notification Event通信模式

該通信模式主要描述了發布 /訂閱消息內容,主要任務就是為了實現客戶端向服務端訂閱相關的事件組,當服務端的事件組發生或者值發生變化時,就需要向已訂閱該事件組的客戶端發布更新的內容。

遠程進程控制(Field)

訪問進程通信機制主要是為了實現針對對應用程序的數據獲取與更改,主要任務就是實現客戶端通過Getter獲取Server的值,通過Setter設置Server的值。

Field就可理解為一個Service的基本屬性,可包含Getter,Setter,Notifier三種方式。其中Getter就是讀取Field中某個值的方法,Setter就是一種改變Field值的方法,而Notifier則是一種當Field中的值發生變化的觸發事件,發生變化時就通知Client。

錯誤處理機制

AUTOSAR為了更為高效的定位到通訊過程中的問題所在,制定了一套檢查SOME/IP協議格式內容的錯誤處理機制。比如版本信息檢查,服務ID等,其他故障信息可以在Payload中進行詳細定義。目前SOME/IP支持以下兩種錯誤處理機制,這兩種uowu處理機制可以根據配置進行選擇。

-消息類型0x80,Response信息,即可以通過Response Message中的Return Code來定位到問題所在;

-消息類型0x81,顯式的錯誤信息;

主要是校驗協議首部結構,對Message Type和Return code進行賦值,通知對端。


參考:

AUTOSAR SOME/IP Protocol Specification:https://www.autosar.org/fileadmin/standards/R19-11/FO/AUTOSAR_PRS_SOMEIPProtocol.pdf

智猩猩

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/66029.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/66029.shtml
英文地址,請注明出處:http://en.pswp.cn/web/66029.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

springboot vue uniapp 仿小紅書 1:1 還原 (含源碼演示)

線上預覽: 移動端 http://8.146.211.120:8081/ 管理端 http://8.146.211.120:8088/ 小紅書憑借優秀的產品體驗 和超高人氣 目前成為筆記類產品佼佼者 此項目將詳細介紹如何使用Vue.js和Spring Boot 集合uniapp 開發一個仿小紅書應用,憑借uniapp 可以在h5 小程序 app…

基于celery的任務管理,本文主要是處理自己的算法,暴露API,管理任務并發,多線程

基于celery的任務管理,本文主要是處理自己的算法,暴露API,管理任務并發,多線程 基本需求描述潛在問題主函數配置文件 基本需求描述 暴露API,供其他人調用算法。方便查看任務狀態。因為服務器資源有限,控制…

Java(7)常用的工具類

1.Collections集合工具類 內置了大量對集合操作的靜態方法,可以通過類名直接調用方法。 方法的種類:最大值max、最小值min、sort排序...詳見API幫助文檔 import java.util.ArrayList; import java.util.Collections; import java.util.List;public cl…

【Varnish】:解決 Varnish 7.6 CDN 靜態資源緩存失效問題

項目場景: 在一個使用Varnish作為反向代理的Web應用中,我們依賴CDN(內容分發網絡)來緩存靜態資源(如圖片、CSS、JavaScript文件等),以提高全球用戶的訪問速度并減輕源站服務器的負載。然而&…

理解機器學習中的參數和超參數

在機器學習中,參數和超參數是兩個重要但不同的概念,它們共同影響模型的性能和表現。以下是它們的定義和區別,以及如何通俗地理解它們: 1. 參數 定義 參數是模型在訓練過程中自動學習到的變量,它們直接決定了模型如何…

Win11右鍵菜單實現

主要參考Win11 Context Menu Demo 此工程是vs2022編譯,vs2019先修改下 base.h 方可編譯過 編譯好dll以后 拷貝至SparsePackage目錄下 生成稀疏包msix 就拿他工程里面的改,編輯AppxManifest.xml,配置都要對,一個不對可能都失敗&a…

R.swift庫的詳細用法

R.swift 是一個 Swift 工具庫,它提供了一個自動生成的類 R,使得你可以通過類型安全的方式訪問項目中的資源,例如圖片、字體、顏色、XIB 文件等。通過 R.swift,你可以避免字符串類型的錯誤,提升代碼的可維護性。 以下是 R.swift 庫的詳細用法: 1. 安裝 R.swift 使用 Sw…

像JSONDecodeError: Extra data: line 2 column 1 (char 134)這樣的問題怎么解決

問題介紹 今天處理返回的 JSON 的時候,出現了下面這樣的問題: 處理這種問題的時候,首先你要看一下當前的字符串格式是啥樣的,比如我查看后發現是下面這樣的: 會發現這個字符串中間沒有逗號,也就是此時的J…

what?ngify 比 axios 更好用,更強大?

文章目錄 前言一、什么是ngify?二、npm安裝三、發起請求3.1 獲取 JSON 數據3.2 獲取其他類型的數據3.3 改變服務器狀態3.4 設置 URL 參數3.5 設置請求標頭3.6 與服務器響應事件交互3.7 接收原始進度事件3.8 處理請求失敗3.9 Http Observables 四、更換 HTTP 請求實現…

Linux Kernel 之十 詳解 PREEMPT_RT、Xenomai 的架構、源碼、構建及使用

概述 現在的 RTOS 基本可以分為 Linux 陣營和非 Linux 陣營這兩大陣營。非 Linux 陣營的各大 RTOS 都是獨立發展,使用上也相對獨立;而 Linux 陣營則有多種不同的實現方法來改造 Linux 以實現實時性要求。本文我們重點關注 Linux 陣營的實時內核實現方法! 本文我們重點關注 …

【拒絕算法PUA】3065. 超過閾值的最少操作數 I

系列文章目錄 【拒絕算法PUA】0x00-位運算 【拒絕算法PUA】0x01- 區間比較技巧 【拒絕算法PUA】0x02- 區間合并技巧 【拒絕算法PUA】0x03 - LeetCode 排序類型刷題 【拒絕算法PUA】LeetCode每日一題系列刷題匯總-2025年持續刷新中 C刷題技巧總結: [溫習C/C]0x04 刷…

ClickHouse-CPU、內存參數設置

常見配置 1. CPU資源 1、clickhouse服務端的配置在config.xml文件中 config.xml文件是服務端的配置,在config.xml文件中指向users.xml文件,相關的配置信息實際是在users.xml文件中的。大部分的配置信息在users.xml文件中,如果在users.xml文…

《自動駕駛與機器人中的SLAM技術》ch9:自動駕駛車輛的離線地圖構建

目錄 1 點云建圖的流程 2 前端實現 2.1 前端流程 2.2 前端結果 3 后端位姿圖優化與異常值剔除 3.1 兩階段優化流程 3.2 優化結果 ① 第一階段優化結果 ② 第二階段優化結果 4 回環檢測 4.1 回環檢測流程 ① 遍歷第一階段優化軌跡中的關鍵幀。 ② 并發計算候選回環對…

type 屬性的用途和實現方式(圖標,表單,數據可視化,自定義組件)

1.圖標類型 <uni-icon>組件中&#xff0c;type可以用來指定圖標的不同樣式。 <uni-icons type"circle" size"30" color"#007aff"></uni-icons> //表示圓形 <uni-icons type"square" size"30" co…

網絡基礎知識指南|1-20個

1. IP地址: 即互聯網協議地址&#xff0c;是用于標識互聯網上的每一個設備或節點的唯一地址。IP地址的作用主要是進行網絡設備的定位和路由&#xff0c;確保數據包可以從源設備準確地傳送到目標設備。2. 子網掩碼: 是用于將一個IP地址劃分為網絡地址和主機地址的工具。它通常與…

GPT 系列論文精讀:從 GPT-1 到 GPT-4

學習 & 參考資料 前置文章 Transformer 論文精讀 機器學習 —— 李宏毅老師的 B 站搬運視頻 自監督式學習(四) - GPT的野望[DLHLP 2020] 來自獵人暗黑大陸的模型 GPT-3 論文逐段精讀 —— 沐神的論文精讀合集 GPT&#xff0c;GPT-2&#xff0c;GPT-3 論文精讀【論文精讀】…

lombok在高版本idea中注解不生效的解決

環境&#xff1a; IntelliJ IDEA 2024.3.1.1 Spring Boot Maven 問題描述 使用AllArgsConstructor注解一個用戶類&#xff0c;然后調用全參構造方法創建對象&#xff0c;出現錯誤&#xff1a; java: 無法將類 com.itheima.pojo.User中的構造器 User應用到給定類型; 需要:…

145.《redis原生超詳細使用》

文章目錄 什么是redisredis 安裝啟動redis數據類型redis key操作key 的增key 的查key 的改key 的刪key 是否存在key 查看所有key 「設置」過期時間key 「查看」過期時間key 「移除」過期時間key 「查看」數據類型key 「匹配」符合條件的keykey 「移動」到其他數據庫 redis數據類…

大數據技術Kafka詳解 ⑤ | Kafka中的CAP機制

目錄 1、分布式系統當中的CAP理論 1.1、CAP理論 1.2、Partitiontolerance 1.3、Consistency 1.4、Availability 2、Kafka中的CAP機制 C軟件異常排查從入門到精通系列教程&#xff08;核心精品專欄&#xff0c;訂閱量已達600多個&#xff0c;歡迎訂閱&#xff0c;持續更新…

riscv架構下linux4.15實現early打印

在高版本linux6.12.7源碼中&#xff0c;early console介紹&#xff0c;可參考《riscv架構下linux6.12.7實現early打印》文章。 1 什么是early打印 適配內核到新的平臺&#xff0c;基本環境搭建好之后&#xff0c;首要的就是要調通串口&#xff0c;方便后面的信息打印。 正常流…