Какова максимальная длина имени DNS

Я заметил несколько упоминаний о том, что максимальная длина строки имени DNS (имя домена) составляет 253 символа. Википедия, похоже, ссылается на это старое сообщение в блоге:

https://en.wikipedia.org/wiki/Hostname http://blogs.msdn.com/b/oldnewthing/archive/2012/04/12/10292868.aspx

С другой стороны, если я понял RFC, эта статья неверна. Максимальная длина строки DNS должна быть 250 символов ASCII вместо 253 на основе следующей последовательности байтов, которая согласно RFC1035 максимальная до 255 байт:

Чтобы упростить реализации, общая длина имени домена (т.е. октеты ярлыков и октеты длины ярлыков) ограничено 255 октетами или меньше.

Согласно RFC1035, имена доменов составлены следующим образом:

имя домена, представленное как последовательность меток, где каждая метка состоит из октета длины, за которым следует это число октетов. Доменное имя завершается октетом нулевой длины для нулевой метки корня. Обратите внимание, что это поле может быть нечетным числом октетов; не используется прокладка.

Это означает, что следующие имена доменов являются следующими:

  • Длина метки (LL): 1 байт
  • Имя метки (LN): 63 байта (максимум) потому что максимальное значение длины метки может быть только 00111111 (поскольку два первых бита зарезервированы для специальных функций, таких как указатели)
  • Null Label (NL): 1 байт (представляющий корневой домен)

Формат должен всегда быть (в отличие от сообщения в блоге):

LL + LN [ LL + LN...] + NL >

Это означает, что максимальная длина должна быть (1 байт = 1 символ = 1 октет):

LL (1) + LN (63) + LL (1) + LN (63) + LL (1) + LN (63) LL (1) + LN (61) + NL (1) = 255 байт

Итак, если мы вычисляем только часть строки ( LN s), получаем:

63 + 63 + 63 + 61 = максимум 250 символов.

Я пропустил что-нибудь или мы должны обновить несколько ссылок в Википедии? Единственная часть, о которой я не уверен, - это то, что Null Label является частью 255 байтов.

Ответ 1

С вашим способом подсчета доменное имя a.b.c.d.e. будет считаться длиной в пять символов. Он подозревает, что мало кто найдет этот способ подсчета полезности. Этот способ подсчета также увеличивает максимальную длину с количеством меток, поэтому, когда у вас четыре метки, максимальная длина составляет 250 символов, но если у вас 127 меток, максимальная длина составляет всего 127 символов.

Подумайте об этом так: когда мы печатаем имя домена для использования человеком, мы печатаем байты длины, это просто, что мы печатаем их как периоды (все они, но первый байт длины). Если бы мы этого не сделали, мы бы не смогли определить разницу между a.b.c. и abc.. Поскольку мы печатаем их, они должны включаться при подсчете длины. И при таком способе подсчета максимальная длина всегда составляет 253 символа (включая конечный период, а необработанный нулевой октет для root составляет 255).

Другими словами, если у вас есть максимум 250 символов ASCII (буквы, цифры, тире), учитывая, что минимальное количество ярлыков равно 4, вам также необходимо добавить 3 печатаемых точки между ними, сумма которых составляет до 253 печатные символы (омбит первый байт длины и нулевую метку).

Пример ниже (жирным шрифтом являются печатные символы, а LL печатаются как точки):

LL (1) + LN (63) + LL (1) + LN (63) + LL (1 ) + LN (63) + LL (1) + LN (61) + NL (1) = 255 байт

Итак, новый расчет, включая точки, станет:

63 + 1 + 63 + 1 + 63 + 1 + 61 = 25 3.

Ответ 2

  • 253 символа - максимальная длина полного доменного имени, включая точки: например. www.example.com = 15 символов.
  • 63 символа в максимальной длине метки " (часть имени домена, разделенная точкой). Ярлыки для www.example.com - com, пример и www.

Это пример домена с самой длинной меткой (полностью работающий веб-сайт BTW): http://www.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com/. Длина имени домена = 71 символ.

Это будет пример длинного доменного имени: abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcde.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com