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


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

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

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

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

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

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

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