【问题标题】:What is the maximum length of a DNS nameDNS 名称的最大长度是多少
【发布时间】:2015-11-24 05:51:00
【问题描述】:

我看到很多人提到 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 字节

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

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

我是否遗漏了什么或者我们应该更新一些维基百科参考资料?我不确定的唯一部分是关于 Null 标签是 255 个字节的一部分。

【问题讨论】:

    标签: dns hostname rfc rfc1035


    【解决方案1】:

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

    这样想:当我们打印一个供人类使用的域名时,我们确实打印长度字节,只是我们将它们打印为句点(除了第一个长度字节之外,所有这些都是)。如果我们不这样做,我们将无法区分a.b.c.abc.。由于我们打印它们,因此在计算长度时应该包括它们。使用这种计数方式,最大长度始终为 253 个字符(包括最后一个句点,并且根的未打印零八位字节为 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 字节

    所以包含点的新计算将变为:

    63 + 1 + 63 + 1 + 63 + 1 + 61 = 最多 253 个字符。

    【讨论】:

    • 这是有道理的。所以换句话说 250 是最大字符数(不包括点),如果我们包括点(不包括最后一个),那么 253 个字符的值是对的吗?
    猜你喜欢
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 2011-12-17
    • 2013-05-31
    • 1970-01-01
    • 2023-03-13
    • 2010-10-19
    相关资源
    最近更新 更多