IPv6 Winsock 应用程序的用户界面问题
从 IPv4 到 IPv6 的最明显变化之一是 IP 地址的大小。 许多用户界面都提供对话框,使用户能够输入 IP 地址,如下图所示。
由于 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 地址。
相关主题