zoukankan      html  css  js  c++  java
  • DNS学习笔记

    一、域名的层级结构

    主机名.次级域名.顶级域名.根域名
    
    # 即
    
    host.sld.tld.root
    

      

      比如,域名math.stackexchange.com显示为math.stackexchange.com.。这不是疏忽,而是所有域名的尾部,实际上都有一个根域名。

      举例来说,www.example.com真正的域名是www.example.com.root,简写为www.example.com.。因为,根域名.root对于所有域名都是一样的,所以平时是省略的。

      根域名的下一级,叫做"顶级域名"(top-level domain,缩写为TLD),比如.com.net;再下一级叫做"次级域名"(second-level domain,缩写为SLD),比如www.example.com里面的.example,这一级域名是用户可以注册的;再下一级是主机名(host),比如www.example.com里面的www,又称为"三级域名",这是用户在自己的域里面为服务器分配的名称,是用户可以任意分配的。

    二、分级查询

      DNS服务器根据域名的层级,进行分级查询。

     

      需要明确的是,每一级域名都有自己的NS记录,NS记录指向该级域名的域名服务器。这些服务器知道下一级域名的各种记录。

     

      所谓"分级查询",就是从根域名开始,依次查询每一级域名的NS记录,直到查到最终的IP地址,过程大致如下。 

     

    从"根域名服务器"查到"顶级域名服务器"的NS记录和A记录(IP地址)
    从"顶级域名服务器"查到"次级域名服务器"的NS记录和A记录(IP地址)
    从"次级域名服务器"查出"主机名"的IP地址
    

     

      仔细看上面的过程,你可能发现了,没有提到DNS服务器怎么知道"根域名服务器"的IP地址。回答是"根域名服务器"的NS记录和IP地址一般是不会变化的,所以内置在DNS服务器里面。

     

     

     

    三、递归查询和迭代查询 

      递归查询的DNS会替发起请求的用户客户端完成一系列的DNS查询,直到获取了最终结果后,返回给查询客户端。

      迭代查询过程中,各级DNS都把自己知道的信息反馈给客户端,所有的查询过程都由发起请求的客户端自己完成。

     (一)递归查询
      1、栗子一
    递归查询示意图

      递归查询解析过程:
      Q1:用户向Local DNS发起递归请求,查询xxx.abc.com。
      Q2:Local DNS向abc.com的二级域名DNS服务器发起请求,查询xxx.abc.com。
      A1:二级域名DNS返回Local DNS一条CNAME记录,同时返回该CNAME对应域名的ns记录,指向实际解析服务器。
      Q3:Local DNS向实际解析服务器发起请求,查询xxx.yyy.abc.com
      A2:实际解析服务器根据来源地址(注意是Local DNS的IP)和线路可用情况,返回对应的A记录。
      A3:Local DNS将获取到的CNAME和A记录信息反馈给终端用户。

     
      2、栗子二
      递归 DNS(也称本地 DNS 或者缓存 DNS)用于域名查询。递归 DNS 会迭代权威服务器返回的应答,直至最终查询到的 IP 地址,将其返回给客户端,并将请求结果缓存到本地。

      对用户发出的域名解析请求,递归 DNS 必须给出一个最终的 IP 地址结果。完整的递归DNS 查询流程需要 DNS 服务器从根域名 “.” 服务器,顶级域名服务器(例如“.com”),一级域名服务器(例如“example.com”)等一级一级递归查询,直到最终找到权威服务器取得结果,并返回给客户。同时,递归服务器根据域名 TTL,缓存查询结果,便于相同域名重复查询。递归 DNS 的访问过程如下图所示(递归 DNS 在图中表示为 Local DNS):

     
     解析过程
     
     
      (二)迭代查询
    迭代查询示意图

      迭代查询解析过程:
      Q1:用户向Local DNS发起递归请求,查询xxx.abc.com。
      A1:Local DNS反馈用户客户端,可以向二级域名DNS服务器进行查询。
      Q2:用户向abc.com的二级域名DNS服务器发起请求,查询xxx.abc.com。
      A2:二级域名DNS返回用户客户端一条CNAME记录,同时返回该CNAME对应域名的ns记录,指向实际解析服务器
      Q3:用户客户端向实际解析服务器发起请求,查询xxx.yyy.abc.com
      A3:实际解析服务器将A记录信息反馈给终端用户。

      上述步骤中,简化了Local DNS获取二级域名DNS服务器信息的过程,可能是通过DNS本身缓存的域名信息,或者向上一级/根域名服务器请求获取。

      对于互联网用户,配置的用于互联网域名解析的DNS一般都支持递归查询,客户端发起DNS请求时,一般也默认采用递归查询请求。只有当DNS明确不支持或者客户端明确要求非递归查询时,才会通过迭代查询进行解析。






    参考: http://www.ruanyifeng.com/blog/2016/06/dns.html
        https://www.jianshu.com/p/93e726c292c7
        https://www.alibabacloud.com/help/zh/doc-detail/60303.htm
  • 相关阅读:
    python核心编程第五章练习-5.17-随机序列
    python核心编程第五章练习-5.11-最大公约数和最小公倍数
    微信机器人之PC微信hook
    PC微信获取登录二维码
    PC微信读取微信好友列表(联系人)
    验证码识别之二值化
    基于决策树的简单验证码识别
    基于朴素贝叶斯识别简单验证码
    PIL库的简单操作
    knn识别简单验证码
  • 原文地址:https://www.cnblogs.com/lulin1/p/10062615.html
Copyright © 2011-2022 走看看