为啥 dig 命令只返回一个 google.com 的 IP 地址?

     2023-04-15     44

关键词:

【中文标题】为啥 dig 命令只返回一个 google.com 的 IP 地址?【英文标题】:Why dig command is returning only one IP address of google.com?为什么 dig 命令只返回一个 google.com 的 IP 地址? 【发布时间】:2017-03-18 04:22:57 【问题描述】:

据我们所知,谷歌有不止一个 IP 地址。如果我们使用https://toolbox.googleapps.com/apps/dig/#A/google.com@8.8.8.8这个网站,就会产生多个google的IP地址。

如果我运行以下命令,那么情况就不同了:

gyan@localhost:~/codes/java/net$ dig google.com

; <<>> DiG 9.10.3-P4-Ubuntu <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11777
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;google.com.            IN  A

;; ANSWER SECTION:
google.com.     269 IN  A   216.58.220.46

;; Query time: 0 msec
;; SERVER: 10.100.171.1#53(10.100.171.1)
;; WHEN: Fri Nov 04 16:18:07 IST 2016
;; MSG SIZE  rcvd: 55

gyan@localhost:~/codes/java/net$ 

只返回一个IP地址,与上述网站返回的不一样。这个 IP 地址也会不时变化。

但如果我为 amazon.com 运行 dig 命令:

gyan@localhost:~/codes/java/net$ dig amazon.com

; <<>> DiG 9.10.3-P4-Ubuntu <<>> amazon.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55090
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;amazon.com.            IN  A

;; ANSWER SECTION:
amazon.com.     34  IN  A   54.239.26.128
amazon.com.     34  IN  A   54.239.17.7
amazon.com.     34  IN  A   54.239.25.192
amazon.com.     34  IN  A   54.239.25.208
amazon.com.     34  IN  A   54.239.25.200
amazon.com.     34  IN  A   54.239.17.6

;; Query time: 74 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Fri Nov 04 16:23:17 IST 2016
;; MSG SIZE  rcvd: 135

gyan@localhost:~/codes/java/net$ 

amazon.com 的这 6 个 IP 地址永远不会改变。并且网站https://toolbox.googleapps.com/apps/dig/#A/amazon.com@8.8.8.8也返回相同的6个IP地址。

我怀疑 google.com 的 DNS 查找与 amazon.com 有何不同?为什么 google 只产生一条记录,而不是像 amazon 这样的多条记录?

【问题讨论】:

两个不同域的DNS查找肯定会有所不同;不过,GeoDNS 和 Anycast 可能是您正在寻找的 :) 我不知道他们的工具箱。很有用! 我认为 amazon.com 返回的 6 个 IP 地址是负载均衡器服务器。负载平衡器服务器的 IP 保持不变,然后根据负载平衡算法在内部将请求转发到负载最小的特定服务器。 【参考方案1】:

据我们所知,谷歌拥有多个 IP 地址。

没错。但这并不意味着客户需要了解其中的一个以上。

在过去,服务使用多个 IP 地址响应 DNS 查询以执行负载平衡是很常见的。回复通常是随机的,这意味着客户端会从行为相同的大量服务器地址池中随机获取几个地址的子集。

基于 DNS 的负载平衡一直是个小技巧。由于缓存存在问题:如果ISP的DNS解析器正在缓存回复,大量用户将全部连接到这几个IP地址,从而降低负载平衡的有效性。解决方法是降低记录的 TTL,以确保条目在缓存中保留一小段时间,然后执行新的查询。例如,您发布的 dig 输出中的 amazon.com A 记录的 TTL 设置为 34 秒。

该方法效果不佳。减少 TTL 会进一步增加小型 HTTP 请求的延迟。此外,DNS 负载平衡的结果有点不可预测,因为它不能保证服务器会统一处理负载。

但是,如果您有一个在网络级别工作的负载平衡器(将其视为反向 NAT 盒:一个 IP 面向互联网,将流量多路复用到其后面的大量服务器),它可以处理大量连接,并且正常运行时间也很长,不需要在 DNS 级别进行负载平衡。

因此,您连接的 Google 数据中心很可能不使用 DNS 负载平衡,而 Amazon 的数据中心使用。

另一个问题是为什么如果你从工具箱查询 8.8.8.8 会得到多个地址,而从你的机器查询却只能得到一个。

首先,重要的是要了解,从工具箱查询时,发送 DNS 查询的是 Web 服务器,而不是您的计算机。

DNS 服务器不必向不同的客户端返回相同的回复。实际上,通常会根据客户端的地理位置返回不同的回复:例如,如果欧洲的用户查询 google.com,它将获得欧洲数据中心的 IP 地址,而不是美国。

在这种情况下,我认为 DNS 地理定位用于某些客户端,而不用于其他客户端。它可能与发送查询的网络大小以及网络负载均衡器的容量有关。例如,如果负载平衡器可以同时处理 1,000,000 个连接,并且您发送查询的网络有 100,000 个 IP,则无需进行 DNS 负载平衡。但是如果网络很大(在您的示例中,运行工具箱的数据中心的大小,网络负载平衡器可能无法处理它,因此启用 DNS 负载平衡并且您从池中获取多个随机 IP 地址。

注意:“网络”是指使用相同 DNS 解析器的一组机器。

返回多个 IP 地址的另一个原因是进行基于 DNS 的故障转移。当其中一台机器停止工作时,客户端会尝试连接到另一台机器。但这不是进行故障转移的好方法,因为某些应用程序不会存储所有 IP 地址(尽管我认为大多数浏览器都会存储),而且 DNS 缓存也会阻碍。

【讨论】:

您确定该声明是网络服务器发送 DNS 查询,而不是您的计算机。通常我们在书中读到。该计算机需要向 DNS 服务器发出请求以解析 IP 地址。 @hackwithharsha 我认为他的意思是托管谷歌工具箱的网络服务器。

dig命令详解

...,因为它灵活性好,易用、输出清晰。通常情况下dig使用命令行参数,但它也可以按批处理模式从文件读取搜索请求。不同于早期版本,dig的BIND9实现允许从命令行发出多个查询,除非被告知请求特定域名服务器,dig将尝试/etc/re... 查看详情

为啥 insertNewObjectForEntityForName 只返回一个 NSManagedObject?

】为啥insertNewObjectForEntityForName只返回一个NSManagedObject?【英文标题】:WhydoesinsertNewObjectForEntityForNameonlyreturnaNSManagedObject?为什么insertNewObjectForEntityForName只返回一个NSManagedObject?【发布时间】:2014-06-0810:17:33【问题描述】:我正... 查看详情

dig查询中ANSWER SECTION五个字段的含义

...时间】:2013-12-1608:16:56【问题描述】:这是我运行digwww.google.com时的答案部分:;;ANSWERSECTION:www.google.com.108INA74.125.239.115www.google.com.108INA74. 查看详情

为啥只为第一个元素显示双引号?

】为啥只为第一个元素显示双引号?【英文标题】:Whyaredoublequotesshownonlyforthefirstelement?为什么只为第一个元素显示双引号?【发布时间】:2018-10-0700:26:23【问题描述】:我想知道为什么浏览器只为第一个元素显示双引号。第二... 查看详情

为啥 TableView 只返回一个单元格?

】为啥TableView只返回一个单元格?【英文标题】:WhyTableViewreturnonlyonecell?为什么TableView只返回一个单元格?【发布时间】:2016-12-0121:13:20【问题描述】:我正在解析来自iTunesStore的JSON以检索有关音乐家的信息。在解析我收到这样... 查看详情

为啥 google.com 不加载到 iFrame [重复]

】为啥google.com不加载到iFrame[重复]【英文标题】:Whydoesgoogle.comnotloadinaniFrame[duplicate]为什么google.com不加载到iFrame[重复]【发布时间】:2012-08-2905:17:08【问题描述】:可能重复:Howtoshowgoogle.cominaniframe?我正在研究为学校项目运行代... 查看详情

dig命令结果解析

参考技术Adig命令,可以用来分析dns解析过程。最简单的使用方式:digyourdomain。例如使用digwww.baidu.com,会输出如下信息:dig返回内容的第一部分,主要包括dig的版本信息,以及本次命令执行结果的摘要。>opcode:QUERY,表示执行... 查看详情

dig这个命令到底怎吗用

这个命令不是有好多功能吗?我不会用,谁有比较详细的说明呢,谢谢帮我发过来那就是linux里面的命令吧呃...linux系统咱不懂...从别的地方V了下dig是一个linux/unix下用于查看域名详情的小工具,类似于nslookup,但比nslookup的功能更强... 查看详情

为啥返回字符串的 VB.Net 函数实际上只返回一个字符?

】为啥返回字符串的VB.Net函数实际上只返回一个字符?【英文标题】:WhydoesaVB.Netfunctionthatreturnsstringonlyactuallyreturnasinglecharacter?为什么返回字符串的VB.Net函数实际上只返回一个字符?【发布时间】:2008-09-2701:24:24【问题描述】:... 查看详情

为啥我在循环中的 Mongoose 查询只返回第一个结果?

】为啥我在循环中的Mongoose查询只返回第一个结果?【英文标题】:WhyismyMongoosequerywithinalooponlyreturningthefirstresult?为什么我在循环中的Mongoose查询只返回第一个结果?【发布时间】:2016-10-2114:27:19【问题描述】:我已经为此苦苦挣... 查看详情

为啥 chr() 返回一个十六进制值,我怎样才能让它只返回字符 [重复]

】为啥chr()返回一个十六进制值,我怎样才能让它只返回字符[重复]【英文标题】:Whydoeschr()returnahexvalueandhowcanimakeitonlyreturncharacters[duplicate]为什么chr()返回一个十六进制值,我怎样才能让它只返回字符[重复]【发布时间】:2022-01-... 查看详情

debian下使用dig/nslookup

debian默认没有安装dig/nslookup命令,使用下面命令安装:apt-getinstalldnsutilsred-hat系列使用:yuminstallbind-utilshost命令显示域名对应的ip地址:nslookup查看域名对应的的ip:(图示通过/etc/resolv.conf配置文件中的211.162.77.77返回的结果)dig命令... 查看详情

我可以使用 dig 同时查找 NS 和 A

...间】:2011-05-2404:28:19【问题描述】:是否可以使用单个dig命令查找域的A(IP地址)和NS(名称服务器)?我可以使用diggoogle.comA+short或diggoogle.comNS+short但肯定可以只使用一个命令吗?如果没有,是否有类似的命令可以做到这一点... 查看详情

dns解析调试(dig&nslookup)

...基本工具.此处做个笔记,备查.比较常用的是A和CNAMEnslookup命令,是Linux里非常常用的网络命令,简而言之就是“查DNS信息用的”,如果没有此命令,通过yuminstallbind-utils进行安装.nslookup是一个能够查询互联网域名服务器信息的程序。... 查看详情

当我写下原因时,我的 AFK 命令只显示一个字。为啥?

】当我写下原因时,我的AFK命令只显示一个字。为啥?【英文标题】:MyAFKcommandisonlyshowingonewordwhenIwritethereason.Why?当我写下原因时,我的AFK命令只显示一个字。为什么?【发布时间】:2021-05-0220:14:08【问题描述】:我的AFK命令效... 查看详情

为啥我的 For 循环在 EJS 节点 js 中只返回一个值?

】为啥我的For循环在EJS节点js中只返回一个值?【英文标题】:WhyismyForLoopreturningjustonevalueinEJSnodejs?为什么我的For循环在EJS节点js中只返回一个值?【发布时间】:2018-07-2908:43:40【问题描述】:我正在构建一些东西,我需要从MongoD... 查看详情

window下安装dig命令

...nslookup功能更强大。Windows下只有nslookup,如果也想用到dig命令,就只能自己动手安装了。dig作为bind的一部分,官方网站如下:http://www.bind9.net/download下面来具体说说步骤,如何安装。选择一个镜像站点,点击进入 查看详情

windows系统下安装dig命令

...nslookup功能更强大。Windows下只有nslookup,如果也想用到dig命令,就只能自己动手安装了。dig作为bind的一部分,官方网站如下:http://www.bind9.net/download下面来具体说说步骤,如何安装。 选择一个镜像站 查看详情