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

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

用户界面中的公共 ipv4 地址框

由于 IPv6 地址空间中的长度、复杂性和部分的重要性等许多因素,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 应用程序的双堆栈套接字

IPv6 Winsock 应用程序的函数调用

使用硬编码的 IPv4 地址

IPv6 Winsock 应用程序的基础协议