9个版本
新 0.5.5 | 2024年8月2日 |
---|---|
0.5.4 | 2024年8月2日 |
0.5.3 | 2024年7月13日 |
0.4.2 | 2024年5月28日 |
0.4.1 | 2024年4月16日 |
#548 in 网络编程
每月790次下载
265KB
350 行
Holo是一套旨在支持高规模和自动化驱动的网络的路由协议。
有关路由协议的描述,请参阅此 维基百科页面.
架构
以下图像显示了霍洛软件堆栈的不同逻辑层
带有灰色背景的项目尚未实现。有关更全面和详细的信息,请参阅架构页面。
特性
注重简洁性和正确性
Holo的主要目标是创建一个可靠、易于维护和可扩展的代码库。随着路由协议及其扩展的复杂性不断增加,基于稳健基础构建的路由协议实现至关重要。为此,Holo的代码库优先考虑简洁性、模块化和详尽的文档。多亏了Rust编译器的严格性和广泛的单元测试,预期大多数回归将在新功能开发周期的早期被捕获。
自动化就绪
Holo专门为需要使用结构化和建模数据编程配置和监控的高规模、自动化驱动的网络而开发。Holo原生实现IETF的标准YANG模块,并支持多种管理接口,包括本地的gRPC和gNMI。此外,Holo还提供了一个独立的CLI,该CLI可以动态渲染来自YANG模块的命令,并通过gRPC与Holo守护进程通信。
对配置所做的更改被视为事务处理,确保要么所有更改都得到应用,要么一个都不应用。此功能是网络自动化的显著促进者,因为它消除了管理应用程序中错误恢复的需求。Holo还支持涉及多个网络设备的全局事务。其他网络自动化功能包括确认提交和配置回滚支持。
安全性
由于是用内存安全语言编写的,因此Holo对各种与内存相关的错误和安全漏洞具有免疫力。除了Rust提供的安全性保证外,Holo守护程序在chroot监狱中运行并在启动时降低权限。对于某些操作,如绑定套接字,Linux使用能力来获取最少的所需权限,时间最短。
集成协议实现
某些协议,如OSPF和RIP,有不同版本广泛部署,通常一个是IPv4,另一个是IPv6。Holo利用Rust的泛型来实现版本无关的协议实现,其中大部分代码由不同的协议版本共享。这种方法降低了这些协议的维护成本,并促进了为所有协议版本带来好处的新功能的发布。
并行性
Holo大量使用异步操作,并依赖Tokio运行时来调度任务并在线程池中运行它们。为了实现更好的性能,I/O请求和CPU密集型算法都卸载到单独的任务,最大程度地利用所有可用的CPU核心。计划在未来支持运行时无关的代码,一旦Rust语言团队标准化必要的抽象。
结构化日志
Holo生成包含结构化数据的日志消息,可以以JSON、文本等各种格式表示。由于日志是通过跟踪外观进行的,因此可以利用各种跟踪订阅者来满足不同的用户需求。例如,日志可以定向到文件、journald、集中的OpenTelemetry收集器或这些选项的任何组合,具有可能不同的日志级别。
可重现的错误
Holo提供记录和回放功能,使得重现任何用户报告的错误变得简单。可以将Holo守护程序配置为将协议实例的完整生命周期记录到文件中。然后可以在另一台机器上回放该文件,重现相同的事件序列。虽然记录会话可能持续数小时或数天,但回放过程应只需几秒钟。这得益于Holo的模块化架构,其中所有与时间相关的和I/O操作都在单独的任务中执行,并作为事件消息抽象。
安装
Holo使用不稳定的功能,因此需要使用Rust编译器的nightly版本从源代码构建。
有关安装的详细说明,请参阅INSTALL.md文件。
支持的平台
目前,Holo仅与Linux操作系统兼容。
计划未来支持WebAssembly。此添加将使您可以在浏览器中模拟大型网络,使网络实验对每个人来说都更方便、更易于访问。
入门指南
开始使用Holo的最简单方法是使用预先构建的Docker容器和containerlab软件。您可以在此链接找到各种预配置的网络拓扑。这些拓扑可以一键部署,允许您在包括与其他实现互操作性测试在内的各种网络设置中测试Holo。
此外,Holo可以在需要路由堆栈的地方使用,例如在软件路由器中,只要功能集与您的具体需求一致。
合规性
Holo支持以下IETF RFC和Internet草案
BFD
- RFC 5880 - 双向转发检测 (BFD)
- RFC 5881 - IPv4 和 IPv6 的双向转发检测 (BFD)(单跳)
- RFC 5882 - 双向转发检测 (BFD) 的通用应用
- RFC 5883 - 多跳路径的双向转发检测 (BFD)
BGP
- RFC 1997 - BGP 社区属性
- RFC 2385 - 通过 TCP MD5 签名选项保护 BGP 会话
- RFC 2545 - 使用 BGP-4 多协议扩展进行 IPv6 跨域路由
- RFC 2918 - BGP-4 的路由刷新能力
- RFC 4271 - 边界网关协议 4 (BGP-4)
- RFC 4360 - BGP 扩展社区属性
- RFC 4486 - BGP 停止通知消息的子代码
- RFC 4760 - BGP-4 的多协议扩展
- RFC 5082 - 广义 TTL 安全机制 (GTSM)
- RFC 5492 - BGP-4 的能力通告
- RFC 5668 - 4 字节 AS 特定 BGP 扩展社区
- RFC 5701 - IPv6 地址特定 BGP 扩展社区属性
- RFC 6286 - BGP-4 的自治系统级唯一 BGP 标识符
- RFC 6608 - BGP 有限状态机错误的子代码
- RFC 6793 - BGP 支持 4 字节自治系统 (AS) 编号空间
- RFC 7606 - 修订 BGP UPDATE 消息的错误处理
- RFC 7607 - AS 0 处理的规范
- RFC 8092 - BGP 大社区属性
- RFC 8212 - 没有策略的默认外部 BGP (EBGP) 路由传播行为
- RFC 8642 - 已知 BGP 社区的策略行为
MPLS LDP
- RFC 5036 - LDP 规范
- RFC 5561 - LDP 能力
- RFC 5918 - 标签分发协议 (LDP) '类型通配符' 前向等价类 (FEC)
- RFC 5919 - 信号 LDP 标签通告完成
- RFC 6720 - 标签分发协议 (LDP) 的广义 TTL 安全机制 (GTSM)
OSPF
- RFC 2328 - OSPF 版本 2
- RFC 3623 - OSPF 优雅重启
- RFC 5187 - OSPFv3 优雅重启
- RFC 5243 - OSPF 数据库交换摘要列表优化
- RFC 5250 - OSPF 不透明 LSA 选项
- RFC 5340 - OSPF for IPv6
- RFC 5709 - OSPFv2 HMAC-SHA 加密认证
- RFC 5838 - OSPFv3 地址族的支持
- RFC 6987 - OSPF 混杂路由器通告
- RFC 7684 - OSPFv2 前缀/链路属性通告
- RFC 7166 - 支持 OSPFv3 认证尾部的支持
- RFC 7770 - OSPF 为广告可选路由器能力的扩展
- RFC 8362 - OSPFv3 链路状态通告 (LSA) 扩展性
- RFC 8405 - 链路状态 IGP 的最短路径优先 (SPF) 回退延迟算法
- RFC 8476 - 使用 OSPF 信号最大 SID 深度 (MSD)
- RFC 8665 - OSPF 的分段路由扩展
- RFC 8666 - OSPFv3 的分段路由扩展
RIP
- RFC 2080 - IPv6 的 RIPng
- RFC 2453 - RIP 版本 2
- RFC 4822 - RIPv2 加密认证
IETF YANG 实现覆盖
模块 | 配置 | 状态 | RPCs | 通知 | 总数 |
---|---|---|---|---|---|
ietf-bfd-ip-mh@2022-09-22 | 100.00% | 100.00% | - | 100.00% | 100.00% |
ietf-bfd-ip-sh@2022-09-22 | 100.00% | 100.00% | - | 100.00% | 100.00% |
ietf-bfd@2022-09-22 | 100.00% | 100.00% | - | - | 100.00% |
ietf-bgp-policy@2023-07-05 | 100.00% | - | - | - | 100.00% |
ietf-bgp@2023-07-05 | 32.38% | 85.95% | - | - | 60.40% |
ietf-if-extensions@2023-01-26 | 100.00% | 0.00% | - | - | 50.00% |
ietf-if-vlan-encapsulation@2023-01-26 | 42.86% | - | - | - | 42.86% |
ietf-interfaces@2018-01-09 | 100.00% | 0.00% | - | - | 22.22% |
ietf-ip@2018-01-09 | 52.17% | 0.00% | - | - | 40.00% |
ietf-ipv4-unicast-routing@2018-03-13 | 100.00% | 100.00% | - | - | 100.00% |
ietf-ipv6-unicast-routing@2018-03-13 | 40.62% | 100.00% | - | - | 45.71% |
ietf-key-chain@2017-04-18 | 100.00% | 100.00% | - | - | 100.00% |
ietf-mpls-ldp@2022-03-14 | 86.96% | 92.31% | 100.00% | 100.00% | 92.38% |
ietf-mpls@2020-12-18 | 0.00% | 57.14% | - | - | 35.29% |
ietf-ospf-sr-mpls@2024-01-18 | 25.00% | 53.95% | - | - | 52.81% |
ietf-ospf@2022-10-19 | 75.00% | 59.64% | 100.00% | 41.94% | 59.57% |
ietf-ospfv3-extended-lsa@2024-01-16 | 50.00% | 85.28% | - | - | 84.85% |
ietf-rip@2020-02-20 | 27.91% | 93.33% | 100.00% | - | 55.41% |
ietf-routing-policy@2021-10-11 | 100.00% | 0.00% | - | - | 98.11% |
ietf-routing@2018-03-13 | 100.00% | 85.71% | - | - | 92.31% |
ietf-segment-routing-mpls@2021-05-26 | 62.50% | 0.00% | - | 23.53% | 32.76% |
ietf-segment-routing@2021-05-26 | 100.00% | - | - | - | 100.00% |
ietf-system@2014-08-06 | 26.67% | 60.00% | 0.00% | - | 38.24% |
资金
本项目由NGI Zero Core资助,该基金由NLnet设立,并获得欧盟委员会下一代互联网项目的资金支持。更多信息请访问NLnet项目页面。
许可证
本项目采用MIT许可证。
贡献
我们欢迎任何形式的贡献,从错误报告到拉取请求。请参阅我们的项目愿望清单,以获取贡献的想法。
除非您明确声明,否则您提交给Holo的任何有意贡献,均按MIT许可证授权,不附加任何额外条款或条件。
依赖项
~8.5MB
~180K SLoC