Какова максимальная длина 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 байтов

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

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

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

2 ответа

Решение

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

Думайте об этом так: когда мы печатаем доменное имя для использования человеком, мы печатаем байты длины, просто мы печатаем их как точки (все они, кроме первого байта длины). Если бы мы этого не сделали, мы бы не смогли определить разницу между a.b.c. а также abc., Поскольку мы их печатаем, они должны быть включены при подсчете длины. При таком способе подсчета максимальная длина всегда равна 253 символам (включая последний период, а непечатный нулевой октет для корня составляет 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 символа.

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

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

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

Другие вопросы по тегам