本周深入研究 libp2p 安全,为 Kad-DHT 添加了新的 IP 子网多样性功能,同时在测试套件中处理了一些顽固的竞态条件。3 个 PR 已打开,对 Neovim 配置进行了一些自动化维护,让一切继续运转。
TL;DR
本周安全加固成为重点,我专注于使 Kademlia DHT 实现更能抵御 Eclipse 攻击。在为 IP 子网多样性起草逻辑和追踪 py-libp2p 测试套件中的竞态条件之间,这是一周高杠杆的架构思考与细粒度异步代码除 flaky 烦恼的结合。
为更安全的 DHT 而战
本周大部分脑力都花在了 py-libp2p 上,特别是 Kademlia DHT 中的对等节点选择方式。我打开了一个重要的 PR,feat(kad_dht): enforce IP subnet diversity in k-buckets (#1383),新增 226 行逻辑,以确保我们的路由表不会被来自同一网络邻域的对等节点填满。
如果你不深耕 p2p 领域,简单来说就是:当攻击者用自己的恶意节点包围目标节点时,就会发生 Eclipse 攻击。如果你在网络中的所有“邻居”都被一个人控制,他们就能有效地切断你与真实网络的连接或向你提供假数据。通过强制实施 IP 子网多样性,我们使攻击者更难(也更昂贵)实现这一目标,因为他们无法仅在一个云提供商的子网上启动一千个节点就期望填满我们的 k-buckets。
这种功能在缺失时才会被感受到,但对于库的长期健康至关重要。
我还发起了一个深入讨论,标题为 Eclipse-attack hardening for kad-dht: our approach, and why we dropped randomized lookup selection (#1383 / #1384)。我们最初考虑将随机查找选择作为防御机制,但经过反复讨论,我们决定放弃它,转而采用更稳健的 bucket 管理。最好在合并代码之前就意识到某种方法不够理想。
异步测试的代价
当你在开发一个严重依赖异步网络的库时,最终需要支付“flaky 测试税”。本周我花了相当多的时间追踪两个一直困扰我们 CI 的特别烦人的竞态条件。
第一个是 test(timed_cache): de-flake test_expiry_removal (#1408)。这是一个经典问题:测试与后台清理线程存在竞争。我们使用了 trio.sleep,这通常没问题,但在 CI 环境中 CPU 周期可能不可预测,清理线程并不总是能在测试检查结果之前完成清理。我还专门打开了一个 issue 来跟踪这个问题:flaky: test_expiry_removal races the background sweeper thread。
第二个是 test(pubsub): de-flake test_gossip_gate_filters_peers (#1401)。这里是类似的情况——Gossipsub 中的订阅传播本质上依赖于时间。如果测试比网络(即使是模拟网络)运行得更快,一切都会崩溃。修复这些工作并不光鲜,但当你收紧时间逻辑后,看到红色的 CI 管道最终变绿,还是会有一种特定的满足感。
维护与工具
在其他方面,我保持了环境健康。我的 nvim 配置本周有 6 次提交,虽然大多是自动化例行任务。我有一个 CI 设置,可以将所有插件更新到最新版本。这是一种“设置后即忘”的方式,但它确保当我坐下来编码时,我的编辑器已经准备好了。
在这些 6 次提交中,有 7 处新增和 7 处删除,这是一个完美平衡的维护周。没有新的臃肿,只是保持工具的锋利。
技术栈与氛围
本周的工作严重偏向 Python,因为是在 py-libp2p 上工作。由于 libp2p 生态系统规模庞大,混合了超过 96MB 的 Python 代码,这绝对是我目前的首要关注点。但从我的语言统计来看,多语言生活仍然真实存在——TypeScript、Rust 和 Lua 都静静地待在后台,随时准备在我转向前端或系统工作时发挥作用。
本周的增删比例非常紧凑(直接提交的仓库中增加 7 行,删除 7 行)。这反映了一周的精炼而非原始的功能扩展。即使是 libp2p 的 PR,虽然添加了新逻辑,但也非常专注于修复特定行为,而不是简单地堆砌代码。
下一步
我目前在 py-libp2p 上有三个处于“OPEN”状态的 PR。我下周的优先事项是合并这些 PR。IP 子网多样性工作是重中之重——我希望在它进入主分支之前确保实现是无懈可击的。一旦这些合并完成,我希望能回到一些全新的功能开发上,但正如任何 OSS 开发者所知,下一个 flaky 测试可能就在拐角处。
下次更新再见。继续交付。
Yash K Saini — 公开构建的工程师 — 专注于 AI/ML、低层(Rust/C/C++)和开源。
GitHub · X · LinkedIn · Portfolio
由 DevNotion 生成
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.