为什么需要 DNS 服务器
网络通讯大部分是基于 TCP/IP 的,而 TCP/IP 是基于 IP 地址的,所以计算机在网络上进行通讯时只能识别 IP 地址而不能识别域名。
DNS 作用
DNS 是域名系统,它所提供的服务是用来将主机名和域名转换为 IP 地址的工作。
查询总览
假设运行在用户主机上的某些应用程序(如浏览器或者邮箱)需要将主机名转换为 IP 地址。这些应用程序将调用 DNS 的客户端,并指明需要被转换的主机名。用户主机的 DNS 客户端接收到后,向网络中发送一个 DNS 查询报文,所有 DNS 请求和响应报文使用 UDP 数据包经过端口 53 发送,经过若干延迟后,用户主机上的 DNS 客户端接收到一个提供所希望映射的 DNS 响应报文。
设计模式
DNS 不采用单点的集中式设计模式,而是使用分布式集群的工作方式,是因为集中式设计会有单点故障、通信容量、远距离时间延迟、维护开销大等问题。
查询过程
- 检查浏览器中是否缓存过该域名对应的 IP 地址
- 如果浏览器缓存中没有命中,将继续查找本级(操作系统)是否缓存过该 IP
- 向本地域名解析服务系统发起域名解析的请求(一般是本地运营商的机房)
- 向根域名解析服务器发起域名解析服务请求
- 根域名服务器返回 gTLD 域名解析服务器地址
- 向 gTLD 服务器发起解析请求
- gTLD 服务器接收请求并返回 Name Server 服务器(通常情况下就是你注册的域名服务器)
- Name Server 服务器返回 IP 地址给本地服务器
- 本地服务器缓存解析结果
- 返回解析结果给用户
分类
大致上说,DNS 服务器分成三类:根 DNS 服务器、顶级域 DNS 服务器、权威 DNS 服务器。
还有另一类重要的 DNS,称为本地 DNS 服务器,一台本地 DNS 服务器严格来说并不属于该服务器的层次结构,但它对 DNS 层次结构很重要。
当主机发送 DNS 请求时,该请求被发往本地 DNS 服务器,它起代理作用,并将该请求转发到 DNS 服务器层次结构中。
查询方式
在上述中,从请求主机到本地 DNS 服务器的查询是 递归 的,其余查询是 迭代 的。
DNS 提供了两种查询过程:
- 递归查询:在该模式下 DNS 服务器接收客户请求,必须使用一个准确的查询结果回复客户机,如果 DNS 服务器没有存储 DNS 值,那么该服务器会询问其他服务器,并将返回一个查询结果给客户机。
- 迭代查询:DNS 服务器会向客户机提供其他能够解释查询请求的 DNS 服务器,当客户机发送查询时,DNS 并不直接回复查询结果,而是告诉客户机,另一台 DNS 服务器的地址,客户再向这台 DNS 服务器提交请求,依次循环直接返回结果。