Networking 主机名的有效字符?

Networking 主机名的有效字符?,networking,Networking,主机名的有效字符是什么?这类似于联网计算机或web域 把它放在上下文中,我正在编写一个连接到远程服务器的PC游戏;所以我有一个主机名字段和一个端口字段。显然,端口是一个短范围内的数字,但我需要知道所有可能的主机名字符是什么(以及可能需要的任何其他模式-主机名是否需要以字母开头?) 主机名的示例包括localhost或google.com检查此项,特别是部分对有效主机名的限制 主机名和所有域名一样,由一系列用点连接的标签组成。例如,“en.wikipedia.org”是一个主机名。每个标签的长度必

主机名的有效字符是什么?这类似于联网计算机或web域

把它放在上下文中,我正在编写一个连接到远程服务器的PC游戏;所以我有一个主机名字段和一个端口字段。显然,端口是一个短范围内的数字,但我需要知道所有可能的主机名字符是什么(以及可能需要的任何其他模式-主机名是否需要以字母开头?)

主机名的示例包括
localhost
google.com

检查此项,特别是部分对有效主机名的限制

主机名和所有域名一样,由一系列用点连接的标签组成。例如,“en.wikipedia.org”是一个主机名。每个标签的长度必须在1到63个字符之间,并且整个主机名(包括分隔点,但不包括尾随点)最多有253个ASCII字符

协议的互联网标准(征求意见)要求组件主机名标签只能包含ASCII字母“a”到“z”(不区分大小写)、数字“0”到“9”以及连字符(“-”)。中主机名的原始规范规定,标签不能以数字或连字符开头,也不能以连字符结尾。但是,后续规范()允许主机名标签以数字开头。不允许使用其他符号、标点符号或空白


这取决于您是在IDN
toASCII
算法之前还是之后处理IDN(也就是说,您是否看到域名
παρδεεγμα。Δκμμμμμμμμα>希腊语,还是作为
xn--hxajbheg2az3al.xn--jxalpdlp

在后一种情况下,您通过punycode处理IDN,旧的RFC 1123规则适用:

U+0041至U+005A(A-Z),U+0061至U+007A(A-Z)外壳相互折叠,U+0030至U+0039(0-9)和U+002D(-)

当然还有U+002E(.);标签规则允许其他标签,标签之间有点

如果您在IDN表单中看到它,那么允许的字符有很多不同,请参阅以获取所有有效字符的方便图表

很可能您的网络代码将处理punycode,但您的显示代码(甚至只是在其他层之间传递字符串)的形式更易于理解,因为没有人在网络上运行服务器。域希望看到其服务器列在
上。xn--mgberp4a5d4ar

一个“名称”(网络、主机、网关或域名)是一个从字母表(A-Z)、数字(0-9)、减号(-)和句点()中提取的最多24个字符的文本字符串。请注意,句点仅在用于分隔“域名样式名称”的组件时才允许使用。(背景见RFC-921,“域名系统实施计划”)。名称中不允许使用空白或空格字符。大写和小写之间没有区别。第一个字符必须是字母字符。最后一个字符不能是减号或句号。用作网关的主机应将“-GATEWAY”或“-GW”作为其名称的一部分。不作为Internet网关的主机不应使用“-GATEWAY”和“-GW”作为其名称的一部分。如果是国防部主机,则作为TAC的主机应将“-TAC”作为其主机名的最后一部分。不允许使用单字符名称或昵称


这是在

中提供的,如果您正在注册域并且终止(例如
.com
)它不是IDN,如所述: 主机名和所有域名一样,由一系列用点连接的标签组成。例如,
en.wikipedia.org
是一个主机名。每个标签的长度必须在1到63个字符之间,并且整个主机名(包括分隔点,但不包括尾随点)最多有253个ASCII字符

协议的互联网标准(征求意见)要求组件主机名标签只能包含ASCII字母
a
z
(不区分大小写)、数字
0
9
,以及连字符
-
。RFC 952中主机名的原始规范规定,标签不能以数字或连字符开头,也不能以连字符结尾。但是,后续规范(RFC1123)允许主机名标签以数字开头。不允许使用其他符号、标点符号或空白

后来,西班牙用它的
.es
.com.es
.org.es
.nom,es
.gob.es
.edu.es
引入了IDN tld,如果您的tld是
.es
或任何其他支持它的tld之一,可以使用任何字符,但不能在一个主机名中组合拉丁、希腊或西里尔等字母,它尊重在开始或结束时无法完成的事情

如果您使用的是未注册的TLD,仅用于本地网络,如本地DNS或主机文件,则可以将它们全部视为IDN


请记住,有些程序不能很好地工作,尤其是旧的、过时的和不受欢迎的程序。

哇,我甚至从未见过IDN和Ponycode!在这个时候,我只计划英语支持,因为这只是我的一个宠物项目,但我肯定从你的回答中学到了一些东西!punycode工作方式的一个优点是,在某个特定级别(您进行网络连接的级别)以下,它都是ASCII码。这几乎是一种假装只有ASCII码的技术可以处理其他文本(包括一些以前不允许使用的英语单词)的方式。除了给整个单词一个升级路径外,它也给了你一个升级路径:按照RFC1123所说的方式构建它,如果你以后添加IDN支持,网络代码将保持不变,并且你在顶部添加了对RFC3490的支持(很多语言的库也可以提供帮助)。@Ricket不知道是否有拼写错误,或者你是不是在开玩笑