第二十六篇技术笔记:郭大侠学DoIP - 芝麻芝麻开开门,路由激活不求人
写在开篇上回说到郭靖搞清楚了车辆发现的“亮帖子”规矩——车主动递上VIN、EID、逻辑地址让诊断仪知道“我是谁”。那天回到家郭靖心里美滋滋的觉得DoIP也没那么难嘛。黄蓉看他那副得意样忍不住泼冷水“靖哥哥你光会‘亮帖子’有啥用人家门还没给你开呢。你亮完帖子门房知道了‘你来了’但你还没报‘你是谁’、‘你要找谁’呢。”郭靖一愣“这……这还要报”黄蓉白了他一眼“当然你去桃花岛找我爹不给门房报你的名号不报你要找谁人家能让你进”郭靖挠挠头第二天又拉着黄蓉跑去找郎中。“郎中蓉儿说我光会‘亮帖子’没用还得‘报身份’、‘找对人’。这到底咋回事”郎中捋着胡子笑了“郭大侠黄姑娘说得对亮完帖子只是第一步。接下来才是关键——路由激活。就像您去山寨递了名帖门房还得问‘您从哪来找谁’报对了人家才开门让您进。”黄蓉咬了一口糖葫芦“对嘛这就叫——芝麻芝麻开开门路由激活不求人”郎中竖起大拇指“黄姑娘这个比喻绝了今天咱们就讲讲——DoIP的‘开门暗号’。”一、什么是路由激活——进门前的“报身份”郎中用笔在白板上写了四个字路由激活“郭大侠您亮完帖子之后诊断仪知道了‘车在这、车的逻辑地址是多少’。但车还不知道诊断仪是谁。”“您得主动报身份——告诉车‘我是诊断仪我的逻辑地址是0x0E80我想跟网关说话。’”“这就是路由激活请求Payload Type 0x0005。”郭靖问“那车听完之后呢”郎中继续画“车收到你的‘报身份’之后会检查——你的逻辑地址合法吗这个地址之前有人用过吗如果没问题就给你开门。”“这就是路由激活响应Payload Type 0x0006。车会说‘行进来吧你可以开始诊断了。’”黄蓉插嘴“这不就跟山寨门房一样嘛——你递了名帖亮帖子门房问你‘哪路的找谁’路由激活请求你看对路了门房说‘进来吧’路由激活响应。”郎中哈哈大笑“黄姑娘总结得太到位了”二、路由激活的数据包长啥样郭靖问“郎中那这个‘报身份’的报文长啥样我看看。”路由激活请求诊断仪 → 车字节偏移字段值说明0-1源逻辑地址SA0x0E 0x80诊断仪的逻辑地址2激活类型0x000x00默认0x01WWH-OBD0x03中央安全3-4保留0x00 0x00全0江湖版郭靖站在门前喊“桃花岛郭靖工号0x0E80来造访”路由激活响应车 → 诊断仪字节偏移字段值说明0响应码0x100x10成功其他拒绝1-2反向逻辑地址0x0E 0x80确认你的逻辑地址3保留0x00全0江湖版门房翻开登记簿一看“桃花岛郭靖工号0x0E80没问题郭大侠请进”郭靖盯着看了半天“郎中这个响应码还有别的值吗万一人家不让进呢”郎中点头“当然有0x10是‘请进’其他都是‘不行’——”三、响应码大全——门房的“开门”或“闭门羹”响应码含义江湖版0x10激活成功“郭大侠请进”0x00不支持的源逻辑地址“你这工号我们这儿不认识”0x01源地址冲突“这个工号已经有人用了”0x02激活错误“门禁系统出故障了稍后再来”0x03连接已激活“您已经报过了门已经开了”黄蓉咬了一口糖葫芦“靖哥哥你要是拿着0x00的工号去人家直接把你轰出来。”郭靖挠挠头“那我的诊断仪该用啥逻辑地址”郎中解释“逻辑地址是有范围的——后市场诊断仪通常用0x0E80到0x0EFF。您要是填个0x0001网关肯定回您一个0x00——‘不认识滚’。”四、路由激活的“安全门禁”郭靖问“郎中那万一有人冒充我呢比如他用我的逻辑地址来敲门”郎中笑了“郭大侠您问到点子上了路由激活就是DoIP的‘安全门禁系统’。”安全机制作用江湖版逻辑地址验证只允许有效范围的地址门房手里有“合法工号名单”源地址冲突检测同一地址不能同时激活两次工号不能重复使用防止“一人占两岗”连接绑定激活成功后诊段消息必须来自同一TCP连接门开了之后认准你这个人换个人说话不理黄蓉插嘴“哦所以就算有人偷了靖哥哥的工号他用不同的TCP连接来敲门门房一看‘这个工号已经在别的门用过了’直接就拒绝了”郎中竖起大拇指“就是这个理而且更高级的还支持WWH-OBD认证——激活类型字段填0x01那就不是光看工号了还得对暗号、验指纹。”五、一张图看懂从亮帖子到开门郎中在白板上画了一张完整的流程图┌─────────────────────────────────────────────────────────────┐ │ DoIP“江湖规矩”完整版——亮帖子 报身份 开门 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ① 激活线拉低 │ │ 诊断仪插上车辆被唤醒 │ │ ↓ │ │ ② 车辆主动亮帖子车辆发现 │ │ “我在这儿这是我的VIN、MAC、逻辑地址” │ │ Payload Type 0x0004 │ │ ↓ │ │ ③ 诊断仪报身份路由激活请求 │ │ “我是诊断仪我的工号是0x0E80我想进门” │ │ Payload Type 0x0005 │ │ ↓ │ │ ④ 网关查工号验证 │ │ - 工号在合法范围吗 │ │ - 工号冲突吗 │ │ - 需要额外认证吗 │ │ ↓ │ │ ⑤ 网关给回应路由激活响应 │ │ “工号验证通过郭大侠请进” │ │ Payload Type 0x0006响应码0x10 │ │ ↓ │ │ ⑥ 开始诊断 │ │ 诊断消息 / Payload Type 0x8001 │ │ │ └─────────────────────────────────────────────────────────────┘六、这些坑靖哥哥替你先踩了坑1以为“亮完帖子就能直接诊断”。后来才搞明白还得报身份路由激活人家批准了才能开始。坑2以为“逻辑地址可以随便填”。后来才搞明白逻辑地址有合法范围。填个0x0001网关直接回你0x00——“不认识”。坑3以为“路由激活只用UDP”。后来才搞明白路由激活用的是TCP端口13400。因为要可靠传输、要建立会话绑定UDP干不了这个活。坑4以为“一个TCP连接只能激活一次”。后来才搞明白每个TCP连接独立激活但同一个逻辑地址不能在多个连接上同时激活——防止“一人占两岗”。黄蓉补刀“靖哥哥你要是用同一个工号同时敲东门和西门门房直接把你轰出去”郭靖憨笑“蓉儿你又取笑我……我这不是在学嘛。降龙十八掌也不能同时打两个人啊”七、下步目标路由激活搞清楚了——“芝麻开门”的暗号、逻辑地址验证、响应码含义。郭靖点点头“郎中我现在知道怎么‘亮帖子’、怎么‘报身份’了。门开了之后我就能进去‘看病’了吧”郎中笑了笑“对门开了之后就可以正式开始诊断了——发UDS命令、读故障码、刷固件。这就是咱们下一篇要讲的——诊断消息。”黄蓉把最后一颗糖葫芦咬下来含混不清地说“靖哥哥你今天学会了‘开门’明天是不是该学学‘看病’了”郭靖憨憨一笑“蓉儿说得对。明天学诊断消息去”于是小两口又开心恩爱地开着国产智能网联新车幸福地回家喽。八、写在最后这一篇最大的收获路由激活就是DoIP的“芝麻开门”——诊断仪报上自己的逻辑地址工号网关验证通过后开门。响应码0x10是“请进”其他都是“闭门羹”。郭靖感叹原来跟车说话也得讲规矩——亮帖子、报身份、等开门一步都不能少。打完收工886。