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

推荐订阅源

D
Docker
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
C
Cisco Blogs
Scott Helme
Scott Helme
Know Your Adversary
Know Your Adversary
NISL@THU
NISL@THU
C
Cyber Attacks, Cyber Crime and Cyber Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
S
Schneier on Security
I
Intezer
Spread Privacy
Spread Privacy
AWS News Blog
AWS News Blog
V
Vulnerabilities – Threatpost
Cloudbric
Cloudbric
V2EX - 技术
V2EX - 技术
Google Online Security Blog
Google Online Security Blog
L
Lohrmann on Cybersecurity
Recent Commits to openclaw:main
Recent Commits to openclaw:main
L
LINUX DO - 热门话题
S
Secure Thoughts
T
The Exploit Database - CXSecurity.com
博客园 - 【当耐特】
Recent Announcements
Recent Announcements
Security Archives - TechRepublic
Security Archives - TechRepublic
Stack Overflow Blog
Stack Overflow Blog
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
K
Kaspersky official blog
阮一峰的网络日志
阮一峰的网络日志
博客园_首页
Latest news
Latest news
B
Blog
F
Full Disclosure
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
L
LangChain Blog
GbyAI
GbyAI
Last Week in AI
Last Week in AI
S
Security Affairs
Apple Machine Learning Research
Apple Machine Learning Research
N
Netflix TechBlog - Medium
Security Latest
Security Latest
Vercel News
Vercel News
Y
Y Combinator Blog
G
GRAHAM CLULEY
S
Securelist
T
Troy Hunt's Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
雷峰网
雷峰网

BlogFinder

日常漫步 Vol.24 之漫步前山河 - 雅余 周报 #1-聊聊本周的收获 - Edwin's Blog 我的OpenCode必装插件与Skill Write Something 掌中之物未必在掌握之中 · CRIVU PiliNara,一个更顺手的 PiliPlus 分支 「NekoEcho」:做一个必有回响的猫娘主题博客 2026-05 书影音总结 简化博客主题 - 安迪 我第一次发布 npm 包 拾花小记#45:中考前的二三事 – 小改学习志 黛西花园5月游 #18 枇杷又熟了的五月月报 一些奇奇怪怪的需求?word仿方正书版的几个小操作 - Xiobb's Blog 0419 御温泉之旅 修复了一些bug,网站基本上趋于稳定了 - 新锐博客 又回到四十年前 如何定义成功 迷鹿屋2026已重新上线 科技冰火两重天+一周回顾 ${title} 热度退了,我反而用得更深了-咕咚同学 我到底该不该换个域名? 随身WIFI折腾记 - 安迪 博客撰写体验提升——hexo pro插件 为什么不用相机把屏幕上的接关密码拍下来? 国清寺与天台山 – Ouroboros ★★★★☆《挽救计划》——久违的经济上行感 - Davidの3号基地 删除右键“打开方式”里多余选项 第三周刊_No.53|一切都会被支付两次 安卓APP通话记录与录音上传踩坑记录 - 子舒的博客 天量下跌 inBox 笔记 2.3.8,把工具栏交给了你-咕咚同学 我把小龙虾搬到了微信-咕咚同学 安好 - 响石潭 Compound Engineering Plugin:让每个工程单元都比上一个更容易 MOSS-TTS Family:开源高质量语音与声音生成模型家族深度解析 Crawl4AI:专为 LLM 设计的开源 Web 爬虫与数据抓取工具 Build Your Own X:从零实现你最喜欢的技术——程序员进阶的终极资源清单 Anthropic Skills:用文件夹教 Claude 专业技能的开源框架 1年的去月球(下) - 梅之夏 欢迎回来。 简单讲讲 ASN.1 与 OID DTV - 直播聚合客户端 5.22-5.27 – 不兴江 还没去过鸭川 – 不兴江 张晶晶同学三刷林志颖 关于我 – 不兴江 爱与嫉妒 – 不兴江 港股被持续做空 备案码花了四百块-咕咚同学 一句话生成封面:我给公众号做了4种风格的AI封面生成技能 「官」方認證 再谈费曼学习法 2026-05-28T00:34:11+08:00 2026-05-28T00:28:45+08:00 离谱的英语学习指南:基于AI的英语进阶系统方法论 iii:零集成架构的后端统一运行时 Claude Code Harness:让 Claude Code 工作有迹可循的工程化框架 Heretic:全自动移除大语言模型审查机制的开源工具 MarkItDown:微软开源的万能文档转 Markdown 利器 Harness:让 Claude Code 秒变多智能体协作工厂 这段时间尽折腾AI Agent了,确实极大地提高了效率 近期动态:两个新站点正式上线啦 误判解除!zhouayuan.com 腾讯安全申诉成功 - 周阿源|玩具设计・插画日常・生活随笔 Ralph:让 AI 编码工具自主循环跑完所有 PRD 任务的量产神器 全都违法 – 个人工作记录 关于zhouayuan.com被误判 “含违规信息” 的说明与申诉记录 - 周阿源|玩具设计・插画日常・生活随笔 小米 MiMo v2.5 Pro 白嫖 最大的人间清醒,兜里有钱,但是不花。 夜晚靓歌(12):于文文现场solo - 王志勇的Blog 今日插画:风扬起的倔强 - 周阿源|玩具设计・插画日常・生活随笔 回门习俗 独立网卡 - 忘记了回忆 500亿入股人工智能企业 从命令行到桌面智能体-咕咚同学 第一性原理读书笔记 行者微评论223-加班の守株待兔-博客|政治与时事-风雨行者 ZOZO开源物理接触求解器:GPU加速的可扩展仿真引擎 OpenStock:开源股票市场交易平台技术深度解析 MoneyPrinterTurbo:基于AI的全自动短视频生成工具深度解析 Claude-Mem:为 Claude Code 构建的持久化记忆压缩系统 Twenty:可代码化定制的企业级开源 CRM 平台技术深度解析 2026-05-26T22:59:17+08:00 企业级开源大模型部署平台 GPUStack 实战教程 1年的去月球(上) - 梅之夏 Sevalla - 静态网站托管服务 不用翻墙、不用注册、不用月费,普通人也能用上 Claude Code 装修灯具要注意⚠️ 黄梅天先锋 - 游子微博 公安备案顺利办结,站点备案全部完成 - 周阿源|玩具设计・插画日常・生活随笔 第三次兑换天猫超市卡了宗宗酱-三维狐少儿编程 Don't think, feel. - Rolen's Blog 人这一辈子,到底图个什么 博客迁移 - Edwin's Blog 情感赛道写作模板 再现本轮行情的典型特征 裁员与平常心-咕咚同学 别让“偷懒”,成为隐私泄露的破绽 片刻 - Jdeal | Life is like a Design.
Iroh:基于公钥直连的去中心化网络框架
Cheman · 2026-06-17 · via BlogFinder

今天在 GitHub Trending 上看到一个有意思的项目:Iroh,它让去中心化网络编程变得像拨电话一样简单——只需一个公钥就能直连,无需关心 NAT、IP 和中继的复杂细节。

一、项目概述

Iroh 是 n0-computer 团队用 Rust 编写的去中心化网络通信框架,核心理念是 “less net work for networks”——用更少的网络代码完成组网。它提供了一个基于公钥寻址的端点(Endpoint)抽象,开发者只需指定对方的公钥即可建立连接,框架自动处理 NAT 穿透和中继回退。

核心特性:

  • 公钥直连:无需 IP 地址或域名,通过 EndpointId(公钥)即可拨号连接
  • NAT 穿透:自动尝试 UDP 打洞,失败时回退到开放中继服务器生态
  • QUIC 传输:基于 noq 库建立 QUIC 连接,天然具备认证加密、多路复用、流优先级和避免队头阻塞
  • 可组合协议:内置 iroh-blobs(BLAKE3 内容寻址传输)、iroh-gossip(Pub-Sub 覆盖网络)、iroh-docs(最终一致 KV 存储)

二、技术原理

架构设计

Iroh 的架构围绕 EndpointRouter 两个核心抽象展开:

  • Endpoint:底层 QUIC 端点,负责连接建立、NAT 穿透和中继通信。通过 Endpoint::bind() 绑定后,可使用 connect(node_id, alpn) 连接任意已知公钥的节点
  • Router:协议路由器,将不同 ALPN(Application-Layer Protocol Negotiation)标识映射到对应的 ProtocolHandler,实现多协议复用同一端点
// Endpoint 绑定与连接
let endpoint = Endpoint::bind().await?;
let conn = endpoint.connect(addr, ALPN).await?;
let (mut send, mut recv) = conn.open_bi().await?;

QUIC 连接层

Iroh 使用自研的 noq 库建立 QUIC 连接。相比传统 TCP+TLS,QUIC 提供:

  • 0-RTT 连接恢复:重连场景下近零延迟
  • 多流并发:单个连接上复用多个双向/单向流,互不阻塞
  • Datagram 传输:适合小消息的不可靠但低延迟传输

NAT 穿透与中继

Iroh 的连接策略是"直连优先、中继兜底":

  1. 首先尝试直接 UDP 打洞(hole-punching)
  2. 打洞失败时,通过公开中继服务器(iroh-relay)转发流量
  3. 中继服务器实现同样开源在仓库的 iroh-relay crate 中,可自行部署

团队持续监控全球连接性能,数据公开在 perf.iroh.computer

DNS/Pkarr 地址发现

iroh-dns-server crate 实现了基于 Pkarr 的 DNS 地址发布与查询,运行在 dns.iroh.link。端点将自身地址信息发布到 DNS,其他节点通过公钥查询即可获取可达地址。

可组合协议生态

协议功能关键技术
iroh-blobs内容寻址的大文件传输BLAKE3 哈希,支持 KB 到 TB 级
iroh-gossip发布-订阅覆盖网络去中心化 Gossip 协议,手机级资源需求
iroh-docs最终一致 KV 存储基于 iroh-blobs,Willow 协议思想

三、安装与快速开始

环境要求

  • Rust 1.75+(推荐最新 stable)
  • Cargo 包管理器

安装

最简 Echo 示例

客户端(发起连接):

use iroh::Endpoint;

const ALPN: &[u8] = b"iroh-example/echo/0";

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let endpoint = Endpoint::bind().await?;
    let conn = endpoint.connect(addr, ALPN).await?;
    let (mut send, mut recv) = conn.open_bi().await?;
    send.write_all(b"Hello, world!").await?;
    send.finish()?;
    let response = recv.read_to_end(1000).await?;
    assert_eq!(&response, b"Hello, world!");
    conn.close(0u32.into(), b"bye!");
    endpoint.close().await;
    Ok(())
}

服务端(接收连接):

use iroh::{Endpoint, ProtocolHandler, Router};
use std::sync::Arc;

#[derive(Debug, Clone)]
struct Echo;

impl ProtocolHandler for Echo {
    async fn accept(&self, connection: iroh::endpoint::Connection) -> anyhow::Result<()> {
        let (mut send, mut recv) = connection.accept_bi().await?;
        tokio::io::copy(&mut recv, &mut send).await?;
        send.finish()?;
        connection.closed().await;
        Ok(())
    }
}

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let endpoint = Endpoint::bind().await?;
    let router = Router::builder(endpoint)
        .accept(ALPN.to_vec(), Arc::new(Echo))
        .spawn()
        .await?;
    // 打印自己的 NodeId 供客户端连接
    println!("Node ID: {}", router.endpoint().node_id());
    tokio::signal::ctrl_c().await?;
    router.shutdown().await?;
    Ok(())
}

四、使用方法与实战

使用 iroh-blobs 传输文件

iroh-blobs 基于 BLAKE3 内容寻址,天然支持去重和校验:

use iroh_blobs::{BlobFormat, provider::AddFileOpts};

// 提供方:添加文件并分享 hash
let ticket = provider.add_file(path, BlobFormat::Raw).await?;

// 接收方:通过 ticket 下载
let bytes = downloader.download(ticket).await?;

使用 iroh-gossip 构建 Pub-Sub

iroh-gossip 适合构建实时协作、状态同步等场景:

// 加入 gossip topic
let gossip = Gossip::builder().spawn(endpoint.clone()).await?;
let topic = gossip.join(topic_id).await?;

// 发布消息
gossip.broadcast(topic, b"hello peers").await?;

// 订阅消息
while let Some(msg) = gossip.next_event(topic).await {
    println!("received: {:?}", msg);
}

多语言绑定

通过 iroh-ffi 项目,Iroh 提供 C FFI 绑定,可被 Python、Swift、Kotlin 等语言调用,方便在移动端和嵌入式场景集成。

五、常见问题与解决方案

连接建立慢或失败

原因:双方都在对称型 NAT 后面,UDP 打洞无法成功。
解决:确保中继服务器可达,或自行部署 iroh-relay 实例。检查 dns.iroh.link 是否被 DNS 污染。

Endpoint bind 报端口占用

解决:Iroh 默认绑定 0 端口(随机分配),如需固定端口,使用 Endpoint::bind_with_port()。确保防火墙放行 UDP 流量。

大文件传输中断

解决:iroh-blobs 支持断点续传,相同 BLAKE3 hash 的 blob 可从任意持有者处继续下载。检查网络稳定性,必要时增加超时时间。

Rust 版本兼容性

解决:Iroh 要求 Rust 1.75+,workspace lint 配置了 missing_debug_implementations = "warn",确保本地工具链足够新:

六、总结

Iroh 将去中心化网络编程的复杂度封装到了极致——开发者不需要理解 STUN/TURN、不需要管理 IP 和端口、不需要手动处理 NAT,只需要一个公钥就能建立加密直连。基于 QUIC 的传输层保证了性能和安全性,而可组合的协议生态(blobs/gossip/docs)覆盖了文件传输、消息广播和数据同步三大核心场景。对于 Rust 开发者来说,如果你需要构建 P2P 应用、去中心化服务或边缘计算网络,Iroh 是目前最值得关注的框架之一。

项目地址:https://github.com/n0-computer/iroh