惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
Google Online Security Blog
Google Online Security Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Simon Willison's Weblog
Simon Willison's Weblog
T
Threat Research - Cisco Blogs
C
CXSECURITY Database RSS Feed - CXSecurity.com
L
Lohrmann on Cybersecurity
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Forbes - Security
Forbes - Security
P
Palo Alto Networks Blog
Schneier on Security
Schneier on Security
S
Schneier on Security
T
Tor Project blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
WordPress大学
WordPress大学
The Hacker News
The Hacker News
Hacker News - Newest:
Hacker News - Newest: "LLM"
罗磊的独立博客
Application and Cybersecurity Blog
Application and Cybersecurity Blog
F
Fortinet All Blogs
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
C
Check Point Blog
Stack Overflow Blog
Stack Overflow Blog
Blog — PlanetScale
Blog — PlanetScale
雷峰网
雷峰网
S
Security @ Cisco Blogs
PCI Perspectives
PCI Perspectives
Spread Privacy
Spread Privacy
W
WeLiveSecurity
SecWiki News
SecWiki News
A
About on SuperTechFans
H
Help Net Security
博客园 - 司徒正美
Recent Commits to openclaw:main
Recent Commits to openclaw:main
爱范儿
爱范儿
S
Securelist
M
MIT News - Artificial intelligence
云风的 BLOG
云风的 BLOG
月光博客
月光博客
Jina AI
Jina AI
博客园 - 叶小钗
Vercel News
Vercel News
阮一峰的网络日志
阮一峰的网络日志
Recent Announcements
Recent Announcements
S
Secure Thoughts
The Cloudflare Blog
美团技术团队
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

鸟窝

鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 鸟窝 LLM 究竟是如何工作的? Go 实验特性详解 amd64 微架构级别对 Go 程序性能提升多少? Loop Engineering 实践:一次批量实现 8 个 issue,完成夔牛工具的开发 Loop Engineering 实践:我把 RDMA 开发库移植到 Go 语言,花费 239 块钱 傻瓜式RDMA高性能网络开发:从零跑到 400 Gb每秒 百度物理网络监控工具开源第二弹:毫秒级监控工具 baize,让你的网络问题无处遁形 百度网络监控工具开源第三弹:lidar — 不只是 pingmesh 别只盯着gopacket了,看看这个强大的网络库 如何构建你自己的 Agent 运行时 寻找你代码中的臭味:一个让 AI 帮你嗅出架构腐化的开源 Skill 套壳不丢人!我用Go+AI搓了一个Agent统一编排框架,ClaudeCode-Codex-Pi全被我包了 告别死锁和陈旧语法、告别性能瓶颈:三个开源 Skill,新手Gopher 秒变 Go 语言大神 SPEC和PRD的区别 SPEC和方案设计有什么区别 从需求到上线,让 AI 管理你的整个研发流程! antigravity-cli 使用 CLIProxyAPI, 让最新的 Codex 能够支持国内的各大模型 Clawpatch + codex-review:AI 代码审查工具链的正确打开方式 拆解Manus:沙盒架构深度解析 40+ Claude Code Tips: From Basics to Advanced Ralph 实验:构建 SQLite UI 了解 Manus Sandbox - 您的云计算机 Notex:一个开源 NotebookLM 替代方案的实现 拆解Manus:真正有用的深度报告的生成 Claude Code 使用 我给每个模型服务商『捐』了10块钱,只为了... Go之禅 - 基于Rob Pike思想的Go语言哲学 Codex CLI vs Gemini CLI vs Claude Code:谁是最佳选择? goskills:Claude Skills 功能强大,为我所用 一行代码使用 Claude Skill 和 deepseek langchain + MCP:如虎添翼 Linux 中网络包的一生 godotenv 库介绍 Codex CLI vs Gemini CLI vs Claude Code: Which is the Best? 使用Linux 30年了,我都不知道 ping 8.8 还能这么用? 从 AI 哪里挣钱? Go sync 包近两年发展综述 deepseek-v3.2-exp的闪电索引器
大厂的内部工具居然开源了! 一窥百度物理网络秒级监控定位的秘密
smallnest · 2026-06-11 · via 鸟窝

大厂的内部工具居然开源了! 一窥百度物理网络秒级监控定位的秘密

目前顶尖的云服务商都包含百万台服务器、数十甚至上百个机房、上万台网络设备、百万级网络链路。单单一个GPU集群,就有上万卡的级别。对这些网络和服务器的监控,一个分钟级别的故障,可能就是上百万资产的损失。

这不是一个ping能解决的问题。

今天,我们将百度物理网络黑盒监控方向的工具集 nettools 开源了(https://github.com/baidu/nettools),第一批放出的是 bitflip 和 bitflip6,用于检测网络丢包和比特翻转,在百度内部跑了很长时间了。

后续还有更多工具和SDK正在整理中,包括骨干网fullmesh监控、网关设备监控、连接客户内部机房设备的监控、定位工具等等,还有对巨量监控数据的处理。百度物理网络黑盒监控团队积累了一大批经验、产品和工具,后续逐步整理开源出来,欢迎关注。

为什么不是一个ping?

在大规模物理网络中,ping几乎没有用。

下面是一个集群简化的示意图。实际上层级比这更多,同一层级的网络设备数量远远大于图中画的,一个交换机有几十个端口而不是图中的几根连线,一个ToR交换机可能连接几十台服务器……两台服务器之间可走的链路有很多种可能。

bitflip用4种salt填充模式来覆盖各种跳变场景:

模式 作用
全1 0xFF 检测 1→0 跳变
全0 0x00 检测 0→1 跳变
固定 0x5A 检测混合模式跳变
互补交替 0xAAAA/0x5555 专门检测checksum盲区的互补跳变

每个包按序列号选择一种模式,服务端用相同模式验证,精确到哪个字节、哪个bit翻转了。

这个场景非常讨厌。可能一年就遇到一次,遇到了就特别麻烦,影响还大,错误数据被当成正常数据保存了。客户发现还算容易,因为除了能绕过checksum的那部分,大部分坏包会被服务器的checksum校验drop掉,通过采集监控服务器的checksum指标,理论上容易发现(实际还有一些坏包干扰)。

但定位起来就头疼了。客户报过来说好几个机房有改包现象,到底是哪个机房哪一层设备的哪个板卡?

这时候用bitflip工具,如果能复现,就可以通过找改包五元组的共同路径,定位到故障的设备和端口。这要靠单向监控,双向的话就像前面说的,有可能误导。

工程细节:raw socket + BPF

在百度的规模下,每秒要发送数千甚至上万个探测包。普通的UDP socket不够用:

  • 需要自由构造IP头(设置TOS/DSCP等网络参数)
  • 需要用极少的socket覆盖上百个端口对
  • 需要精确控制发包速率

bitflip客户端用raw socket直接构造IP+UDP包,通过BPF过滤收包,只接收目标端口范围内、特定TOS值的回包。读侧按端口范围切分为最多8个goroutine,每个绑定独立的BPF过滤器。

1
2
3
4
5
6
7
8
9
10
11
12
13
func portRangeBPF(minPort, maxPort, tos int) []bpf.Instruction {
return []bpf.Instruction{
bpf.LoadIndirect{Off: 9, Size: 1},
bpf.JumpIf{Cond: bpf.JumpEqual, Val: uint32(17), SkipFalse: 4},
bpf.LoadIndirect{Off: 1, Size: 1},
bpf.JumpIf{Cond: bpf.JumpEqual, Val: uint32(tos), SkipFalse: 4},
bpf.LoadAbsolute{Off: 22, Size: 2},
bpf.JumpIf{Cond: bpf.JumpGreaterOrEqual, Val: uint32(minPort), SkipFalse: 2},
bpf.JumpIf{Cond: bpf.JumpLessOrEqual, Val: uint32(maxPort), SkipFalse: 1},
bpf.RetConstant{Val: 0xffff},
bpf.RetConstant{Val: 0x0},
}
}

双向对比判断故障方向

bitflip同时支持客户端和服务端两侧统计。对比两侧丢包:

  • 仅服务端有丢包:故障在正向路径(Client → Server)
  • 仅客户端有丢包,服务端正常:故障在回程路径(Server → Client)
  • 两端都有丢包:需要进一步分析

结合traceroute获取的链路拓扑,分析丢包五元组的公共端口/设备,就能定位到具体哪台设备、哪个板卡、哪个端口。

快速体验

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

git clone https://github.com/baidu-sys/nettools.git
cd nettools && make build


./bitflip


sudo ./bitflip -r client -s <server_ip>


sudo ./bitflip -r client -s <server_ip> --rate 10000 --duration 60s


sudo ./bitflip -r client -s <server_ip> --verbose

IPv6环境使用 bitflip6,用法一致。

使用手册查看:bitflip使用指南

后续规划

nettools 目前开源的是 bitflip/bitflip6。后续还有更多工具和SDK在整理中:

  • 更多探测场景的工具
  • 通用的网络探测SDK
  • 定位分析相关的工具

写在最后

在百度这种体量的物理网络中做监控和定位,不是写几个socket程序就能搞定的。为什么用UDP不用ICMP和TCP?为什么有时候又采用TCP syn探测?为什么需要单向探测?为什么协议头要带上一个窗口的发送信息?为什么salt要用4种模式?每个选择背后都有对应的故障场景和教训。

这些东西以前都在内部,现在开源出来了。

项目地址:https://github.com/baidu/nettools

欢迎Star、试用、提Issue和PR。