AUTOSAR (AUTomotive Open System ARchitecture) is a worldwide development partnership of vehicle manufacturers, suppliers, service providers and companies from the automotive electronics, semiconductor and software industry.
這是一個(gè)由整車(chē)廠,零配件供應(yīng)商,以及軟件、電子、半導(dǎo)體公司合起來(lái)成立的組織,從2003年以來(lái), 致力于汽車(chē)電子行業(yè)提供一個(gè)開(kāi)放、標(biāo)準(zhǔn)的軟件架構(gòu)。
核心成為有9個(gè),分別為:博世,大陸,大眾,豐田,通用,PSA,福特,寶馬,奔馳。
SOMEIP : Scalable service-Oriented MiddlewarE over IP
SOMEIP 通信單元理解:
- SOMEIP 面向 service ,和service 相對(duì)的就是需要申請(qǐng)服務(wù)和訂閱需求的client。
- 提供service 服務(wù)的 是一個(gè)個(gè) servcie instance ,每個(gè)servcie instance 有一個(gè) servcie id , 和 client 的client id 相對(duì)應(yīng)。
- service 提供 interface 可以通過(guò) service discover 協(xié)議廣播出去。
- service interface 包括提供的method,field 和 event服務(wù)。 event服務(wù)通過(guò)eventgroup 進(jìn)行組訂閱,避免event 服務(wù)碎片化。
- Field 有 setter 、gettter、notifier 可選組成,至少有一個(gè)。
- Setter 、getter 以及 method ,notifier 和一組 message 相對(duì)應(yīng)。
- 一組 messages 里邊 對(duì)應(yīng)notifier 只提供單項(xiàng)的event 服務(wù)。 setter ,getter 消息組 包括request 和 response message。
- message 中 包括 some/ip header 和 payload。 payload 根據(jù)具體情況進(jìn)行區(qū)分。
SOMEIP 協(xié)議已經(jīng)有開(kāi)源實(shí)現(xiàn), ghub 項(xiàng)目地址 : https://github.com/GENIVI/vsomeip。
SOME/IP HeaderPayLoad 根據(jù)不同的應(yīng)用場(chǎng)景再進(jìn)行區(qū)分。
針對(duì)各個(gè)字段理解如下:
MessageID 是一個(gè)籠統(tǒng)的概念,因?yàn)?SOMEIP 是面向service 的, 一般 MessageID 會(huì)進(jìn)一步分解為 service ID 和 method ID 或者 event ID。 如圖所示:
Length field shall contain the length in Byte starting from Request ID/Client ID until the end of the SOME/IP message.
Request IDPRS_SOMEIP_00043: The Request ID shall be unique for a provider- and subscriber-combination ,這一句應(yīng)該是說(shuō)對(duì)于 provider,針對(duì)同一個(gè) subscriber 針對(duì)不通的method 類請(qǐng)求,要使用不同的 request ID,這個(gè)ID 是 subscriber 自己生成的。 包括請(qǐng)求里邊的session ID 也是 subscriber 自己生成的。 對(duì)于 subscriber 它不關(guān)系 這個(gè)request ID,response的時(shí)候,直接copy 對(duì)應(yīng)的字段,填進(jìn)去即可。
那么 有沒(méi)有 可能provider 收到兩個(gè) request_ID 是一樣的消息呢? 有可能, 收到,反正它也不關(guān)注。 PRS_SOMEIP_00704 做了response 的說(shuō)明。只是copy 過(guò)來(lái),填進(jìn)去。 區(qū)分不同的client 實(shí)體,是通過(guò) udp 或tcp 的通信協(xié)議地址來(lái)的。 針對(duì)同一個(gè)client 中不通進(jìn)程的請(qǐng)求,應(yīng)該是通過(guò)udp或 tcp 的port 進(jìn)去分析, 不同線程的請(qǐng)求,是通過(guò) client_id 來(lái)區(qū)分的。 我是這樣理解的。
Request ID 是 Client 用來(lái)請(qǐng)求 method 時(shí)區(qū)分不通的 method ,同時(shí)也要能區(qū)分不同的 client.
在 AUTOSAR 中 將Request ID 分成兩部分。
The Protocol Version identifies the used SOME/IP Header format
針對(duì)SOMEIP 頭的版本定義,方便對(duì)頭進(jìn)行解析。
針對(duì) Service 做的版本定義,一般應(yīng)該都是1。用來(lái)做,針對(duì)service 的的向后兼容。
Interface Version shall be an 8 Bit field that contains the Major
Version of the Service Interface
用來(lái)定義不通的Message ,如是Request 還是 Response,是正常response 還是異常 Response。Request 是否需要 Response等。
SOME/IP-TP: 非tcp 的 在SOMEIP 棧解決的分段協(xié)議, 全稱: Transporting large SOME/IP messages of UDP.
TP header OFFSET 的理解
PayLoadTP header ,放在 SOMEIP header之后, payload 之前, 包括 一個(gè) offerset value, 由于offset 占用的是高28位,第二個(gè)字節(jié)的高四位協(xié)議要求填0, 所以 第一個(gè)字節(jié) 的值的單位 是 16個(gè)字節(jié) 。 比如 協(xié)議上列舉的1392 ,第一個(gè)字節(jié) 是 0x57. 加上第二個(gè)字節(jié)高四位 ,就是 “0101 0111 0000” 。 0x57 就是 協(xié)議上說(shuō)的 87。
PayLoad 大不超過(guò)1400字節(jié), 是為了后續(xù) header 變化做了預(yù)留。
The size of the SOME/IP payload field depends on the transport protocol used. With UDP the SOME/IP payload shall be between 0 and 1400 Bytes. The limitation to 1400 Bytes is needed in order to allow for future changes to protocol stack (e.g. changing to IPv6 or adding security means).
PayLoad 主要是解決parameter的序列化問(wèn)題。核心就是序列化的規(guī)則(要考慮到解析效率,所以一般都需要進(jìn)行對(duì)齊)。
對(duì)齊的意義:
There are processor architectures which can access data more efficiently (i.e. master) when they start at addresses which are multiples of a certain number (e.g multiples of 32 Bit).
要對(duì)齊進(jìn)行 Padding,padding的東西一般都要丟棄,解析一般只管自己要的,其他都丟棄(前提是message 相關(guān)字段檢查沒(méi)問(wèn)題)。
Paramter 可以分為 固定長(zhǎng)度考慮和非固定長(zhǎng)度考慮,固定長(zhǎng)度的,可以考慮不用長(zhǎng)度前綴,非固定長(zhǎng)度的必須要有長(zhǎng)度前綴,方便進(jìn)行數(shù)據(jù)分割解析。
The serialization of a struct shall be close to the in-memory layout. This means, only the parameters shall be serialized sequentially into the buffer. Especially for structs it is important to consider the correct memory alignment.
Struct 由于嵌套存在嵌套,尤其是內(nèi)部有array 或者 strings 類型的,長(zhǎng)度不固定。 當(dāng)前也有固定長(zhǎng)度的struct ,但是大部分可能不太固定。
Wire Type 協(xié)議描述如下:
wire type 4 ensures the compatibility with the current approach where the size of length fields is statically configured. This approach has the drawback that changing the size of the length field during evolution of interfaces is always incompatible. Thus, wire types 5, 6 and 7 allow to encode the size of the used length field in the transferred byte stream. A serializer may use this, if the statically configured size of the length field is not sufficient to hold the current size of the data struct.
String 分為 fixed 和 dynamic 的。 String 一般序列化結(jié)構(gòu)是 BOM(Byte order Mark)+ content + 結(jié)束符。 結(jié)束符根據(jù)是否 UTF-8 可以分為 “\0” 或者 “\0\0”,動(dòng)態(tài)的String 需要在BOM 之前加上 length 字段。
ArrayArray 不管是否fixed ,都要帶 length 。
枚舉定義使用 unsigned int 序列化。
BitfieldBitfield 轉(zhuǎn)化為 UNIT8,UNIT16,UNIT32等完成。
UnionUnion 結(jié)構(gòu)如下:
Pading Like this:
Someip-SD 是SOMEIP 的一個(gè)子協(xié)議,是在SOMEIP 協(xié)議層實(shí)現(xiàn)的一個(gè) Discover 協(xié)議,主要解決 service 發(fā)現(xiàn) ,事件訂閱管理等服務(wù)區(qū)。 有了SD 協(xié)議, SOMEIP的應(yīng)用場(chǎng)景更加靈活。
SOMEIP-SD Header
Flags 字段定義:
Entry 可以分為兩類,一類是 Service Entry ,另外一類是 EventGroup 訂閱。
Type: 用來(lái)區(qū)分 ServiceEntry 類型; encodes FindService (0x00), OfferService (0x01) and StopOfferService (0x01) 。
Index of 1st options:這個(gè)值表示的是后續(xù)options 中的索引。
service entry 中包含的主要是一些ID 管理和識(shí)別類消息,其他entry content 需要通過(guò)options 進(jìn)行存放。 這個(gè)是用來(lái)描述1st 在options 中的位置。 不用看,options 也是一個(gè)數(shù)據(jù),數(shù)據(jù)長(zhǎng)度通過(guò)option 中的length來(lái)控制。(entry 大小固定為16個(gè)字節(jié),所以前邊+length 就可以知道 optional 的起始位置)。
#of opt 1: 定義 index of 1st options index 以后用了多少個(gè)option。0 表示沒(méi)有option。 and Index of 1st Options 要設(shè)置為0。
TTL: entry 的 lifetime ,不是太理解?
Value | Type Name |
---|---|
1 | Configuration Option |
2 | Load Balancing Option |
4 | IPv4 Endpoint Option |
6 | IPv6 Endpoint Option |
AutoSAR 官網(wǎng)連接: https://www.autosar.org
wireshark SOMEIP: https://www.cnblogs.com/fll0601/p/16058136.html
Git hub 地址
https://github.com/COVESA/vsomeip
windows: doxygen+graphviz生成工程中的類繼承樹(shù)及函數(shù)調(diào)用圖
http://t.zoukankan.com/chenyang920-p-5730149.html
graphviz 下載:
https://graphviz.org/download/
doxygen 下載:
https://www.doxygen.nl/download.html
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧