我看到几个提到 DNS 名称(域名)的最大字符串长度为 253 个字符。维基百科似乎指的是这篇旧博客文章:
https://en.wikipedia.org/wiki/ 主机名 http://blogs.msdn.com/b/oldnewthing/archive/2012/04/12/10292868.aspx
另一方面,如果我理解了 RFC,那么这篇文章是错误的。DNS 名称最大字符串长度应为 250 个 ASCII 字符,而不是 253 个,基于以下字节序列,根据RFC1035 最大为 255 个字节:
为了简化实现,域名的总长度(即标签八位字节和标签长度八位字节)被限制在 255 个八位字节或更少。
根据 RFC1035,域名组成如下:
一个域名,表示为一系列标签,其中每个标签由一个长度八位字节后跟该八位字节数组成。域名以根的空标签的零长度八位字节结束。请注意,该字段可能是奇数个八位字节;不使用填充。
这意味着以下字段构成域名:
- 标签长度(LL):1字节
- 标签名称 ( LN ):63 字节(最大值),因为标签长度最大值只能是 00111111(因为前两个位保留用于指针等特殊功能)
- 空标签(NL):1字节(代表根域)
格式应始终为(与博客文章不同):
LL + LN [ LL + LN ... ] + NL
这意味着最大长度应该是(1 个字节 = 1 个字符 = 1 个八位字节):
LL (1) + LN (63) + LL (1) + LN (63) + LL (1) + LN (63) LL (1) + LN (61) + NL (1) = 255 字节
所以如果我们只计算字符串部分(LN s),我们得到:
63 + 63 + 63 + 61 = 最多 250 个字符。
我是否遗漏了什么,或者我们应该更新一些维基百科参考资料?我不确定的唯一部分是空标签是 255 字节的一部分。