Closed azl397985856 closed 4 years ago
DNS工作就是将域名映射为IP。 当然域名包括www域名,邮箱域名等等。
首先我们将域名进行分层。 其中层之间以点分割。分为顶级域名,根域名和次级域名
将域名解析为IP的过程也是类似。 我们将DNS也分为几类,分别处理顶级域名,根域名和次级域名。
首先我们会请求本地DNS服务器,本地资源服务器会经过一系列操作,拿到我们想到的IP地址。可能是一个IP,也可能是一个IP LIST,我们从中选择一个连接(大型网站都是这么做的)。
上面提到了DNS会返回一个IP LIST。 那么如果客户端随机选择一个IP,就可以做到负载均衡了。
感觉本地服务器向远端查询时,应该使用的是迭代。可以使用dig +trace www.xxx.com
来查看。
具体可参考
简单..看了下描述,那重点其实是这里的“本地DNS服务器”是指客户端本身的一个服务.. 还是首选DNS服务器? 如果是客户端本身..那实际就是迭代? 如果其实是首选DNS服务器在做迭代那其实就是递归?
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
授权型 DNS 服务器(authoritative DNS server, aka, nameserver 名称服务器),会把它们所管理的域名下的所有 IP 地址存放在数据库中,我们向授权型 DNS 服务器查询某个域名的 IP 地址时,可以直接获取返回结果。
比如 github.com
的一个授权型 DNS 服务器是 ns-421.awsdns-52.com.
,我们可以通过
dig @ns-421.awsdns-52.com github.com +short
直接查到 github.com
的 IP 地址,+short
是一个参数,表示只显示结果,隐藏其他查询细节。
不过通常客户端不会对授权型 DNS 服务器直接进行查询,而是通过递归型 DNS 服务器。
递归型 DNS 服务器(recursive DNS server)并不知道哪个域名对应哪个 IP 地址,它们是通过向授权型 DNS 服务器询问,最终找到正确的 IP 地址,然后把 IP 地址进行缓存以便再次查询。
dig github.com +trace
使用 +trace
参数会显示递归查询的过程。
github.com
;github.com
请求被路由到 DNS 解析程序(一般由 ISP 进行管理);github.com
IP 地址的缓存,直接返回缓存,如果没有缓存或者缓存已过期,那就继续查询;.com
域的一个 TLD(top-level domain)名称服务器;.com
域的名称服务器响应了 8 个与 github.com
相关的名称服务器;ns-421.awsdns-52.com.
并向它转发 github.com
请求;github.com
的区域找到相应的 IP 地址 13.229.188.59
返回;13.229.188.59
;13.229.188.59
上的 Web 服务器将页面返回显示在浏览器中。This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
递归查询指的是查询请求发出后,域名服务器代为向下一级域名服务器发出请求,最后向用户返回查询的最终结果。使用递归 查询,用户只需要发出一次查询请求。
迭代查询指的是查询请求后,域名服务器返回单次查询的结果。下一级的查询由用户自己请求。使用迭代查询,用户需要发出 多次的查询请求。
那么DNS查找过程使用的是递归查询还是迭代查询呢?
扩展: