Главная > Интернет > Домены на национальных языках — особенности работы. Unicode и Punycode.

Домены на национальных языках — особенности работы. Unicode и Punycode.

Домены на национальных языках

Доменные имена, записанные с использованием символов национальных алфавитов, уже доступны в различных доменах верхнего уровня. Например, 28 апреля 2008 года регистрация многоязычных имён открылась в домене SU. Как же система доменных имен (DNS) работает с многообразием алфавитов?

Ответ на этот вопрос довольно прост: система DNS с символами национальных алфавитов вообще не работает, предпочитая им привычную с начала 80-х годов прошлого века латиницу, записываемую в «древней» кодировке ASCII. Единственным дополнением буквенного набора латиницы, используемого в DNS, являются арабские цифры и дефис, также входящие в кодировку ASCII. Такое положение дел обусловлено тем, что для решения задачи «расширения алфавита» нельзя было воспользоваться коренной перестройкой всей системы DNS.

Работающая в глобальном масштабе DNS – это весьма сложная распределённая система из многих тысяч серверов, находящихся под управлением самых разных администраторов. У этой системы нет центрального «технологического управления». Кардинальное же изменение допустимого набора символов, используемого отлаженным за десятилетия программным механизмом, настолько глубоко затрагивало бы фундаментальные принципы обработки DNS-запросов, что программное обеспечение серверов пришлось бы фактически обновить полностью.

Проведение такой «операции обновления» в масштабах всего Интернета слишком рискованно. Попытка провести подобную реорганизацию вообще может завершиться крахом существующей системы имён. Поэтому для введения многоязычных доменов предложили технологию, работающую поверх существующей системы DNS и вообще не требующую каких бы то ни было изменений в последней.

Как работает преобразование?

Суть этой технологии в преобразовании имён на стороне пользовательского программного обеспечения, перед отправкой запроса в систему DNS. Для реализации «многоязычия», доменные имена с символами национальных алфавитов, которые пользователь набирает в адресной строке браузера, по специальному алгоритму преобразуются браузером в последовательности символов (в кодировке ASCII), допустимые в системе DNS.

Например, доменное имя “проверка.su” преобразуется в строку символов «xn--80adjurfhd.su», то есть, слову «проверка» соответствует строка «xn--80adjurfhd», все символы которой допустимы к использованию в «классической» DNS. Для того чтобы программные системы могли отличать представления многоязычных имён от «традиционных» доменов, все многоязычные представления снабжаются обязательным префиксом: «xn--».

Преобразование кирилицы в доменном имени

Таким образом, система DNS, как и ранее, работает лишь с символами латиницы, с дефисом и арабскими цифрами, а многоязычные доменные имена функционируют на новом, более высоком, «уровне представления».

Только что описанная технология использования многоязычных доменных имён называется Punycode, она рекомендована ICANN (корпорацией, управляющей адресным пространством Интернета) и уже реализована в наиболее распространённых интернет-браузерах: в Internet Explorer 7.0 и в семействе версий Mozila Firefox 2.x.

В качестве источника алфавитов для записи доменных имён в технологии Punycode служит современный стандарт компьютерных кодировок символов UNICODE. Главное преимущество UNICODE – это многообразие поддерживаемых этим стандартом наборов символов, среди которых представлены практически все распространённые в мире системы письма. Другими словами, использование UNICODE и Punycode позволяет реализовать самые разнообразные национальные символы в доменных именах, а не только, например, символы кириллицы или западноевропейские «умляуты».

Для того чтобы упорядочить регистрацию многоязычных имён, в тех доменах первого уровня, администраторы которых пока не хотят вводить «расширенные алфавиты», предложено зарезервировать имена, начинающиеся с префикса «xn--». То есть, такие имена будут недоступны для регистрации до введения поддержки многоязычия в данном домене. Например, в домене RU регистрация имён, содержащих «двойной дефис», запрещена.

Важным аспектом введения многоязычия в системе адресации Интернета является тот факт, что с точки зрения технических служб DNS, многоязычное имя — не более чем строка из цифр, символов латиницы и дефисов, начинающаяся с префикса «xn--». То есть, в базе данных DNS записывается лишь имя домена в формате «xn--…», а не аналог, состоящий из символов того или иного национального алфавита. Однако пользователя, зарегистрировавшего домен, скорее всего, привлекло именно второе представление, записанное символами национального алфавита, а не «абракадабра», начинающаяся символами «xn--». Следить за соответствием двух представлений доменных имён — «реального» и «технического», — а также решать возможные проблемы, возникающие из-за «двуличия» доменов, предстоит регистраторам и администраторам доменов верхнего уровня.

Алгоритм Punycode

Давайте рассмотрим предложенный IDN механизм преобразования многоязыковых доменов в стандартное представление DNS на примере адреса «КРЕМЛЬ.ru».

Итак, запишем URL искомого ресурса с использованием символов кириллицы в кодировке Windows 1251: КРЕМЛЬ.ru. Известно, что стандарт Unicode (UTF-8) использует для отображения одного символа не один байт, как это принято во всех остальных кодировках, а два, поэтому данная кодировка включает в себя 65536 знаков вместо 256. Для представления кириллицы в адресах Интернет-ресурсов допускается использование символов Unicode в диапазоне шестнадцатеричных кодов 0430-045F, то есть в строчном регистре. Поэтому первая ступень преобразования введенного нами URL заключается в том, чтобы превратить все заглавные буквы в строчные, в результате чего наш адрес будет выглядеть так: кремль.ru. Вторая ступень — это трансляция адреса из национальной кодировки (в нашем случае — Win 1251) в промежуточную кодировку Unicode: к=043A; р=0440; е=0435; м=043С; л=043B; ь=044C; «.»=002Е; r=0072; u=0075. Подробную информацию на английском языке в формате .pdf (Adobe Acrobat) о каждом символе Unicode можно найти по адресу unicode.org. Перекодировка в Unicode необходима, прежде всего, с целью «унификации» вводимых пользователем адресов, поскольку данный стандарт позволяет представить символы практически всех существующих ныне национальных алфавитов в форме единообразных шестнадцатеричных кодов. И, наконец, последняя ступень — преобразование адреса Unicode в предложенный IDN стандарт ACE (ASCII Compatible Encoding), позволяющий представлять любой адрес в формате ASCII с использованием специального префикса.

Итак, специальные программные конвертеры превращают полученный нами набор кодов Unicode в формат ACE, после чего адрес будет выглядеть следующим образом: xn--e1ajeds9e.ru. А подобный адрес, фактически записанный в ASCII, прекрасно умеют обрабатывать уже существующие ныне DNS-серверы, которые в ответ на данный запрос вернут соответствующий этому домену IP-адрес.

Для программистов, подробный алгоритм преобразования (кодирования и декодирования) Punycode изложен в RFC3492.

Стоить отметить, что преобразование кодов Unicode в формат ACE и обратно — не просто последовательное, оно зависимое от всего содержимого. Например:

«д» —> «d1a»
«п» — > «o1a»
«дп» —> «d1aw»
«дпд» —> «d1aa6a»

Изменения на стороне клиента.

Для использования многоязыкового стандарта адресации пользователь должен будет загрузить и установить на своем компьютере специальную программу, которая носит название IDN-клиента. Предполагается, что в ближайшем будущем появятся как минимум два различных класса IDN-клиентов: первые из них будут выполнены в виде надстроек к браузеру (plug-ins), вторые в процессе установки будут встраиваться в операционную систему, что позволит обращаться к многоязыковым доменам из FTP-клиентов и почтовых программ.

Возможные проблемы

Основной недостаток, который становится очевидным при подробном рассмотрении перспективы появления многоязыковых доменов — это невозможность обратиться к такому ресурсу для пользователей, операционная система которых не поддерживает соответствующий национальный стандарт.

С одной стороны, технология IDN и рассчитана в первую очередь на применение в узконациональной сфере Всемирной Сети, другими словами, web-сайты, имеющие записанный с использованием символов китайского алфавита домен будут ориентированы именно на китайцев, домены, содержащие кириллицу — на русских.

С другой стороны, довольно большое количество наших соотечественников постоянно или временно проживает за границей, и многие из них не имеют возможности использовать локализованное программное обеспечение, что автоматически отсекает от русскоязычных сайтов, вызываемых по русскоязычному же URL, всю зарубежную аудиторию, говорящую на родном для разработчиков данного ресурса языке.

Вторая проблема — это запись гиперссылок на содержащие кириллицу адреса в документах HTML. Исторически в Рунете принятой по умолчанию считается кодировка KOI8-R, в то время как стандарт IDN в большей степени ориентирован на кодировки Windows и Unicode. Функции автоматического преобразования документов в кодировку, на которую настроен клиентский браузер, (такая функция присутствует, например, в русской локализации http-сервера Apache), могут запросто превратить запись http://www.яндекс.ru в http://www.пЭФХЪб.ru, что сделает переход по такой ссылке невозможным.

Третья проблема — это неудобное администрирование. На серверах имен многоязычные домены также прописываются в ACE коде. Например, запись о домене КРЕМЛЬ.НЕТ выглядит на DNS сервере (BIND UNIX) следующим образом:

zone «xn--h0ajeds9e.xn--h0apq» {
type master;
file «filename»;
};

Возможны ещё какие-то проблемы — дополняйте. Предлагайте варианты их решения :)

Онлайн конвертация в Punycode: bname.ru

Источник: site.nic.ru holmogorov.ru

  1. 20 Ноябрь 2016 в 16:09 | #1

    классно объяснено!

  2. 21 Ноябрь 2016 в 22:38 | #2

    нда… надо было свой интернет разрабатывать)

  3. Ктото
    1 Август 2017 в 01:41 | #3

    Уже не актуально, никто не знает что такое КОИ8-Р…

  1. 5 Декабрь 2010 в 00:45 | #1