主机名的有效字符?
Posted
技术标签:
【中文标题】主机名的有效字符?【英文标题】:Valid characters of a hostname? 【发布时间】:2011-04-01 04:24:11 【问题描述】:主机名的有效字符是什么?这类似于联网计算机或网络域。
具体来说,我正在编写一个连接到远程服务器的 PC 游戏;所以我有一个主机名字段和一个端口字段。显然端口是短范围内的数字,但我需要知道所有可能的主机名字符是什么(以及可能需要的任何其他模式 - 主机名是否需要以字母开头?)。
主机名示例包括localhost
或google.com
。
【问题讨论】:
linux sethostname 命令将接受任何字节。 【参考方案1】:查看此wiki,特别是对有效主机名的限制
部分主机名由一系列用点连接的标签组成,所有域名也是如此。例如,“en.wikipedia.org”是一个主机名。每个标签的长度必须介于 1 到 63 个字符之间,并且整个主机名(包括分隔点但不包括尾随点)最多包含 253 个 ASCII 字符。
协议的 Internet 标准(征求意见)要求组件主机名标签只能包含 ASCII 字母“a”到“z”(以不区分大小写的方式)、数字“0”到“9”、和连字符 ('-')。 RFC 952 中主机名的原始规范要求标签不能以数字或连字符开头,也不能以连字符结尾。但是,随后的规范 (RFC 1123) 允许主机名标签以数字开头。不允许使用其他符号、标点符号或空格。
【讨论】:
确保您清楚自己是在寻找主机名还是完全限定的域名或两者之一。 另外,请明确您是否正在寻找严格的 DNS 互操作性要求。特别是,DNS 禁止在主机名标签中使用下划线,而许多操作系统允许它们在本地使用。 DNS 服务器往往比较宽松,现在实践中的 DNS 要求在某些记录类型中使用下划线,例如 TXT 记录(用于 DKIM 等),而不是用于主机名标签。【参考方案2】:这取决于您是在 IDN toASCII
算法之前还是之后处理 IDN(也就是说,您看到的域名是希腊语中的 παράδειγμα.δοκιμή
还是 xn--hxajbheg2az3al.xn--jxalpdlp
?)。
在后一种情况下——您通过 punycode 处理 IDN——适用旧的 RFC 1123 规则:
U+0041 至 U+005A (AZ)、U+0061 至 U+007A (az) 外壳相互折叠,U+0030 至 U+0039 (0-9) 和 U+002D (-)。
当然还有 U+002E (.);标签的规则允许其他的,标签之间有点。
如果您以 IDN 形式查看它,则允许的字符多种多样,请参阅 http://unicode.org/reports/tr36/idn-chars.html 以获取所有有效字符的方便图表。
您的网络代码可能会处理 punycode,但您的显示代码(或者甚至只是在其他层之间传递字符串)具有更易于人类阅读的形式,因为没有人在 السعودية 上运行服务器。域希望看到他们的服务器在.xn--mgberp4a5d4ar
上列出。
【讨论】:
punycode 工作方式的伟大之处在于,低于某个级别(您进行网络的那个级别)它都是 ASCII。这几乎是一种假装只有 ASCII 的技术可以处理其他文本(包括以前不允许的一些英文单词)的方法。除了为整个词提供升级路径外,它还为您提供了一个升级路径:按照 RFC 1123 所说的方式构建它,如果您稍后添加 IDN 支持,则网络代码保持不变,并且您在顶部添加对 RFC 3490 的支持(图书馆也提供多种语言的帮助)。【参考方案3】:“名称”(网络、主机、网关或域名)是由字母 (AZ)、数字 (0-9)、减号 (-) 和句点 ( .)。请注意,仅当它们用于分隔“域名样式名称”的组成部分时才允许使用句点。 (有关背景信息,请参阅 RFC-921,“域名系统实施时间表”)。不允许将空格或空格字符作为名称的一部分。不区分大小写。第一个字符必须是字母字符。最后一个字符不能是减号或句点。用作网关的主机应将“-GATEWAY”或“-GW”作为其名称的一部分。不作为 Internet 网关的主机不应使用“-GATEWAY”和“-GW”作为其名称的一部分。如果主机是 DoD 主机,则作为 TAC 的主机应将“-TAC”作为其主机名的最后一部分。不允许使用单个字符的名称或昵称。
这是在http://support.microsoft.com/kb/149044中提供的
【讨论】:
这是从 RFC 952 [tools.ietf.org/html/rfc952].这是误导性的 - 主机名的长度可以是 1 到 63 个字符,如上所述。 链接坏了,很遗憾。【参考方案4】:如果您正在注册一个域并且终止(例如 .com
)它不是 IDN,正如 Aaron Hathaway 所说:
主机名由一系列用点连接的标签组成,所有域名也是如此。例如,en.wikipedia.org
是主机名。每个标签的长度必须介于 1 到 63 个字符之间,并且整个主机名(包括分隔点但不包括尾随点)最多包含 253 个 ASCII 字符。
协议的 Internet 标准(征求意见)要求组件主机名标签只能包含 ASCII 字母 a
到 z
(以不区分大小写的方式),数字 0
到 9
,和连字符-
。 RFC 952 中主机名的原始规范要求标签不能以数字或连字符开头,也不能以连字符结尾。但是,随后的规范 (RFC 1123) 允许主机名标签以数字开头。不允许使用其他符号、标点符号或空格。
后来,西班牙的.es
、.com.es
、.org.es
、.nom,es
、.gob.es
和 .edu.es
引入了 IDN tld,如果您的 tld 是 .es
之一或任何其他支持它的, 可以使用任何字符,但您不能将拉丁、希腊或西里尔等字母组合在一个主机名中,并且它尊重不能在开头或结尾出现的内容。
如果您使用未注册的 tld,仅用于本地网络,例如使用本地 DNS 或主机文件,您可以将它们全部视为 IDN。
请记住,有些程序无法正常运行,尤其是旧的、过时的和不受欢迎的程序。
【讨论】:
【参考方案5】:正确答案还取决于您以后是否要在该机器上安装 Kubernetes。 如果您将使用这台机器安装 Kubernetes 集群,Kubernetes 节点的名称将是您的机器的名称,并且节点的名称必须是 RFC 1123 中定义的有效 DNS 子域名。 https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#dns-subdomain-names
这意味着名称必须:
不超过 253 个字符 仅包含小写字母数字字符“-”或“。” 以字母数字字符开头 以字母数字字符结尾【讨论】:
解决一个特定情况(主机名可能是 Kubernetes 集群的成员)不是像这样的一般问题的合适答案。您提到的 RFC 是相关的。如果您只是引用了其中的重要部分并将其链接起来,那将会更有帮助。前面的答案实际上更直接地解决了这个问题。以上是关于主机名的有效字符?的主要内容,如果未能解决你的问题,请参考以下文章