我一直在研究RFC 1035以将其实现为C ++中的DNS客户端。在上述备忘录的RR定义中隐式使用语法确实有麻烦。
请查看以下数据结构定义示例。它们说明了我的理解问题。
RDATA标头的开始
1 1 1 1 1 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| |
/ /
/ NAME /
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| TYPE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
开始进行SOA RR
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ MNAME /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ RNAME /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| SERIAL |
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
从布局中可以推断出RDATA Header的“ TYPE”成员是16位大字节序字段。但是“ NAME”成员呢?为什么定义在框的边框处有一个“ /”正斜杠?在RFC中没有明确说明,这似乎是隐式使用。
然后是具有MNAME和RNAME成员的“ SOA” RR。我开始在这里看到一种模式:所有带有正斜杠的成员似乎都是字符串。
但是有多种方式对字符串进行二进制编码:
read unsigned word x
read data of length x
read byte x until x is 0
cnt = 0
while cnt < RDATA_HEADER.RDLENGTH do
read byte x and store it
cnt++
end
所以我的问题是:在RFC定义的任何情况下,如何正确解释“ /”的使用? “ /”和“ |”的混合使用暗示成员的最小人数?是否有RFC可以更清楚地定义这些框的用途?