2015-08-29 4 views
11

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

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. Null Label (Н. Л.): 1 байт (представляющий корневой домен)

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

LL + Л.Н. [LL + Л.Н. ...] + Н.Л.

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

LL (1) + Л.Н. (63) + LL (1) + Л.Н. (63) + LL (1) + Л.Н. (63) LL (1) + Л.Н. (61) + Н. Л. (1) = 255 байт

Таким образом, если мы вычислим часть строки только (LN сек), получим:

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

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

ответ

12

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

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

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

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

LL (1) + Л.Н. (63) + LL (1) + Л.Н. (63) + LL (1) + Л.Н. (63) + LL (1) + Л.Н. (61) + NL (1) = 255 байт

Таким образом, новый расчет в том числе точек будет стали:

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

+0

Это имело бы смысл. Итак, другими словами, 250 - это максимальное количество символов (без точек), и если мы включим точки (без последней), значение 253 символов будет правильным? –

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

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

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

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