我正在实现一个小的DNS stub server,我在解释部分DNS RFC 1035时遇到了麻烦。
The compression scheme allows a domain name in a message to be
represented as either:
- a sequence of labels ending in a zero octet
- a pointer
- a sequence of labels ending with a pointer
DNS名称跟随多个指针是否有效?即以指针结尾的标签序列指向以指针结尾的标签序列,可能多次。或者在使用压缩时,只有以指向以零八位字节结尾的标签序列的指针结尾的标签序列才有效?谢谢。
是和否。
想象一下你有名字(不是为每个名字写结束点):
example.com
a.example.com
b.a.example.com
c.example.com.example.net
如果按此顺序,它们可以编码为:
example
+com
+\0
(2 个标签 + 零八位字节)a
+ 指向前一项的指针b
+ 指向前一项的指针(应该是首选,更强的压缩)b
++a
指向第一项的指针c
+example
+com
+example
+net
+\0
在最后一种情况下,你不能做
c
+ 指向 first 的指针,example.com
因为如果你这样做,那么example.com
你就会进入决赛\0
,因此你完成了,你只编码c.example.com
而不编码c.example.com.example.net
。基本上,您可以将压缩视为压缩后缀。名称中的任何地方都不是任意压缩。
但是第三种情况变体 1 表明您可以遵循多个指针:
b
+ 指向 (a
+ 指向 (example
+com
+\0
) 的指针)RFC 1035 的第 4.1.4 节有一个完整的例子: