车载以太网之要火系列 - 第45篇:郭大侠学SOME/IP (Offer Service):上电主动会喊话,Offer告知我会啥

写在开篇·蓉儿继续挖坑

上回说到,郭靖搞清楚了SD报文长啥样------固定的FF FF 81 00身份证,里面包着SD头部、Entry和Option。

郭靖合上笔记本,信心满满:"蓉儿,SD报文我懂了!一个ECU有多个服务,可以塞多个Entry,一条报文全广播出去。"

黄蓉咬了口糖葫芦:"那好,我问你------服务端具体怎么广播?它什么时候开始喊?"

郭靖一愣:"上电就喊?"

黄蓉点头:"对!上电主动会喊话,Offer告知我会啥。 今天就把Offer Service讲透。"

一、Offer Service是什么

黄蓉在白板上写下定义:

Offer Service = 服务端主动广播"我提供什么服务,我在这里"

角色 动作 说明
服务端(如车窗ECU) 广播Offer "我会0x0300(车窗控制)、0x0301(位置Field),我在192.168.1.100"
客户端(如座舱) 接收Offer "哦,车窗服务在那,记下来"

"Offer是服务端的'自我介绍'。 上电后主动说,不用等客户端来问。"

二、一个完整的Offer报文示例

黄蓉调出一个左前车窗ECU广播Offer的完整报文(按字段分组):

FF FF | 81 00 | 00 00 00 30 | 12 34 | 00 01 | 01 | 01 | 02 | 00 | 01 | 02 | 00 00 | 00 14 | 03 00 | 00 01 | 00 00 00 03 | 00 14 | 03 01 | 00 01 | 00 00 00 03 | 01 | 00 06 | 11 | C0 A8 01 64 | 77 1E

黄蓉把它拆成三部分讲。

第一步:SOME/IP头部(12字节)

分组 说明
Service ID FF FF SD专用固定ID
Method ID 81 00 SD专用固定Method ID
Length 00 00 00 30 48字节
Client ID 12 34 0x1234
Session ID 00 01 0x0001
Message Type 02 NOTIFICATION

"看到FF FF 81 00,就知道这是SD消息。"

第二步:SD头部(4字节)

分组 说明
Version 01 SD版本1
Message Type 02 Offer Service
Reserved 00 00 保留
Entry Count 00 00 00 02 有2个Entry(这个ECU广播了2个服务)

"Entry Count告诉客户端:后面有2个Entry,一个一个解析。"

第三步:Entry 1(第一个服务)

分组 说明
Entry Type 00 01 Offer Service
Length 00 14 20字节
Service ID 03 00 车窗控制服务
Instance ID 00 01 左前窗
TTL 00 00 00 03 3秒
Option (见下面) 告诉客户端IP和端口

TTL(Time To Live):这个广播的有效期是3秒。客户端收到后,在3秒内认为这个服务存在。3秒后没收到续约,就认为服务下线了。

第四步:Entry 2(第二个服务)

分组 说明
Entry Type 00 01 Offer Service
Length 00 14 20字节
Service ID 03 01 车窗位置Field服务
Instance ID 00 01 左前窗
TTL 00 00 00 03 3秒

第五步:Option(IP地址和端口)

分组 说明
Option Type 01 IPv4 Endpoint
Option Length 00 06 6字节
Protocol 11 UDP(0x11)
IP地址 C0 A8 01 64 192.168.1.100
端口号 77 1E 30490

三、TTL是干啥用的?

郭靖盯着TTL字段:"TTL=3秒,意思是3秒后这个服务就没了?那车窗服务岂不是3秒就要下线?"

黄蓉摇头:"不是。TTL是告诉客户端:如果3秒内没收到新的Offer,就把这个服务从缓存里删掉。"

TTL值 含义
3秒 服务端会每隔1.5秒(TTL/2)重新广播一次
0秒 特殊值,表示"服务下线了,客户端请立即删除"

"TTL是给客户端用的'有效期',不是服务端自己的倒计时。"

四、多Entry的好处

黄蓉指着报文里的Entry Count=2:

"这个ECU提供了两个服务,一条SD报文全广播出去。如果每个服务单独发一次Offer,要发两条。现在一条搞定。"

场景 没有多Entry 有多Entry
一个ECU有10个服务 发10次广播 发1次广播
网络负载

五、客户端收到Offer后做什么

黄蓉画了座舱收到Offer后的处理流程:

复制代码
座舱收到SD报文(Offer):
  │
  ├── 解析SOME/IP头部 → 识别出是SD消息(FF FF 81 00)
  │
  ├── 解析SD头部 → Entry Count=2,准备解析2个Entry
  │
  ├── 解析Entry 1 → Service ID=0x0300,Instance ID=0x0001,TTL=3
  │
  ├── 解析Entry 2 → Service ID=0x0301,Instance ID=0x0001,TTL=3
  │
  ├── 解析Option → IP=192.168.1.100,Port=30490,Protocol=UDP
  │
  └── 存入服务缓存:
        “车窗控制服务(0x0300, 0x0001) 在 192.168.1.100:30490,有效期3秒”
        “车窗位置Field服务(0x0301, 0x0001) 在 192.168.1.100:30490,有效期3秒”

"以后座舱要调车窗服务,直接从缓存里查,不用每次都问。"

六、黄蓉的小本本

郭靖翻开她的笔记本,上面写着:

Offer Service核心要点:

1. 服务端主动广播:上电后主动说"我会啥,我在这"

2. TTL机制:告诉客户端有效期。服务端要定时续约,否则客户端TTL超时后删除

3. 多Entry:一个ECU有多个服务,一条SD报文全广播出去

4. Option:IP地址、端口、传输协议藏在Option里

5. 客户端行为:收到Offer后存入缓存,TTL超时未续约则删除

一句口诀:上电主动会喊话,Offer告知我会啥

写在最后

郭靖合上笔记本:"Offer是服务端上电后主动广播'我会啥'。TTL告诉客户端有效期,服务端要定时续约。多个Entry可以一次广播多个服务,不用一个个发。"

黄蓉咬了口糖葫芦:"知道了服务端怎么喊。那如果客户端启动晚了,没听到Offer怎么办?"

郭靖摇头。

"下篇预告:客户端主动问Find,谁会啥快出现------Find Service详解。"

打完收工,886。

相关推荐
虹科汽车电子3 天前
自动驾驶域控开发与测试实践:虹科车载以太网方案赋能L3量产落地
人工智能·自动驾驶·车载以太网·车辆网络通讯测试·自动驾驶域控开发
想成为优秀工程师的爸爸3 天前
车载以太网之要火系列 - 第40篇:郭大侠学SOME/IP - Method vs Event:一个一问一答,一个自己说话
车载以太网·some/ip·自学笔记
想成为优秀工程师的爸爸5 天前
车载以太网之要火系列 - 第37篇:郭大侠学SOME/IP - 玄之又玄谓之道,报文头中藏玄妙
车载以太网·some/ip·自学笔记
想成为优秀工程师的爸爸7 天前
车载以太网之要火系列 - 番外篇4:从DoIP到SOME/IP,一个初学者的“越级碰瓷”
网络协议·车载以太网
想成为优秀工程师的爸爸8 天前
车载以太网之要火系列 - 第35篇:郭大侠学UDS(34/36/37服务)- 环环相扣展神奇,丝滑更新不迷离
网络协议·uds·车载以太网
想成为优秀工程师的爸爸11 天前
车载以太网之要火系列 - 第33篇:郭大侠学UDS(10服务)- 桃花岛内规矩多,模式切换要会说
网络·笔记·网络协议·信息与通信·车载以太网
小丑小丑小丑4 个月前
【AP AUTOSAR】AUTOSAR_PRS_SOMEIPProtocol解读
autosar·车载以太网·some/ip·autosar ap
Ankie Wan4 个月前
SOME/IP: Scalable service-Oriented MiddlewarE over IP车载以太网的服务化通信协议
网络协议·tcp/ip·ecu·can总线·some/ip·autostar
EniacCheng5 个月前
【翻译】【SOMEIP-SD】Page93 - Page95
some/ip·some/ip-sd