【发布时间】:2015-11-24 05:51:00
【问题描述】:
我看到很多人提到 DNS 名称(域名)的最大字符串长度为 253 个字符。维基百科似乎指的是这篇旧博文:
https://en.wikipedia.org/wiki/Hostname 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 字节
所以如果我们只计算字符串部分(LNs),我们得到:
63 + 63 + 63 + 61 = 最多 250 个字符。
我是否遗漏了什么或者我们应该更新一些维基百科参考资料?我不确定的唯一部分是关于 Null 标签是 255 个字节的一部分。
【问题讨论】: