我看到几个提到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 + 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个字符。
我是否遗漏了任何内容,或者我们应该更新一些维基百科参考文献?我唯一不确定的部分是空标签是255字节的一部分。
答案 0 :(得分:21)
根据您的计算方式,域名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字节< / p>
所以包括点在内的新计算将成为:
63 + 1 + 63 + 1 + 63 + 1 + 61 =最多25 3 个字符。
答案 1 :(得分:19)
这是具有最长标签的域名(完全可用的网站BTW)的示例:http://www.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com/。域名长度= 71个字符。
这将是最长的域名的一个示例:abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcde.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com