Linux IPv6:部署哪一个?
IPv6,即互联网协议第 6 版的缩写,是 IETF 设计的下一代协议,旨在取代当前版本的互联网协议第 4 版 (IPv4)。当今的大部分互联网使用 IPv4,它现在已经有近 20 年的历史了。尽管 IPv4 年事已高,但仍然具有非凡的弹性,但它开始出现问题。最重要的是,IPv4 地址日益短缺,所有连接到互联网的新机器和设备都需要 IPv4 地址。
IPv6 的出现是为了解决 IPv4 中的许多问题,并增加许多改进以适应未来的互联网。这些改进出现在路由和网络自动配置、安全性和移动性等领域。IPv6 代表了一整套功能,其中寻址是最明显的组成部分。寻址问题受到了很多关注,但这只是 IPv6 设计者解决的众多重要问题之一。其他功能也得到了发展,以直接响应对可扩展网络架构、改进的安全性以及数据完整性、集成的服务质量、自动配置、移动计算、数据多播以及在全球骨干级别上更有效的网络路由聚合的关键业务需求。
本文揭示了在加拿大蒙特利尔爱立信研究中心的开放系统实验室的 ARIES 项目(互联网电子服务器高级研究)中进行的 IPv6 工作的一部分。ARIES 项目于 2000 年 1 月启动,旨在寻找和原型化必要的技术,以证明使用 Linux 和开源软件作为基础技术的集群互联网服务器展示电信级特性的可行性。
IPv6 是此类电信级系统和集群上要支持的关键技术。爱立信的愿景是,在不久的将来,所有移动用户都将“始终连接,始终在线”。这种新的服务范式,加上 IP 技术的使用,为服务提供商和网络运营商创造新的和多样化的服务开辟了巨大的机会。然而,互联网用户数量的快速增长以及无线互联网设备数量的预期增长,需要可扩展且灵活的 IP 技术来适应如此快速的增长。因此,必须认识到 IPv6 是实现大量用户始终连接、始终在线愿景的关键技术。诸如 IP 多媒体之类的新服务假定全球唯一的寻址以实现可达性。IPv6 凭借其非常大的地址空间,将保证每个设备都有一个全球唯一的 IP 地址。
本文探讨了致力于 IPv6 的不同开源项目。目标是试验当前可用的 Linux IPv6 实现,并提出建议,以支持在我们的近电信级 Linux 集群上的 Linux 处理器上实现某种实现。这些建议必须基于几个标准,例如实现开发速度、其对标准的符合性以及其相对于其他实现的性能。
第一步是调查开源社区,并报告旨在提供 IPv6 实现、增强现有实现或为其他实现提供测试和验证的 IPv6 项目。
WIDE IPv6 工作组 (IPv6 WG) 是 WIDE 项目的一部分,于 1995 年在日本启动,目的是试验和部署 IPv6。1995 年末,IPv6 WG 拥有几个独立的实现,并举办了互操作性测试活动。随着规范得到验证并且互操作性变得普遍,IPv6 WG 独立实现 IPv6 堆栈似乎效率低下。出于这个原因,WIDE 项目启动了 KAME 项目作为子项目,以结合各种实现的力量。
尽管 IPv6 WG 和 KAME 的成员有所重叠,但 IPv6 WG 主要进行技术和创新研究,而 KAME 则负责实现。
WIDE IPv6 WG 的目标可以概括为提供 IPv6 实现和软件,鼓励在生产环境中部署 IPv6,以及开发从 IPv4 到 IPv6 的过渡机制。此外,该项目旨在建立 IPv6 网络管理的技术和专业知识。
该项目的预期输出是符合 RFC 的免费 IPv6/IPSec 代码。
KAME 项目是日本七家公司共同努力为 BSD 变体(FreeBSD、OpenBSD、NetBSD 和 BSD/OS)创建一个免费、可靠的软件堆栈,特别是针对 IPv6 和 IPSec。该项目的成立是为了避免不必要的重复开发,并交付高质量和高级功能齐全的实现。
该项目于 1998 年 4 月启动,计划于 2002 年 3 月结束。核心研究人员来自以下公司:富士通有限公司、日立有限公司、IIJ 研究所、NEC 公司、东芝公司和横河电机公司。他们已承诺全职从事 IPv6 堆栈的工作,使该项目成为他们的主要任务之一。他们的目标是根据 BSD 版权实现尽可能好的网络代码,并将他们的成果作为免费软件呈现出来。
该项目的预期成果是用于 IPv6 和 IPSec 的高质量代码(以免费软件形式提供)(最初基于 WIDE Hydrangea IPv6/IPSec 堆栈),这将成为 21 世纪高级互联网的基础。
TAHI 项目于 1998 年 10 月在日本启动,是东京大学、YDC 公司和横河电机公司之间的项目,目标是通过一致性和互操作性测试的研究和开发,开发和提供 IPv6 的验证技术。该小组与 KAME 项目在质量方面进行合作,通过提供 TAHI 项目中开发的验证技术并提高开发效率。同样重要的是要注意,TAHI 项目也得到了 WIDE 项目的大力支持。
TAHI 项目的成果是创建了
一致性测试:该项目每两个月发布一次一致性测试套件。发布时间可能与 KAME 稳定版本相同。
与简单网络的互操作性测试:这些测试验证您的目标节点是否可以在某些典型的网络中工作。由于此测试将在有限的环境中进行,因此将其设置为互操作性测试的第一步。
与多实现环境的互操作性测试:这些测试验证与真实世界的互操作性。
测试场景和测试工具。
该项目的成果向公众免费开放。
USAGI(通用 IPv6 游乐场)项目致力于与 WIDE 项目、KAME 项目、TAHI 项目和 Linux IPv6 用户组合作,为 Linux 提供生产质量的 IPv6 协议栈。我们将在后面的章节中讨论 USAGI 项目及其 IPv6 实现。
IPv6-DRET 项目是由 DGA/DRET(法国军事研究机构)资助的公共 Linux IPv6 实现,由 INRIA Sophia-Antipolis 和 LIP6 Paris 共同开发。IPv6-DRET 基于 Linux 内核 2.1,该实现的目的是测试与服务质量 (QoS) 相关的某些算法。
目标不是提供全面的实现,而是构建足够的功能来测试与 QoS 相关的某些算法。由于路由问题是关于 IPv6 的最重要的研究兴趣之一,因此他们的网络堆栈旨在容纳主机和路由器 IPv6 机器。除了实现路由器规范外,还投入了大量精力将 RIPng 开发到 GateD 中。
该项目已不复存在。开发已经停止,代码已经过时。
Linux IPv6 RPM 项目为基于 RPM 的 Linux 发行版(即 Red Hat Linux、Turbolinux 和 Caldera OpenLinux)准备 RPM 包,这些包包含连接到 IPv6 网络所需的软件和工具。该项目的目的是提供 RPM,以便轻松获得 IPv6 连接。
Debian IPv6 项目是 Debian 项目的一部分。它旨在转换一些 Debian 包以使其符合 IPv6 标准。
您可能已经注意到,在上面列出的所有项目中,只有两个项目为 Linux 提供了严肃的 IPv6 实现:Linux 内核实现和 USAGI 项目。在以下部分中,我们将详细了解这两个项目和实现,并了解哪一个更符合 IPv6 规范。
USAGI 项目旨在交付用于 Linux 的生产质量 IPv6 堆栈,并在与 KAME、WIDE 和 TAHI 项目的紧密合作中使用开发的软件对符合 IPv6 标准的网络进行实验操作。
该小组由来自私营和学术部门的多个组织组成,以促进 Linux 的 IPv6 实现和部署。该小组成员包括 WIDE 项目、CRL、GLUON PARTNERS Co., Ltd.、INTEC, Inc.、东芝公司、日立有限公司、NTT 软件公司、横河电机公司、东京大学和庆应大学。
该项目于 2000 年 10 月启动,计划于 2002 年 3 月 31 日结束。现有的 Linux 内核有自己的 IPv6 协议栈;然而,根据 TAHI 项目的评估结果,当前实现的 IPv6 堆栈的质量不如 FreeBSD 和 Microsoft Windows 2000 等其他操作系统中提供的 IPv6 堆栈。
该项目与有关 IPv6 系统开发和部署的其他研究和开发项目和组织合作。USAGI 项目与 KAME 项目(BSD UNIX 系统的 IPv6)以及 TAHI 项目(IPv6 测试和评估规范和工具)合作。
USAGI 实现严重依赖 KAME 代码,KAME 代码是各种 BSD 系统上的 IPv6 堆栈,他们的大部分努力都集中在增强堆栈并将其移植到 Linux 上。目前,USAGI 项目具有用于 Linux 内核的 IPv6 实现。
该项目的输出是用于 Linux 内核的免费 IPv6 堆栈和 glibc 库中大大改进的 IPv6 API。该项目于 2001 年 2 月 5 日发布了第二个稳定版本,并且每两周提供更新代码的快照。
Linux 内核有自己的 IPv6 实现。然而,如前所述,根据 TAHI 项目的结果,该实现证明不如其他实现。然而,考虑到一段时间以来没有发生重大的开发活动,这并不令人意外。另一个因素是 Linux 内核 IPv6 代码的原始编写者 Pedro Roque 已经离开了社区,从那时起,Alexey Kuznetsov 和其他人多年来做了一些改进;然而,这并不是一项重大的开发。USAGI 项目提交了一些小的修复,但与内核堆栈完全集成的问题仍然是一个悬而未决的问题。
此时,我们的实验室中已经有两个 IPv6 测试网络。一个网络具有带有 USAGI IPv6 堆栈的 Linux 节点,另一个网络具有带有内核 IPv6 堆栈的 Linux 节点。已经投入了大量工作来执行设置并解决路由和隧道问题。然而,问题仍然是采用哪种实现。
为了能够客观地回答这个问题,爱立信研究(布达佩斯)对官方 Linux 内核的最新版本(当时为内核 2.4.5)和 USAGI IPv6 实现(基于 2.4.0)进行了符合性测试。这些测试基于新罕布什尔大学互操作性实验室 IPv6 测试描述文档(请参阅资源)。
每个测试用例的结果可以是
通过:实现通过了测试。
失败:实现未通过测试。
不确定:如果我们无法确定实现是否能够通过测试,则判决为不确定。例如,当测试由三个请求/回复序列组成,并且我们没有收到测试仪的第二个请求的答案时,则判决为不确定。
一致性实验室进行了四种类型的测试:基本规范、地址自动配置、重定向和邻居发现。下面,我们解释这些测试并呈现结果。
基本规范:这一系列测试涵盖了 IPv6 的基本规范。基本规范规定了基本的 IPv6 标头以及最初定义的 IPv6 扩展标头和选项。它还讨论了数据包大小问题、流标签和流量类别的语义以及 IPv6 对上层协议的影响(见图 1)。
地址自动配置:这些测试涵盖了 IPv6 的地址自动配置。它们旨在验证是否符合 IPv6 无状态地址自动配置规范(见图 2)。
重定向:重定向测试涵盖了 IPv6 邻居发现规范的重定向功能。路由器发送重定向消息,以将主机重定向到特定目标的更好的第一跳路由器,或告知主机目的地实际上是一个邻居,即在链路上(见图 3)。
邻居发现:这些测试涵盖了 IPv6 的邻居发现规范。节点(主机和路由器)使用邻居发现协议来确定已知驻留在连接链路上的邻居的链路层地址,以及清除快速失效的缓存值。主机还使用邻居发现来查找愿意代表他们转发数据包的邻居路由器。最后,节点主动使用该协议来跟踪可达和不可达的邻居。当路由器或到路由器的路径发生故障时,主机主动搜索可用的替代方案(见图 4 和图 5)。
图 5. 测试结果摘要
根据这些结果,我们可以看到 USAGI 实现比 Linux 内核实现具有更好的结果;它通过了更多测试,未通过的测试更少,并且不确定的情况比 Linux 内核实现更少。
通常,在处理此类任务时,会进行大量的学习和能力建设。但是,总有一些特殊的教训是您在过程中学到的,它们值得一提。
简化问题总是值得的。例如,不清楚为什么 ping6 能够使 Linux 内核(v. 2.4.5)崩溃,而我们正在运行三个 Web 服务器(Apache、Jigsaw 和 Tomcat),这些服务器具有针对 IPv6 支持的修补代码,此外还有 Alpha 版本的 Java Merlin 1.4。当我们禁用这些服务器和 Java 虚拟机时,事情变得更加清晰。
此外,采用完整的实现比部署补丁更容易且更灵活。在某些情况下,我们遇到了一些错误,并且不容易判断它们来自哪里。是应用程序的 IPv6 补丁、USAGI IPv6 内核补丁还是 IPv6 修补的二进制文件?简化问题有很大帮助,但也证明采用完整的集成实现可能比单独下载和应用的补丁更容易。
需要提及的一个重要问题是,我们与开源社区的经验非常积极。使用开源软件的人们尽最大努力帮助您修复错误并快速回复电子邮件。由于我们在 Linux 集群上使用的大多数软件都基于开源,因此有时我们会回到社区提出问题,并且我们没有遇到从开发人员那里获得支持的问题——这是一个需要承认的重要因素。
自 2.4.0 发布以来,Linux 内核 IPv6 实现没有进行任何重大开发。在许多情况下,我们能够使用 IPv6 流量使内核崩溃。另一方面,USAGI 为 Linux 提供了一个 IPv6 实现,该实现是从 FreeBSD IPv6 堆栈移植过来的,FreeBSD IPv6 堆栈是当前可用的最佳 IPv6 实现之一。它还被证明更稳定可靠,并且比 Linux 内核实现具有更好的符合性测试结果。可以得出的结论是,USAGI 堆栈至少比内核实现更成熟,并提供更多功能和对规范的符合性。
如果您想根据不同的因素(例如开发状态、从事开发的人员数量、行业和学术界的支持以及对最新 RFC 的符合性)来决定在 Linux 服务器上部署哪种 IPv6 实现,那么您很可能会选择 USAGI IPv6 实现。然而,关于这两种实现都存在一个重要的担忧。不幸的是,不存在描述所有受支持的 RFC 以及不同设计决策背后的动机的完整“实现”文档。
我希望 Linux 内核社区和 USAGI 项目能够更紧密地合作并组织他们的努力,从而为 Linux 带来非常稳定和高效的 IPv6 实现。我相信结果将是一个具有稳定且编写良好的 IPv6 实现的 Linux 内核——移动互联网未来 IPv6 服务器取得成功所必需的公式。
感谢加拿大爱立信研究开放系统实验室批准发表本文;感谢加拿大爱立信研究中心的 Marc Chatel、Bruno Hivert 和 David Gordon 在实验室中提供的帮助和支持;感谢匈牙利爱立信研究一致性实验室进行的一致性测试。
