详解DNS协议!

前言

想要不同的计算机之间进行通信,是需要知道对方的IP的,可是为什么我们平时很少用到ip,而是用到域名这种东西呢? 其实主要是为了方便阅读,让我们记住一串的ip还不如记域名来的方便。 当我们访问域名的时候,其实有个叫做DNS服务器帮我们完成了域名到IP的解析。

一、dns是什么

详解DNS协议!_第1张图片

 

dns是什么 这样是不是可以很好的理解dns的含义呢?域名系统采用类似目录树的等级结构。域名服务器为客户机/服务器模式中的服务器方,它主要有两种形式:主服务器和转发服务器。将域名映射为IP地址的过程就称为“域名解析”。在Internet上域名与IP地址之间是一对一(或者多对一)的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。 DNS 命名用于 Internet等 TCP/IP 网络中,通过用户友好的名称查找计算机和服务。当用户在应用程序中输入 DNS 名称时,DNS 服务可以将此名称解析为与之相关的其他信息,如 IP 地址。因为,你在上网时输入的网址,是通过域名解析系统解析找到了相对应的IP地址,这样才能上网。其实,域名的最终指向是IP。大家都知道,当我们在上网的时候,通常输入的是网址,其实这就是一个域名,而我们计算机网络上的计算机彼此之间只能用IP地址才能相互识别。域名(网址)只是相当与门牌号,只是为了方便记忆而增加的。

二、域名

1.域名结构

在了解DNS服务器之前,需要先了解因特网上的域名空间结构,具体如下图所示:

详解DNS协议!_第2张图片

2.域名服务器

详解DNS协议!_第3张图片

 

是进行域名和与之相对应的IP地址转换的服务器。 也就是说,域名服务器是用来对域名进行管理的,通常是由多个DNS服务器组成节点,对域名进行解析,指向你网站程序所放的服务器。 

3.域名解析

详解DNS协议!_第4张图片

 

1、首先客户端位置是一台电脑或手机,在打开浏览器以后,比如输入http://www.zdns.cn的域名,它首先是由浏览器发起一个DNS解析请求,如果本地缓存服务器中找不到结果,则首先会向根服务器查询,根服务器里面记录的都是各个顶级域所在的服务器的位置,当向根请求http://www.zdns.cn的时候,根服务器就会返回.cn服务器的位置信息。

2、递归服务器拿到.cn的权威服务器地址以后,就会寻问cn的权威服务器,知不知道http://www.zdns.cn的位置。这个时候cn权威服务器查找并返回http://zdns.cn服务器的地址。

3、继续向http://zdns.cn的权威服务器去查询这个地址,由http://zdns.cn的服务器给出了地址:202.173.11.10

4、最终才能进行http的链接,顺利访问网站。

5、这里补充说明,一旦递归服务器拿到解析记录以后,就会在本地进行缓存,如果下次客户端再请求本地的递归域名服务器相同域名的时候,就不会再这样一层一层查了,因为本地服务器里面已经有缓存了,这个时候就直接把http://www.zdns.cn的A记录返回给客户端就可以了。

三、查询方式

一、本地查询

主机保存有近期的DNS查询记录,这里面主要包含两块内容。一是hosts文件,文件保存在客户机系统盘中,文件路径是Windows/system32/drivers/etc/。另外一个是客户机的高速缓存,可以用ipconfig/displaydns查看。

如果主机发起DNS查询,首先查询hosts文件,然后在查询DNS缓存。如果hosts文件被恶意程序篡改,那么上网将异常,甚至还会打开不良网页。

二、直接查询

本地DNS服务器是192.168.16.1,这是一个家庭路由器,本地DNS缓存里也不会有相应的DNS记录,因为它并不负责解析http://qq.com。因此,本地DNS服务器必须将查询请求转发至转发器。这个转发器即家庭路由器WAN口内设置的DNS地址,一般会有主备两个。

三、迭代查询

转发器按照域名级别高低,先后查询根服务器、.com域服务器、http://qq.com域服务器,最终得到授权应答。这个查询过程即迭代查询。

四、递归查询

转发器将相应的查询结果返回至本地DNS服务器192.168.16.1,本地DNS服务器将查询结果返回至主机,最终得出http://qq.com的ns记录。

四、查询过程

解析域名的过程如下:

  • 首先搜索浏览器的 DNS 缓存,缓存中维护一张域名与 IP 地址的对应表
  • 若没有命中,则继续搜索操作系统的 DNS 缓存
  • 若仍然没有命中,则操作系统将域名发送至本地域名服务器,本地域名服务器采用递归查询自己的 DNS 缓存,查找成功则返回结果
  • 若本地域名服务器的 DNS 缓存没有命中,则本地域名服务器向上级域名服务器进行迭代查询
    • 首先本地域名服务器向根域名服务器发起请求,根域名服务器返回顶级域名服务器的地址给本地服务器
    • 本地域名服务器拿到这个顶级域名服务器的地址后,就向其发起请求,获取权限域名服务器的地址
    • 本地域名服务器根据权限域名服务器的地址向其发起请求,最终得到该域名对应的 IP 地址
  • 本地域名服务器将得到的 IP 地址返回给操作系统,同时自己将 IP 地址缓存起来
  • 操作系统将 IP 地址返回给浏览器,同时自己也将 IP 地址缓存起
  • 至此,浏览器就得到了域名对应的 IP 地址,并将 IP 地址缓存起

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

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

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

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

前两步都是在本机上完成的,所以没有在上面示例图上展示出来,从第三步开始,才正在地向远程DNS服务器发起解析域名的请求。

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

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

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

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

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

本地域名解析向根域名服务器发起解析请求,根域名服务器返回的是所查域的通用顶级域()地址。

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

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

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

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

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

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

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

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

10.返回解析结果给用户

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

这里对解析的步骤进行了一个简单的介绍分析,后面将通过命令行的形式来解析一个域名的具体解析过程。

五、域名缓存

在域名服务器解析的时候,使用缓存保存域名和IP地址的映射

计算机中DNS的记录也分成了两种缓存方式:

  • 浏览器缓存:浏览器在获取网站域名的实际 IP 地址后会对其进行缓存,减少网络请求的损耗
  • 操作系统缓存:操作系统的缓存其实是用户自己配置的 hosts 文件。

你可能感兴趣的:(python,android,nds,域名)