iroh 1.0解析:从QUIC打洞到DHT地址查找

5 阅读3分钟

背景

2026年6月15日,n0-computer发布iroh 1.0。iroh是一个用Rust编写的P2P网络库,核心卖点是用加密公钥替代IP地址作为设备永久标识,让开发者只需告诉库"连接到那个Endpoint ID",库自动完成NAT穿透、relay fallback和地址查找。

连接建立的三个层次

iroh建立连接会依次尝试三个层次:

第一层是直连打洞(Direct Connection with Hole Punching)。当两个端点至少有一方在公网可达时,iroh让两端同时向对方发送数据包,NAT会为这个"碰撞"建立映射条目,从而在防火墙上打开一条通道。整个过程不需要中心服务器参与,延迟最低,带宽最高。实测大约九成连接走直连。

第二层是relay fallback。当打洞失败时,iroh通过relay服务器中转加密数据包。relay使用QUIC连接,端到端加密本身由QUIC/TLS 1.3保证,relay只是盲转发,因此只能看到Endpoint ID X在和Endpoint ID Y通信,无法解密内容。更重要的是,relay是无状态的:数据包路由出去后不保留任何连接状态,这使得relay易于水平扩展,成本极低。

第三层是地址查找(Address Lookup)。当只知道Endpoint ID但不知道网络位置时,iroh提供多种解析机制。默认使用n0提供的DNS/Pkarr服务(运行在dns.iroh.link)。可选开启BitTorrent Mainline DHT做纯P2P地址查找。这个功能默认关闭以避免被OS识别为BitTorrent客户端。

QUIC与ALPN的设计选择

iroh的连接就是QUIC连接,协议协商使用ALPN(Application-Layer Protocol Negotiation)。WireShark抓包看iroh流量和普通QUIC流量完全一样。这是刻意为之的选择:不在传输层发明新协议,只是用现有IETF标准组合出新的连接建立能力。ALPN让iroh支持在同一条QUIC连接上复用多个应用层协议,比如iroh-blobs和iroh-gossip可以共享同一个传输通道。

iroh-blobs:BLAKE3验证流

iroh-blobs是基于BLAKE3哈希的内容寻址blob传输库,支持从几KB到几TB的任意大小数据传输。核心特性是bao4格式的增量验证流:数据下载过程中每16KB块就能验证一次BLAKE3哈希,不需要等待完整文件才能检测损坏。这对于大文件传输和不可靠网络环境特别有价值。

iroh-blobs还支持范围请求和大小证明:请求方可以只下载blob的某个字节范围,并获得该范围内容正确性的密码学证明。

1.0版本新增

1.0版本相比之前的预发布版本有若干重要变化:

Wire Protocol稳定性终于有了明确承诺,此前一直在快速迭代中API频繁变化。官方FFI绑定的Python、Node.js、Swift、Kotlin支持正式回归,此前因API不稳定暂停了很长时间。QUIC NAT穿透能力改进,结合自定义多路径支持,允许同时使用多条网络路径传输数据。WASM支持允许在浏览器环境中运行iroh节点。可插拔自定义传输层官方支持了Tor、Nym、BLE扩展。

适用场景建议

iroh的核心价值在于简化P2P连接建立的复杂度,同时提供比VPN类工具更灵活的应用层抽象。适合的应用类型包括:需要处理复杂网络环境的移动P2P应用、受网络变化影响大的物联网设备管理、需要高效节点间数据传输的分布式AI推理管道、不想依赖中心服务器的信令基础设施的协作工具。

对于需要集中管理大量设备的场景,Tailscale等网络层VPN工具更合适。对于完全在浏览器内运行的P2P场景,WebRTC可能是更好的选择。