DNS名称的最大长度是多少

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,域名的组成如下:

域名表示为标签序列,其中每个标签由长度八位字节后跟该八位字节数组成.域名以根的空标签的零长度八位字节终止.注意,该字段可以是奇数个八位字节; 没有使用填充.

这意味着以下字段构成域名:

  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标签是255字节的一部分.

小智 32

  1. 253个字符完整域名的最大长度,包括点:例如www.example.com = 15个字符.
  2. "标签"的最大长度为63个字符(域名的一部分由点分隔).www.example.com的标签是com,examplewww.

这是具有最长标签的域名(一个完全可用的网站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 字符.

  • 那是有道理的。换句话说,250 是最大字符数(没有点),如果我们包括点(没有最后一个),那么 253 个字符的值是正确的吗? (2认同)