2012-01-03 2 views
8

Первые вещи сначала:Какова максимальная длина конвертированного доменного имени IDNA?

Я храню несколько доменов базы данных, после того как я конвертированы каждый доменное имя это IDNA версия. Мне нужно знать максимальную длину, такую ​​как IDNA-преобразованное доменное имя, так что я могу определить максимальную длину поля базы данных.

известный факт:

Теперь, я знаю, что максимальное количество символов в имени домена (включая любые поддомены) составляет 255 символов.

Где я потерял:

Это просто на первый взгляд, но ... значит ли это обычные символы ASCII международных символов (думаю, UTF-8 кодировке)?

Чтобы предоставить вам пример: Домен «müller.de» имеет 9 символов, когда я игнорирую, что «ü» является международным символом, которому необходимо представить больше байтов. Версия IDNA «müller.de» - это «xn--mller-kva.de», которая имеет 16 символов. Это показывает, что определенная разница в максимальной длине зависит от «если» она конвертируется IDNA или нет.

В зависимости от того, какие символы они имеют в виду, максимальным значением в 255 символов может быть версия международного символа, конвертированная версия IDNA или даже и то, и другое.

И вот где я потерял его немного ... особенно, так как я должен принять во внимание, что не все домены будут здравомыслящими и такими вещами, как «öüßüöäéèê.example.äöüßüöäéèê-äöüßüöäéèê.test.äöüßüöäéèê.com» и еще хуже.

Итак, «угадать» и «надеяться на лучшее» - это не вариант. Мне нужно знать наверняка ...

Возникает вопрос:

Основываясь на известном факте, что максимальное количество символов в имени домена (включая любые поддомены) составляет 255 символов ... Какова максимальная длина конвертированного доменного имени IDNA?

Или же они означают IDNA конвертированы версии (Punycode) также ограничена 255 символами (что означало бы, что домены с международными символами/Юникода будет на самом деле имеют более короткие ограничения в их юникода представления, потому что их IDNA конвертированы версия будет должны соблюдать ограничение 255 символов)?

ответ

5

Я понимаю, что предел в 255 символов следует считать после преобразования IDNA.

Это связано с тем, что записи DNS имеют этот предел символов, и в целом записи DNS могут содержать только буквы, цифры и дефисы(). Таким образом, DNS-сервер использует версию ID-кода Punycode для своей записи, а не версию Unicode.

+0

Я пришел к такому же выводу после проверки некоторых сайтов регистратора и их информации о «Доменных именах с акцентами и Umlauts». Да, после конвертации 255. Но спасибо за ваш ответ. Это означает, что я не единственный, кто пришел к такому же выводу, и это - замечательная вещь, чтобы знать! ;) –

6

Хорошо, я думаю, что я узнал сам, и этот фрагмент я нашел (путем поиска в Интернете) помогло:

Были по существу два различных варианта открыты для введения многоязычных доменных имен (IDN). Первым было внесение изменений в систему доменных имен (DNS), которая позволяла бы использовать символы Unicode для непосредственного использования. Было сочтено, что это слишком решительная мера, и, следовательно, был выбран второй вариант. Это связано с компиляцией алгоритма для указания того, как строка юникода должна быть преобразована в разрешенное доменное имя ASCII. Эта строка ACE (ACE обозначает совместимое кодирование ASCII) затем вводится в DNS. Введение IDN означает, что в первый раз запись в DNS больше не совпадает с именем домена.

- Source

Ответ в том, что длина в отношении является предел 255 символов, как ожидает его DNS.

Мое подозрение было верным. Доменное имя и запись в DNS - это две разные вещи с IDN. Это максимальная длина записи DNS, которая учитывает.

Доменное имя «müller.de» имеет 9 символов, но соответствующая строка ACE (ASCII Compatible Encoding) «xn--mller-kva.de», однако, имеет 16 символов.

Это строка ACE, используемая DNS, и это строка ACE, которая подпадает под ограничение 255 символов. Это означает, что максимальный предел его юникодной (доменной) версии определяется количеством используемых символов Юникода, а если - после преобразования IDNA - строка все еще помещается в пределах 255 символов.

Geez, характеристики, возможно, были бы более ясными в таких вещах. Тем более, что международные доменные имена были где-то рядом с 1 марта 2004 года. Но я нашел ответ, и это то, что имеет значение.

Возможно, это может помочь кому-то, у кого есть тот же вопрос.

Простой ответ, связанный с моей длиной поля базы данных, составляет 255 CHAR.

Тот факт, что я храню имена доменов в их конвертированной версии IDNA (строка punycode/ACE), подтверждает только этот максимальный предел символов.

+0

Простые секунды друг от друга ... Я думаю, что вы выиграли, хотя :-) Отличный вопрос, и рад, что мы пришли к такому же выводу! – cmbuckley

+0

Бах, кто считает секунды? Я просто приму свой ответ вместо своего. Это то, что я могу сделать, чтобы дать вам что-то для ваших усилий. Угадайте, что я сегодня в социальном настроении ... :) –

+0

Спасибо за вопрос и ответ. Вы могли бы включить указатель/ссылку на источник фрагмента или любые ссылки (RFC, IETF и т. Д. Docs)? Благодаря! – JJC

0

RFC3492 говорит это об одном из кодировки функции ОСА IDNA:

Эффективного кодирования: Отношение основной длины строки для расширенной длины строки мало. Это важно в контексте доменных имен , потому что RFC1034 ограничивает длину метки домена до 63 символов.

Все. 63 символа - это максимальная длина для любого доменного имени, независимо от того, находится ли оно в IDNA или в ASCII.

+2

это ограничение на отдельные _labels_ в доменном имени, а не на все имя – Alnitak

Смежные вопросы