ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

50 极物科技 | KNX协议 - KNXnet/IP报文结构逐字节解析

50 极物科技 | KNX协议 - KNXnet/IP报文结构逐字节解析 极物科技 | KNX协议 - KNXnet/IP报文结构逐字节解析前言KNX 作为国际标准ISO/IEC 14543-3拥有完全开放的协议规范与蓬勃的开源生态knxd 正是这一开放性的最好注脚——一台普通 Linux 设备即可变身 KNX 路由器。极物科技的产品同样构建在开放标准之上自研 KNX 主机的极物 OS 原生支持 KNXnet/IP 路由与隧道双通道与 knxd、ETS 等主流工具链无缝互通配套鸿蒙、苹果、安卓三端原生 APP深度接入 Apple HomeKit 与小度生态支持主机远程调试——工程调试不受任何私有协议锁定。一句话概述本文拿三帧真实抓包报文一个字节一个字节拆给你看——读完任何KNXnet/IP帧都能当场人肉解码。本文聚焦于KNXnet/IP 报文结构的逐字节解析涵盖报文头、隧道通道头、CEMI各字段、1bit与1字节写入帧对比、组地址与APCI编码换算。1. 三帧真实报文以下为隧道模式下主机下发的三帧原始报文十六进制帧A向组地址写入 1bit值0 06 10 04 20 00 15 04 71 00 00 11 00 bc e0 00 00 00 2a 01 00 80 帧B向组地址写入 1字节值50%0x80 06 10 04 20 00 16 04 71 01 00 11 00 bc e0 00 00 00 25 02 00 80 80 帧C向组地址写入 1字节值100%0xff 06 10 04 20 00 16 04 71 02 00 11 00 bc e0 00 00 00 25 02 00 80 ff三帧分别对应关灯bit“调光50%”调光100%三个动作。下面对帧B做完整拆解。2. 第一层KNXnet/IP 报文头6字节06 10 04 20 00 16 │ │ │ └─ 总长度 0x0016 22字节含头 │ │ └─ 服务类型 0x0420TUNNEL_REQUEST 隧道数据 │ └─ 协议版本 0x10KNXnet/IP 1.0 └─ 头长度 6字节服务类型速查前两字节固定06 10看后四字节即可分类值服务用途0x0420TUNNEL_REQUEST隧道数据帧本例0x0421TUNNEL_ACK隧道确认0x0530ROUTING_INDICATION组播路由数据帧0x0201~0x0209搜索/描述/连接管理设备发现与会话0x0407CONNECTIONSTATE_REQUEST心跳保活 抓包第一眼看到06 10 04 20开头隧道数据帧06 10 05 30开头组播路由帧。3. 第二层隧道通道头4字节04 71 01 00 │ │ │ └─ 保留位 0 │ │ └─ 序列号 1每发一帧1模256循环 │ └─ 通道号 0x71连接时网关分配 └─ 结构长度 4字节三帧的序列号依次是00 → 01 → 02这就是隧道的顺序保障机制对端按序号ACK乱序/丢帧立即发现。工程含义抓包看到序列号跳变链路丢帧先查网络再看网关。4. 第三层CEMI 逐字段拆解CEMICommon External Message Interface承载KNX链路层帧帧B的CEMI部分共12字节11 00 bc e0 00 00 00 25 02 00 80 804.1 消息码与附加信息11 00字节值含义00x11消息码 L_Data.req数据传输请求主机→总线方向总线→主机为L_Data.ind0x2910x00附加信息长度 0无附加信息4.2 控制域bc e0bc 1011 1100 ││││ └─ 帧类型标准帧 │││└── 重复标志非重复帧 ││└─── 广播抑制不抑制 │└──── 优先级低优先级 └───── 确认请求不需要ACK e0 1110 0000 └── 跳数计数 6每过一个路由器-1归零丢弃 地址类型 组地址bit704.3 源地址与目的地址00 00 / 00 25字节值含义4~500 00源地址主机侧未指定隧道模式下由网关填入6~700 25目的组地址 0/0/37组地址换算3级格式 主/中/子按(主11)|(中8)|子编码0x0025 0000 0000 0010 0101 主 0x0025 11 0 → 0/ 中 (0x0025 8) 7 0 → 0/ 子 0x0025 0xFF 37 → 0/0/37帧A的目的地址是00 2a 0/0/42反推方法相同。4.4 数据长度与数据02 / 00 80 80字节值含义802数据长度 2字节含TPCI/APCI所在字节比纯数据多1900TPCI传输层控制数据包无序号10~1180 80APCI 数据APCI编码10字节的高6位是APCI低2位并入数据0x80 1000 0000 APCI 0b100000 → GroupValue_Write组值写入 低2位 数据前2个bit所以帧B的80 80APCI写入数据字节0x80。对DPT 5.001百分比来说0x80128→50%。帧C的ff255→100%。5. 三帧对比总结帧A关灯帧B调光50%帧C调光100%总长212222序列号000102目的地址0/0/420/0/370/0/37数据长度010202数据bit00x8050%0xff100%尾字节00 8000 80 8000 80 ff1bit帧的精妙之处bit数据直接塞进APCI字节的低2位不额外占字节——总长因此少1字节21 vs 22。这也是为什么开关量报文和调光报文长度不同抓包时可据此快速区分。6. 人肉解码流程卡拿到任意一帧06 10 ...报文按以下顺序读① [2:4] 服务类型 → 判断隧道/路由/管理帧 ② [4:6] 总长度 → 校验帧完整性 ③ 隧道帧[6:8]通道 [8]序号 → 会话与顺序 ④ CEMI[10]消息码 → 请求还是指示 ⑤ [12:14]目的地址 → 反算 主/中/子 ⑥ [16]数据长度 → 数据字节数 ⑦ [17]TPCI [18]APCI → 读/写/应答 ⑧ [18]剩余bit [19:] → 按DPT换算工程值7. 注意事项长度字段包含自身总长度、数据长度都要1看数据长度含APCI字节bit与byte的写入帧长度不同调光地址若误配成1bit DPT抓包看到长度01即可发现源地址在隧道帧中可能是0真实源地址由网关在L_Data.ind帧中填入别把00 00当异常跳数计数默认6跨多路由器的工程注意报文被丢弃必要时链路层配置加大编码换算百分比/温度类工程值必须按DPT编码表换算详见《KNX协议 - APCI指令与数据点类型DPT详解》“写50不等于发0x50”。8. 相关文档《极物科技 | KNX协议 - CEMI报文格式详解》《极物科技 | KNX协议 - APCI指令与数据点类型DPT详解》《极物科技 | knxd - Wireshark抓包与总线监控》《极物科技 | KNX协议 - Tunneling隧道协议详解》《极物科技 | knxd - TCP与Unix Socket接口对接》关于极物科技ZEEWO极物科技Zeewo致力于为用户提供智能控制系统及硬件产品。我们以总线系统为技术底座以**“稳定、可靠、快速响应”**为产品底线是国内少有的拥有 KNX、DALI 全套软硬件自主研发能力的厂商之一。我们的核心能力系统架构自研极物 OS支持多协议无界融合KNX/DALI/CAN/RS485/IP。核心硬件带双路 DALI 的 KNX 主机、超薄全金属定制面板、各类智选传感器及网关。生态互联深度融入 Apple HomeKit、Matter、小度、HomeAssistant 及纯血鸿蒙生态。调试交付独家支持 ETS 导出 XML 直接导入进行 APP 免编程调试支持远程 WEB 运维。我们的市场覆盖服务网点已覆盖全国核心城市含长三角、珠三角、成渝等并以高品质的方案深耕家居生活、酒店民宿、企业办公、疗愈康养、餐馆会所等多个细分领域。(如果您在开发或落地中遇到技术问题欢迎通过官网或后台私信与我交流探讨)
返回列表