以太网诊断 Cluster(EthernetNetworkDiagnostics)

Cluster ID: 0x0037  |  所在 Endpoint: Endpoint 0(Root Node)

EthernetNetworkDiagnostics 提供以太网接口的运行状态和统计信息 —— 链路速率、双工模式、收发包计数、错误计数等。 这个 Cluster 只有 1 个命令和 9 个属性,结构简单,主要用于网络健康监控和故障排查。

什么时候用

Hub 或桥接器通过以太网连接,想确认链路是否正常?读取 PHYRate 和 CarrierDetect 即可判断。 设备网络不稳定、丢包严重?检查 TxErrCount 和 CollisionCount 定位问题。 需要重新开始统计?发一个 ResetCounts 命令清零所有计数器。

Feature 位图

EthernetNetworkDiagnostics 通过 FeatureMap(0xFFFC)声明设备支持哪些诊断能力:

Bit 0
PKTCNT(PacketCounts) 支持收发包计数 —— 启用 PacketRxCount、PacketTxCount 属性
Bit 1
ERRCNT(ErrorCounts) 支持错误计数 —— 启用 TxErrCount、CollisionCount、OverrunCount 属性
Feature 与属性的关系

并非所有设备都支持全部属性。PacketRxCount / PacketTxCount 需要 PKTCNT 特性, TxErrCount / CollisionCount / OverrunCount 需要 ERRCNT 特性。 读取前先检查 FeatureMap (0xFFFC) 确认设备支持哪些特性。

属性总览

点击属性 ID 可跳转到详细说明。带 Feature 标记的属性仅在设备支持对应特性时才存在。

ID 名称 类型 Feature 说明
0x00 PHYRate enum8, nullable — 物理层链路速率
0x01 FullDuplex bool, nullable — 是否全双工模式
0x02 PacketRxCount uint64 PKTCNT 已接收的数据包总数
0x03 PacketTxCount uint64 PKTCNT 已发送的数据包总数
0x04 TxErrCount uint64 ERRCNT 发送错误次数
0x05 CollisionCount uint64 ERRCNT 碰撞次数
0x06 OverrunCount uint64 ERRCNT 缓冲区溢出次数
0x07 CarrierDetect bool, nullable — 载波检测状态
0x08 TimeSinceReset uint64 — 距上次计数器重置的秒数

PHYRate(物理层速率)

只读属性,表示当前以太网接口协商到的物理层链路速率。值为 null 时表示速率未知或接口未连接。

PHYRateEnum 枚举值

0
Rate10M 10 Mbps
1
Rate100M 100 Mbps
2
Rate1G 1 Gbps
3
Rate25G 2.5 Gbps
4
Rate5G 5 Gbps
5
Rate10G 10 Gbps
6
Rate40G 40 Gbps
7
Rate100G 100 Gbps
8
Rate200G 200 Gbps
9
Rate400G 400 Gbps

FullDuplex(全双工模式)

只读属性,表示当前以太网链路是否工作在全双工模式。true 为全双工,false 为半双工, null 表示无法确定。现代以太网设备几乎都是全双工,半双工通常意味着协商异常。

PacketRxCount(接收包计数)

只读属性,自上次重置以来接收到的数据包总数。需要设备支持 PKTCNT 特性。 该计数器在调用 ResetCounts 命令或设备重启后归零。

PacketTxCount(发送包计数)

只读属性,自上次重置以来发送的数据包总数。需要设备支持 PKTCNT 特性。

TxErrCount(发送错误计数)

只读属性,自上次重置以来发送失败的次数。需要设备支持 ERRCNT 特性。 持续增长通常说明线缆质量差或交换机端口有问题。

CollisionCount(碰撞计数)

只读属性,自上次重置以来的碰撞次数。需要设备支持 ERRCNT 特性。 在全双工链路上此值应始终为 0;如果持续增长,说明链路可能降级到了半双工。

OverrunCount(溢出计数)

只读属性,自上次重置以来接收缓冲区溢出的次数。需要设备支持 ERRCNT 特性。 溢出意味着设备来不及处理收到的数据,可能是设备负载过高或网络流量过大。

CarrierDetect(载波检测)

只读属性,表示以太网接口是否检测到载波信号。true 表示网线已连接且对端设备正常, false 表示网线断开或对端无响应,null 表示无法确定。 这是判断物理连接状态最直接的指标。

TimeSinceReset(计数器重置后经过时间)

只读属性,自上次计数器重置(ResetCounts 命令或设备重启)以来经过的秒数。 结合包计数和错误计数,可以计算出平均每秒的收发速率和错误率。

命令(Commands)

EthernetNetworkDiagnostics 只有一个命令。需要设备支持 PKTCNT 或 ERRCNT 特性才有实际意义。

ID 名称 说明
0x00 ResetCounts 重置所有计数器归零

ResetCounts —— 重置计数器(0x00)

将 PacketRxCount、PacketTxCount、TxErrCount、CollisionCount、OverrunCount 全部归零, 同时 TimeSinceReset 也会重置为 0 并重新开始计时。无需任何参数,直接发送即可。

请求示例:

{
  "invokeRequests": [{
    "commandPath": {
      "endpointId": 0,
      "clusterId": "0x0037",
      "commandId": "0x00"       // ResetCounts
    },
    "commandFields": {}
  }]
}

示例数据

读取一个以太网 Hub 设备的 EthernetNetworkDiagnostics Cluster 属性:

{
  // --- 属性 ---
  "0x0": 2,           // PHYRate = Rate1G(千兆以太网)
  "0x1": true,        // FullDuplex = true(全双工)
  "0x2": 1048576,     // PacketRxCount = 1048576(已接收约 100 万包)
  "0x3": 524288,      // PacketTxCount = 524288(已发送约 50 万包)
  "0x4": 3,           // TxErrCount = 3(发送错误 3 次)
  "0x5": 0,           // CollisionCount = 0(无碰撞)
  "0x6": 0,           // OverrunCount = 0(无溢出)
  "0x7": true,        // CarrierDetect = true(载波检测正常)
  "0x8": 86400        // TimeSinceReset = 86400(距上次重置 24 小时)
}
开发建议

PHYRate 和 FullDuplex 反映的是链路协商结果,不会频繁变化,适合在设备详情页一次性展示。 包计数和错误计数则是累积值,适合定期轮询或订阅,用于绘制趋势图或触发告警。

常见场景

场景 1:链路健康检查

App 设备详情页展示以太网连接状态,帮助用户快速判断链路是否正常。

  1. 读取 CarrierDetect (0x07),确认物理连接正常(true)
  2. 读取 PHYRate (0x00) 和 FullDuplex (0x01),展示链路速率和双工模式
  3. 如果 PHYRate 为 null 或 CarrierDetect 为 false,提示用户检查网线连接
  4. 如果 FullDuplex 为 false,提示链路降级到半双工,建议检查交换机端口配置
场景 2:网络故障排查

设备响应缓慢或通信不稳定时,通过计数器定位网络层问题。

  1. 先检查 FeatureMap (0xFFFC),确认设备支持 PKTCNT 和 ERRCNT
  2. 发送 ResetCounts (0x00) 清零所有计数器
  3. 等待一段时间后,读取 TxErrCount、CollisionCount、OverrunCount
  4. 用 TimeSinceReset (0x08) 计算错误率:TxErrCount / TimeSinceReset
  5. 错误率持续偏高 → 检查网线质量和交换机端口;CollisionCount 非零 → 检查双工模式配置