精华内容
下载资源
问答
  • DNS原理总结及其解析过程详解 1、域名系统概述         域名系统DNS(Domain Name System)是因特网使用的命名系统,用来把便于人们使用的机器名字转换成为IP地址。域名系统其实就是名字系统。为...

    DNS原理总结及其解析过程详解

    1、域名系统概述

            域名系统DNS(Domain Name System)是因特网使用的命名系统,用来把便于人们使用的机器名字转换成为IP地址。域名系统其实就是名字系统。为什么不叫“名字”而叫“域名”呢?这是因为在这种因特网的命名系统中使用了许多的“域(domain)”,因此就出现了“域名”这个名词。“域名系统”明确地指明这种系统是应用在因特网中。

            我们都知道,IP地址是由32位的二进制数字组成的。用户与因特网上某台主机通信时,显然不愿意使用很难记忆的长达32位的二进制主机地址。即使是点分十进制IP地址也并不太容易记忆。相反,大家愿意使用比较容易记忆的主机名字。但是,机器在处理IP数据报时,并不是使用域名而是使用IP地址。这是因为IP地址长度固定,而域名的长度不固定,机器处理起来比较困难。

            因为因特网规模很大,所以整个因特网只使用一个域名服务器是不可行的。因此,早在1983年因特网开始采用层次树状结构的命名方法,并使用分布式的域名系统DNS。并采用客户服务器方式。DNS使大多数名字都在本地解析(resolve),仅有少量解析需要在因特网上通信,因此DNS系统的效率很高。由于DNS是分布式系统,即使单个计算机除了故障,也不会妨碍整个DNS系统的正常运行。

            域名到IP地址的解析是由分布在因特网上的许多域名服务器程序共同完成的。域名服务器程序在专设的结点上运行,而人们也常把运行域名服务器程序的机器称为域名服务器。

            域名到IP地址的解析过程的要点如下:当某一个应用需要把主机名解析为IP地址时,该应用进程就调用解析程序,并称为DNS的一个客户,把待解析的域名放在DNS请求报文中,以UDP用户数据报方式发给本地域名服务器。本地域名服务器在查找域名后,把对应的IP地址放在回答报文中返回。应用程序获得目的主机的IP地址后即可进行通信。

            若本地域名服务器不能回答该请求,则此域名服务器就暂时称为DNS的另一个客户,并向其他域名服务器发出查询请求。这种过程直至找到能够回答该请求的域名服务器为止。此过程在后面作进一步讨论。


    2、因特网的域名结构

            由于因特网的用户数量较多,所以因特网在命名时采用的是层次树状结构的命名方法。任何一个连接在因特网上的主机或路由器,都有一个唯一的层次结构的名字,即域名(domain name)。这里,“域”(domain)是名字空间中一个可被管理的划分。

            从语法上讲,每一个域名都是有标号(label)序列组成,而各标号之间用点(小数点)隔开。

            如下例子所示:

            

            这是中央电视台用于手法电子邮件的计算机的域名,它由三个标号组成,其中标号com是顶级域名,标号cctv是二级域名,标号mail是三级域名。

            DNS规定,域名中的标号都有英文和数字组成,每一个标号不超过63个字符(为了记忆方便,一般不会超过12个字符),也不区分大小写字母。标号中除连字符(-)外不能使用其他的标点符号。级别最低的域名写在最左边,而级别最高的字符写在最右边。由多个标号组成的完整域名总共不超过255个字符。DNS既不规定一个域名需要包含多少个下级域名,也不规定每一级域名代表什么意思。各级域名由其上一级的域名管理机构管理,而最高的顶级域名则由ICANN进行管理。用这种方法可使每一个域名在整个互联网范围内是唯一的,并且也容易设计出一种查找域名的机制。

            域名只是逻辑概念,并不代表计算机所在的物理地点。据2006年12月统计,现在顶级域名TLD(Top Level Domain)已有265个,分为三大类:

            (1)国家顶级域名nTLD:采用ISO3166的规定。如:cn代表中国,us代表美国,uk代表英国,等等。国家域名又常记为ccTLD(cc表示国家代码contry-code)。

            (2)通用顶级域名gTLD:最常见的通用顶级域名有7个,即:com(公司企业),net(网络服务机构),org(非营利组织),int(国际组织),gov(美国的政府部门),mil(美国的军事部门)。

            (3)基础结构域名(infrastructure domain):这种顶级域名只有一个,即arpa,用于反向域名解析,因此称为反向域名。

                                 


    3、域名服务器

            如果采用上述的树状结构,每一个节点都采用一个域名服务器,这样会使得域名服务器的数量太多,使域名服务器系统的运行效率降低。所以在DNS中,采用划分区的方法来解决。

            一个服务器所负责管辖(或有权限)的范围叫做区(zone)。各单位根据具体情况来划分自己管辖范围的区。但在一个区中的所有节点必须是能够连通的。每一个区设置相应的权限域名服务器,用来保存该区中的所有主机到域名IP地址的映射。总之,DNS服务器的管辖范围不是以“域”为单位,而是以“区”为单位。区是DNS服务器实际管辖的范围。区 <= 域。

            下图是区的不同划分方法的举例。假定abc公司有下属部门x和y,部门x下面有分三个分布们u,v,w,而y下面还有下属部门t。图a表示abc公司只设一个区abc.com。这是,区abc.com和域abc.com指的是同一件事。但图b表示abc公司划分为两个区:abc.com和y.abc.com。这两个区都隶属于域abc.com,都各设置了相应的权限域名服务器。不难看出,区是域的子集。

                               

            下图是以上图b中abc公司划分的两个区为例,给出了DNS域名服务器树状结构图。这种DNS域名服务器树状结构图可以更准确地反映出DNS的分布式结构。图中的每一个域名服务器都能够部分域名到IP地址的解析。当某个DNS服务器不能进行域名到IP地址的转换时,它就会设法找因特网上别的域名服务器进行解析。

            从下图可以看出,因特网上的DNS服务器也是按照层次安排的。每一个域名服务器只对域名体系中的一部分进行管辖。根据域名服务器所起的作用,可以把域名服务器划分为下面四种不同的类型。


    根域名服务器:最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址。不管是哪一个本地域名服务器,若要对因特网上任何一个域名进行解析,只要自己无法解析,就首先求助根域名服务器。所以根域名服务器是最重要的域名服务器。假定所有的根域名服务器都瘫痪了,那么整个DNS系统就无法工作。需要注意的是,在很多情况下,根域名服务器并不直接把待查询的域名直接解析出IP地址,而是告诉本地域名服务器下一步应当找哪一个顶级域名服务器进行查询。


    顶级域名服务器:负责管理在该顶级域名服务器注册的二级域名。


    权限域名服务器:负责一个“区”的域名服务器。


    本地域名服务器:本地服务器不属于下图的域名服务器的层次结构,但是它对域名系统非常重要。当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。

                           

    4、域名的解析过程

    注意:

            一、主机向本地域名服务器的查询一般都是采用递归查询。所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其它根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。

           二、本地域名服务器向根域名服务器的查询的迭代查询。迭代查询的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地服务器进行后续的查询。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地服务器下一步应当向哪一个权限域名服务器进行查询。最后,知道了所要解析的IP地址或报错,然后把这个结果返回给发起查询的主机。

            下图给出了这两种查询的差别

                    

            下面举一个例子演示整个查询过程:

            假定域名为m.xyz.com的主机想知道另一个主机y.abc.com的IP地址。例如,主机m.xyz.com打算发送邮件给y.abc.com。这时就必须知道主机y.abc.com的IP地址。下面是上图a的几个查询步骤:

            1、主机m.abc.com先向本地服务器dns.xyz.com进行递归查询。

            2、本地服务器采用迭代查询。它先向一个根域名服务器查询。

            3、根域名服务器告诉本地服务器,下一次应查询的顶级域名服务器dns.com的IP地址。

            4、本地域名服务器向顶级域名服务器dns.com进行查询。

            5、顶级域名服务器dns.com告诉本地域名服务器,下一步应查询的权限服务器dns.abc.com的IP地址。

            6、本地域名服务器向权限域名服务器dns.abc.com进行查询。

            7、权限域名服务器dns.abc.com告诉本地域名服务器,所查询的主机的IP地址。

            8、本地域名服务器最后把查询结果告诉m.xyz.com。

            整个查询过程共用到了8个UDP报文。

            为了提高DNS查询效率,并减轻服务器的负荷和减少因特网上的DNS查询报文数量,在域名服务器中广泛使用了高速缓存,用来存放最近查询过的域名以及从何处获得域名映射信息的记录。

            例如,在上面的查询过程中,如果在m.xyz.com的主机上不久前已经有用户查询过y.abc.com的IP地址,那么本地域名服务器就不必向根域名服务器重新查询y.abc.com的IP地址,而是直接把告诉缓存中存放的上次查询结果(即y.abc.com的IP地址)告诉用户。

            由于名字到地址的绑定并不经常改变,为保持告诉缓存中的内容正确,域名服务器应为每项内容设置计时器并处理超过合理时间的项(例如每个项目两天)。当域名服务器已从缓存中删去某项信息后又被请求查询该项信息,就必须重新到授权管理该项的域名服务器绑定信息。当权限服务器回答一个查询请求时,在响应中都指明绑定有效存在的时间值。增加此时间值可减少网络开销,而减少此时间值可提高域名解析的正确性。

            不仅在本地域名服务器中需要高速缓存,在主机中也需要。许多主机在启动时从本地服务器下载名字和地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到名字时才使用域名服务器。维护本地域名服务器数据库的主机应当定期地检查域名服务器以获取新的映射信息,而且主机必须从缓存中删除无效的项。由于域名改动并不频繁,大多数网点不需花精力就能维护数据库的一致性。


    参考文献《计算机网络第5版》--谢希仁

    展开全文
  • DNS原理及其解析过程

    2019-09-28 14:39:24
    DNS原理及其解析过程 为什么需要DNS解析域名为IP地址? 网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所以计算机在网络上进行通讯时只能识别如“202.96.134.133”之类的IP地址,而不能认识域名。我们...

    DNS原理及其解析过程

    为什么需要DNS解析域名为IP地址?

    网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所以计算机在网络上进行通讯时只能识别如“202.96.134.133”之类的IP地址,而不能认识域名。我们无法记住10个以上IP地址的网站,所以我们访问网站时,更多的是在浏览器地址栏中输入域名,就能看到所需要的页面,这是因为有一个叫“DNS服务器”的计算机自动把我们的域名“翻译”成了相应的IP地址,然后调出IP地址所对应的网页。

    具体什么是DNS?
    DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。DNS就是这样的一位“翻译官”,它的基本工作原理可用下图来表示。

    DNS 的过程?

    关于DNS的获取流程:
    DNS是应用层协议,事实上他是为其他应用层协议工作的,包括不限于HTTP和SMTP以及FTP,用于将用户提供的主机名解析为ip地址。
    具体过程如下:
    ①用户主机上运行着DNS的客户端,就是我们的PC机或者手机客户端运行着DNS客户端了
    ②浏览器将接收到的url中抽取出域名字段,就是访问的主机名,比如

    http://www.baidu.com/
    

    , 并将这个主机名传送给DNS应用的客户端
    ③DNS客户机端向DNS服务器端发送一份查询报文,报文中包含着要访问的主机名字段(中间包括一些列缓存查询以及分布式DNS集群的工作)
    ④该DNS客户机最终会收到一份回答报文,其中包含有该主机名对应的IP地址
    ⑤一旦该浏览器收到来自DNS的IP地址,就可以向该IP地址定位的HTTP服务器发起TCP连接

     

    转载于:https://www.cnblogs.com/cjm123/p/8118378.html

    展开全文
  • 点击上方蓝色字体,关注我们前言域名系统(英语:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,使人更方便地访问互...

    点击上方蓝色字体,关注我们

    前言

    域名系统(英语:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。

    体系结构

    DNS 是一个分布式数据库。它允许对整个数据库的各个部分进行本地控制;同时整个网络也能通过 客户-服务器 方式访问每个部分的数据,借助备份和缓存机制,DNS 将更强壮和足够的性能。
    DNS 数据库的结构如图1所示,就像一棵倒挂着的树。

    根域名服务器

    根域名服务器(英语:root name server)是互联网域名解析系统(DNS)中最高级别的域名服务器,负责返回顶级域的权威域名服务器地址。它们是互联网基础设施中的重要部分,因为所有域名解析操作均离不开它们。由于DNS和某些协议(未分片的用户数据报协议(UDP)数据包在IPv4内的最大有效大小为512字节)的共同限制,根域名服务器地址的数量被限制为13个。幸运的是,采用任播技术架设镜像服务器可解决该问题,并使得实际运行的根域名服务器数量大大增加。截至2017年11月,全球共有800台根域名服务器在运行。

    1
    2
    
    DNS 根域名服务器并不真的只有 13 台,而是 13 个 IP,对应了 A-M 13 个编号,
    借由任播(Anycast)技术,编号相同的根服务器使用同一个IP(类似一个集群)。
    


    顶级域

    顶级域(或顶级域名;英语:Top-level Domain;英文缩写:TLD)是互联网DNS等级之中的最高级的域,它保存于DNS根域的名字空间中。顶级域名是域名的最后一个部分,即域名最后一点之后的字母,例如在example.com这个域名中,顶级域是.com(或.COM),大小写视为相同

    顶级域主要分4类:

    • 国家顶级域

      国家和地区顶级域名(Country code top-level domain,英语:ccTLD),简称国家顶级域,又译国码域名、顶级国码域名、国码顶级域名,或顶级国码域名,是用两字母的国家或地区名缩写代称的顶级域,其域名的指定及分配,政治因素考量凌驾在技术和商业因素之上。

      这些顶级域均由两个字母组成,大部分使用 ISO 3166-1标准。

    • 通用顶级域

      通用顶级域主要由.com、.info、.net及.org等域名组成。同时 .biz、.name及.pro亦可视作“通用”性质,但这些域名指定为“限制”级别,规定申请者须提供资格证明。

    • 基础建设顶级域

      .arpa,过去曾包括在“通用顶级域”内

      .arpa是互联网域名系统上一个专门用于互联网基础设施配置的顶级域。其名称最初是缩写自高级研究计划局(Advanced Research Projects Agency,ARPA),也就是现在互联网的雏形网络ARPANET的主管部门。现在其标准名称对应为“地址路由参数域(Address and Routing Parameter Area)”。直到2015年,它是IANA顶级域分类中的一个分类,基础设施顶级域(infrastructure top-level domain)内的唯一顶级域。

      现在其有两个二级域名,“in-addr.arpa”和“ip6.arpa”,用于对应IPv4和IPv6的DNS反向查询功能。

    • 测试顶级域

      例如繁体中文的http://例子.測試/及简体的http://例子.测试/

    DNS 的分布式数据库是以域名为索引的,每个域名实际上就是一棵很大的逆向树中路径,这棵逆向树称为域名空间(domain name space)。如图1所示,树的最大深度不得超过 127 层,树中每个节点都有一个可以长达 63 个字符的文本标号。


    区和域的不同

    整个的域名空间可以根据组织划分或管理分类,组织成一个树状结构。树上的每个节点叫做 domain(),就是一个标示。一个 domain 的名字就是从 root 开始,到当前节点的所有 domain 标志的集合。从书写的结构上看,就是从右到左依次用”.”来区分开。这样域名的标志才能够唯一。

    而整个的域名空间被分成的多个区域,叫 zone它开始于一个顶级 domain,一直到一个子 domain 或是其它 domain 的开始。zone 通常表示管理界限的划分。实际上,zone 就是DNS 树状结构上的一个标识的点。一个 zone 包含了那些相邻的域名树结构的部分,并具有此部分的全部信息,并且它是真正授权的。它包含了这个节点下的所有域名,但不包括其它域里已经制定的。每个树状结构里的节点,在上级域中都有一个或多个 NS 记录。它们是和这个域中的 NS 记录相同的。

    例如,有一个 domain 叫 example.com,它可以包含 host.aaa.example.com 和host.bbb.example.com 这些名字,但是它的 zone 文件中却只有 2 个 zone 的记录aaa.example.com 和 bbb.example.com。zone 就是一个一级的 domain,也可以是一个多级domain 的一部分。这个 domain 中的其它 zone,可以指向其它的域名服务器。DNS 树型结构中的每个名字都是一个 domain,当然它也可以是一个没有子域的、最末端的节点。每个子域(subdomain)也是一个 domain,每个 domain 其实也是一个子域(subdomain),当然最上面的 root 节点除外。


    域名服务器的类型

    一个 DNS 服务器可以同时作为多个域的主域名服务器辅域名服务器,也可以只作为主,或只作为辅,或者做任何域的授权服务器而只使用自己的 cache 来提供查询解析。Master服务器也经常叫做 primary,slave 服务器也经常叫做 secondary。

    所有的服务器都会将数据保存在缓存(cache)中,直到针对这些数据的 TTL(Time To Live)值过期。


    主域名服务器

    primary master server 是一个 domain 信息的最根本的来源。它是所有辅域名服务器进行域传输的源。主域名服务器是从本地硬盘文件中读取域的数据的。


    辅域名服务器(次级域名服务器)

    次级服务器(slave server或secondary server)使用一个叫做域转输的复制过程,调入其它服务器中域的内容。通常情况下,数据是直接从主服务器上传输过来的,但也可能是从本地磁盘上的 cache 中读到的。辅域名服务器可以提供必需的冗余服务。所有的辅域名服务器都应该写在这个域的 NS 记录中。


    隐藏服务器(stealth server)

    stealth server 可以针对一个域的查询返回授权的记录,但是它并没有列在这个域的 NS记录里。Stealth 服务器可以用来针对一个域进行集中分发,这样可以不用在远程服务器上手工编辑这个域的信息了。在这种方式中,一个域的 master 文件在 stealth server 上存储的位置,经常叫做“hidden primary”配置。Stealth 服务器也可以将域文件在本地做一个拷贝,从而可以在所有官方的域名服务器都不能访问的情况下,也能更快地读取域的记录。


    高速缓存域名服务器(caching only server)

    缓存服务器可以将它收到的信息存储下来,并再将其提供给其它的用户进行查询,直到这些信息过期。它的配置中没有任何本地的授权域的配置信息。它可以响应用户的请求,并询问其它授权的域名服务器,从而得到回答用户请求的信息。


    转发服务器(forwarding server)

    一台缓存名服务器本身不能进行完全的递归查询。相反,它能从缓存向其它的缓存服务器转发一部分或是所有不能满足的查询,一般被称作转发服务器。

    可能会有一个或多个转发服务器,它们会按照顺序进行请求,直到全部穷尽或者请求得到回答为止。转发服务器一般用于用户不希望站点内的服务器直接和外部服务器通讯的情况下。一个特定的情形是许多 DNS 服务器和一个网络防火墙。服务器不能透过防火墙传送信息,它就会转发给可以传送信息的服务器,那台服务器就会代表内部服务器询问因特网 DNS 服务器。使用转发功能的另一个好处是中心服务器得到了所有用户都可以利用的更加完全的信息缓冲。


    解析过程

    域名解析总体可分为两大步骤:

    1. 本机向本地域名服务器发出一个DNS请求报文,报文里携带需要查询的域名;

    2. 本地域名服务器向本机回应一个DNS响应报文,里面包含域名对应的IP地址。而此步又包含了很多小的步骤。

    本地服务器向上解析的时候,有两个不同的行为需要注意:

    • 递归查询:本机向本地域名服务器发出一次查询请求,就静待最终的结果。如果本地域名服务器无法解析,自己会以DNS客户机的身份向其它域名服务器查询,直到得到最终的IP地址告诉本机。

    • 迭代查询:本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到哪里去查询,然后它再去查,每次它都是以客户机的身份去各个服务器查询。

    dig 解析 alibaba.com为例(更详细的过程可以加+trace

    1
    
    $ dig alibaba.com
    

    此解析过程包含六段信息:

    第一段包含 请求和回应的简略信息

    • 第一行为dig的版本信息和需要解析的域名。

    • 第二行为dig设置的全局选项。前两行输出可以通过使用+nocmd选项来消除,但前提是它是命令行上的第一个参数(甚至在您查询的主机之前)。

    • 第三行表示已经获取到结果(无论是否解析到)。

    • 第四行和第五行为获取结果中的简略信息

      • opcode ,status 和 会话标识

      • flags、query数、answer数、authority数、additional数

    第二段为请求时的附加域Queries域信息

    第三段为回应时的回应域

    alibaba.com.为需要解析的域名

    300为此记录的TTL

    IN为此记录的CLASS

    A为此记录的类型

    106.11.208.151 和 106.11.223.101为此域名对应的IP

    第四段为回应时的授权域

    表明alibaba.com此域名所属的域名服务器

    第五段为回应时的附加域

    表明域名服务器的A记录

    第六段是DNS服务器的一些传输信息

    第一行为解析花费的时间

    第二行为本地域名服务器及端口号

    第四行为信息长度:UDP length - UDP header length


    DNS报文格式


    报文头

    会话标识:DNS报文的ID标识,对于请求报文和其对应的应答报文,这个字段是相同的,通过它可以区分DNS应答报文是哪个请求的响应

    标志:

    标志位总长 16 个位,也就是两个字符。

    有相应值的位标记为 1 ,没有的则标记为 0 。

    最后这 16 个二进制的位通过进制转换即可变成十六进制的

    • QR 1bit

      • 0 为客户端请求包

      • 1 为服务器响应包

    • Opcode 4bits

      • 0000 为普通的 DNS 请求

      • 0001 为 rDNS 请求

      • 0002 为服务器状态

      • 0003 无

      • 0004 为通知 (Notify)

      • 0005 为更新 (Update)

    • 0006 - 0015 保留

    • AA 1bit

      • 0 为应答服务器不是该域名的权威解析服务器

      • 1 为应答服务器是该域名的权威解析服务器

    • TC 1bit

      • 0 为报文未截断

      • 1 为报文过长被截断 (只返回了前 512 个字节)

    • RD 1bit

      • 0 为不期望进行递归查询

      • 1 为期望进行递归查询 (从域名服务器进行递归查询)

    • RA 1bit

      • 0 为应答服务器不支持递归查询

      • 1 为应答服务器支持递归查询

    • Z 1bit

      保留位

    • AD 1bit

      • 0 为应答服务器未验证了该查询相关的 DNSSEC 数字签名

      • 1 为应答服务器已经验证了该查询相关的 DNSSEC 数字签名

    • CD 1bit

      • 0 为服务器已经进行了相关 DNSSEC 数字签名的验证

      • 1 为服务器并未进行相关 DNSSEC 数字签名的验证

    • Rcode 4bits

      十进制

      • 0000 为正常

      • 0001 为格式错误 (NS 无法解析这个请求)

      • 0002 为服务器错误 (NS 有问题所以无法进行这个请求)

      • 0003 为名称错误 (请求中的地址并不存在)

      • 0004 为未实施查询 (NS 服务器不支持这种查询)

      • 0005 为拒绝 (由于策略原因拒绝执行这个错误)

      • 0006 为域名出现了但是它不该出现

      • 0007 为集合 RR 存在但是他不该存在

      • 0008 为集合 RR 不存在但是他应该存在

      • 0009 为服务器并不是这个区域的权威服务器

      • 0010 为该名称并不包含在区域中

      • 0011 - 0015 保留

      • 0016 为错误的 OPT 版本或者 TSIG 签名无效

      • 0017 为无法识别的密钥

      • 0018 为签名不在时间范围内

      • 0019 为错误的 TKEY 模式

      • 0020 为重复的密钥名称

      • 0021 为该算法不支持

      • 0022 为错误的截断

      • 0023 - 3840 保留

      • 3841 - 4095 私人使用

      • 4096 - 65534 保留

      • 65535 RFC 6195

    数量字段:

    Questions、Answer RRs、Authority RRs、Additional RRs 各自表示后面的四个区域的数目。

    Questions表示查询问题区域节的数量,Answers表示回答区域的数量,Authoritative namesversers表示授权区域的数量,Additional recoreds表示附加区域的数量。


    RECORD域

    Queries域

    查询名

    长度不固定,且不使用填充字节,一般该字段表示的就是需要查询的域名(如果是反向查询,则为IP,反向查询即由IP地址反查域名),一般的格式如下图所示。

    查询类型:

    类型助记符说明
    1A由域名获得IPv4地址
    2NS查询域名服务器
    5CNAME查询规范名称
    6SOA开始授权
    11WKS熟知服务
    12PTR把IP地址转换成域名
    13HINFO主机信息
    15MX邮件交换
    28AAAA由域名获得IPv6地址
    252AXFR传送整个区的请求
    255ANY

    对所有记录的请求

    查询类

    定义有下述 CLASS 助记符和值:

    助记符含义备注
    IN1the Internet/互联网
    CS2the CSNET class/CSNET 类被废弃,仅在某些被废弃的 RFCs 中用于举例
    CH3the CHAOS class/CHAOS 类
    HS4Hesiod [Dyer 87]

    备注:CHAOS 和 Hesiod 请参考 DNS classes


    DNS Resource Records

    RR的定义来自 rfc1035 中 3.2 RR definitions。所有的RR都有如下所示的相同的顶层格式:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
                                    1  1  1  1  1  1
      0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                                               |
    /                                               /
    /                      NAME                     /
    |                                               |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                      TYPE                     |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                     CLASS                     |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                      TTL                      |
    |                                               |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                   RDLENGTH                    |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
    /                     RDATA                     /
    /                                               /
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    
    字段格式和描述
    NAME所有者名称(owner name),例如,这个资源记录匹配的节点的名称
    TYPE包含 RR TYPE 代码之一的 2 个八位字节(octets)
    CLASS包含 RR CLASS 代码之一的 2 个八位字节(octets)
    TTL32位有符号整数,指定在再次咨询信息源之前此资源记录可以被缓存的时间间隔。零值被解释为该 RR 仅能用于正在进行的流程,不应当被缓存。例如,总是将零 TTL 分配给 SOA 记录,以便禁止缓存。零值也可以用于极短暂的数据。
    RDLENGTH无符号 16 位整数,指定以八位字节计的 RDATA 字段的长度。
    RDATA可变长度的八位字节字符串,用来描述资源。这个信息的格式取决于资源记录的 TYPE 和 CLASS 。

    TYPE 值域

    TYPE 字段用于资源记录。注意,这些类型是 QTYPE 的子集。

    TYPE含义备注
    A1a host address/主机地址
    NS2an authoritative name server/权威名称服务器
    MD3a mail destination/邮件目的地被废弃,使用 MX
    MF4a mail forwarder/邮件转发器被废弃,使用 MX
    CNAME5the canonical name for an alias/别名的正则名称
    SOA6a marks the start of a zone of authority/标记权威区域的开始
    MB7a mailbox domain name/邮箱域名EXPERIMENTAL
    MG8a mail group member/邮件组成员EXPERIMENTAL
    MR9a mail rename domain name/邮件重新命名域名EXPERIMENTAL
    NULL10a null RREXPERIMENTAL
    WKS11a well known service description/众所周知的服务描述
    PTR12a domain name pointer/域名指针
    HINFO13host information/主机信息
    MINFO14mailbox or mail list information/邮箱或邮件列表信息
    MX15mail exchange/邮件交换
    TXT16text strings/文本字符串
    SRV33service and protocol/服务和协议在rfc2052中引入

    QTYPE 值域

    QTYPE 字段出现在查询的 question 部分。QTYPE 是 TYPE 的超集,因此所有 TYPE 是合 法的 QTYPE。此外,定义有下述 QTYPE:

    QTYPE含义备注
    AXFR252A request for a transfer of an entire zone/请求传送整个区域
    MAILB253A request for mailbox-related records (MB, MG or MR)/请求相关邮箱记录(MB、MG 或 MR)
    MAILA254A request for mail agent RRs/请求邮件代理 RR被废弃,参阅 MX
    *255A request for all records/请求所有记录
    1
    2
    3
    4
    5
    6
    
    0             类型0用作SIG RR的特殊指示器。在其他情况下,不得分配普通用途
    1 - 127       此范围内的剩余TYPE由IETF Consensus分配给数据类型
    128 - 255     此范围内的剩余TYPE由IETF共识分配给Q和Meta TYPE
    256 - 32767   由IETF共识分配给 Q或Meta TYPE
    32768 - 65279 所需规范见[RFC 2434]
    65280 - 65535 私人使用
    

    OPT(OPTion)RR,编号41,在[RFC 2671]中规定。其主要目的是扩展各种DNS字段的有效字段大小,包括RCODE,标签类型,标志位和RDATA大小。特别是,对于识别它的解析器和服务器,它将RCODE字段从4位扩展到12位。

    QCLASS 值域

    QCLASS 字段出现在查询的 question 部分。QCLASS 值是 CLASS 值的超集;每一个 CLASS 都是合法的 CLASS。除了 CLASS 值以外,定义有下述 QCLASS:

    QCLASS含义备注
    *255any class/任何类


    报文示例

    请求报文

    请求报文中主要Queries域比较主要,标识此请求的目的。


    回应报文

    回应报文比请求报文多了三个域:

    • Answers

      对请求的回应。此报文回应两条A记录。

    • Authoritative nameservers

      域名所属的NS。此报文表明alibaba.com有两条NS。

    • Additional records

      NS对应的记录。此报文表明Authoritative nameservers中的NS有4条A记录(每个NS两条)。


    诊断工具

    dig(Domain Information Groper)

    域信息搜索器(dig)是一种用于从域名系统服务器那里收集信息的命令行工具。

    搜索有两种模式:针对一条请求的简单交互式模式执行多查询的批模式。所有的查询选项都可以通过命令行上来完成。

    1
    2
    
    
    dig [@服务器]域
    [查询-类型] [查询-类 [+查询-选项] [-dig-选项] [%注释]
    
    

    通常采用以下形式:

    1
    
    dig @服务器 域 查询类型 查询类 (dig @server domain query-type query-class)
    

    host

    Host功能利用一个命令行界面,提供查询因特网主机名的功能。在默认状态下,他只将对主机名和IP地址进行转换,但是此项功能可以通过选项的使用得到拓展。

    1
    
    host [-aCdlrTwv] [-c class] [-N ndots] [-t type] [-W timeout] [-R retries] hostname [server]
    

    Nslookup

    是一个向因特网域名服务器发送请求的程序。Nslookup有两种模式:交互式和非交互式

    交互式允许向名服务器查询多个主机和域或者打印出在一个域中的主机列表。

    非交互式模式用来显示一个主机或域的名字或被请求的信息。

    1
    
    
    nslookup [-option…][host-to -find]-[server]
    
    

    当不使用参数(使用缺省的域名服务器),或第一个参数是”-”且第二个参数是一台DNS的主机名或IP地址话,nslookup就会进入交互模式。

    非交互模式是在第一个参数为要查询的域名或IP地址时进入的。也可以配置第二个参数,来选定请求发送的域名服务器。由于神秘的用户界面和经常性的不一致行为,不建议使用 nsloopup,而应使用dig。

    使用maven构建的工程的实践心得

    Java 线程同步(Synchronized)

    Java垃圾收集器一网打尽, ZGC 和 Shenandoah 听说过吗

    动图帮你理解【Java垃圾收集机制】

    一文搞懂 JVM 架构和运行时数据区 (内存区域)

    为什么你的 Spring Task 定时任务没有定时执行?

    搞java开发,看懂JVM的GC日志真的很重要

    一次容器化springboot程序OOM问题探险

    Java 应用性能调优的一些实践

    可视化界面在线生成JVM参数

    我就知道你“在看”

    展开全文
  • 架构 DNS原理及其解析过程

    千次阅读 2018-06-07 10:12:26
    作者:郭无心链接:...DNS原理及其解析过程为什么需要DNS解析域名为IP地址? 网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所以计算机在网络上进行通讯时只能识别如“202.96.134...
    作者:郭无心
    链接:https://www.zhihu.com/question/23042131/answer/66571369
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    DNS原理及其解析过程

    为什么需要DNS解析域名为IP地址?

    网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所以计算机在网络上进行通讯时只能识别如“202.96.134.133”之类的IP地址,而不能认识域名。我们无法记住10个以上IP地址的网站,所以我们访问网站时,更多的是在浏览器地址栏中输入域名,就能看到所需要的页面,这是因为有一个叫“DNS服务器”的计算机自动把我们的域名“翻译”成了相应的IP地址,然后调出IP地址所对应的网页。


    具体什么是DNS?
    DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。DNS就是这样的一位“翻译官”,它的基本工作原理可用下图来表示。

    &amp;lt;img src=&quot;https://pic4.zhimg.com/50/e5143bc08d4ec9d7f210522c7e540f4d_hd.jpg&quot; data-rawwidth=&quot;172&quot; data-rawheight=&quot;236&quot; class=&quot;content_image&quot; width=&quot;172&quot;&amp;gt;

    DNS 的过程?

    关于DNS的获取流程:
    DNS是应用层协议,事实上他是为其他应用层协议工作的,包括不限于HTTP和SMTP以及FTP,用于将用户提供的主机名解析为ip地址。
    具体过程如下:
    ①用户主机上运行着DNS的客户端,就是我们的PC机或者手机客户端运行着DNS客户端了
    ②浏览器将接收到的url中抽取出域名字段,就是访问的主机名,比如


    http://www.baidu.com/
    

    , 并将这个主机名传送给DNS应用的客户端
    ③DNS客户机端向DNS服务器端发送一份查询报文,报文中包含着要访问的主机名字段(中间包括一些列缓存查询以及分布式DNS集群的工作)
    ④该DNS客户机最终会收到一份回答报文,其中包含有该主机名对应的IP地址
    ⑤一旦该浏览器收到来自DNS的IP地址,就可以向该IP地址定位的HTTP服务器发起TCP连接

    DNS服务的体系架构是怎样的?

    DNS domain name system 主要作用就是将主机域名转换为ip地址

    假设运行在用户主机上的某些应用程序(如Webl浏览器或者邮件阅读器)需要将主机名转换为IP地址。这些应用程序将调用DNS的客户机端,并指明需要被转换的主机名。(在很多基于UNIX的机器上,应用程序为了执行这种转换需要调用函数gethostbyname())。用户主机的DNS客户端接收到后,向网络中发送一个DNS查询报文。所有DNS请求和回答报文使用的UDP数据报经过端口53发送(至于为什么使用UDP,请参看为什么域名根服务器只能有13台呢? - 郭无心的回答)经过若干ms到若干s的延时后,用户主机上的DNS客户端接收到一个提供所希望映射的DNS回答报文。这个查询结果则被传递到调用DNS的应用程序。因此,从用户主机上调用应用程序的角度看,DNS是一个提供简单、直接的转换服务的黑盒子。但事实上,实现这个服务的黑盒子非常复杂,它由分布于全球的大量DNS服务器以及定义了DNS服务器与查询主机通信方式的应用层协议组成。


    DNS为什么不采用单点的集中式的设计方式,而是使用分布式集群的工作方式?

    DNS的一种简单的设计模式就是在因特网上只使用一个DNS服务器,该服务器包含所有的映射,在这种集中式的设计中,客户机直接将所有查询请求发往单一的DNS服务器,同时该DNS服务器直接对所有查询客户机做出响应,尽管这种设计方式非常诱人,但他不适用当前的互联网,因为当今的因特网有着数量巨大并且在持续增长的主机,这种集中式设计会有单点故障(嗝屁一个,全球着急),通信容量(上亿台主机发送的查询DNS报文请求,包括但不限于所有的HTTP请求,电子邮件报文服务器,TCP长连接服务),远距离的时间延迟(澳大利亚到纽约的举例),维护开销大(因为所有的主机名-ip映射都要在一个服务站点更新)等问题

    DNS服务器一般分三种,根DNS服务器,顶级DNS服务器,权威DNS服务器。


    &amp;lt;img src=&quot;https://pic2.zhimg.com/50/607e9d15fd6d5f9d02f6f4b0adb261b9_hd.jpg&quot; data-rawwidth=&quot;615&quot; data-rawheight=&quot;271&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;615&quot; data-original=&quot;https://pic2.zhimg.com/607e9d15fd6d5f9d02f6f4b0adb261b9_r.jpg&quot;&amp;gt;

    使用分布式的层次数据库模式以及缓存方法来解决单点集中式的问题。


    DNS域名称
    域名系统作为一个层次结构和分布式数据库,包含各种类型的数据,包括主机名和域名。DNS数据库中的名称形成一个分层树状结构称为域命名空间。域名包含单个标签分隔点,例如:

    im.qq.com
    

    完全限定的域名 (FQDN) 唯一地标识在 DNS 分层树中的主机的位置,通过指定的路径中点分隔从根引用的主机的名称列表。 下图显示与主机称为 im 内

    qq.com
    

    DNS 树的示例。 主机的 FQDN 是

     im.qq.com
    

    DNS 域的名称层次结构

    &amp;lt;img src=&quot;https://pic2.zhimg.com/50/0c7565c6c0543b554ee02e163a820b25_hd.jpg&quot; data-rawwidth=&quot;375&quot; data-rawheight=&quot;232&quot; class=&quot;content_image&quot; width=&quot;375&quot;&amp;gt;

    DNS域名称空间的组织方式
    按其功能命名空间中用来描述 DNS 域名称的五个类别的介绍详见下表中,以及与每个名称类型的示例。

    例如:

    www.uestc.edu.cn
    

    &amp;lt;img src=&quot;https://pic3.zhimg.com/50/79b9fd2666e989ab24024966632ae63f_hd.jpg&quot; data-rawwidth=&quot;558&quot; data-rawheight=&quot;240&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;558&quot; data-original=&quot;https://pic3.zhimg.com/79b9fd2666e989ab24024966632ae63f_r.jpg&quot;&amp;gt;

    DNS 和 Internet 域
    互联网域名系统由名称注册机构负责维护分配由组织和国家/地区的顶级域在 Internet 上进行管理。 这些域名按照国际标准 3166。 一些很多现有缩写,保留以供组织中,以及两个字母和三个字母的国家/地区使用的缩写使用下表所示。一些常见的DNS域名称如下图:

    &amp;lt;img src=&quot;https://pic1.zhimg.com/50/bd29822632ad712b1944bb41d7d3e0ba_hd.jpg&quot; data-rawwidth=&quot;332&quot; data-rawheight=&quot;250&quot; class=&quot;content_image&quot; width=&quot;332&quot;&amp;gt;

    资源记录
    DNS 数据库中包含的资源记录 (RR)。 每个 RR 标识数据库中的特定资源。我们在建立DNS服务器时,经常会用到SOA,NS,A之类的记录,在维护DNS服务器时,会用到MX,CNAME记录。
    常见的RR见下图:

    &amp;lt;img src=&quot;https://pic2.zhimg.com/50/0810966e5761d5dccb3d9b9906e10ca0_hd.jpg&quot; data-rawwidth=&quot;558&quot; data-rawheight=&quot;303&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;558&quot; data-original=&quot;https://pic2.zhimg.com/0810966e5761d5dccb3d9b9906e10ca0_r.jpg&quot;&amp;gt;

    Dns服务的工作过程
    当 DNS 客户机需要查询程序中使用的名称时,它会查询本地DNS 服务器来解析该名称。客户机发送的每条查询消息都包括3条信息,以指定服务器应回答的问题。
    ● 指定的 DNS 域名,表示为完全合格的域名 (FQDN) 。
    ● 指定的查询类型,它可根据类型指定资源记录,或作为查询操作的专门类型。
    ● DNS域名的指定类别。
    对于DNS 服务器,它始终应指定为 Internet 类别。例如,指定的名称可以是计算机的完全合格的域名,如

    im.qq.com
    

    ,并且指定的查询类型用于通过该名称搜索地址资源记录。
    DNS 查询以各种不同的方式进行解析。客户机有时也可通过使用从以前查询获得的缓存信息就地应答查询。DNS 服务器可使用其自身的资源记录信息缓存来应答查询,也可代表请求客户机来查询或联系其他 DNS 服务器,以完全解析该名称,并随后将应答返回至客户机。这个过程称为递归。
    另外,客户机自己也可尝试联系其他的 DNS 服务器来解析名称。如果客户机这么做,它会使用基于服务器应答的独立和附加的查询,该过程称作迭代,即DNS服务器之间的交互查询就是迭代查询。
    DNS 查询的过程如下图所示。

    &amp;lt;img src=&quot;https://pic4.zhimg.com/50/7fcd81756bdc8b52ade0531402c43e43_hd.jpg&quot; data-rawwidth=&quot;892&quot; data-rawheight=&quot;484&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;892&quot; data-original=&quot;https://pic4.zhimg.com/7fcd81756bdc8b52ade0531402c43e43_r.jpg&quot;&amp;gt;

    1、在浏览器中输入www . qq .com 域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。

    2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。

    3、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/ip参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。

    4、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。

    5、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www . qq .com主机。

    6、如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

    从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询。

    附录:
    本地DNS配置转发与未配置转发数据包分析
    新建一DNS,具体怎么建我这里就不再描述了,见我的上一篇博文《在Win2003中安装bind【部署智能DNS】》
    1、DNS服务器不设转发
    在192.168.145.228服务器上安装上wireshark软件,并打开它,设置数据包为UDP过滤,在192.168.145.12客户机上用nslookup命令查询一下http://www.sohu.com/,马上可以看到本地DNS服务器直接查全球13台根域中的某几台,然后一步步解析,通过递代的方式,直到找到www .sohu .com对应的IP为220.181.118.87。
    本地DNS服务器得到搜狐的IP后,它把这个IP返回给192.168.145.12客户机,完成解析。

    &amp;lt;img src=&quot;https://pic3.zhimg.com/50/738184d6ef3f834ba96776e37d2b2378_hd.jpg&quot; data-rawwidth=&quot;558&quot; data-rawheight=&quot;192&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;558&quot; data-original=&quot;https://pic3.zhimg.com/738184d6ef3f834ba96776e37d2b2378_r.jpg&quot;&amp;gt;

    2、DNS服务器设置转发

    搜狐域名在第一步的验证中使用过,有缓存,为了不受上步实验干扰,我们在客户机上192.168.145.12上nslookup 百度一下,你就知道。从图上看,本地DNS把请求转发至192.168.133.10服务器,133.10服务器把得到的IP返回给本地DNS,然后本地DNS再把IP告诉DNS客户机,完成解析。

    &amp;lt;img src=&quot;https://pic1.zhimg.com/50/ae0f47ad8dbad0443b1490ddcff232f2_hd.jpg&quot; data-rawwidth=&quot;558&quot; data-rawheight=&quot;66&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;558&quot; data-original=&quot;https://pic1.zhimg.com/ae0f47ad8dbad0443b1490ddcff232f2_r.jpg&quot;&amp;gt;

    其中部分内容参考了下面的博客

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 182
精华内容 72
关键字:

dns原理及其域名解析过程