Я заметил несколько упоминаний о том, что максимальная длина строки имени 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 байтов.