单字母的主机名有效吗?

单字母的主机名有效吗?

RFC-952(假设下第 1 点的最后一句)禁止使用单字符主机名,我曾经有过这样的经历(7 年前,即 2002 年夏天),一些服务拒绝使用单字符主机名(因为这些名称不符合标准),但在过去几年中,我看到许多单字符主机名在使用。单字符主机名现在有效吗?(如果有效,正确的验证参考是什么?)

编辑(整合答案中的一些信息):DNS 的各个方面似乎在几个 RFC 中进行了定义,包括10351123, 和2181。 从RFC-2181 第 11 节

Note however, that the various applications that make use of DNS data
can have restrictions imposed on what particular values are
acceptable in their environment.  For example, that any binary label
can have an MX record does not imply that any binary name can be used
as the host part of an e-mail address.
[ ... ]
See also [RFC1123] section 6.1.3.5.

RFC-1123 第 6.1.3.5 节

The DNS defines domain name syntax very generally -- a
string of labels each containing up to 63 8-bit octets,
separated by dots, and with a maximum total of 255
octets.  Particular applications of the DNS are
permitted to further constrain the syntax of the domain
names they use, although the DNS deployment has led to
some applications allowing more general names.  In
particular, Section 2.1 of this document liberalizes
slightly the syntax of a legal Internet host name that
was defined in RFC-952 [DNS:4].

RFC-1123 第 2.1 节

The syntax of a legal Internet host name was specified in RFC-952
[DNS:4].  One aspect of host name syntax is hereby changed: the
restriction on the first character is relaxed to allow either a
letter or a digit.  Host software MUST support this more liberal
syntax.

最后,正如最初提到的,来自RFC-952

1. A "name" (Net, Host, Gateway, or Domain name) is a text string up
to 24 characters drawn from the alphabet (A-Z), digits (0-9), minus
sign (-), and period (.).  Note that periods are only allowed when
they serve to delimit components of "domain style names". (See
RFC-921, "Domain Name System Implementation Schedule", for
background).  No blank or space characters are permitted as part of a
name. No distinction is made between upper and lower case.  The first
character must be an alpha character.  The last character must not be
a minus sign or period.
[ ... ]
Single character names or nicknames are not allowed.

正是通过遵循这个链条,我最初得出的结论是 RFC-952 禁止单字符主机名。

答案1

“有效”和“有效”之间是有区别的。如果主机名是单个字符,则完全有可能被视为无效(尽管我之前的帖子也是如此)。但是,很多系统都允许它们。一个主要系统,即 Microsoft 的 AD/DNS 系统,有一个允许单个字符名称的传统原因。

老式 NetBIOS 名称的长度允许为 1 到 15 个字符。此规范是独立于 RFC952 开发的,它基于另一个名为 lmhosts 的文件,因此可以正常工作。当 Microsoft 放弃 NetBEUI(实际上是 NBF,NetBIOS 帧协议)并转向 TCP/IP(实际上是 NBT)时,问题就出现了,Microsoft 必须允许通过 TCP/IP 网络进行命名解析。MS 选择使用 WINS 服务器来维持 NetBIOS 样式的解析,从而避免了对符合 RFC952 的主机的需求。

然后是 Active Directory 及其 DNS 依赖项。动态 DNS 是规则,因此客户端必须在 DNS 域中注册其 ComputerName(其前 15 个字符也是其 NetBIOS 名称)。由于 MS 允许单字符 NetBIOS 名称在 DNS 中注册,因此这使其与 RFC952 发生冲突。他们决定对系统进行编码以允许这样做,因为这模拟了它在 WINS 时代始终如何工作。

BIND DNS 也允许单字符主机名。但 RFC2181 明确规定应用程序需要审查自己的数据,而不再需要 DNS。这导致我们面临大量设备和软件,单字符主机名完全没问题,而一些 RFC952 严格的异常值不允许这样做。

答案2

您可能会认为它们是有效的,因为根名称服务器都是单字母主机 (a.root-servers.net),并且 DNS 规范没有为它们创建特定的例外。有问题的 RFC 专门针对主机文件格式,而不是 DNS。DNS 在后来的 RFC 中定义 (RFC 1035启动它)。RFC 1123(1989)明确指出了这一点。

 The syntax of a legal Internet host name was specified in RFC-952
 [DNS:4].  One aspect of host name syntax is hereby changed: the
 restriction on the first character is relaxed to allow either a
 letter or a digit.  Host software MUST support this more liberal
 syntax.

因此,单字母主机名在基于 DNS 的系统中是有效的,自垃圾邮件发明之前就一直如此。不符合 RFC 标准的系统可能会被嘲笑。除非它们根本不使用 DNS 而只使用主机文件,否则同情是更好的选择。

答案3

由于主机名在有人考虑编写 RFC 之前就已经存在,因此我看不出单字符主机名突然变得“非法”的任何理由。那个特定的 RFC 让我失望了,因为它指出

此 RFC 是官方规范

因为 RFC 并不是一个标准。差得远呢。

尽管如此,必须指出的是,有问题的 RFC 是针对一个相对较小的团体而创建的,即国防部(大概是美国的)。

答案4

正如您所确定的,RFC 1123 对于这个长度问题并没有完全清楚。

第 2.1 节确实说:

主机软件必须处理最多 63 个字符的主机名,并且应该处理最多 255 个字符的主机名

由于此文本实际上完全覆盖了 RFC 952 中的文本,因此也应该理解为:任何长度最多为 255 个字符是合法的。

不幸的是,1989 年的互联网草案并没有得到像现在这样严格的审查,因此其中的歧义可能根本没有被发现。

相关内容