IPv6 Winsock 应用程序的用户界面问题

从 IPv4 到 IPv6 的最明显变化之一是 IP 地址的大小。 许多用户界面提供了对话框,使用户能够输入 IP 地址,如下图所示。

用户界面 中的常见 ipv4 地址框

由于 IPv6 地址空间中部分的长度、复杂性和部分的重要性等诸多因素,因此不利于用户的修改或规范。 因此,需要向用户提供指定自己的地址的功能会减少。 此外,由于与 IPv6 寻址相关的复杂性,为管理员提供指定 IPv6 地址信息的功能不太可能在每个节点上发生。

在 UI 中显示 IPv6 地址不可思议,因此开发人员在修改应用程序以支持 IPv6 时,应考虑 IPv6 地址大小的变化性。

本部分的其余部分讨论了 IPv4 地址长度可预测性和 IPv6 地址长度的区别。 本部分假定 IPv6 地址以十六进制表示形式显示。

IPv4 地址的大小可预测,因为它们严格遵循点状小数表示法,如以下地址示例所示:

10.10.256.1

由于 IPv6 地址约定允许使用双冒号(::)来表示一系列零,因此 IPv6 地址不可预测。 因此,以下 IPv6 地址表示形式等同于同一个 IPv6 地址:

1040:0:0:0:0:0:0:1
1040::1

使用双冒号表示一系列零的功能会导致任何给定 IPv6 的不可预知的长度,这要求程序员在创建 IPv6 地址的用户界面显示时考虑此功能。 当然,开发人员应确保用户界面能够显示 IP 地址,这些地址不使用双冒号来表示一系列零(下面的第一个地址),并且能够在创建支持 IPv6 的用户界面时显示最长的 IPv6 地址(第二个地址,以及嵌入的 IPv4 地址)。 另请注意,将范围标识符(ID)添加到以下地址会增加其长度,增加多达 11 个字符:

21DA:00D3:0010:2F3B:02AA:00FF:FE28:9C5A
0000:0000:0000:0000:0000:ffff:123.123.123.123

另一个重要考虑因素是,基于名称的地址是否比基于数字的 IPv6 地址更合适。 如果基于名称的地址更合适,则应在用户界面中考虑命名约定,包括适合任务的任何输入错误检查。

在修改 IPv6 地址时以及设计 IPv6 地址的用户界面表示形式时,开发人员必须考虑这些地址的其他复杂性。 以下一些注意事项如下:

  • 该地址应包含所有零序列,还是应使用双冒号表示法?
  • 是否更适合使用基于数字的地址表示形式或基于名称的表示形式?
  • 用户是否有兴趣识别寻址方案的某些方面,例如子网前缀、范围标识符或其他子字段?
  • 用户是否有兴趣确定地址的其他方面,例如 TLA 标识符、NLA 标识符或 SLA 标识符?
  • 用户界面能否识别嵌入的 IPv6 地址,如果是这样,如何处理和显示这些地址? 向用户显示地址信息时,是否会区分与 IPv4 兼容的地址和 IPv4 映射的 IPv6 地址?

还有其他注意事项,开发人员在开发 IP 地址用户界面时应仔细考虑其客户受众。

最佳做法

  • 开发人员在修改应用程序以支持 IPv6 时,必须考虑每个用户界面的适当方法。 确保用户界面包含足够的长度来显示 IPv6 地址是强制性的,因为确定该地址是基于数字还是名称。
  • 尽可能使用 IPv6 地址时使用现有的 Winsock 和 IP 帮助程序函数,而不是重新实现此逻辑。 例如,RtlIpv6AddressToStringRtlIpv6AddressToStringExRtlIpv6StringToAddressRtlIpv6StringToAddressEx 函数可用于在这些 IPv6 地址的 IPv6 地址和字符串表示形式之间进行转换。

要避免的代码

  • 依赖于 IPv4 大小的地址的用户界面元素必须经过审查,其中一部分审查应包括你提供的信息(在 IPv4 下)是否适合 IPv6。
  • 指定 IP 地址的功能还应取决于 IPv4 是否正在使用,还是 IPv6 可用。 如果 IPv6 可用,是否适合指定基于数字的(十六进制)地址或基于名称的地址?

编码任务

将现有代码库从 IPv4 修改为 IPv4 和 IPv6 互作性

  1. 对用户界面执行可视评审,查找依赖于 IP 地址字符串的特定长度的任何元素。 具有易于识别的四节点小数表示法的控件很容易发现,但其他控件则不是。 可能会有一些位置可以显示 IP 地址,例如在对话框中,IPv6 地址可能会耗尽显示室。
  2. 找到这些控件中的任何一项后,请仔细检查在使用 IPv6 时是否适合显示地址。 如果 IPv4 或 IPv6 可能正在使用,请确保用户界面可以容纳这两者。 使用可显示整个 IPv6 地址的用户界面控件替换或扩充任何控件。
  3. 跟进用户界面测试,确保启用 IPv6 地址显示的更改在使用 IPv4 地址时保持预期的可用性。 此外,测试协议地址显示位置(如信息性对话框),以确保它们正确处理 IPv6 地址。

适用于 Windows 套接字应用程序的 IPv6 指南

更改 IPv6 Winsock 应用 的数据结构

适用于 IPv6 Winsock 应用程序的 Dual-Stack 套接字

IPv6 Winsock 应用程序的函数调用

使用硬编码的 IPv4 地址

IPv6 Winsock 应用程序的基础协议