为什么QNAME字段的内容不是DNS消息中的原始域?
例如,如果我想获取域www.mydomain.com
的IP,我将向网络发送DNS查找包,而包的问题部分包含域。
但实际上包中的QNAME内容 3www8mydomain3com0
而不是www.mydomain.com
。
3www8mydomain3com0
表示每个标签都以此部分的长度开头,然后是内容,以长度0结束。
那么,为什么我们使用长度+数据模式来描述域而不是原始域?
查看此部分4.1.2. Question section format
介绍了我们如何在RFC1035上定义域记录(请搜索以查看此部分)。
答案 0 :(得分:1)
1)DNS对URL一无所知。 DNS比URL的概念旧。
2)因为DNS的线路格式是如何工作的。您看到的是以DNS二进制格式编码的域名www.mydomain.com
。长度+数据是一般存储字符串的一种非常常见的方式。
答案 1 :(得分:0)
(更改域名以使Stack Overflow关闭无法命名的域名。)
例如,如果我想获取域www.qqqqsovr.com的IP,我将向网络发送DNS查询包,并且包的问题部分包含此URL。
这不是网址,而是域名。域名是网址的部分,但网址类似于http://www.qqqqsovr.com/homepage.html
。
但实际上,包中的QNAME内容为
3www8qqqqsovr3com0
而不是www.qqqqsovr.com
。
www.qqqqsovr.com
。正如Calle Dybedahl所说,这是因为名称的编码形式有些复杂。 RFC 1035的第3.1节“名称空间定义”说:
消息中的域名以标签序列表示。每个标签表示为一个八位字节长度字段,后跟该八位字节数。由于每个域名都以根的空标签结束,因此域名以零长度字节终止。每个长度八位字节的高位两位必须为零,长度字段的其余六位将标签限制为63个八位字节或更少。
并且名称的各个位可以由其他名称指向,因此,例如,如果DNS消息中同时包含www.qqqqsovr.com
和www.abcdefgh.com
,则第二个域名可以指向第一个域名的.com
;这在RFC 1035的第4.1.4节“消息压缩”中进行了描述。
简单地将域字符串作为文本字符串放入消息中将不允许压缩;你需要一些方式来表达指针。您可能不得不问Paul Mockapetris为什么他(和Jon Postel)选择使用特定的编码。
即使在那里,字符串长度必须通过计数或空终止以某种方式指示<em> 。在1987年,虽然UNIX机器在互联网上很常见,但就我所知,它们并非所以常见,因为空终止是一种“明显的”选择。