DNS解析过程

1.检查浏览器缓存中是否缓存过该域名对应的IP地址

用户通过浏览器浏览过某网站之后,浏览器就会自动缓存该网站域名对应的IP地址,
当用户再次访问的时候,浏览器就会从缓存中查找该域名对应的IP地址,
因为缓存不仅是有大小限制,而且还有时间限制(域名被缓存的时间通过TTL属性来设置),
所以存在域名对应的IP找不到的情况。
当浏览器从缓存中找到了该网站域名对应的IP地址,那么整个DNS解析过程结束,
如果没有找到,将进行下一步骤。
对于IP的缓存时间问题,不宜设置太长的缓存时间,
时间太长,如果域名对应的IP发生变化,那么用户将在一段时间内无法正常访问到网站,
如果太短,那么又造成频繁解析域名。

2.如果在浏览器缓存中没有找到IP,那么将继续查找本机系统是否缓存过IP

如果第一个步骤没有完成对域名的解析过程,
那么浏览器会去系统缓存中查找系统是否缓存过这个域名对应的IP地址,
也可以理解为系统自己也具备域名解析的基本能力。
在Windows系统中,可以通过设置hosts文件来将域名手动绑定到某IP上,
hosts文件位置在C:/Windows/System32/drivers/etc/hosts。
对于普通用户,并不推荐自己手动绑定域名和IP,
对于开发者来说,通过绑定域名和IP,可以轻松切换环境,可以从测试环境切换到开发环境,方便开发和测试。
在XP系统中,黑客常常修改他的电脑的hosts文件,将用户常常访问的域名绑定到他指定的IP上,
从而实现了本地DNS解析,导致这些域名被劫持。
在Linux或者Mac系统中,hosts文件在/etc/hosts,修改该文件也可以实现同样的目的。

3.向本地域名解析服务系统发起域名解析的请求

如果在本机上无法完成域名的解析,那么系统只能请求本地域名解析服务系统进行解析,
本地域名系统LDNS一般都是本地区的域名服务器,
比如你连接的校园网,那么域名解析系统就在你的校园机房里,
如果你连接的是电信、移动或者联通的网络,那么本地域名解析服务器就在本地区,由各自的运营商来提供服务。
对于本地DNS服务器地址,Windows系统使用命令ipconfig就可以查看,
在Linux和Mac系统下,直接使用命令cat /etc/resolv.conf来查看LDNS服务地址。
LDNS一般都缓存了大部分的域名解析的结果,当然缓存时间也受域名失效时间控制,
大部分的解析工作到这里就差不多已经结束了,LDNS负责了大部分的解析工作。

4.向根域名解析服务器发起域名解析请求

本地DNS域名解析器还没有完成解析的话,那么本地域名解析服务器将向根域名服务器发起解析请求。

5.根域名服务器返回gTLD域名解析服务器地址

本地DNS域名解析向根域名服务器发起解析请求,
根域名服务器返回的是所查域的通用顶级域(Generic top-level domain,gTLD)地址,
常见的通用顶级域有.com、.cn、.org、.edu等。

6.向gTLD服务器发起解析请求

本地域名解析服务器向gTLD服务器发起请求。

7.gTLD服务器接收请求并返回Name Server服务器

gTLD服务器接收本地域名服务器发起的请求,并根据需要解析的域名,找到该域名对应的Name Server域名服务器,
通常情况下,这个Name Server服务器就是你注册的域名服务器,
那么你注册的域名的服务商的服务器将承担起域名解析的任务。

8.Name Server服务器返回IP地址给本地服务器

Name Server服务器查找域名对应的IP地址,将IP地址连同TTL值返回给本地域名服务器。

9.本地域名服务器缓存解析结果

本地域名服务器缓存解析后的结果,缓存时间由TTL时间来控制。

10.返回解析结果给用户

解析结果将直接返回给用户,用户系统将缓存该IP地址,缓存时间由TTL来控制,至此,解析过程结束。

DNS解析过程分析

基本概念

域名解析记录主要分为A记录、MX记录、CNAME记录、NS记录以及TXT记录。

  • A记录:A代表的是Address,用来指定域名对应的IP地址,
    比如将map.baidu.com指定到180.97.34.157,
    将zhidao.baidu.com指定到180.149.131.245,
    A记录允许将多个域名解析到一个IP地址,但不允许将一个域名解析到多个IP地址上。
  • MX记录:MX代表的是Mail Exchage,就是可以将某个域名下的邮件服务器指向自己的Mail Server,
    如baidu.com域名的A记录IP地址是180.97.34.157,
    如果将MX记录设置为180.97.34.154,即xxx@baidu.com的邮件路由,
    那么DNS会将邮件发送到180.97.34.154所在的服务器,
    而正常web请求仍然会解析到A记录的IP地址180.97.34.157。
  • CNAME记录:CNAME指的就是Canonical Name,也就是别名解析,
    可以将指定的域名解析到其他域名上,而其他域名就是指定域名的别名,整个解析过程称为别名解析。
    比如将baidu.com解析到shifen.com,shifen.com就是baidu.com的别名。
  • NS记录:就是为某个域名指定了特定的DNS服务器去解析。
  • TXT记录:为某个主机名或者域名设置特定的说明,
    比如为baidu.com设置的的TXT记录为“baidu desc”,这个TXT记录为baidu.com的说明

命令查看

nslookup

上图中Non-authoritative answer表示解析结果来自非权威服务器,
也就是说这个结果来自缓存,并没有完全经历全部的解析过程,
从某个缓存中读取的结果,这个结果存在一定的隐患,比如域名对应的IP地址已经更变。
这只是一个快捷的解析结果,如果需要浏览全部的解析过程,那么可以使用dig命令来查看解析过程。

dig

分析上图DNS解析过程,我们可以看出:

1.从本地DNS域名解析服务器获取到13个根DNS域名服务器(.)对应的主机名

2.从13个根域名服务器中的其中一个(这里是g.root-servers.net)获取到顶级com.的服务器IP(未显示)和名称

3.向com.域的一台服务器192.52.178.30(k.gtld-servers.net)请求解析,
它返回了baidu.com域的服务器IP(未显示)和名称,百度有四台顶级域的服务器

4.向百度的顶级域服务器112.80.248.64(ns3.baidu.com)请求www.baidu.com,
它发现这个www有个别名,而不是一台主机,别名是www.a.shifen.com

一般情况下,DNS解析到别名就停止了,返回了具体的IP地址,
如果想看到具体的IP地址,可以进一步对别名进行解析,
解析结果如下:

上图是直接对www.wshifen.com的解析结果,
因为发现对 www.a.shifen.com解析后,发现别名是 www.wshifen.com
这时候看到最后的解析结果是103.235.46.39
在解析别名的过程中,可以发现shifen.com和baidu.com都是指定了相同的域名解析服务器。
以上是一个域名的解析过程,最后的解析结果和一开始的使用nslookup的结果一致。

参考资料

DNS浅谈

DNS解析全过程分析的更多相关文章

  1. DNS解析全过程及原理

    DNS解析原理及过程. 当用户访问我们网站一个网页时,他需要经过以下步骤: 1)找到这个网页的存放服务器: 2)服务器将用户的请求信息接入: 3)服务器通过文件路径(URL)查找用户请求网页: 4)用 ...

  2. DNS解析全过程

    浏览器输入一个网址.要訪问该网址必须由DNS解析出相应的server的IP地址. 对于大型站点来说,一个站点相应多台server.那么DNS解析出的可能是进行负载均衡的server的IP地址.DNS解 ...

  3. DNS解析全过程详解

    1.Chrome浏览器 会首先搜索浏览器自身的DNS缓存(缓存时间比较短,大概只有1分钟,且只能容纳1000条缓存),看自身的缓存中是否有www.linux178.com 对应的条目,而且没有过期,如 ...

  4. 分析DNS解析时间

    提高网页的打开速度,一般地我们会选择使用CDN,利用“就近原则”让用户在最短的时间内获取到服务器资源,实际应用当中采用CDN的方式提高网站访问速度的效果也是最明显的.这也就是为什么国外的空间打开速度远 ...

  5. 双网卡双线路DNS解析分析

    在企业网络维护过程中我们经常会遇到这样或那样的奇怪问题,而很多问题需要有深厚的理论知识才能解决.而随着网络的飞速发展越来越多的中小企业开始尝试通过多条线路来保证网络的畅通,一方面双网卡下的双线接入可以 ...

  6. 在K8S集群中使用busybox-dig镜像,来作DNS解析分析

    以前,判断K8S里的DNS功能是否正常时,得想很多办法. 如果有了busybox-dig镜像,则作这事就简单多了. 如下命令,直接部署 kubectl run busybox -it --image= ...

  7. DNS解析过程详解

    先说一下DNS的几个基本概念: 一. 根域 就是所谓的“.”,其实我们的网址www.baidu.com在配置当中应该是www.baidu.com.(最后有一点),一般我们在浏览器里输入时会省略后面的点 ...

  8. 转载:DNS解析过程详解

    2015-09-20 此好文是转载,如有侵权联系我,立马删掉 DNS的几个基本概念: 一. 根域 就是所谓的“.”,其实我们的网址www.baidu.com在配置当中应该是www.baidu.com. ...

  9. (转)DNS解析过程详解

    DNS解析过程详解 原文:http://blog.csdn.net/crazw/article/details/8986504 先说一下DNS的几个基本概念: 一. 根域 就是所谓的“.”,其实我们的 ...

随机推荐

  1. TCP/IP五层层次模型

    TCP/IP层次模型共分为五层:应用层HTTP.传输层TCP.网络层IP.数据链路层Data-link.物理层physical.·         应用层-应用层是所有用户所面向的应用程序的统称.IC ...

  2. linux POSIX 信号量介绍

    信号量一.什么是信号量信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)使用.多线程可以同时运行多个线程函数完成功能,但是对于共享数据如果不加以锁定,随意改变共享数据的值会发生 ...

  3. ssh-keygen -t rsa -b 4096 -C "邮箱"

    ssh-keygen -t rsa -b 4096 -C "邮箱":这条命令的目的是为了让本地机器ssh登录远程机器上的GitHub账户无需输入密码.将这条命令分解: 1.ssh- ...

  4. C++ code:数值计算之矩形法求解积分问题

    积分的通常方法是将区域切割成一个个的小矩形,然后求这些小矩形的和.小矩形切割得越细,计算精度就越高,可以将切割小矩形的数量作为循环迭代变量,将前后两个不同精度下的小矩形和之差,作为逼近是否达到要求的比 ...

  5. 步步为营-42-通过DataAdapter实现增删查改

    说明:通过DataAdapter或者dataset连接数据库,实现对数据增删改查操作. 以前写过一篇步步为营-23-通过GridView实现增删改 1:SqlDataAdapter  DataTabl ...

  6. F 多重背包 判断能否刚好装满

    Description 有n种不同大小的数字,每种各个.判断是否可以从这些数字之中选出若干使它们的和恰好为K. Input 首先是一个正整数T(1<=T<=100)接下来是T组数据每组数据 ...

  7. GItlab作CI/CD时,想快点,有啥招?

    如果希望.m2文件有存缓,或是不要每次从dockerhub上找镜像(有的是本地镜像,远程没有的) 那么,gitlab-runner的config.toml初步优化文件如下: concurrent = ...

  8. POJ 3579 3685(二分-查找第k大的值)

    POJ 3579 题意 双重二分搜索:对列数X计算∣Xi – Xj∣组成新数列的中位数 思路 对X排序后,与X_i的差大于mid(也就是某个数大于X_i + mid)的那些数的个数如果小于N / 2的 ...

  9. rabbitmq安装及基本操作(含集群配置)

    一.rabbitmq的安装 因为rabbitmq是基于 erlang语言开发,所有要先安装erlang 1.安装erlang 这里我下载的是19.2的版本,地址为https://www.erlang. ...

  10. Python urllib Request 用法

    转载自:https://blog.csdn.net/ywy0ywy/article/details/52733839 python2.7 httplib, urllib, urllib2, reque ...