单字母主机名有效吗?


14

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

编辑(巩固从答案的一些信息):DNS的各个方面似乎在几个RFC的定义,其中包括103511232181。根据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禁止单字符主机名。

Answers:


2

“有效”和“有效”之间有区别。如果主机名是单个字符,则完全有可能不被认为是有效的(我之前的文章没有保留)。但是,很多系统确实允许它们。一个主要系统,即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限制的离群值。


There is a difference between 'valid' and 'it works'. 最终,我认为这是最合理的答案,尽管我非常感谢所有讨论。我得出的结论是,一个字符的主机名在技术上仍然无效,但是在这一点上可以普遍使用。(类似地,下划线是禁止的,但大部分情况下都起作用。)
Isaac 2010年

11

您会认为它们是有效的,因为根名称服务器都是单字母主机(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,而仅使用主机文件,否则可惜是更好的选择。


好的,我在RFC-1123中已经读过,但是我将其解释为意味着我在RFC-952中阅读的规范适用,除了数字也可以作为第一个字符(如您所引用的那样,它不会改变禁止使用单字符名称)。关于根服务器,有人告诉我它们是该规则的某种特殊例外。
以撒2010年

2

由于主机名早在任何人甚至没有想到编写关于它们的RFC之前就已经存在,所以我看不出任何原因使单字符主机名突然变成“非法”。那个特定的RFC说了我

该RFC是官方规范

因为RFC不是标准。差远了。

尽管有上述规定,必须指出的是,所讨论的RFC是为适用于相对较小的团体,即国防部(可能是美国)而创建的。


RFC从定义上说不是标准。“征求意见”并没有向任何人大喊“标准”。有趣的是,他们在自己的文档中没有使用它。
马克·亨德森

1
en.wikipedia.org/wiki/Domain_name_system#Internet_standards列出了许多“定义” DNS协议的RFC。RFC-1123(由sysadmin1138提及)在列出的那些文件中,并且它引用RFC-952。根据我的经验,尽管RFC是请求,但当它们被接受时它们就成为定义。
以撒

@Farseeker,我并不是说这里就是这种情况,但是我总是对那些感到惊讶的人感到惊讶,他们中的大多数人应该更了解,他们引用RFC好像它们是任何特定主题的最终权威。我很确定某个地方有关于它的RFC。;)
John Gardeniers 2010年

1
一些RFC实际上是标准-RFC 1034和1035一起构成STD0013。他们被称为“要求发表评论”的原因是历史性的,从本质上讲,与60年代末期的一群低学历研究生无关,我不想to弃上级(我听说是直接从RFC 1的作者)。
Alnitak

2
@John我建议您阅读RFC2026。“达到标准状态的规范在STD系列中分配了一个编号,同时保留其RFC编号”。我为日常工作写IETF文件。
Alnitak

1

我认为当前的主机名更依赖于DNS规范,因为DNS是大多数人在网络或Internet中使用的名称。也就是说,想到了三个RFC(1034-概念,1035-实现和2181-关于DNS的说明)。

RFC 1034的第3节说:

域名空间是树形结构。树上的每个节点和叶子都对应一个资源集(可能为空)。域系统在内部节点和叶子的使用之间没有区别,并且此备忘录使用术语“节点”来指代两者。

每个节点都有一个标签,其长度为零至63个八位位组。尽管非兄弟节点可以使用相同的标签,但是兄弟节点可能没有相同的标签。保留一个标签,这是用于根的空(即零长度)标签。

RFC 2181的第11节中,我们对命名地址的每个节点进行了澄清:

DNS本身对
可用于标识资源记录的特定标签仅设置了一个限制。这一限制
与标签的长度和全名有关。任何一个标签的长度限制在1到63个八位位组之间。完整的域名限制为255个八位字节(包括分隔符)

因此,根据DNS规范,您可以拥有一个.domain.tld


从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. 基本上,由于a.domain.tld在DNS中有效,因此不会使其成为有效的主机名。第11节的末尾引用了RFC-1123的6.1.3.5节,该节引用了本身的2.1节和RFC-952,如sysadmin1138的答案中所述。
以撒2010年

在第6.1.3.5节末尾的引文讨论了对在952上定义的命名约定的较少限制。另外952定义了DOD主机表,我并不完全相信它比DNS规范更重要。
coredump

我认为6.1.3.5末尾提到的约束的自由化仅是指允许第一个字符为数字-这是同一RFC的2.1节(即6.1的节)中提到的唯一修改。 3.5参考)。在第2.1节中,RFC-952的定义被引用为合法主机名的定义。
以撒2010年

还要检查处理从旧DARPA到域名迁移的RFC 920和921。
coredump

1

正如您已经确定的那样,RFC 1123在这个长度问题上还不是很清楚。

2.1节确实说:

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

由于本文有效地完全覆盖从RFC 952文本,还应该采取暗示任何长度最多255个字符是合法的。

不幸的是,早在1989年,Internet草案就没有得到他们现在得到的如此严格的审查,因此可能根本没有发现歧义。


1
但是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. 将其解释为您的引用没有完全覆盖RFC-952中的文本,这是否合理?
艾萨克(Isaac)2010年

它说了,但这显然是错误的。RFC 1123 明确更改了主机名的允许长度。
Alnitak
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.