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. jquery学习集合

    跳转网页:$(location).attr('href', '/index');

  2. Android用户界面开发:TabHost

    TabHost是整个Tab的容器,包括两部分,TabWidget和FrameLayout.TabWidget就是每个tab的标签,FrameLayout则是tab内容.TabHost的二种实现方式:第 ...

  3. 04-Bootstrap的插件

    1.下拉菜单 代码如下: <div class="dropdown"> <button class="btn btn-default dropdown- ...

  4. Angular2学习(一)

    Angular2的新特性: angular2的核心: 模块.组件.元数据.模板.数据绑定.服务.指令.依赖注入.模块. 组件:层层嵌套,形成组件树.父子组件沟通有输入和输出接口 组件包含JavaScr ...

  5. ERP完善合同起草(二十八)

    前端的代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CRMCont ...

  6. poj 2406 求字符串中重复子串的个数

    Sample Input abcdaaaaababab.Sample Output 1 //1个abcd4 //4个a3 //3个ab #include<stdio.h> #include ...

  7. kafka 数据存储结构+原理+基本操作命令

    数据存储结构: Kafka中的Message是以topic为基本单位组织的,不同的topic之间是相互独立的.每个topic又可以分成几个不同的partition(每个topic有几个partitio ...

  8. ctsc2017

    就看了几道题目.. day1t1 良心题啊.. 经过一波转化就变成了求某一个数后面有几个比它大的 并且是有长度的(固定的) 然后这样暴力是nlogn的 再写个后面的部分分大概就有70了 其实100也很 ...

  9. 关于tomcat性能优化

    前言 关于 Tomcat 性能调优,一直以来就是运维面试的一个重要话题.今天我们就简单聊聊 Tomcat 如何进行性能优化? 首先声明,我不会去说 Tomcat 是什么,内部结构,原理什么的.我不懂. ...

  10. P3144 关闭农场 并查集 反向

    FJ和他的奶牛们正在计划离开小镇做一次长的旅行,同时FJ想临时地关掉他的农场以节省一些金钱. 这个农场一共有被用M条双向道路连接的N个谷仓(1<=N,M<=3000).为了关闭整个农场,F ...