DNS详解

什么是DNS?

把域名翻译成IP地址的软件称为域名系统,即DNS。
DNS 是计算机域名系统 (Domain Name System 或 Domain Name Service) 的缩写,它是由域名解析器和域名服务器组成的。通过它可以把你需要访问的网址找到然后把信息送到你电脑上。
DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过域名,最终得到该域名对应的IP地址的过程叫做域名解析(或主机名解析)。
DNS协议运行在UDP协议之上,使用端口号53。在RFC文档中RFC 2181对DNS有规范说明,RFC 2136对DNS的动态更新进行说明,RFC 2308对DNS查询的反向缓存进行说明。
再次强调DNS 是域名系统(Domain Name System) 的缩写,它的功能是将域名解析成ip。我们日常上网浏览网页时,在浏览器(如:IE)的地址栏中常输入的是网站的网址,其实网址这个概念在专业的角度称为域名,即:网址=域名。
而域名主要是给我们人去使用的。我们知道,在网络上,计算机与计算机之间的寻址方式是靠的ip地址。IP地址是四段数字组成的,而我们人去记忆不同网站的ip地址,这种数字化的地址很容易记错或记混,我们人的思维模式更习惯于记忆名称,如:百度、163、QQ等网站,我们可以很轻松的写出它们的网址。所以,为了方便人与主机之间的沟通,在internet上,就需要有一台服务器,记录着网站域名(即网址)与服务器ip的对应关系。类似于表格,当我们上网时,在浏览器地址栏中输入网址,客户端则会向DNS服务器发出询问请求,DNS服务器通过查表得到对应服务器的IP,返回给客户端,客户端再以这个ip地址寻址到达服务器,申请访问web页面。所以,一次上网的过程中,客户端其实会向外发送两次请求,第一次是询问DNS,查表得到web服务器的ip,第二次是按照所获得的ip,寻址找到web服务器请求访问页面。DNS上查表的过程,我们用更专业的术语表示就叫做解析。所以DNS服务器又称为域名解析服务器,其功能就是将域名解析成ip的。
以上过程我们可以想象成生活中的手机电话簿功能:我们可以记住每个朋友的姓名,但我们是记不住每个朋友的手机号的,这就需要用电话簿记录各个朋友的手机号,当我们需要给某个朋友打电话时,一定会先查电话簿,查到电话后,即可拨号打电话了。这里的电话簿的功能就相当于DNS的功能。

DNS命名空间

既然DNS可以负责全球网络的域名解析工作,那么全球的网络必然或有一套严谨的命名规范,那就是DNS命名空间的功能。
我们假设将全球的网络资源都放到一个总的虚拟的域之下,这个总域我们称为根域即.域(点域)。在根域之下,划分为多个二级域,这些域被称为顶级域,顶级域是不允许企业或个人直接申请的,顶级域是由全球的网络维护商按照国家、地区、行业等分配的,如:.cn.表示中国地区,.hk.表示香港,.org.表示国际组织,.com.表示工商企业的,.net.表示网络提供商等等。因为所有域都在根域(即.域)之下,所以,一般书写时我们可以把最后的.省略,如:.com .cn等
作为企业或个人,只可以在顶级域下申请子域,申请到子域后即可在子域下指定自己的网络层次了。如下图:
在这里插入图片描述
图中,最右侧,假设有个企业在.com顶级域下申请了子域pp,该企业下有一台主机,主机名叫www,所以,它的完整域名就是把域的线路由下向上写上去,之间用.做分隔,即:www.pp.com;图中中间部分,有另一个企业在.cn下注册了子域rzz,rzz下又设置了一个子域bbs,在bbs下有四台主机,那么它们的完整名字即是:www.bbs.rzz.cn等。因为整个域名空间都是在虚拟的域体系之下,所以,每个主机的主机名也都是虚拟的,即是在网络环境中的名字(类似于每个人有真名,但是平时上网时可以使用网名一样,都是虚拟的名字)。只是,在网络上,各企业已经习惯使用www的主机名作为网站服务器的名字,所以大多数网站的域名都是www.XXX.XXX的格式的。

命名相关概念:

先来分析一下域名的格式,我们知道上网时在浏览器输入域名后,浏览器会自动在域名前写上http://字样,即指定了通信协议,这种协议+地址的格式我们称为url。
url 统一资源定位符,即协议+完整网络路径,如:http://www.baidu.com。
其实我们日常中常说的链接,专业称谓就是url。如:我们会给朋友要的某网店链接,某电影的下载链接等,这些都是url。
全称域名(FQDN) 其实我们日常中说的域名(如www.baidu.com),严格来讲并不是标准的叫法。在专业的称谓中,一个完整的网址应该称为全称域名,简写FQDN(英文单词为全质量的域名)。而FQDN规定最多由255个字符组成。
域名 标准定义中,域名的概念只是指所在域部分,如:baidu.com。
主机名(又称NetBios名) FQDN中的www部分称为主机名部分。规定主机名最多16个字符,但最后一个字符固定为.(点),所以只有前15个字符可自定义。
小结,可见FQDN是由主机名+域名组成。

DNS解析原理

客户端解析顺序

首先来介绍一下客户端的申请解析顺序。作为客户端,在上网时会用到DNS解析,但是可以想象到,如果有几个网站,我们经常访问,而每次都需要访问公网的DNS做解析,势必会影响效率。那么,如果本机内有一个文件,记录下所有常用网站的ip,每次上网就可以不必再询问DNS了,这就是静态解析文件的作用。
在Linux中,静态解析文件是/etc/hosts。所以,Linux系统的解析顺序是:当有网络访问需要做解析时,Linux先查看/etc/hosts文件中有无相关记录,若有,就按该记录执行了,不再去询问DNS服务器;若此文件中无相关记录,则再去询问DNS服务器做解析。
对比静态解析文件,DNS解析又被称为动态解析。

DNS支持的解析模式

因为DNS是负责域名与ip对应关系记录的,所以,客户端就会有两种询问情况:一种是客户端拿着域名,请求DNS给查询出ip;另一种是客户端拿着ip,请求DNS给查询出对应的域名。针对这两种情况,在DNS中定义其为两种解析模式:
正向解析:客户端拿着域名,请求DNS解析,获取到ip。
反向解析:客户端拿着ip,请求DNS解析,获取到域名。在这里插入图片描述

DNS解析过程

我们可以想象到,客户端请求解析时,会询问DNS服务器,但全球有那么多台服务器,一台DNS上是不可能记录全球所有服务器的ip的。所以,在全球网络中,DNS的解析过程有一套完整的机制。首先来看一下下图:
在这里插入图片描述
如图,假设一台主机,网卡配置中指向了一台DNS服务器,当客户机想要访问www.microsoft.com这个域名时,会向网卡所指向的DNS服务器发出询问,若该dns有相关记录,就会立即回复。但若这台dns服务器无相关记录,则它会向全球的根域(即.)的dns服务器发出询问,根域服务器收到后,并不会返回最终结果,而是,分析域名请求,将域名所在的顶级域(即.com)的dns服务器地址反馈回去(如图中第2步)。则客户机网卡指向的那台dns服务器,再向.com顶级域的dns服务器发出请求,顶级域服务器同样不给最终答案,返回子域的dns服务器地址(图中第3步)。客户端所指向的dns再向子域的dns服务器发送请求,获取到最终答案(图中第4步)。
客户端所指向的dns收到解析结果后,先放入缓存中,以备之后又其他客户端再次询问,然后再回复给客户端。
以上便是在全球范围内的解析过程,值得介绍的是,全球的根域dns服务器共有13台,这13台的ip是公开的,在安装dns软件包后,会自动写到相关配置文件中,以便解析时使用。
另外,在以上过程中,我们可以看到作为客户端,只需要发送请求,然后最后接收结果,这种工作模式成称为递归模式。即递归模式是指只负责发送请求和接收最后结果,其他步骤都不参与。而客户端指向的dns服务器,它会参与到解析过程中的每一步,它会去询问根域、询问顶级域、询问子域,这种参与到每一步的工作模式称为迭代模式。所以总结可知,查询模式有两种:递归查询、迭代查询。一般客户端都工作在递归模式下,dns服务器都工作在迭代模式下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值