我看到有人提到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字节
因此,如果我们仅计算字符串部分(LN),则最多可以达到:
63 + 63 + 63 + 61 = 最多250个字符
我有漏掉的吗?或者我们需要更新一些维基百科的参考资料?我不确定的唯一部分是Null Label是否包含在255字节中。