DNS(Domain Name System,域名系统)是互联网中非常重要的基础设施之一,它负责将人类易于记忆的域名转换成计算机可识别的 IP 地址,使得用户可以方便地通过域名访问 Web 站点、发送电子邮件等。

执行流程

DNS 域名解析的大致流程如下:

  1. 先检查浏览器中的 DNS 缓存,如果浏览器中有对应的记录会直接使用,并完成解析;
  2. 如果浏览器没有缓存,那就去查询操作系统的缓存,如果查询到记录就可以直接返回 IP 地址,完成解析;
  3. 如果操作系统没有 DNS 缓存,就会去查看本地 host 文件,Windows 操作系统下,host 文件一般位于 "C:\Windows\System32\drivers\etc\hosts",如果 host 文件有记录则直接使用;
  4. 如果本地 host 文件没有相应的记录,会请求本地 DNS 服务器,本地 DNS 服务器一般是由本地网络服务商如移动、电信提供。通常情况下可通过 DHCP 自动分配,当然你也可以自己手动配置。目前用的比较多的是谷歌提供的公用 DNS 是 8.8.8.8 和国内的公用 DNS 是 114.114.114.114。
  5. 如果本地 DNS 服务器没有相应的记录,就会去根域名服务器查询了,目前全球一共有 13 组根域名服务器(这里并不是指 13 台服务器,是指 13 个 ip 地址,按字母 a-m 编号),为了能更高效完成全球所有域名的解析请求,根域名服务器本身并不会直接去解析域名,而是会把不同的解析请求分配给下面的其他服务器去完成,下面是 DNS 域名系统的树状结构图:

image.png

DNS 查询

DNS 查询是域名解析服务中的关键步骤,它指的是本地域名服务器向其他 DNS 服务器发送请求,以获取特定域名的 IP 地址。DNS 查询分为递归查询和迭代查询两种方式:

  1. 递归查询:本地域名服务器向其他 DNS 服务器发送 DNS 查询请求,并要求对方返回域名的 IP 地址。如果对方无法返回 IP 地址,则继续向更高级别的 DNS 服务器发送查询请求,直到查询到最终的 IP 地址为止。
  2. 迭代查询:本地域名服务器向其他 DNS 服务器发送 DNS 查询请求,对方只返回指向下一级 DNS 服务器的 IP 地址,本地域名服务器再向该下一级服务器发送查询请求,直到查询到最终的IP地址为止。

DNS 查询的过程中,本地域名服务器会优先查询自己的缓存中是否有该域名的 IP 地址记录,如果有则直接返回给用户;如果没有,则会向其他 DNS 服务器发送查询请求,获取该域名的 IP 地址。DNS 查询过程中,为了提高查询效率,本地域名服务器会采用以下两种方式:

  1. DNS 负载均衡:本地域名服务器会通过轮询或随机分配的方式,将查询请求分发到多个 DNS 服务器中,以达到负载均衡的效果。
  2. DNS 缓存:本地域名服务器会将查询过的域名和其对应的 IP 地址记录在缓存中,以便于下一次查询时直接从缓存中返回 IP 地址,提高查询效率。