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 帮助程序函数,而不是重新实现此逻辑。 例如,RtlIpv6AddressToString、RtlIpv6AddressToStringEx、RtlIpv6StringToAddress和 RtlIpv6StringToAddressEx 函数可用于在这些 IPv6 地址的 IPv6 地址和字符串表示形式之间进行转换。
要避免的代码
- 依赖于 IPv4 大小的地址的用户界面元素必须经过审查,其中一部分审查应包括你提供的信息(在 IPv4 下)是否适合 IPv6。
- 指定 IP 地址的功能还应取决于 IPv4 是否正在使用,还是 IPv6 可用。 如果 IPv6 可用,是否适合指定基于数字的(十六进制)地址或基于名称的地址?
编码任务
将现有代码库从 IPv4 修改为 IPv4 和 IPv6 互作性
- 对用户界面执行可视评审,查找依赖于 IP 地址字符串的特定长度的任何元素。 具有易于识别的四节点小数表示法的控件很容易发现,但其他控件则不是。 可能会有一些位置可以显示 IP 地址,例如在对话框中,IPv6 地址可能会耗尽显示室。
- 找到这些控件中的任何一项后,请仔细检查在使用 IPv6 时是否适合显示地址。 如果 IPv4 或 IPv6 可能正在使用,请确保用户界面可以容纳这两者。 使用可显示整个 IPv6 地址的用户界面控件替换或扩充任何控件。
- 跟进用户界面测试,确保启用 IPv6 地址显示的更改在使用 IPv4 地址时保持预期的可用性。 此外,测试协议地址显示位置(如信息性对话框),以确保它们正确处理 IPv6 地址。
相关主题
-
适用于 Windows 套接字应用程序的 IPv6 指南
-
更改 IPv6 Winsock 应用 的数据结构
-
适用于 IPv6 Winsock 应用程序的 Dual-Stack 套接字