代码之家  ›  专栏  ›  技术社区  ›  Zhijian

为什么QNAME字段的内容不是DNS消息中的原始域?

  •  1
  • Zhijian  · 技术社区  · 10 年前

    为什么QNAME字段的内容是 不是 DNS消息中的原始域?

    例如,如果我想获取域的IP www.mydomain.com ,我将向网络发送一个DNS查找包,包的问题部分包含域。

    但实际上 包中QNAME的内容 3www8mydomain3com0 而不是 www.mydomain.com .

    3www8我的域3com0 意味着每个标签都以该部分的长度开始,然后是内容,最后是长度0。

    那么,为什么我们使用长度+数据模式来描述一个域而不是原始域?

    查看此部分 4.1.2. Question section format 描述了如何在上定义域记录 RFC1035 (请搜索以查看此部分)。

    2 回复  |  直到 4 年前
        1
  •  1
  •   Community Mohan Dere    4 年前

    (域名更改为堆栈溢出以关闭无法命名的域。)

    例如,如果我想获取域的IP www.qqqqsovr.com ,我将向网络发送一个DNS查找包,包的问题部分包含此url。

    这不是URL,而是域名。域名是 部分 但是URL应该是 http://www.qqqqsovr.com/homepage.html .

    但实际上,包中QNAME的内容是 3www8qqqqsovr3com0 而不是 www.qqqqsovr.com .

    那个 网址:www.qqqsovr.com 正如Calle Dybedahl所说,这是因为名称的编码形式有些复杂 RFC 1035 说:

    消息中的域名以标签序列表示。每个标签表示为一个八位字节长度字段,后跟该数量的八位字节。由于每个域名都以根的空标签结尾,因此域名以长度字节零结尾。每个长度八位字节的高位2位必须为零,长度字段的剩余6位将标签限制为63个八位字节或更少。

    而名称中的各个部分可以用其他名称来表示,例如,如果您同时拥有这两个名称 网址:www.qqqsovr.com www.abcdefgh.com 在DNS消息中,第二个域名可以指向 .com 第一域名的名称;RFC 1035第4.1.4节“消息压缩”对此进行了描述。

    简单地将域字符串作为文本字符串放入消息中是不允许压缩的;你需要 一些 表示指针的方法。你可能得问 Paul Mockapetris 为什么他(和乔恩·波斯特)选择使用这个 特指的 编码。

    即使在那里,也必须指出字符串长度 以某种方式 ,通过计数或空终止。1987年,虽然UNIX机器在互联网上很常见,但据我所知, 所以 通常,空终止是一个“显而易见”的选择。

        2
  •  1
  •   Calle Dybedahl    10 年前

    1) DNS对URL一无所知。DNS比URL的概念更古老。

    2) 因为这就是DNS的有线格式的工作原理。你看到的是域名 www.mydomain.com ,以DNS二进制格式编码。长度+数据通常是存储字符串的一种非常常见的方式。