Поделиться через


Проблемы с пользовательским интерфейсом для приложений IPv6 Winsock

Одним из наиболее очевидных изменений с IPv4 на IPv6 является размер IP-адреса. Многие пользовательские интерфейсы предоставляют диалоговые окна, позволяющие пользователю ввести IP-адрес, как показано на следующем рисунке.

Общее поле адреса ipv4 в пользовательском интерфейсе

Адресация в IPv6 из-за многих факторов, таких как длина, сложность и важность разделов в адресном пространстве IPv6, не способствует изменению или спецификации пользователей. Таким образом, уменьшается необходимость предоставления пользователям возможности указывать собственный адрес. Кроме того, из-за сложности, связанной с адресацией IPv6, предоставление администраторам возможности указывать сведения об IPv6-адресе вряд ли будет происходить для каждого узла.

Отображение адреса 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-адреса (второй адрес ниже с внедренным IPv4-адресом) при создании пользовательского интерфейса с поддержкой IPv6. Обратите внимание, что добавление идентификатора области к следующему адресу увеличит его длину на целых одиннадцать символов:

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-адресов, а также определить, является ли этот адрес номером или именем.
  • По возможности используйте существующие функции Winsock и IP Helper при использовании IPv6-адресов, а не повторно реализуйте эту логику. Например, функции RtlIpv6AddressToString, RtlIpv6AddressToStringEx, RtlIpv6StringToAddress и RtlIpv6StringToAddressEx можно использовать для преобразования между 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-адреса.

Руководство по IPv6 для приложений windows Sockets

Изменение структур данных для приложений Winsock IPv6

Сокеты с двумя стеками для приложений Winsock IPv6

Вызовы функций для приложений Winsock IPv6

Использование жестко закодированных IPv4-адресов

Базовые протоколы для IPv6-приложений Winsock