DNS工作原理及过程讲解

0x00前言

       想必大家都知道当今上网浏览web页面或访问其他服务一般都是用域名来访问的,这是由于IP地址不容易记住而且使用不方便,这时候科学家们就发明了域名,从而衍生出了各种大大小小的域名解析服务器(DNS,Domain Name Server)。
       那么域名解析过程视怎么来实现的呢?我刚学习的时候也是特别好奇,如今我们来一起分别从客户机和服务器的角度来解密整个过程吧~
       在讲解之前,我们先来简单了解一下域名解析的记录类型~

类型 名字 描述
A记录 正向解析记录 通过域名解析到服务器的IP地址
CNAME记录 别名 通过起别名也可指向此IP地址
PTR记录 反向解析记录 知道IP地址获取域名
MX记录 邮件交换记录 指定负责处理发往收件人域名的邮件服务器
NS记录 域名服务器记录 指定该域名由哪个DNS服务器来进行解析

0x01客户机角度DNS工作过程

       一般从用户上网的角度来说,域名解析是有一定的顺序的,它分别是本地DNS缓存–>本地hosts文件–>本地DNS服务器

本地DNS缓存

       本地DNS缓存一般指的是浏览器的缓存,在访问一个域名时,本地浏览器缓存是解析域名的第一步,如果没查询到记录则进行下一步~ 在这里我么可以使用两条命令对本地缓存进行操作

//在cmd命令行
ipconfig /displaydns  //查看本地缓存
ipconfig /flushdns  //刷新dns缓存

本地hosts文件

       如果上一步没有查询到记录,则会查询系统的hosts文件,这个文件在哪里呢?就在C:\Windows\System32\drivers\etc\hosts,这个文件一般是空的(里面是使用方法的注释),这时候我们可以对该文件施展一些骚操作~

//记得使用管理员权限打开cmd
type C:\Windows\System32\drivers\etc\hosts  //查看文件内容
echo 127.0.0.1 www.baidu.com >> C:\Windows\System32\drivers\etc\hosts  //把百度的dns解析指向本机,然后浏览器就访问了本机的80端口
此方法可以控制上网行为,甚至可以屏蔽一些广告弹窗~
修改了hosts文件,记得重新启动浏览器,因为浏览器运行之后已经把hosts文件加载到了内存当中

ps:linux系统hosts文件的路径是:/etc/hosts

本地DNS服务器

       如果前两步都没结果,系统会请求本机配置的DNS服务器,这个配置一般用户都是默认从路由器的DHCP服务(分配内网IP地址)获取而来,也可以自行配置,比如114.114.114.114和8.8.8.8(明明是远程,为什么叫本地?一般就是这个叫法而已),那么问题来了,当服务器接收到域名解析请求时该作做何反应?继续往下看~

服务器角度DNS工作过程

老规矩,我们在讲解之前我们简单了解以下域名的组成结构~

www.baidu.com.
//从右往左来看,有没有发现有什么不同?没错,多了个点~这也是默认隐藏的,它有什么用?待会就明白了~
//首先最后的点为点域;“com”为顶级域名;“baidu”为一级域名;“www”为主机头,也就是主服务器的名字
//譬如baike.baidu.com这种的“baike”为二级域名,指向的也就是另一台服务器
ps:当你注册了一个域名,则你可无限使用二级域名,三级域名等等

       言归正传,我们开始说一下服务器收到域名解析请求之后所做的工作~这个过程也是分为几个步骤,分别是DNS高速缓存–>本地区域解析文件–>转发器–>根服务器

DNS高速缓存

       这是dns服务器收到dns请求所做的第一步,一台服务器部署了dns服务之后,它每次进行dns解析都会把记录放在缓存里,等到再次收到同样请求时,可以从缓存中查询结果反馈给客户机,这样可以提高效率~

本地区域解析文件

       在配置完一台dns服务器之后,可以向服务器添加本地区域解析文件,类似于上面的hosts文件,它可以添加百度或者QQ的域名指向任何地址,不过这一般发生在企业里部署的dns服务器,它可以控制员工的上网行为,比如不想让员工上QQ、逛淘宝都可以实现。唯一的不同就是服务器查询到结果之后是反馈给用户的。

转发器

       转发器一般也配置在企业部署的dns服务器上,当前两步不满足查询条件时,将请求转发到公网的一台dns服务器代为解析。


       看到这里,肯定会有人有疑问,企业里为什么要单独部署一台dns服务器呢?这里说明一下,公网中的dns服务器一般第一步检查高速缓存,第二步直接去请求根域(下一节说明)。回到刚才的问题上,原因之一呢就是可以通过本地区域解析文件来约束上网行为,原因之二就是由于NAT配置的缺陷,使得企业内网用户无法通过公司的域名去访问公司发布的web等服务,因此需要配置dns服务器单独为公司内网解析公司发布的服务器地址,原因之三是企业中可能有域控等其他地方也需要dns服务器(此处偏离本文主题,不做详解)。

访问根服务器

       重头戏终于要来了,如果前三步未能获取到用户请求的结果,则会来到这一步。有了解过相关知识的应该知道,全球范围内共有13台根服务器,这里附上一张图来模拟一下:
DNS工作原理及过程讲解_第1张图片
首先是上面的13台根服务器,由于域名后默认隐藏了“.”,它标志着首先寻找点域服务器,任何一台点域服务器可提供顶级域名服务器信息,比如说要解析www.baidu.com,点域服务器检查域名发现点前面为com,则会反馈给本地dns服务器com域服务器的地址,本地dns服务器再去请求com域服务器,继续检查域名,发现com前面是baidu,然后反馈给本地服务器负责baidu.com的服务器地址,本地服务器也会再次请求baidu.com域服务器,这时候就可以得到www.baidu.com的IP地址了,同时也可以请求像baike.baidu.com、wenku.baidu.com等二级域名的地址~
ps:企业使用Windows server服务器搭建dns服务器时,13台根域的地址已经内置了dns服务中~

0x02总结

       DNS的工作原理到这就结束了,顺便提一下,发出dns请求时,如果发送给本地服务器并获得应答,这种情况叫做递归查询;如果没有获得应答并且去访问根服务器的过程,叫做迭代查询~

你可能感兴趣的:(网络)