IPv6 同伴测试

Proposal 126
Closed
Author zzz
Created 2016-05-02
Last Updated 2018-03-19
Target Version 0.9.27
Implemented In 0.9.27

概述

此提案旨在为 IPv6 实现 SSU 同伴测试。 已在 0.9.27 中实现。

动机

我们无法可靠地确定和跟踪我们的 IPv6 地址是否被防火墙阻挡。

当我们多年前添加 IPv6 支持时,我们假设 IPv6 永远不会被防火墙阻挡。

最近,在 0.9.20(2015 年 5 月)中,我们在内部拆分了 v4/v6 的可达性状态(工单 #1458)。 有关详细信息和链接,请参阅该工单。

如果您的 v4 和 v6 都被防火墙挡住,您可以在 /confignet 的 TCP 配置部分中强制设置被防火墙挡住。

我们没有针对 v6 的同伴测试。在 SSU 规范中,这是被禁止的。 如果我们不能定期测试 v6 的可达性,我们就无法合理地从 v6 可达状态过渡到其他状态。 我们剩下的办法是,如果我们收到入站连接,就猜测我们是可达的; 如果一段时间没有收到入站连接,就猜测我们是不可达的。 问题是,一旦您声明不可达,您就不会发布您的 v6 IP, 然后您就不会再接收到任何连接(在 RI 在网络数据库中过期之后)。

设计

通过删除之前仅允许对 IPv4 进行同伴测试的限制,实现对 IPv6 的同伴测试。 同伴测试消息已经有一个用于 IP 长度的字段。

规范

在 SSU 概述的能力部分,做如下添加:

直至 0.9.26,IPv6 地址不支持同伴测试, 如果 IPv6 地址存在 ‘B’ 能力,则必须忽略。 从 0.9.27 开始,IPv6 地址支持同伴测试, IPv6 地址中 ‘B’ 能力的存在或缺乏表示实际支持(或不支持)。

在 SSU 概述和 SSU 规范的同伴测试部分,做出以下更改:

IPv6 说明: 直至发布 0.9.26,仅支持对 IPv4 地址的测试。 因此,所有 Alice-Bob 和 Alice-Charlie 的通信必须通过 IPv4。 然而,Bob-Charlie 的通信可以通过 IPv4 或 IPv6。 Alice 的地址,当在 PeerTest 消息中指定时,必须是 4 个字节。 从发布 0.9.27 开始,支持对 IPv6 地址的测试,Alice-Bob 和 Alice-Charlie 的通信可以通过 IPv6, 如果 Bob 和 Charlie 在其已发布的 IPv6 地址中表明支持 ‘B’ 功能。

Alice 使用现有会话通过其希望测试的传输方式(IPv4 或 IPv6)向 Bob 发送请求。 当 Bob 通过 IPv4 接收到 Alice 的请求时,Bob 必须选择广告为 IPv4 地址的 Charlie。 当 Bob 通过 IPv6 接收到 Alice 的请求时,Bob 必须选择广告为 IPv6 地址的 Charlie。 实际的 Bob-Charlie 通信可以通过 IPv4 或 IPv6(即,独立于 Alice 的地址类型)。

迁移

路由器可以:

  1. 不将其版本增量到 0.9.27 或更高

  2. 从任何已发布的 IPv6 SSU 地址中移除 ‘B’ 能力

  3. 实现 IPv6 同伴测试