Nic*_*tte 25 dns hostname rfc rfc1035
我看到几个提到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个字符.
我错过了什么,或者我们应该更新一些维基百科的参考文献?我不确定的唯一部分是关于Null标签是255字节的一部分.
小智 32
这是具有最长标签的域名(一个完全可用的网站BTW)的示例:http://www.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com/.域名长度= 71个字符.
这将是最长的域名的例子:abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcde.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com
Cal*_*ahl 30
使用您的计数方式,域名a.b.c.d.e.将被视为五个字符长.它怀疑没有多少人会发现这种计数有用的方式.这种计数方式也会使最大长度随标签数量而变化,因此当您有四个标签时,最大长度为250个字符,但如果您有127个标签,则最大长度仅为127个字符.
可以这样想:当我们打印一个供人类使用的域名时,我们会打印长度字节,只是我们将它们打印为句点(所有这些都是第一个长度字节).如果我们不这样做,我们就无法区分a.b.c.和abc..由于我们打印它们,因此在计算长度时应包含它们.使用这种计数方式,最大长度始终为253个字符(包括最后一个周期,root的非打印零八位字节为255).
换句话说,如果您最多有250个ASCII字符(字母,数字,短划线),考虑到最小标签数为4,您还需要在它们之间添加3个可打印点,总计最多253个可打印字符( ommited第一个长度字节和null标签).
下面的示例(粗体是可打印字符,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 个字符.