DNS解析全过程分析

Wesley13
• 阅读 1004

DNS解析过程

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

DNS解析全过程分析

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

dig

DNS解析全过程分析

分析上图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地址,可以进一步对别名进行解析, 解析结果如下:

DNS解析全过程分析

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

参考资料

DNS浅谈

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
DNS解析过程
DNS解析过程是重点也是难点,下面我按自己的理解一步步来解释,可能有错误之处,欢迎指正。以下步骤中,将DNS缓存中存在域名对应IP则DNS解析成功,用户计算机将直接访问服务器,若DNS服务器缓存中不存在域名对应IP,则自动进入下一步。1.浏览器缓存 当用户通过浏览器访问某域名时,浏览器首先会在自己的缓存中查找是否有该域名对应的IP地址
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这