Какова максимальная длина 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, доменные имена составлены следующим образом:

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

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

  1. Длина Этикетки (LL): 1 байт
  2. Имя Метки (LN) : 63 байт (максимум) поскольку максимальное значение длины метки может быть только 00111111 (так как два первых бита зарезервированы для специальных функций, таких как указатели)
  3. Нулевой Метки (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 байт

поэтому, если мы вычисляем только строковую часть (LNs), получаем:

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

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

2 ответов


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

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

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

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

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 = 253 максимальное число символов.


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

это пример домена с самым длинным возможная метка (полностью рабочий сайт кстати):http://www.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com/. Длина доменного имени = 71 символ.

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