Do/IP协议介绍

DO/IP协议简介

        DO/IP协议是基于TCP和UDP协议的中间件,实现外部诊断仪和车内ECU基于以太网的安全通讯,传递UDS应用层服务数据。OBD与网关建立通讯需要先通过激活线激活网关。数据在传输的的过程中需要通过DO/IP网关将UDS数据转发给CAN/CAN FD、LIN等其他网络,实现车内ECU的OTA等功能。DO/IP协议有不同的版本。

0b7ffdfc7965486189314d86753b1b0d.png

DO/IP协议数据帧

35251363f1b64320894f0622482c6017.png

Protocol version:表示当前传输的数据遵循DoIP协议的版本。

Inverse protocol version:用于对协议版本进行校验,协议版本取反。

Payload type:表示DoIP的数据载体的类型,例如:0x8XXX诊断类。

Payload length(有效负载长度):表示DoIP数据的长度。

诊断仪与DO/IP网关建立连接的流程

        这是大致流程,安全验证算法会有所不同。

f1b04d0a613640d4902ff16be1b1cd16.png

建立连接过程的状态切换

ca62c51cf9384661984afcd6c7fdfa5a.png

OBD的引脚定义

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码是一个网络抓包程序的一部分,用于监听和处理网络数据包。函数StartSniffing接收一个SOCKET类型的参数sniffer,它表示一个已经打开的网络套接字。函数首先动态分配了一个大小为65536字节的缓冲区,然后进入一个无限循环。 在循环中,函数使用recvfrom函数从套接字sniffer接收数据,并将数据存储到缓冲区Buffer中。如果成功接收到数据(mangobyte大于0),函数将调用ProcessPacket函数来处理收到的数据包。如果接收数据失败,函数会打印错误信息。 ProcessPacket函数根据收到的数据包的协议类型进行处理。它首先将Buffer强制转换为指向IPV4_HDR结构体的指针iphdr,然后增加计数器total。接下来,函数使用switch语句根据协议类型执行相应的操作: - 如果协议类型是1(ICMP协议),增加icmp计数器,并调用PrintIcmpPacket函数打印ICMP数据包的内容。 - 如果协议类型是2(IGMP协议),增加igmp计数器。 - 如果协议类型是6(TCP协议),增加tcp计数器,并调用PrintTcpPacket函数打印TCP数据包的内容。 - 如果协议类型是17(UDP协议),增加udp计数器,并调用PrintUdpPacket函数打印UDP数据包的内容。 - 如果协议类型不是以上任何一种,则增加others计数器。 最后,函数会打印当前各个协议类型数据包的计数情况,并继续循环接收和处理数据包。当接收到的数据包大小为0时,循环会退出,函数释放之前动态分配的缓冲区内存。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值