0%

DNS原理基础

DNS,又称为域名系统(Domain Names System),是一项互联网服务,用于进行域名和与之相对应的IP地址进行转化的服务器。

Domain Names System

一、定义

DNS用于将域名转换为IP地址。其中:

  1. IP地址:一组用点分隔的能唯一标识互联网中的计算机的数字组合
  2. 域名:一串用点分隔的名字,用来表示计算机的名称

根据《计算机网络》的定义:DNS是

  1. 一个由分层的 DNS 服务器实现的分布式数据库
  2. 一个使得主机能够查询分布式数据库的应用层协议

二、域名构成

域名是层次结构,从上到下(从书写上看是从右到左),分为根域名、顶级域名、二级域名、三级域名等等。

  1. 根域名:root

    1. 顶级域名:net, com, edu, org…

      1. 二级域名:ibm, baidu, alibaba, ….

        1. 三级域名:www, mail, …

注意:在域名的每一个层级都有一个域名服务器,如果顶级域名中,有edu域名服务器,com域名服务器。

从上面可以看出,DNS 系统是一个典型的树状结构,从根域名服务器开始一级一级的查询。根服务器用于一切域名的起始解释权,通过下图可以大致了解解释权机制(SOA)。

DNS

三、查询方式

  • 递归查询:A只请求B,直到B返回A想要的结果。
  • 迭代查询:A请求B,B返回结果告知A所需要请求的其他服务器,然后A再请求C、D、E等并拿到响应的返回结果。

四、域名缓存

  • 对于域名服务器而言:

    在首次进行解析域名时,会使用缓存保存域名和对应的IP地址映射。

  • 对于本地计算机而言:

    • 对于浏览器:

      浏览器会在获取网站域名的实际IP后,用缓存保存下来,以减少网络请求次数

    • 对于操作系统:

      操作系统的缓存就是用户自己配置的hosts文件

五、查询过程

大致有七个步骤:

  1. 首先搜索浏览器的DNS缓存,其缓存中维护了一张域名与IP地址的对应表,若有则返回,并结束操作

  2. 若没有找到,继续搜索操作系统的DNS缓存,若有则返回,并结束操作

  3. 若没找到,则操作系统把域名发给本地域名服务器,本地域名服务器在自己的DNS缓存中采用递归方式查找,若有则返回,并结束操作

  4. 若没找到,则本地服务器向上级域名服务器进行迭代查询

    1. 本地域名服务器向根域名服务器发送请求,其会返回顶级域名服务器地址
    2. 本地域名服务器再向顶级域名服务器发送请求,其会返回二级域名服务器地址
    3. 本地域名服务器再向二级域名服务器发送请求,最终返回该域名对应的IP地址

至此,请求阶段完成,接下来分三步返回结果至浏览器并缓存。

  1. 本地域名服务器将得到的IP地址返回给操作系统,同时缓存该域名与IP的映射
  2. 操作系统将得到的IP地址返回给浏览器,同时缓存该域名与IP的映射
  3. 浏览器得到该域名对应的IP地址,同时缓存该域名与IP的映射

六、DNS 负载均衡基本原理

DNS 也用于在冗余的服务器之间进行负载分配。繁忙的站点(例如cnn.com)被冗余分布在多台服务器上,每台服务器均运行在不同的端系统上,每个都有着不同的 IP 地址。

DNS 服务器为同一个主机名/域名配置了多个 IP 地址,在应答 DNS 查询时,DNS 服务器对每个查询将以 DNS 文件中主机记录对应的 IP 地址按顺序返回不同的解析结果,将客户端访问引导到不同的机器上去,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的。