车载以太网之要火系列 - 番外篇4:从DoIP到SOME/IP,一个初学者的“越级碰瓷”

车载以太网之要火系列 - 番外篇4:从DoIP到SOME/IP,一个初学者的“越级碰瓷” 写在开篇今晚有点晚来不及学多少了但还得来凑点字数。DoIPUDS的35篇笔记终于边学边写搞完了。从第21篇到第35篇说实话学得并不轻松。有些地方到现在还是迷迷糊糊的——比如27服务那几级权限我写的时候觉得自己懂了过两天再看又有点懵。还有刷固件那十六步顺序到现在都没完全背下来。但不管怎么说一路火花带闪电好歹是走完了。然后我就开始琢磨——DoIP是给车看病的那车正常跑的时候呢车里那么多ECU、域控制器它们之间是怎么聊天的摄像头怎么告诉域控制器“我看到人了”座舱怎么告诉音响“放首歌”BMS怎么告诉整车“我电量不多了”这些DoIP不管。那谁管江湖上有个大名鼎鼎的协议叫SOME/IP。我没学过但听说过。就像小时候听大人们聊“降龙十八掌”知道很厉害但具体怎么打不知道。这不刚学完DoIP心里痒痒的就想碰碰这个SOME/IP。有点像练武的人刚学会了一套拳就想去挑战隔壁门派的大弟子。越级碰瓷自不量力但忍不住。一、先搞清楚SOME/IP是干啥的我翻了翻资料大概弄明白了一件事DoIP是“诊”——车坏了才用。SOME/IP是“聊”——车正常开着的时候各个模块之间互相通信。举个不太恰当的例子DoIP 你去医院看病。医生问你“哪儿不舒服”你说“头疼”医生给你开药。一问一答有来有回。SOME/IP 你身体里各个器官自己聊天。心脏跟肺说“我要血”肺说“我给你氧气”。不用你去指挥它们自己协调。黄蓉如果我笔下真有黄蓉的话肯定会说“哦DoIP是看病SOME/IP是养生”差不多就是这个意思。二、传统方式 vs SOME/IP车载通信的老祖宗是CAN总线。CAN总线的特点是广播。不管哪个节点发消息全车都能收到。不管你需不需要都得听。就像你在小区楼下喊了一嗓子“今天吃饺子”全楼的人都听见了。想听的听见了不想听的也听见了。浪费带宽还吵。SOME/IP不一样。它是面向服务的——谁需要谁调用不需要的不打扰。比如座舱域控制器想放个音乐它只需要跟音响说一声就行。BMS、VCU、ADAS这些模块根本不需要知道有人在放歌。这就叫服务调用。更厉害的是SOME/IP还支持服务发现。音响启动后会在网络上喊一嗓子“我支持放音乐服务”座舱域控制器听到了记在小本本上“哦音响会放音乐以后找它。”不用提前配IP、配端口动态发现即插即用。这点比DoIP灵活多了——DoIP都要提前约好逻辑地址SOME/IP是自动找。三、SOME/IP的四种“说话方式”我翻了翻资料SOME/IP主要有四种通信模式模式怎么玩举个栗子Request-Response你问一句它答一句座舱问“当前车速多少”VCU答“80km/h”FireForget你喊一声不管它回不回座舱喊“开窗”BCM收到就开不回话Event出事了自己往外喊BMS检测到电压异常主动报“我要炸了”Field订阅某个状态变了就通知座舱订阅“车门状态”门一开就收到通知这不就跟UDS有点像UDS是请求/响应SOME/IP是请求/响应事件订阅。但UDS是给人看病SOME/IP是给机器聊天。目标不一样手段也不一样。四、SOME/IP和DoIP到底啥关系我试着总结了一下对比维度DoIPSOME/IP全称Diagnostic over IPScalable Service-Oriented MiddlewarE over IP我的理解给车看病车里模块自己聊天啥时候用车坏了、刷固件车正常跑的时候谁说话诊断仪 ↔ ECUECU之间、域控制器之间通信模式请求/响应请求/响应 事件 订阅/发布端口1340030490常见配置底层都是UDP/TCP都是车载以太网都是UDP/TCP都是车载以太网所以它们不是谁替代谁而是分工不同DoIP负责“保健”车出问题了去修。刷固件、读故障码、清DTC。SOME/IP负责“干活”车正常开所有模块互相配合。摄像头传数据、座舱调音量、BMS汇报电量。一个管“生病”一个管“生活”。五、我为什么想碰SOME/IP学完DoIP总感觉车载以太网这块还有一大片空白。DoIP只是冰山一角而且是“应急用”的那一角。真正的车载以太网每天都在跑着大量的SOME/IP消息——座舱和音响聊天ADAS和摄像头聊天BMS和VCU聊天……这些消息长什么样怎么抓包怎么解析我不知道。但我想知道。就像练武的人学会了一套拳法总想知道下一套是什么。虽然现在的我刚摸到门离精通还差十万八千里。虽然学DoIP的时候很多地方还在迷迷糊糊。但不去碰永远不知道。六、写在最后这篇番外不算技术笔记。更像是一个初学者的一点碎碎念——DoIP刚学完还没捂热就想去碰SOME/IP。明知越级但还是忍不住。不指望一篇番外就能搞懂SOME/IP只是想给自己挖个坑先记下来“有这么一个东西”以后慢慢填。毕竟降龙十八掌也不是一天练成的。DoIP写完了SOME/IP……再说吧。打完收工886。