主机名中下划线的使用

9
维基百科指出,在主机名中,下划线被安卓和微软Windows系统都使用。我的问题是,这些主机名指的是什么?你能举出这些奇怪的主机名的例子以及它们的用途吗?

3
只是想让您知道,在主机名中,_不是有效的字符,即使在DNS记录中它是完全合法的。举个例子说明为什么您不应该接受它,Java、.Net、Zend PHP、Ruby等许多编程语言在尝试解析(例如在发出请求时)包含_的主机名的URL时会抛出异常。 - Sean Kinsey
4个回答

33

什么是主机名?

类比于学校课堂,每个学生都有一个编号/ID来识别他/她的身份,在互联网(或者任何计算机网络)的"classroom"中,每个设备都需要通过一个主机名来唯一标识。因此,主机名就是用来帮助在网络中识别设备的名字。

带下划线(_)字符的主机名。

在制定有效和无效主机名标准的时期,常见的终端界面是Teletype(TTY) ASR-33的键盘。现在这个键盘上从来没有一个下划线(_)键(查看这张图片:http://www.pdp8.net/asr33/pics/kbd_top.shtml?large),因此不可能使用带有下划线(_)的主机名。请查看此链接以获取更多详细信息:http://www.quora.com/Domain-Name-System-DNS/Why-are-underscores-not-allowed-in-DNS-host-names

下划线 (_) 字符可以用于域名中。正如这篇文章所述Can (domain name) subdomains have an underscore "_" in it?,在域名中使用下划线是完全有效的。一些示例(如该帖子所示)包括_jabber._tcp.gmail.com_sip._udp.apnic.net。另一个下划线的使用示例可在此处找到http://ideaharbor.org/notes/technical/enabling-chat-outside-google-apps。虽然使用下划线是有效的,但并不推荐。

您发布的维基百科链接指出,Microsoft Windows和Android智能手机不执行有关在主机名中使用下划线的规则。不执行此规则可能会导致问题,因为许多系统会拒绝此类主机名。

希望您对此解释有所收获。

编辑

在进一步调查此问题时,我看到了这篇精彩的文章,我想它澄清了主机名中下划线的使用:

http://networkadminkb.com/KB/a156/windows-2003-dns-and-the-underscore.aspx


你知道在Windows系统中,主机名中使用下划线 _ 的特殊情况吗?我感觉微软公司可能也会用到这个特性。 - rook
关于那个链接 - 有一些问题,即RFC 2181是否适用于主机名。我认识其中一位作者,正在等待他的回复。 - Alnitak
这实际上是不正确的 - 在DNS记录中允许使用_,但在主机名中不允许 - 一些DNS记录表示主机名(A,CNAME),并不意味着所有记录都可以使用_(如_jabber,_tcp)。 大多数主流框架都不允许在主机名中使用_,包括.Net、Java、Ruby、Zend PHP等。 - Sean Kinsey
1
网络管理员知识库的链接已经失效。这个Wayback机器链接是替代方案: https://web.archive.org/web/20130504144642/http://networkadminkb.com/KB/a156/windows-2003-dns-and-the-underscore.aspx - Kristof Neirynck
在尝试在 docker 中使用 _ 作为 postgres 数据库主机名时,我遇到了一个错误。 - FreeSoftwareServers

9
主机名(包括域名部分)只允许包含字母、数字、连字符和句点。这最初是在RFC 952中指定的,并在RFC 1123中进行了更新。问题中链接的维基百科文章称Android和Windows允许使用违反此语法的主机名。
这些名称明显是无效的主机名,但它们是明确有效的DNS记录,即使它们通常包含主机名的地址记录。我不知道有一个在实际应用中使用下划线的主机名的例子。为什么会允许这样做?如RFC 2181的“名称语法”部分所解释的那样,DNS旨在成为一种通用命名服务,因此它不会尝试强制执行可能适用于单个记录类型的所有不同名称语法。
因此,尽管下划线在主机名中被禁止使用,但程序是否应允许其使用的问题更加微妙。在DNS的上下文中,必须允许使用下划线。如果您正在设置特定机器的主机名,则应明确禁止使用下划线,因为它们是无效的。如果您正在使用主机名,例如访问URL,则可以认为,如果它能解析,则应允许使用下划线,以便“在接受方面保持开明”。

我意识到许多答案中已经提到了这些观点,但我没有看到任何综合这些观点或者明确地关注DNS中有效域名和有效主机名之间区别的答案。 - John Watts

7
您对维基百科页面的理解是不正确的。它并没有说这些系统“使用”下划线,而是说它们“支持”下划线。
如果此类系统的“管理员”在配置时使用下划线,则当它无法与世界其他部分互操作时,这是他自己的错。

1

主机名是通常用于(通常是DNS)名称解析的完全限定名称。虽然下划线似乎被允许,但不符合适当的RFC关于可允许字符的规定,如果在本地环境之外使用可能会引起不兼容问题。

也许Windows将其作为90年代Netbios / Netbeui的遗留问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接