2 个版本

0.0.5 2024年6月26日
0.0.4 2024年6月14日

#319 in 网络编程


用于 librice

MIT/Apache

380KB
8K SLoC

Build status codecov Dependencies crates.io docs.rs

librice-proto

包含用 Rust 编程语言编写的 ICE (RFC8445) 协议 (sans-IO) 实现的仓库。

警告

此代码仍处于开发中,所有内容都可能随时更改。

当前状态

当前状态是,已有足够的实现可以成功地在 WebRTC 场景下与外部浏览器(Chrome 和 Firefox)传输数据。STUN 实现在此阶段相对成熟。还需要在 ICE 层上进行更多工作以提高效率和 API 体验。TURN 支持目前仍处于开发中。支持更多场景无疑是近期和长期未来路线图的一部分。

为什么使用 sans-io?

有两个原因:可重用性和可测试性。

在不涉及 IO 发生细节的情况下,相同的 sans-IO 实现可以在不规定应用程序必须遵循的 IO 模式的情况下使用。相反,应用程序(或父库)在字节在节点之间传输的方式上有更大的自由度。还可能在同步或异步运行时中使用 sans-IO 库。

sans-IO 还允许轻松测试 sans-IO 实现可能遇到的所有特定状态。结合全面的测试套件,这确保了在所有情况下实现都按预期行为。

有关 sans-IO 实现的其他示例,请参阅

相关标准

  • RFC5245: Interactive Connectivity Establishment (ICE):用于 Offer/Answer 协议的 NAT 转换协议
  • RFC5389: NAT 转换会话遍历工具 (STUN)
  • RFC5766: 使用 NAT 转换绕行的会话遍历 (TURN):STUN 的会话遍历工具扩展
  • RFC5769: NAT 转换会话遍历工具 (STUN) 测试向量
  • RFC6156: 使用 NAT 转换绕行的会话遍历 (TURN) 的 IPv6 扩展
  • RFC6544: 使用 ICE 的 TCP 候选
  • RFC7675:用于同意新鲜度的NAT(STUN)会话遍历工具
  • RFC8445:交互式连接建立(ICE):用于网络地址转换器(NAT)遍历的协议
  • RFC8489:用于NAT(STUN)的会话遍历工具
  • RFC8656:使用NAT(NAT)周围中继(TURN):用于NAT(STUN)会话遍历工具的中继扩展
  • RFC8838:滴答ICE:为交互式连接建立(ICE)协议提供候选人的增量配置

结构

librice-proto

ICE(RFC8445)协议的sans-IO实现。不包含任何IO代码。

librice

使用librice-proto构建的ICE(RFC8445)的异步实现。目前使用async-std,但计划实现tokio(或mio)。

待办事项

  • RFC5766
  • RFC6554
  • RFC7675

依赖关系

~3–12MB
~119K SLoC