酷徒LOGO
0 0 评论
  • 显示原文与译文双语对照的内容
文章标签:DNS  

问题:

当我键入 www.google.com 时,dns查找工作是如何工作的。 根据我的知识,它首先转到 root 服务器,然后找出. com dns服务器的位置。 接下来它将返回该服务器的ip地址。 下一步是找出谷歌服务器的位置。 现在它返回一个ip地址,这将是 www.google.com 所在的地方。

因此,需要解决这两个dns外观问题。 如果我错了,纠正我。


回答 1:

当你开始考虑缓存和anycast之类的事情时,DNS解析会变得非常棘手,但是现在让我们保持简单。

下面是一个简单的例子,在一个新启动的名称服务器的一个查询Fragment旁边,有一个新的。 我已经修剪了一些时间戳以便进行易读性。

,服务器的( 这里 192.168.10.10 ) 请求一个 root 服务器的查询"对 www.google.com?" h.root-servers.net的记录是不权威的,但是它对 www.google.com, 有一个委托,这样它就返回了 that。


192.168.10.10.17203> 128.63.2.53.53: 29969 [1au] A? www.google.com. (43)


128.63.2.53.53> 192.168.10.10.17203: 29969- 0/15/16 (719)



;; QUESTION SECTION:


;www.google.com. IN A



;; AUTHORITY SECTION:


com. 172800 IN NS a.gtld-servers.net.


com. 172800 IN NS b.gtld-servers.net.


com. 172800 IN NS c.gtld-servers.net.


com. 172800 IN NS d.gtld-servers.net.


com. 172800 IN NS e.gtld-servers.net.


com. 172800 IN NS f.gtld-servers.net.


com. 172800 IN NS g.gtld-servers.net.


com. 172800 IN NS h.gtld-servers.net.


com. 172800 IN NS i.gtld-servers.net.


com. 172800 IN NS j.gtld-servers.net.


com. 172800 IN NS k.gtld-servers.net.


com. 172800 IN NS l.gtld-servers.net.


com. 172800 IN NS m.gtld-servers.net.



其次,本地名称服务器从 h.root-servers.net 返回的列表中选择一个名称服务器,并发送相同的查询: www.google.com?"的记录是什么名称空间查询是 f.gtld-servers.net ( 192.35.51.30 )。 f.gtld-servers.net, 对. com, 是权威的,它对区域服务器的名称服务器委托进行了响应


192.168.10.10.65182> 192.35.51.30.53: 58632 [1au] A? www.google.com. (43)


192.35.51.30.53> 192.168.10.10.65182: 58632- 0/4/5 (179)



;; QUESTION SECTION:


;www.google.com. IN A



;; AUTHORITY SECTION:


google.com. 172800 IN NS ns2.google.com.


google.com. 172800 IN NS ns1.google.com.


google.com. 172800 IN NS ns3.google.com.


google.com. 172800 IN NS ns4.google.com.



现在,本地名称服务器在最后一个响应中选择一个名称服务器,并问它同样的问题。 在这种情况下,它要求 ns2.google.com ( 216.239.34.10 )。 ns2.google.com 响应 www.google.com 实际上是 www.l. google.com的一个 CNAME ( 规范名称) 记录


192.168.10.10.4767> 216.239.34.10.53: 15830 [1au] A? www.google.com. (43)


216.239.34.10.53> 192.168.10.10.4767: 15830*- 6/0/0 CNAME[|domain]



;; QUESTION SECTION:


;www.google.com. IN A



;; ANSWER SECTION:


www.google.com. 604800 IN CNAME www.l.google.com.



非常接近现在我们只需要 www.l. google.com.的地址,因为我们已经知道 google.com,的名称,我们只要求其中之一。 在本例中,我们要求 ns3.google.com ( 216.239.36.10 )"什么是 www.l. google.com.?" 响应地址的记录,我们有答案:


192.168.10.10.63657> 216.239.36.10.53: 62511 [1au] A? www.l.google.com. (45)


216.239.36.10.53> 192.168.10.10.63657: 62511*- 5/0/0 A[|domain]



;; QUESTION SECTION:


;www.l.google.com. IN A



;; ANSWER SECTION:


www.l.google.com. 300 IN A 74.125.232.116


www.l.google.com. 300 IN A 74.125.232.112


www.l.google.com. 300 IN A 74.125.232.115


www.l.google.com. 300 IN A 74.125.232.113


www.l.google.com. 300 IN A 74.125.232.114



Huzzah !

总之我希望这足够让你开始。 这里有很多巨大的资源。 O'Reilly 图书"dns和绑定"非常有用。

我高度高度推荐安装dig来查看DNS查询是如何运行的。 例如可以使用 dig +trace轻松查看主机的委派路径:


; <<>> DiG 9.7.0-P1 <<>> +trace www.google.com


;; global options: +cmd


. 516930 IN NS k.root-servers.net.


. 516930 IN NS g.root-servers.net.


. 516930 IN NS h.root-servers.net.


. 516930 IN NS j.root-servers.net.


. 516930 IN NS a.root-servers.net.


. 516930 IN NS m.root-servers.net.


. 516930 IN NS b.root-servers.net.


. 516930 IN NS f.root-servers.net.


. 516930 IN NS d.root-servers.net.


. 516930 IN NS c.root-servers.net.


. 516930 IN NS l.root-servers.net.


. 516930 IN NS i.root-servers.net.


. 516930 IN NS e.root-servers.net.


;; Received 244 bytes from 127.0.0.1#53(127.0.0.1) in 1 ms



com. 172800 IN NS i.gtld-servers.net.


com. 172800 IN NS j.gtld-servers.net.


com. 172800 IN NS c.gtld-servers.net.


com. 172800 IN NS l.gtld-servers.net.


com. 172800 IN NS d.gtld-servers.net.


com. 172800 IN NS h.gtld-servers.net.


com. 172800 IN NS a.gtld-servers.net.


com. 172800 IN NS e.gtld-servers.net.


com. 172800 IN NS b.gtld-servers.net.


com. 172800 IN NS g.gtld-servers.net.


com. 172800 IN NS f.gtld-servers.net.


com. 172800 IN NS k.gtld-servers.net.


com. 172800 IN NS m.gtld-servers.net.


;; Received 492 bytes from 202.12.27.33#53(m.root-servers.net) in 45 ms



google.com. 172800 IN NS ns2.google.com.


google.com. 172800 IN NS ns1.google.com.


google.com. 172800 IN NS ns3.google.com.


google.com. 172800 IN NS ns4.google.com.


;; Received 168 bytes from 192.33.14.30#53(b.gtld-servers.net) in 42 ms



www.google.com. 604800 IN CNAME www.l.google.com.


www.l.google.com. 300 IN A 74.125.232.115


www.l.google.com. 300 IN A 74.125.232.113


www.l.google.com. 300 IN A 74.125.232.116


www.l.google.com. 300 IN A 74.125.232.114


www.l.google.com. 300 IN A 74.125.232.112


;; Received 132 bytes from 216.239.34.10#53(ns2.google.com) in 131 ms



注意,与前面查询的跟踪有多么相似? 希望有帮助


回答 2:

它稍微复杂一点,因为DNS缓存相当大。 本地计算机甚至可以缓存数据,并且查找不会进一步执行。

你的计算机将查询它自己的缓存,如果它失败了,它会查询主DNS服务器。 这可能是缓存DNS服务器,我的结果是缓存在缓存中,记录被返回给你,查找结束。 它也很可能是一个递归的DNS服务器,现在将为你的机器做腿工作。

如果主DNS服务器没有信息,它将查询 root NAME 服务器,它们将用( 在你的示例中) NAME 服务器来响应. com。

将向. com TLD服务器发送一个查询,服务器将使用授权服务器的地址进行响应

查询将被发送到权威 NAME 服务器,google.com 服务器请求 www.google.com 记录。 这将被发现并返回到主DNS服务器,它将缓存它并将记录返回给你。


回答 3:

DNS是分层的,就像lie所说,大量缓存。 也许,一个更复杂的例子可以帮助你。

假设你拥有属于拥有多个业务单位的公司的机器,这些业务单位反映在域结构中。 你的机器有 NAME machine.businessunit1.company.com,。 e 属于 businessunit1.company.com,,它是你的主要DNS后缀。

业务单元非常大,运行几个DNS服务器 (dns1.businessunit1.company.com, dns2.businessunit1.company.com),并且。 g。web服务器叫 www.businessunit1.company.com.

如果你的机器现在想要解析 www.businessunit1.company.com,,它首先会查找本地的DNS缓存。 你的机器本身会记住最近查询的DNS条目,因为它很可能会再次需要结果。 当你点击网站上的链接时。 我不知道你是否可以看到你的机器缓存了什么,但是有一个命令可以删除你的机器所记录的( 在 Windows 上): ipconfig/flushdns

如果你的机器不记得答案,它会询问- 就像我前面评论过的- DNS配置为你的网络适配器的DNS服务器。 大多数情况下,你的管理员将配置 dns1.businessunit1.company.com 和 dns2.businessunit.company.com.,因为你希望你的DNS查询不需要很多交通。 如果 dns1.businessunit1.company.com 收到你的查询,它将回答它,因为它对区域 *.businessunit1.company.com. 权威的权威意味着该服务器知道所有DNS名称的唯一正确答案,结束"businessunit1.company.com".。

现在假设你已经查询 www.businessunit2.company.com. 你的机器,如果它不是rememember的答案本身,将再次询问 dns1.businessunit1.company.com.,有很多可以能: 首先,管理员可能很聪明,他们有forseen很可能来自businessunit1的人也希望经常访问businessunit2中的机器。 因此,他们配置了 dns1.businessunit1.company.com 来保存来自 dns1.businessunit2.company.com. dns1.businessunit1.company.com的数据副本可以使用这个副本来回答你的问题。 第二,你的管理员肯定会告诉 dns1.businessunit1.company.com 当它不知道你的问题的答案时怎么办? 那是另一个DNS服务器。 可能是 dns1.company.com,,但它也可能是其他任何DNS服务器,包括 root 服务器。

lain说,dns1.businessunit1.company.com 可以免费记住从其他DNS服务器获得的任何答案。 如果你要求 www.google.com,,它可以能要问它的他服务器,但如果你再次询问它,它会记住答案。

你基本上可以看到你的DNS应答来自哪里,当你键入。 g。nslookup www.google.com。输出将告诉你服务器是否是权威的答案或者不是权威的答案。 大多数情况下,它是不权威的,因为谷歌服务器没有应答它,因为它负责所有的DNS名称结尾的DNS。


回答 4:

实际上,一切都非常复杂,依赖于DNS服务器。 取消绑定使 66查询失败。


回答 5:




文章标签:DNS  

Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备17041772号-2  |  如果智培  |  酷兔英语  |  帮酷