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 / 问题 / 698251
Accepted
StanTastic
StanTastic
Asked: 2015-06-12 02:51:46 +0800 CST2015-06-12 02:51:46 +0800 CST 2015-06-12 02:51:46 +0800 CST

DNS 协议如何从 UDP 切换到 TCP?

  • 772

在有人问之前:我已经看到DNS 查询何时使用 TCP 而不是 UDP?它没有回答我的问题。

我一直听到的是“如果答案太长,DNS 将使用 TCP ”。这并不能解释它是如何发生的。

所以情况如下:DNS 客户端请求使用 UDP 解析记录。UDP 的记录太长:

  1. 服务器用特定的操作码回答,让客户端切换到 TCP
  2. 服务器根本不响应,客户端通过 TCP 重试
  3. 服务器打开到客户端的 TCP 连接(愚蠢,如果你算上 NAT,但谁知道呢?)
  4. 客户端以某种方式(?)“知道”给定的查询应该通过 TCP 运行,因此它首先不会打扰 UDP
  5. DNS pixies 在需要时神奇地将 UDP 转换为 TCP

我一直在互联网上寻找答案,但有很多噪音(见上文),我似乎无法为此编写正确的 Google 查询(就此而言,我也无法在 RFC 中找到信息) .

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

1 个回答

  • Voted
  1. Best Answer
    faker
    2015-06-12T03:15:22+08:002015-06-12T03:15:22+08:00

    客户端事先并不知道响应会太大,所以会通过UDP向服务端查询。
    服务器将通过 UDP 响应,并将尽可能多地包含并设置截断的标头位(“TC” http://www.networksorcery.com/enp/protocol/dns.htm)。
    然后客户端可以通过 TCP 重新发送请求并获得完整的响应。

    另见:https ://www.rfc-editor.org/rfc/rfc5966

    在没有 EDNS0(DNS 0 的扩展机制)(见下文)的情况下,任何需要发送超过 512 字节限制的 UDP 响应的 DNS 服务器的正常行为是服务器截断响应以使其适合在该限制内,然后在响应标头中设置 TC 标志。当客户端收到这样的响应时,它会将 TC 标志作为它应该通过 TCP 重试的指示。

    并且:https ://www.ietf.org/rfc/rfc2181.txt

    正如评论中提到的,当然 DNS 区域传输总是使用 TCP。

    • 51

相关问题

  • 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