zoukankan      html  css  js  c++  java
  • DNS解析过程

    1.DNS解析过程

    1.首先由浏览器查询自身的DNS缓存,如果由就直接访问

    2.如果没有,则查询本机操作系统的 host文件(里面存着ip->域名的映射)

    3.如果还没有,则主机向本地DNS服务器(ISP服务器,或自己手动设置的DNS服务器,如谷歌的8.8.8.8和阿里云的223.5.5.5都是DNS服务器)发起查询。

    -----------------------------------------------------------------------------------------------

    4.本地DNS服务器收到请求后,会查询自身的DNS缓存,如果缓存中没有,则向根DNS服务器发起请求(根DNS服务器的IP地址存储在每一个DNS服务器的磁盘中)。

    5.根服务器拿到这个请求后,知道该域名是com.这个顶级域名下的,所以就会返回com域中的NS记录。(详解参见博客:域名解析中A记录、CNAME、MX记录、NS记录的区别和联系

    6.然后本地DNS向其中的一台顶级DNS服务器再次发起请求,com域的顶级DNS服务器发现这个请求是baidu.com这个域的,然后返回baidu.com域的NS记录。 

    7.本地DNS不厌其烦的再次向baidu.com这个域的权威服务器发起请求,baidu.com收到之后,查了下发现www不是一台主机,而是一个CNAME(别名)。这时dns.bai.com会返回一个别名www.a.shifen.com以及这个别名对应的DNS服务器地址ns2.a.shifen.com。

    8.本地DNS再次发起请求,DNS服务器接到请求后,发现www.a.shifen.com对应的是一个A记录(即IP),就把这个IP返回。 

    9.最后本地DNS拿到了IP之后,将其返回给了主机客户端,并且把这个IP和域名的映射保存在缓存中,当下次再有对www.baidu.com的DNS请求就可以直接返回了(即上面的第三步)。

    (参考:http://blog.chinaunix.net/uid-28216282-id-3757849.html

     

    2.迭代查询和递归查询的区别

    主机到本地DNS服务器的查询属于递归查询。(本地服务器会帮主机进行DNS查询,这一步对主机是透明的。因此是属于递归)

    本地DNS服务器到其他的查询属于迭代查询。(迭代的查询IP)

    分割线之前的查询由用户主机发起,属于递归查询;之后的查询由本地DNS服务器发起,属于迭代查询

    3.域名服务器的层级

     

    (权限域名服务器也叫权威域名服务器)

    根域名服务器:最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址。不管是哪一个本地域名服务器,若要对因特网上任何一个域名进行解析,只要自己无法解析,就首先求助根域名服务器。所以根域名服务器是最重要的域名服务器。假定所有的根域名服务器都瘫痪了,那么整个DNS系统就无法工作。需要注意的是,在很多情况下,根域名服务器并不直接把待查询的域名直接解析出IP地址,而是告诉本地域名服务器下一步应当找哪一个顶级域名服务器进行查询。

    顶级域名服务器:负责管理在该顶级域名服务器注册的二级域名。

    权限域名服务器:负责一个“区”的域名服务器。

    本地域名服务器:本地服务器不属于下图的域名服务器的层次结构,但是它对域名系统非常重要。当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。

  • 相关阅读:
    使用C#调用C++类库
    C# IntPtr类型
    C# 调用C++ dll string类型返回
    C# try、catch、finally语句
    C语言 char *、char []、const char *、string的区别与相互转换
    C# 字符串string与char数组互转!
    C#如何调用C++(进阶篇)
    Springboot通过过滤器实现对请求头的修改
    【spring事务】
    命令行参数库:McMaster.Extensions.CommandLineUtils【转】
  • 原文地址:https://www.cnblogs.com/lanqi/p/8034119.html
Copyright © 2011-2022 走看看