AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 991520
Accepted
Chris Smith
Chris Smith
Asked: 2019-11-13 07:21:32 +0800 CST2019-11-13 07:21:32 +0800 CST 2019-11-13 07:21:32 +0800 CST

根据 RFC 1035 如何在 DNS 中执行截断?

  • 772

我正在尝试从头开始实现我自己的 DNS 服务器。但是,我很难理解RFC 1035如何建议执行截断。

第 6.2 节说:

当响应太长以至于需要截断时,截断应该从响应的末尾开始,并在数据报中向前推进。因此,如果权威部分有任何数据,则保证答案部分是唯一的。

我真的无法理解这意味着什么。我认为“前进”意味着远离标题。但这与权限部分有什么关系?它说“响应结束”,我认为这意味着答案部分的结束?如果整个答案部分不适合消息怎么办?

有人可以更好地解释这个算法吗?

我还发现RFC 2181的第 9 节说:

仅当需要 RRSet 作为响应的一部分但不能全部包含在内时,才应在响应中设置 TC 位。不应仅仅因为可能包含一些额外信息而设置 TC 位,但没有足够的空间。这包括附加部分处理的结果。在这种情况下,不适合响应的整个 RRSet 应该被忽略,并且按原样发送响应,同时清除 TC 位。如果回复的接收者需要省略的数据,它可以为该数据构造一个查询并单独发送。

在设置了 TC 的情况下,不完全适合的部分 RRSet 可能会留在响应中。当 DNS 客户端收到带有 TC 设置的回复时,它应该忽略该响应,并使用允许更大回复的机制(例如 TCP 连接)再次查询。

domain-name-system
  • 1 1 个回答
  • 1510 Views

1 个回答

  • Voted
  1. Best Answer
    Håkan Lindqvist
    2019-11-13T11:14:25+08:002019-11-13T11:14:25+08:00

    TL;博士

    如果TC设置了,则答案中的记录选择(如果有)并不重要,因为客户端应该只是丢弃消息并通过 TCP 重试,无论如何。


    首先,我只想指出,如果这个实现是为了学习目的,那么这当然是一种深入理解的好方法。我会推荐Hello DNS作为补充阅读。
    如果它用于生产用途,我强烈建议考虑使用一些现有的 DNS 实现作为解决方案的框架,以帮助提供正确的行为;当您开始研究现代 DNS 服务器的期望时,会有很多事情要做。

    关于您关于 RFC1035 中非常简短的截断注释的问题(请注意本文档的年龄,它在清晰的语言方面并没有真正成立),我还发现他们对 TC 的解释相当奇怪。

    但是,我确实相信这里提到的本质上是 DNS 消息中各部分的顺序与数据的“重要性”一致。

    常规查询/响应消息具有以下部分(来自第 4.1 节):

    +---------------------+
    |        Header       |
    +---------------------+
    |       Question      | the question for the name server
    +---------------------+
    |        Answer       | RRs answering the question
    +---------------------+
    |      Authority      | RRs pointing toward an authority
    +---------------------+
    |      Additional     | RRs holding additional information
    +---------------------+
    

    我相信他们所说的本质上只是你应该从头开始丢弃东西(更喜欢从额外的东西,然后是权威......)。然后,这种方法使他们注意到我认为应该说的是,如果在例如权威部分中有任何内容,您就知道答案部分是完整的。

    综上所述,我真的认为 RFC2181 中的相关部分更有帮助(而且更清晰,这正是 RFC2181 的目的)。

    如那里所述(释义):
    如果有任何您正在考虑添加到响应中的可选数据(除了最低限度回答问题所严格要求的数据,即通常与问题匹配的完整 RRSet),那么该可选数据可以简单地删除而无需设置TC.
    如果您必须删除对TC必须设置的答案至关重要的内容,并且如果TC设置了客户端必须丢弃响应并通过 TCP 重试(这在很大程度上使得 RFC1035 中有些复杂的推理与行为良好的客户端无关,他们不会对任何事情都使用截断的答案)。

    • 4

相关问题

  • Solaris DNS

  • resolv.conf 在经过一段时间后被更改

  • 为什么有些网站的网址中没有“www”就无法显示?[关闭]

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve