doip协议

DOIP: DoIP协议为车辆诊断协议提供了基于ip的标准实现方式,工作在TCP/IP之上的又一个应用层协议 其中协议内容包含了DoIP版本号、版本号的逆、消息类型、消息的长度、消息内容,如下图所示
image.png

1.1协议进行整理与具象化

1.2 数据类型分类

  • 节点管理报文(0x0000—0x0008)
  • 车辆信息获取报文(0x4001—0x4004)
  • 诊断报文(0x8001—0x8003)

Overview of DolP payload types table

Payload Type Value Payload Type Name Support DOIP Gateways Support DOIP Nodes Port and Protocol
0x0000 Generic Dolp header negative acknowledge Mandatory Mandatory UDP_DISCOVERY UDP_TEST_EQUIPMENT_REQUEST TCP_DATA
0x0001 Vehicle identification request message Mandatory Mandatory UDP_DISCOVERY
0x0002 Vehicle identification request message with EID Optional Optional UDP_DISCOVERY
0x0003 Vehicle identification request message with VIN Mandatory Mandatory UDP_DISCOVERY
0x0004 Vehicle announcement message/vehicle identification response message Mandatory Mandatory UDP_DISCOVERY UDP_TEST_EQUIPMENT_REQUEST
0x0005 Routing activation request Mandatory Mandatory TCP_DATA
0x0006 Routing activation response Mandatory Mandatory TCP_DATA
0x0007 Alive check request Mandatory Mandatory TCP_DATA
0x0008 Alive check response Mandatory Mandatory TCP_DATA
0x0009 to 0x4000 Reserved by this part of ISO 13400 - - -
0x4001 DolP entity status request Optional Optional TCP_DATA
0x4002 DolP entity status response Optional Optional TCP_DATA
0x4003 Diagnostic power mode information request Mandatory Mandatory TCP_DATA
0x4004 Diagnostic power mode information Mandatory Mandatory TCP_DATA
0x4005 to 0x8000 Reserved by this part of ISO 13400 - - -
0x8001 Diagnostic message Mandatory Mandatory TCP_DATA
0x8002 Diagnostic message positive acknowledgement Mandatory Mandatory TCP_DATA
0x8003 Diagnostic message negative acknowledgement Mandatory Mandatory TCP_DATA
0x8004 to 0xEF00 Reserved by this part of ISO 13400 - - -
0xEF01 to 0xFFFF Reserved for manufacturer-specific use Optional Optional -
负载类型值 负载类型名称 支持DOIP网关 支持DOIP节点 端口和协议
0x0000 通用Dolp头负载类型否定确认 必须 必须 UDP_DISCOVERY UDP_TEST_EQUIPMENT_REQUEST TCP_DATA
0x0001 车辆识别请求消息 必须 必须 UDP_DISCOVERY
0x0002 车辆识别请求消息带EID 可选 可选 UDP_DISCOVERY
0x0003 车辆识别请求消息带VIN 必须 必须 UDP_DISCOVERY
0x0004 车辆公告消息/车辆识别响应消息 必须 必须 UDP_DISCOVERY UDP_TEST_EQUIPMENT_REQUEST
0x0005 路由激活请求 必须 必须 TCP_DATA
0x0006 路由激活响应 必须 必须 TCP_DATA
0x0007 存活检查请求 必须 必须 TCP_DATA
0x0008 存活检查响应 必须 必须 TCP_DATA
0x0009到0x4000 本ISO 13400部分保留 - - -
0x4001 DolP实体状态请求 可选 可选 TCP_DATA
0x4002 DolP实体状态响应 可选 可选 TCP_DATA
0x4003 诊断电源模式信息请求 必须 必须 TCP_DATA
0x4004 诊断电源模式信息 必须 必须 TCP_DATA
0x4005到0x8000 本ISO 13400部分保留 - - -
0x8001 诊断消息 必须 必须 TCP_DATA
0x8002 诊断消息正向确认 必须 必须 TCP_DATA
0x8003 诊断消息否定确认 必须 必须 TCP_DATA
0x8004到0xEF00 本ISO 13400部分保留 - - -
0xEF01到0xFFFF 制造商特定用途保留 可选 可选 -

UDP_DISCOVERY 主要用于广播或组播请求,以发现网络中的DoIP节点 端口号: 通常为30490
UDP_TEST_EQUIPMENT_REQUEST 用于特定DoIP节点之间的通信请求 端口号: 通常为 30491

1.3doip 头处理流程

当作为 doip 的主体收到 doip 消息 后 首先对 DOIP 数据头进行检测 也就是分别对版本、反版本 消息类型 、消息长度进行检测 ,对应错误进行回复 NRCK。流程如下 :

我们可以看到我在回复的 NRCK 已经标注 payload type 是 0x0000 (Generic Dolp header
negative acknowledge),为什么呢? 因为在检测头的时候你并知道 payload type 或 payload type
异常,所以协议规定了使用 0x0000 作为回复的类型。 还有协议中还规定了 不同的 NACK CODE 我们要分清楚,每个 paylode
的 NACK code 都不同的规定。下面将详细看一下。而且支持 udp tcp.

1.4 数据类型分类详解

1.4.1 节点管理类型详解

① 0x0000:Generic DoIP header negative acknowledge
当DoIP节点收到的DoIP报文的报头不符合规则时,返回该数据类型的报文。该报文的数据部分只包含1字节的否定响应码(Generic DoIP header NACK code )

value description Required action Support
0x00 Incorrect pattern format Close socket mandatory
0x01 Unknown payload type Discard DolP message mandatory
0x02 Message too large Discard DolP message mandatory
0x03 Out of memory Discard DolP message mandatory
0x04 Invalid payload length Close socket mandatory
0x05 to 0xFF Reserved by this part of lS0 13400 - -
描述 必要操作 支持
0x00 格式错误 关闭套接字 必须的
0x01 未知载荷类型 丢弃DolP消息 必须的
0x02 消息过大 丢弃DolP消息 必须的
0x03 内存不足 丢弃DolP消息 必须的
0x04 无效载荷长度 关闭套接字 必须的
0x05至0xFF ISO 13400本部分保留 - -

② 0x0001:Vehicle identification request message 该报文中只包含DoIP报头,没有数据。
该类型报文可以用来请求网络中DoIP节点的车辆信息,诊断设备用UDP报文向网络中发送该报文,来获取被诊断节点的VIN、GID、EID、逻辑地址等信息。 该报文的目的端口为UDP_DISCOVERY
③ 0x0002:Vehicle identification request message with EID
该类型报文可以用来请求网络中DoIP节点的车辆信息,诊断设备用UDP报文向网络中发送该报文,只是在请求报文的数据中搭载了6字节EID,可请求指定EID的DoIP节点的其它车辆信息,用于被诊断节点的EID已知的情况。
EID是DoIP节点的唯一识别标识符,一般会被设置为该节点的MAC地址
该报文的目的端口为UDP_DISCOVERY
④ 0x0003:Vehicle identification request message with VIN

  • 27
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值