十分钟读懂智能电表 DLMS/COSEM 通信:Wireshark 抓包与排障实操
十分钟读懂智能电表 DLMS/COSEM 通信:Wireshark 抓包与排障实操
【免费下载链接】wiresharkRead-only mirror of Wireshark's Git repository at https://gitlab.com/wireshark/wireshark. You're welcome to submit pull requests there.项目地址: https://gitcode.com/gh_mirrors/wi/wireshark
一个台区集中器回传曲线,某块电表整点数据缺失,而链路监测却显示"在线"。与其换设备碰运气,不如先接入 Wireshark 做一轮智能电表协议分析:把集中器上行口旁路抓下来,逐条核对 DLMS/COSEM 报文交互,往往比猜测快得多。下面按协议分工、抓包配置、读包路径、排障思路四步走。
📡 协议栈速览:DLMS 与 COSEM 各管什么
先弄清分工,再看包:
- COSEM(用电设备对象模型):定义电表内部的数据对象,寄存器(Register)、标度值、冻结值等都以"对象地址 + 属性索引"的方式寻址,例如
0-0:40.00.41.00.02指向某个电能寄存器。 - DLMS(设备语言消息规范):负责连接与事务,关联请求(AARQ/AARE)、鉴权方式、Get/NEXT 读操作都走这一层。
- 两者通常承载在 TCP 或 UDP 上,常见服务端口为4059。
Wireshark 自带对应解析器,协议主逻辑在 packet-cosem.c,COSEM 的 ASN.1 数据定义在 cosem.asn。想弄清某个字段为什么被解析成那样,翻这两个文件比查手册直接。
🎯 4059 端口捕获配置要点
在捕获选项中选择对应网卡,捕获过滤器输入tcp port 4059;如果链路走 UDP,改用udp port 4059。几个经验提醒,不算手册步骤:
- 环形缓冲建议开。现场丢包有时就丢一两帧,环形缓冲能保住最近一段流量,让你有机会复现异常时刻。
- 文件大小上限 + 按大小分割。连续采集可能跑几天,单个巨型文件对打开、传输、归档都是灾难。
- 注意 Promiscuous 模式和链路层头选项,别因为一个旁路口把同段其他业务也拖下水。
🔍 读包:从 AARQ 握手到 Get/NEXT 对象
以一次正常会话为例。开头是电表侧发来的 AARQ(关联请求)与服务端回应的 AARE,里面敲定 HN 协议版本、鉴权方式与安全设置,这一轮走通关联才成立。随后服务端连续发 Get-Request 和 NEXT,逐对象遍历;每个对象在详情区会展开成对象地址加属性索引,你可以直接对照表计点定义核对读的是哪路电能。
出问题的时候,先看 Expert Information 面板:TCP RST、疑似虚假重传、"Previous segment not captured" 都会按 Error/Warning 分级并汇总计数,帮你先判断问题出在传输层还是应用层。
想把原始字节串起来看,右键 Follow TCP Stream 即可把双向载荷拼成连续流;4059 的流量大部分是二进制混合内容,建议切 Hex 或 Raw 视图再对照协议字段。
🧭 排障思路与延伸方向
如果你遇到连接频繁被重置,先看 RST 来自电表侧还是服务端,再核对 AARQ 里的鉴权方式和关联参数,最后查中间设备的超时策略。
如果大量出现 Previous segment not captured,先怀疑抓包起步太晚或中途丢包,用环形缓冲重新抓一轮再对比。
如果关联直接失败——AARQ 之后没有 AARE,或 AARE 带原因码,先对照 HN 版本与鉴权方式,再查服务端设备白名单。
顺带一提,IEC 62056-21 定义的 SML(智能计量语言)是面向集中器—主站链路的文本采集协议,排查上行侧时可以参考 packet-sml.c 补充分析。
把 4059 链路摸熟之后,还可以继续往两头延伸:通信中断多的场景看 GPRS 空口段,户内电力线载波看 HPLC 载波段,加密后的负载则要看 SM 安全会话的配置。
【免费下载链接】wiresharkRead-only mirror of Wireshark's Git repository at https://gitlab.com/wireshark/wireshark. You're welcome to submit pull requests there.项目地址: https://gitcode.com/gh_mirrors/wi/wireshark
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考