DNS 消息是否将名称填充为偶数字节?
Do DNS messages pad names to an even number of bytes?
初步说明
Yes, I am aware of the existence of DNS libraries and easy-to-use DNS servers. I am doing this purely for academic purposes, and to get a grasp of how DNS queries work.
问题
我正在查看 RFC 1035 以了解 DNS 消息的工作原理。我想我或多或少地理解了那份备忘录中的所有内容。但是,有一件事我无法自主解释。如果您查看第 4.1.3 节,这里是描述资源记录格式的方式:
1 1 1 1 1 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| |
/ /
/ NAME /
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| TYPE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| CLASS |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| TTL |
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| RDLENGTH |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
/ RDATA /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
在此方案中,NAME
在两个字节块的末尾结束。这是否意味着它的字节长度应该始终是二的倍数?名称的格式在前面的 RFC 中描述为一系列标签,以零长度标签结尾。这意味着,根据名称,它的长度可以任意为偶数或奇数。那么 NAME
是否需要填充到偶数个字节?如果是这样,我应该怎么填充?
我会忽略这个问题并假设不需要填充,如果不是在第 4.1.1 节中它指定 QNAME
不需要填充。由于他们没有在答案 RR 中为 NAME
指定相同的内容,我想知道我是否应该假设存在一些差异。
没有填充。如果您有疑问,请从根服务器捕获有关根区域的查询(其名称是单个 NULL 八位字节,因此长度为奇数)(可以信任它们以获得正确的协议,因为它在现实世界中使用) ) 并查看它。
初步说明
Yes, I am aware of the existence of DNS libraries and easy-to-use DNS servers. I am doing this purely for academic purposes, and to get a grasp of how DNS queries work.
问题
我正在查看 RFC 1035 以了解 DNS 消息的工作原理。我想我或多或少地理解了那份备忘录中的所有内容。但是,有一件事我无法自主解释。如果您查看第 4.1.3 节,这里是描述资源记录格式的方式:
1 1 1 1 1 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| |
/ /
/ NAME /
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| TYPE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| CLASS |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| TTL |
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| RDLENGTH |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
/ RDATA /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
在此方案中,NAME
在两个字节块的末尾结束。这是否意味着它的字节长度应该始终是二的倍数?名称的格式在前面的 RFC 中描述为一系列标签,以零长度标签结尾。这意味着,根据名称,它的长度可以任意为偶数或奇数。那么 NAME
是否需要填充到偶数个字节?如果是这样,我应该怎么填充?
我会忽略这个问题并假设不需要填充,如果不是在第 4.1.1 节中它指定 QNAME
不需要填充。由于他们没有在答案 RR 中为 NAME
指定相同的内容,我想知道我是否应该假设存在一些差异。
没有填充。如果您有疑问,请从根服务器捕获有关根区域的查询(其名称是单个 NULL 八位字节,因此长度为奇数)(可以信任它们以获得正确的协议,因为它在现实世界中使用) ) 并查看它。