DNS名称的最大长度是多少

DNS名称的最大长度是多少,dns,hostname,rfc,rfc1035,Dns,Hostname,Rfc,Rfc1035,我曾多次提到DNS名称(域名)的最大字符串长度是253个字符。维基百科似乎引用了这篇老博文: 另一方面,如果我理解RFC,这篇文章是错误的。DNS名称的最大字符串长度应为250个ASCII字符,而不是253个字符,基于以下字节序列,根据最大为255个字节: 为了简化实现,域名的总长度(即。, 标签八位字节和标签长度八位字节)限制为255个八位字节或 少一点 根据RFC1035,域名组成如下: 一种表示为一系列标签的域名,其中每个标签由一个长度八位字节加上该数量的八位字节组成。域名以根的空标签

我曾多次提到DNS名称(域名)的最大字符串长度是253个字符。维基百科似乎引用了这篇老博文:

另一方面,如果我理解RFC,这篇文章是错误的。DNS名称的最大字符串长度应为250个ASCII字符,而不是253个字符,基于以下字节序列,根据最大为255个字节:

为了简化实现,域名的总长度(即。, 标签八位字节和标签长度八位字节)限制为255个八位字节或 少一点

根据RFC1035,域名组成如下:

一种表示为一系列标签的域名,其中每个标签由一个长度八位字节加上该数量的八位字节组成。域名以根的空标签的零长度八位字节终止。请注意,此字段可能是奇数个八位字节;不使用填充物

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

  • 标签长度(LL):1字节
  • 标签名称(LN):63字节(最大) 因为标签长度最大值只能为00111111(自 前两位保留用于特殊功能,如指针)
  • 空标签(NL):1字节(表示根域)
  • 格式应始终为(与博客文章不同):

    LL+LN[LL+LN..]+NL

    这意味着最大长度应为(1字节=1个字符=1个八位字节):

    LL(1)+LN(63)+LL(1)+LN(63)LL(1)+LN(61)+NL(1)=255字节

    因此,如果我们只计算字符串部分(LNs),我们得到:

    63+63+63+61=最多250个字符


    我错过了什么或者我们应该更新一些维基百科的参考资料吗?我唯一不确定的是空标签是否是255字节的一部分。

    按照您的计算方式,域名
    a.b.c.d.e.
    将被视为五个字符长。它怀疑没有多少人会发现这种计算方法有用。这种计数方式也会使最大长度随标签数量的变化而变化,因此当有四个标签时,最大长度为250个字符,但如果有127个标签,则最大长度仅为127个字符

    可以这样想:当我们打印一个供人使用的域名时,我们确实会打印长度字节,只是我们将它们打印为句点(除了第一个长度字节之外)。如果我们没有,我们就无法区分
    abc.
    abc.
    之间的区别。因为我们打印它们,所以在计算长度时应该包括它们。使用这种计数方式,最大长度始终为253个字符(包括最后一个句点,根的未打印的零八位字节为255个字符)

    换句话说,如果您最多有250个ASCII字符(字母、数字、破折号),考虑到标签的最小数量为4,您还需要在它们之间添加3个可打印点,总计253个可打印字符(将第一个长度字节和空标签对齐)

    以下示例(粗体为可打印字符,LL为点打印):

    LL(1)+LN(63)+LL(1)+LN(63)+LN(63)+LL(1)+LN(61)+NL(1)=255字节

    因此,包括点在内的新计算将变为:


    63+1+63+1+63+1+61=253个字符。这很有意义。换句话说,250是最大字符数(不带点),如果我们包括点(不带最后一个),那么253个字符的值是正确的?这是完全正确的。