成千上万的网络设备、海量的链路——一个 ping 解决不了的问题,需要一套专业的工具。 nettools 是百度内部跑了多年的黑盒监控工具集,现在开源了。
curl -fsSL https://nettools.rpcx.io/install.sh | sh
lidar 是一个基于 TCP SYN 的网络可达性探测工具。通过发送原始 SYN 报文并分析响应,判断目标端口是开放、关闭还是不可达。无需在远端部署任何软件。
无需在目标安装任何软件。只需目标 IP 和端口,利用内核 TCP 协议栈自动响应 SYN 报文即可判断可达性。
SYN-ACK = 端口开放,RST = 端口关闭/拒绝,Timeout = 不可达/丢包。区分网络层和应用层故障。
原始套接字构造 TCP SYN,macOS 通过 BPF 设备接收响应。绕过内核 TCP 栈,不影响系统连接。
支持逗号分隔多 IP,统一速率限制下轮询探测。每个目标独立统计,适合批量场景。
baize 是一个配置驱动、单进程双角色、为长期部署而设计的网络质量持续监控工具。默认每秒 5000 个探测包,统计窗口可调至 100ms,让偶发轻微丢包无处遁形。
确定性端口轮转算法,1000 个五元组同时探测,覆盖 ECMP 哈希空间所有路径。丢包五元组直接定位故障设备和端口。
每个探测包携带上一个时间窗口的发包数和起始端口对,Server 端完整还原五元组。不需要 NTP,不需要维护 Client 状态。
4 种 Salt 填充模式,专门检测 TCP/UDP 校验和发现不了的互补翻转。精确到哪个字节的哪一位被篡改。
Raw IP Socket + BPF 过滤器 + 8 路并行读 + 无锁设计。百度内部几千台机器上跑了多年。
kuiniu 是面向 AI 训练集群 GPU 网卡(RoCEv2/UDP)的双向互联探测工具。以「GPU 对」为最小单元同时发起对称探测,单进程内同时承担 client + server 两种角色,支持 role=both 一行配置部署到所有训练节点。
按 GPU 网卡 IP 绑定源地址发包,覆盖训练节点真实使用的 RoCEv2 路径。两端探测对称展开,丢包归因精确到方向。
local_gpu_addrs[i] ↔ remote_gpu_addrs[i] 平行数组配置,N 张 GPU 卡一次性展开 N 个对称探测对,单机多卡场景天然适配。
一份 JSON、一行 role=both 同时启动 client + server,自动维护 localGPUSet 防止自回声。所有节点配置同构,运维成本极低。
复用 baize 同款 4 种 Salt 填充模式,专门覆盖 RoCE 链路上 TCP/UDP 校验和发现不了的互补比特翻转,定位到 GPU 网卡或交换机端口。
evr 是面向 EVR(VXLAN 边缘虚拟路由器)设备的单端探测工具。借助 EVR 自身的 VXLAN 反射能力,单进程在本机即可完成探测——无需在对端部署 server,通过构造「自环内层帧 + payload 内嵌 EVR 源 IP」的巧妙设计,把 VXLAN 隧道路径和 EVR 设备健康度全部覆盖。
内层 IPv4 帧的 src 和 dst 都填本机 IP,EVR 反射回的内层报文直接命中本机原始套接字,免去额外路由配置和对端服务。
真实的 EVR src IP 写在 payload[24:28],回包通过 peerByEVRSrc 映射归因到具体目标,单 socket 同时监控多个 EVR 设备。
通过 IP_HDRINCL + ipv4.NewRawConn 自建外层 IPv4 头,可伪造 outer src IP,灵活验证 EVR 在不同源地址下的转发策略。
复用 baize/kuiniu 同款 4 种 Salt 填充模式,覆盖 VXLAN 隧道+EVR 反射全路径上的比特翻转,发现校验和漏检的链路问题。
bitflip 是命令行驱动的高频 UDP 探测工具,用于快速排查网络丢包和比特翻转。支持单向丢包检测和五元组级定位。bitflip6 是其 IPv6 版本,使用方式完全一致。
Client 和 Server 双端独立统计,对比两端数据即可判断丢包发生在正向路径还是回程路径,避免往返探测的误判。
全 1、全 0、交替位、互补交替,覆盖所有比特翻转类型。互补交替模式专门针对 TCP/IP Checksum 检测盲区。
自动覆盖 ECMP 多路径,检测到丢包或改包时输出具体五元组。结合 traceroute 拓扑,直接定位到故障设备和端口。
bitflip 覆盖 IPv4,bitflip6 覆盖 IPv6。相同的参数格式,相同的使用体验。
# 克隆并编译
git clone https://github.com/baidu/nettools.git
cd nettools && make build
# 服务端
./bitflip
# 客户端 — 5000 pps 持续探测
sudo ./bitflip -r client -s 10.0.0.1
sudo
权限来设置 IP TOS/DSCP 值。
mping 是多目标 ICMP Echo 探测工具,支持 CIDR 网段展开、DNS 解析、硬件时间戳,一次命令探测成百上千个目标。mping6 是其 IPv6 版本。
传入网段自动展开所有 IP,支持 IPv4 和 IPv6。--max-targets 防止意外展开过大网段。
默认启用 SO_TIMESTAMPING,纳秒级延迟精度。macOS 自动回退到软件时间戳。
自动解析主机名(A/AAAA 记录),逗号分隔多 IP,混合使用 CIDR + DNS + 单 IP。
令牌桶限速精确控制 pps,按秒报告延迟、丢包率。支持 Verbose 逐包详情。
| bitflip / bitflip6 | baize | kuiniu | evr | lidar | mping / mping6 | |
|---|---|---|---|---|---|---|
| 探测协议 | UDP | UDP | UDP(GPU NIC / RoCEv2) | UDP / VXLAN(EVR 反射) | TCP SYN | ICMP Echo |
| 需要服务端 | 需要 | 需要 | 需要(role=both 单进程双角色) | 不需要(EVR 设备本身反射) | 不需要 | 不需要 |
| 探测内容 | 延迟 + 丢包 + bitflip | 延迟 + 丢包 + bitflip | 延迟 + 丢包 + bitflip(GPU 间) | 延迟 + 丢包 + bitflip(VXLAN 路径) | 延迟 + 可达性(SYN-ACK/RST/Timeout) | 延迟 + 丢包 + bitflip |
| 配置方式 | 命令行参数 | JSON 配置文件 | JSON 配置文件 + 命令行覆盖 | JSON 配置文件 + 命令行覆盖 | 命令行参数 | 命令行参数 |
| 多目标 | 多 IP | 多 IP | GPU 对数组(local↔remote 平行数组) | 多 EVR(vtep#evrSrc[#mockSrc] 列表) | 多 IP | CIDR + DNS + 多 IP |
| 适用场景 | 临时排查、快速诊断 | 长期部署、持续监控 | AI 训练集群 GPU 互联监控 | EVR / VXLAN 虚拟网络监控 | 快速可达性探测 | 批量 ICMP 巡检 |
网络监控不是能不能做的问题,是做得够不够细致的问题。
每一条链路、每一个端口、每一个场景,都值得被监控。