网络诊断

功能描述

结合了 traceroute 和 ping 的功能,旨在帮助分析网络问题。在指定时间段内下发命令,返回从本机出发到目标主机的每跳的网络情况,每跳包含信息如下:

  • 当前跳数

  • 当前主机IP地址

  • 本跳丢包率

  • 本跳发包数

  • 本跳收包数

  • 本跳的平均时延

  • 本跳的最佳时延

  • 本跳的最差时延

  • 本跳的时延标准差(波动率)

上报频率:每次在完成诊断任务后立即上报

1. 请求消息

1.1 topic

Topic
/v1/devices/{DeviceSn}/diagnostics/command

消息发送方

物联网平台

消息接收方

网关设备

1.2 请求消息payload

数据域
数据类型
是否必选
描述

mid

stirng

消息ID,推荐使用uuid, 请求和应答匹配,用来匹配请求和应答消息和去重

msgTime

string

消息发送时间戳,RFC3339标准,例如:1985-04-12T23:20:50.52Z

zone

string

设备部署的区域,例如ZONE3

node

string

设备部署的节点,例如440000

requestId

string

微服务链路追踪用的标识

deviceSn

string

设备ESN码,用于唯一标识设备

deviceId

string

统一物联网平台分配的设备id,据说可能会重复,不能唯一标识设备

service

string

服务名称。这里固定为:diagnostics

cmd

string

具体操作方法,这里固定为:networkDiagnostics

params

jsonObject

对象内容

params结构体说明

字段名
必选/可选
类型
参数描述

target

必选

string

链路诊断的目标地址支持Ip或者hostname,Hostname需要系统已经配置了dns。推荐使用ip

port

可选

uint6

当诊断使用的tcp或者udp协议时必须要指定。当使用icmp协议时可以不填

duration

必选

string

诊断运行的时间,秒级以s表示,分钟以min表示

protocol

可选

string

ICMP、TCP、UDP默认为ICMP,不支持除此之外的协议

iface

必选

string

网卡名,如eth0(有线)、ppp0(无线)。希望诊断哪个网卡的链路情况。

delayThreshold

可选

number

网络时延阈值,单位ms。默认100ms。

lossPctThreshold

可选

number

丢包率阈值,单位百分比。默认50%。

请求示例

{
    "mid": "54132",
    "msgTime": "2023-07-06T15:06:38Z",
    "zone":"设备部署的区域",
    "node":"设备部署的节点",
    "requestId":"xxxxxxxxxx",
    "deviceSn": "D23pigXo",
    "deviceId": "A1234456",
    "service": "diagnostics",
    "cmd": "networkDiagnostics",
    "params": {
        "target": "192.168.7.1",
        "port": 1883, 
        "duration": "10s",
        "protocol": "tcp",
        "iface": "eth0",
        "delayThreshold": 60,
        "lossPctThreshold": 30, 
    },
}

2. 应答消息

2.1 Topic

Topic
/v1/devices/diagnostics/response

消息发送方

网关设备

消息接收方

物联网平台

2.2  应答消息payload

数据域
数据类型
是否必选
描述

mid

string

消息ID,用于消息去重。

replyId

string

表示响应的是哪条请求指令,为该指令的mid,用来匹配请求和应答

msgTime

string

消息发送时间戳,采用RFC3339标准,例如:1985-04-12T23:20:50.52Z。

zone

string

设备部署的区域,例如ZONE3

node

string

设备部署的节点,例如440000

requestId

string

微服务链路追踪用的标识

deviceSn

string

设备ESN码,用于唯一标识设备

deviceId

string

统一物联网平台分配的设备id,据说可能会重复,不能唯一标识设备

code

uint16

标识应答的返回码

批处理请求时,如果所有处理都成功,返回200

如果有部分失败,返回400。

取值如下:

•200:请求成功。

•400:请求消息错误,例如消息格式错误等。

•404:不支持该操作。

•429:请求太多。

•500:服务端内部错误,由应用定义。

body

List<jsonObject>

详情

body结构体说明

字段名

必选/可选

类型

参数描述

target

必选

string

链路诊断的目标地址ip

imsi

可选

string

4g模组的Imsi号码。

simId

可选

string

4g模组的sim卡号

rssi

可选

uint32

4g模组的信号强度

bse

可选

uint32

4g模组的通道误码率

hops

必选

List<Hop>

链路中每一跳的详细信息

hop结构体说明

字段名

必选/可选

类型

参数描述

ttl

必选

Uint16

当前跳数

host

必选

string

当前主机ip。

lossPct

必选

number

丢包率

sent

必选

Uint16

发包数

recv

必选

Uint16

收到包的数量

avg

必选

number

当前链路平均时延

best

必选

number

最佳时延

worst

必选

number

最差时延

stddev

必选

number

标准差,代表的是时延的波动率

anomaly

必选

uint16

异常点情况,取值如下 •1:单跳的平均时延超过1000ms •2:单跳的时延波动率超过50% •3:单跳的丢包率超过50% •0:表示正常

应答示例

在下发指令正确的情况,一般响应两次。

// 第一次响应
{
    "mid": "54132",
    "replyId": "54132",
    "code": 100, // 指令接收成功,等待执行完成
    "zone":"设备部署的区域",
    "node":"设备部署的节点",
    "deviceSn": "D23pigXo",
    "deviceId": "A1234456",
    "requestId":"xxxxxxxxxx",
    "msgTime": "2023-07-06T15:06:38Z"
}
// 第二次响应
{
    "mid": "54132",
    "replyId": "54132",
    "code": 200, // 请求成功
    "zone": "设备部署的区域",
    "node": "设备部署的节点",
    "deviceSn": "D23pigXo",
    "deviceId": "A1234456",
    "requestId": "xxxxxxxxxx",
    "msgTime": "2023-07-06T15:06:38Z",
    "body": [
        {
            "target": "180.101.50.188",
            "imsi": "460084079917203", // 不适用4G模块时候,该值为空
            "simId": "898604C01922C1477203",
            "rssi": 18,
            "ber": 99,
            "hops": [
                {
                    "ttl": 1,
                    "host": "192.168.88.1",
                    "loss_pct": "0.00",
                    "sent": 5,
                    "last": "2.02",
                    "recv": 5,
                    "avg": "2.03",
                    "best": "1.52",
                    "worst": "2.74",
                    "stddev": "0.36",
                    "anomaly": 0,
                },
                // ...
                {
                    "ttl": 13,
                    "host": "180.101.50.188",
                    "loss_pct": "0.00",
                    "sent": 5,
                    "last": "12.58",
                    "recv": 5,
                    "avg": "10.98",
                    "best": "10.37",
                    "worst": "12.58",
                    "stddev": "0.82",
                    "anomaly": 0,
                }
            ]
        }
    ]
}

最后更新于