【问题标题】:Which RFCs specify the syntax of hostnames and constraints on DNS hostnames?哪些 RFC 指定了主机名的语法和对 DNS 主机名的限制?
【发布时间】:2014-08-08 08:35:29
【问题描述】:

关于主机名的语法,像this 这样的问题的答案通常参考RFC 1123RFC 952,但没有提到RFC 921,这似乎对主机名施加了额外的限制。可能有一堆关于DNS(和IDN)的后续RFC,其中涵盖了对DNS处理的主机名的限制。

DNS 处理的主机名和主机名的有效语法存在很多混淆。

哪些 RFC 规定了主机名的语法要求,哪些 RFC 规定了 DNS 处理的主机名的附加限制?

【问题讨论】:

    标签: syntax dns hostname rfc


    【解决方案1】:

    您引用 RFC 1123 和 RFC 952 是正确的,但您省略了 RFC 2181“对 DNS 规范的说明”。具体而言,第 11 条包含以下文本:

    ...任何可以用作任何资源记录标签的二进制字符串。

    由于“主机名”是具有A 记录的域名,因此该文本似乎允许任何有效的域名也被视为有效的主机名。

    几年前,我问过本文的一位作者,这是否是预期的解释,他证实是这样。然而,这种观点并未被广泛接受,对于您关于什么是合法主机名的问题,DNS 社区内仍然没有普遍认同的答案。

    附言您误读了 RFC 1123 - 它绝不会说 63 和 255 是标签和域名的下限。 63 位限制实际上是由 DNS 标签的有线格式强制执行的,该格式仅保留 6 位作为标签的长度。

    【讨论】:

    • 谢谢! 2.1 中的 RFC 1123 声明“主机软件必须处理最多 63 个字符的主机名,并且应该处理最多 255 个字符的主机名。”我已经更正了原来的问题。
    • @Jotik 这些仍然是上限。这是说软件实现必须处理所有合法标签,并且应该处理所有合法域。没有任何地方表明它们应该支持 高于 的值。它应该读作“最多 N 并且没有更多”!
    【解决方案2】:

    您可以查看RFC 1035。 这是一个纯粹基于 DNS 的 RFC,并解释了其中的一些限制。

    【讨论】:

    • RFC 1035RFC 2181 更新。 RFC 4343 更新 RFC 2181 也可能是相关的。
    • 这是 RFC 的问题之一——它们已经存在了很长时间,而且它们并不总是像应有的那样相互一致。我提到的 RFC 2181 在这一点上实际上是规范文本 - 可以使用任何二进制八位字节。但是 4343 的效果是您不能保证 DNS 服务器不会将其中的任何字母字符更改为不同的大小写。然而 4343 对非字母数字表示nothing,因此根据 2181,它们仍然是公平的游戏。不过,不要尝试将 utf-8 放入域名中 - 对八位字节进行大小写处理可能会损坏代码点。
    • 为了规避 UTF8 / UTF16 的问题,RFC 3492 添加了一些不错的“功能”(即 punycode,“xn--”)。我在 IPAM 行业看到的一个经典案例是主机名是使用 RFC 1035 定义的(只有字母数字,而不是前导下划线和一堆其他规则),并且以“__”开头的 Microsoft DNS 记录例外。不过,这只是一个“经典”用例,没有什么真正官方的说法。
    • @NaeiKinDus 确实 - punycode 编码规避了区分大小写的问题,当然大多数注册机构无论如何都不会让您注册一个带有任意二进制字符的实际域名。需要注意的是尝试在标签中使用原始二进制文件,尽管 RFC 6891 已经废弃了 RFC 2671 (EDNS) 中引入的特殊“二进制标签”格式
    • @NaeiKinDus 虽然我认为 RFC 1035 是强制性阅读,但恕我直言,就合法主机名语法问题而言,它是最没用的 DNS RFC 之一。
    猜你喜欢
    • 2012-09-28
    • 2011-07-06
    • 2014-02-05
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 2010-11-21
    • 2021-07-17
    • 2017-02-02
    相关资源
    最近更新 更多