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 / 问题 / 1008036
Accepted
Dan
Dan
Asked: 2020-03-24 08:06:07 +0800 CST2020-03-24 08:06:07 +0800 CST 2020-03-24 08:06:07 +0800 CST

DNS 服务器应该如何传递具有多个响应的上游响应?

  • 772

我正在寻找探索我发现的怪癖的技术细节。

我有一个权威的 DNS 服务器,执行全球服务负载平衡。它以基于其负载平衡算法的优先顺序响应多个 IP 地址。因此,例如,如果所有服务都正常,但 xyz3 负载最少,则响应可能如下所示:

x.y.z.3
x.y.z.1
x.y.z.2

但是,我发现如果用户使用 Google 的 DNS (8.8.8.8),他们会得到与上面完全相同的响应。然而,OpenDNS 似乎进一步循环这些响应。

换句话说,使用 8.8.8.8 作为其 DNS 服务器的用户将始终收到以下响应:

x.y.z.3
x.y.z.1
x.y.z.2

但是使用 OpenDNS 的用户可以按任何顺序查看它们。

我可以通过只返回 xyz3 来立即解决这个问题,但我想知道:

  1. 有没有其他方法可以解决这个问题?
  2. 这种行为是否包含在 RFC 或标准中?
  3. OpenDNS 行为是否符合预期且正确?
domain-name-system load-balancing dns-hosting
  • 1 1 个回答
  • 61 Views

1 个回答

  • Voted
  1. Best Answer
    Håkan Lindqvist
    2020-03-24T09:49:25+08:002020-03-24T09:49:25+08:00

    由于建立在与 DNS 工作方式部分不一致的假设之上,您的直接问题有点难以回答。

    对于名称、类和类型的给定组合存在的资源记录形成一个资源记录集(通常称为RRSet)。
    正如该术语所暗示的(特别是它是一个set),枚举记录的顺序对系统没有意义。

    我相信首先指出这种缺乏排序的地方是RFC1033:

    域系统不保证保留资源记录的顺序。以特定顺序列出 RR(例如多个地址记录)并不能保证它们将按该顺序使用。

    有了这些知识,已经很清楚,对订购有期望意味着依赖于最初无法保证的行为。

    接下来,具有多个地址记录 ( A/ AAAA) 的记录集的常见用例是 DNS 中负载平衡的粗略方法。
    为了更好地帮助这项工作,许多缓存解析器将使用每个响应重新排序记录(无论是循环还是随机顺序),以帮助简单的客户端应用程序只选择第一个地址而不是全部命中相同的地址TTL 长。
    即,标准允许实施这种行为(顺序并不重要)而不是实际强制执行。

    总而言之,您只需要考虑记录的顺序没有实际意义,并且可以期望客户端使用记录集中存在的所有地址。

    如果只有负载最少的主机获得流量真的很重要,您将不得不只返回其地址,或者如果客户端软件支持SRV(这排除了网络浏览器)可能会利用它并调整SRV优先级和/或权重字段以反映您当前的偏好。
    但是,请记住,缓存仍然是一件事,因此最好还是让客户端“自行”将负载分散到可用的主机上。

    • 2

相关问题

  • 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