首页 > 其他分享 >SomeIP 协议格式解析

SomeIP 协议格式解析

时间:2024-05-11 14:09:05浏览次数:20  
标签:SomeIP uchar ushort .... 格式 Message 解析 Type ID

一、SomeIP 协议格式

// SomeIP 协议格式
SomeIP {
    ushort svcID; //Service ID; 标识出一个服务
    ushort mthdID;//Method ID; 标识出一个方法
    uint   length;//Length (此字节之后的长度)
    ushort cliID; //Client ID; 客户端ID,区分不同客户端
    ushort ssID;  //Session ID; 区分统一客户端的多次调用
    uchar  ver{0x01}; //SOME/IP Version; 协议版本号;固定为0x01
    uchar ifcVer; //interfaceVer; 服务接口版本
    uchar  type;  // | Message Type [.... xxxx]  报文类型,目前共5种
    bool   isAck; // | Message Type [.x.. ....]  Message Type Ack Flag
    bool   isTP;  // | Message Type [..x. ....]  Message Type TP Flag
    uchar  retCode;//返回码Return Code (0x00 Ok) ;
    char[] payload;//数据段
}
其中 Message Type 取值及含义如下表:
————————————— ————————————————— ————————————————
Message Type  报文类型           说明
0x00          REQUEST           请求,需要回复
0x01          REQUEST_NO_RETURN 请求,不需要回复
0x02          NOTIFICATION      Notifier/Event,不需要回复
0x80          RESPONSE          回复
0x81          ERROR             错误
————————————— ————————————————— ————————————————

 

 

二、SomeIP-SD 协议格式

 SOME/IP SD 只用 UDP 协议的 30490 端口通信。

SOME/IP SD 提供了两种动态发现服务的机制。
一种是 Offer Service(Type = 0x01),由服务端广播其提供的服务;
另一种是 Find Service(Type = 0x00),由客户端请求可用的服务。


SOME/IP SD 用于提供服务、发现服务、订阅事件组。

 

 1 // Entry 有服务和 EventGroup 两种:
 2 // 有的类型具有相同的值,这时需要通过 Entry 中的 TTL 字段来区分到底是 Start 还是 Stop,是ACK 还是 NACK。
 3 enum EntryType : uchar {
 4     FindService = 0x00,
 5     OfferService = 0x01,
 6     StopOfferService = 0x01,
 7     SubscribeEventgroup = 0x06,
 8     StopSubscribeEventgroup = 0x06,
 9     SubscribeEventgroupAck = 0x07,
10     SubscribeEventgroupNAck = 0x07
11 }
12 Entry {
13     EntryType type; // enum EntryType
14     uchar     opt1stInd; //Option1排在Array里第几个
15     uchar     opt2stInd; //Option2排在Array里第几个
16     uchar     opt1st; //Option1的数目
17     uchar     opt2st; //Option2的数目
18     ushort    svcID;  // service ID
19     ushort    instID; // instance ID ; 0xFFFF表示全部实例
20     uchar     majorVer;
21     uchar[3]  ttl; // time to live; “Entry”的生命周期,单位为秒
22     union {
23       uint    minorVer;
24       struct  group{
25         uchar reserved{0x00};
26         bool  idrf;      // | [x... ....] Inital Data Requested Flag; 如初始值由服务发送,须置为1
27         uchar reserved_; // | [.xxx ....]
28         uchar counter;   // | [.... xxxx] 区分相同订阅者的订阅请求
29         ushort groupID;  //Event Group ID; 事件组ID,也就是说SOME/IP事件订阅和取消订阅的颗粒度到一个事件组,而不是一个事件
30       };
31     };
32 }
33 //Option 字段用来传输 Entry 的附加信息,包括对于服务实例的 IP 地址、传输协议、端口号等信息。
34 enum OptionType :uchar {
35     Configuration = 0x01, //用于传输Entry的附加信息,比如服务名等等
36     IPv4_Endpoint = 0x04, //用于传输IPv4相关的参数,比如服务的IP地址、TCP还是UDP、端口号
37     IPv6_Endpoint = 0x06,
38     IPv4_Multcast = 0x14,
39     IPv6_Multcast = 0x16
40 }
41 Option {
42     ushort   length; //
43     OptionType  type; // enum OptionType
44     uchar    reserved;
45     uchar[]  data; //包括服务实例的 IP 地址、传输协议、端口号等信息。
46 }
47 // SomeIPSD 协议格式
48 SomeIPSD {
49     ushort svcID{0xFFFF}; //Service ID; 固定值 0xFFFF
50     ushort mthdID{0x8100};//Method ID;  固定值 0x8100
51     uint   length;//Length (此字节之后的长度)
52     ushort cliID; //Client ID; 客户端ID,区分不同客户端
53     ushort ssID;  //Session ID; 区分统一客户端的多次调用
54     uchar  ver{0x01}; //SOME/IP Version; 协议版本号;固定为0x01
55     uchar  ifcVer{0x01}; //interfaceVer; 服务接口版本;固定为0x01
56     uchar  type{0x02}; // | Message Type [.... xxxx]  报文类型;固定为0x02
57     bool   isAck;      // | Message Type [.x.. ....]  Message Type Ack Flag
58     bool   isTP;       // | Message Type [..x. ....]  Message Type TP Flag
59     uchar  retCode{0x00};//返回码Return Code;固定为0x00
60     //uchar  flags; //重新启动标志+单播标志+显示初始数据控制标志
61     bool   flagReboot;  // | [x... ....] Reboot Flag ; 服务重新启动后,所有消息的Reboot Flag须置为1,直到Session ID重新从1开始计数,之后的Reboot Flag须置为0。
62     bool   flagUnicat;  // | [.x.. ....] Unicast Flag
63     bool   flagExplicit;// | [..x. ....] Explicit Inital Data Requested Flag
64     uchar  reserved[3]{0x00};//保留
65     uint   entrySize;//Length of Entries Array
66     Entry[entrySize]  entris;// entrySize 个 Entry
67     uint   optionSize;//Length of Options Array
68     Option[optionSize] options;// optionSize 个 Option
69 }

 

 

参考1: https://www.cnblogs.com/tengzijian/p/15360205.html
参考2: https://blog.csdn.net/xllhd100s/article/details/112309194

标签:SomeIP,uchar,ushort,....,格式,Message,解析,Type,ID
From: https://www.cnblogs.com/lzpong/p/18186396

相关文章

  • 格式和协议_数据传输和持久化
    数据格式:序列化:序列化最终的目的是为了对象可以跨平台存储和进行网络传输ProtocolBuffersParquet是一种列式存储格式,旨在提供一种高效的方式来存储和处理大型数据集 Parquet不是“运行时内存格式”,它属于文件格式Avro格式是一种远程过程调用(RPC)和数据......
  • Java拦截器(Interceptor)详细解析
    转载链接地址:https://www.cnblogs.com/xiaoyh/p/16444681.html一、拦截器概念讲解拦截器的概念之前,我们先看一张图: (1)浏览器发送一个请求会先到Tomcat的web服务器(2)Tomcat服务器接收到请求以后,会去判断请求的是静态资源还是动态资源(3)如果是静态资源,会直接到Tomcat......
  • tar文件header的格式和构造
    Header定义//standardarchiveformat-standardtar-ustarstructTarHeader{charname[100];//0-99charmode[8];//100-107charuid[8];//108-115chargid[8];//116-123charsize[12];//124-135charm......
  • 这款PDF解析工具,精准触达大模型问答应用的需要
    过去的一年,是大语言模型快速发展的一年。大模型强大的语言理解能力,逐渐让用户习惯了将各类文章丢给大模型,让它来帮忙总结提炼。从产品角度看,这是一次10倍体验的飞跃,意味着巨大的市场机会。也因此,市面上涌现出了大量的文档+大模型的应用。但大多数的开发者普遍都会遇到一个问题,那......
  • 如何快速断行、分割行、切割行、换行、限制每行字数、平均分割每行字数、序号自动换行
    首先,需要用到的这个工具:度娘网盘提取码:qwu2蓝奏云提取码:2r1z 打开工具,切换到“文章工作域”(嗯...默认就是) 找到这个,多内容断行分割点击打开,出现如下窗口设置   相关的设置都在上面,涉及的功能有:限制每行字数、根据行数均等字数的换行、整理出指定关键内容起......
  • c# 图片格式转换
    ImageConvert(@"E:\素材\xx.png",@"E:\素材\xx.ico");publicstaticvoidImageConvert(stringimagePath,stringoutPath){Imageimg=Image.FromFile(imagePath);varwidth=32;varheight=32;Sizesize;if((w......
  • 解析 Grand Central Dispatch(GCD)的详细使用方法
    GrandCentralDispatch(GCD)是苹果提供的一种用于管理多线程编程的技术,它提供了一种简单而强大的方式来实现并发任务的调度和执行。本文将详细介绍GCD的使用方法,并提供一些常用的示例。1.DispatchQueue(调度队列)调度队列是GCD中用于管理任务执行的核心概念,它分为两种类型:串......
  • 解析 iOS 中的响应链(Responder Chain)
    在iOS应用程序中,响应链(ResponderChain)是一种重要的事件传递机制,用于处理用户输入和触摸事件。本文将详细讲解什么是响应链,以及它在iOS中的作用和原理。1.什么是响应链?响应链是iOS应用程序中用于处理用户输入和触摸事件的一种事件传递机制。在响应链中,事件会从发生事件的......
  • CSS在线格式化、美化、压缩工具
    网上有不少CSS格式化压缩的工具,但是不少站点有广告干扰,或操作起来不方便,或打开速度比较慢,所以自己定制了这个css格式化压缩的工具,也希望对大家有帮助,提供的这个CSS代码格式化和css在线压缩工具,不需要下载使用YUICompressor或CSSTidy等离线格式化工具,直接在线压缩操作即可。免......
  • html格式化压缩美化工具
    html格式化工具为您提供html格式化,html美化排版,html压缩工具,html在线格式化,html代码在线格式化,html在线压缩,html格式化,可以将凌乱的前端html代码整理的整整齐齐,凌乱的html代码不好调试,冗余代码多了也会严重影响速度,当你在为提高了用户体验,做出了很绚丽的效果而欣喜的时候......