美文网首页
DNS(域名系统) 学习笔记

DNS(域名系统) 学习笔记

作者: Smi1e_ | 来源:发表于2018-02-22 10:23 被阅读0次

    百度百科中的DNS介绍DNS介绍

    DNS(Domain Name System,域名系统),万维网上作为域名和ip地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的ip数串。通过域名,最终得到该域名对应的ip地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。在RFC文档中RFC 2181对DNS有规范说明,RFC 2136对DNS的动态更新进行说明,RFC 2308对DNS查询的反向缓存进行说明。

    DNS是什么

    DNS是Domain Name System的简写,中文翻译过来就是域名系统,是用来将主机名转换为ip的。事实上,除了进行主机名到IP地址的转换外,DNS通常还提供主机名到以下几项的转换服务:
    1.主机命名(host aloasing)。有着复杂规范主机名的主机可能有一个或多个别名,通常规范主机名较复杂,而别名让人更容易记忆。应用程序可以调用DNS来获得主机别名对应的规范主机名,以及主机的IP地址。
    2.邮件服务器别名(mail server aliasing)。DNS也能完成邮件服务器别名到其规范主机名以及ip地址的转换。
    3.负载均衡(load distribution)。DNS可用于冗余的服务器之间进行负载均衡。一个繁忙的站点,如abc.com,可能被冗余部署在多台具有不同ip的服务器上。在该情况下,在DNS数据库中,该主机名可能对应着一个ip集合,但应用程序调用DNS来获取该主机名对应的ip时,DNS通过某种算法从该主机名对应的ip集合中,挑选出某一ip进行响应。

    DNS的作用

    DNS是因特网的目录服务

    DNS是因特网的目录服务,它提供了主机名到ip地址映射的查询服务。这种服务的起源之一是人和路由器的需求之间的矛盾,主机可以用主机名或ip地址标识,对我们人来说我们很喜欢像taobao.com或者是baidu.com之类的由便于记忆的单词组成的主机名,但对于路由器来说,它难以处理这种字母数字组成的主机名,而更能接受ip地址。所以DNS就是根据主机名查询对应的ip地址的服务。

    当然DNS的作用不仅于此

    DNS提供的具体服务:

    ●提供了主机名到ip地址映射的查询服务

    ●提供主机别名(host aliasing)服务,有着复杂主机名的主机可以有一个或者多个别名,例如:aaa.xxx.com的主机可能还会有aaa.comxxx.com两个别名,在这种情况下,aaa.xxx.com叫做规范主机别名(canonical hostname)。主机别名的特征是比规范主机名更容易记忆,DNS可以提供根据主机别名获取规范主机名的服务。

    ●提供负载分配服务(load distribution)。一般来说,被繁忙访问的大型站点是分布在多台服务器上的,这个时候,主机名和ip地址就不是一一对应的关系,而是一个主机名对应一个ip地址的集合。在大量的,连续的多次访问中,DNS通过旋转ip地址达到负载均衡的目的:在向这个主机名发出DNS请求的时候,服务器会用包含全部这些ip地址的报文进行回答,但在每个不同的回答中会旋转这些ip地址的摆放顺序,而客户机总向报文中排在最前面的ip地址发出请求

    DNS的性质

    从两个层面上理解DNS:
    第一,从协议的层面看,它是一种应用层协议
    第二,从实体的层面看,它是一个由分层的DNS服务器实现的分布式数据库

    DNS应用层协议

    DNS资源记录
    DNS服务器存储的资源记录(Resource Records,RRs),一条资源记录(RR)记载着一个映射状态。每条RR通常包含如下表所示的一些信息: image.png

    NAME和RDATA表示的含义根据TYPE的取值不同而不同,常见的:
    1.若TYPE=A,则name是主机名,value是其对应的ip;
    2.若TYPE=NS,则name是一个域,value是一个权威DNS服务器的主机名。该记录表示name域的域名解析将由value主机名对应的DNS服务器来做;
    3.若TYPE=CNAME,则value是别名为name的主机对应的规范主机名;
    4.若TYPE=MX,则value是别名为name的邮件服务器的规范主机名;
    5......

    TYPE实际上还有其他类型,所有可能的type及其约定的数值表示如下: image.png
    整体及Header部分

    DNS协议

    DNS请求与响应的格式是一致的,其整体分为Header、Question、Answer、Authority、Additional5部分,如下图所示: image.png
    Header部分是一定有的,长度固定为12个字节;其余4部分可能有也可能没有,并且长度也不一定,这个在Header部分中有指明。Header的结构如下: image.png

    1.ID:占16位。该值由发出DNS请求的程序生成,DNS服务器在响应时会使用该ID,这样便于请求程序区分不同的DNS响应。
    2.QR:占1位。指示该消息是请求还是响应。0表示请求;1表示响应。
    3.OPCODE:占4位。指示请求的类型,有请求发起者设定,响应消息中复用该值。0表示标准查询;1表示反转查询;2表示服务器状态查询。3~15目前保留,以备将来使用。
    4.AA(Authoritative Answer,权威应答):占1位。表示响应的服务器是否是权威DNS服务器。只在响应消息中有效。
    5.TC(TrunCation,截断):占1位。指示消息是否因为传输大小限制而被截断。
    6.RD(Recursion Desired,期望递归):占1位。该值在请求消息中被设置,响应消息复用该值。如果被设置,表示希望服务器递归查询。但服务器不一定支持递归查询。
    7.RA(Recursion Available,递归可用性):占1位。该值在响应消息中被设置或被清除,以表明服务器是否支持递归查询。
    8.Z:占3位。保留备用。
    9.RCODE(Response code):占4位。该值在响应消息中被设置。取值及含义如下:
    ● 0:No error condition,没有错误条件;
    ● 1:Format error,请求格式有误,服务器无法解析请求;
    ● 2:Server failure,服务器出错。
    ● 3:Name Error,只在权威DNS服务器的响应中有意义,表示请求中的域名不存在。
    ● 4:Not Implemented,服务器不支持该请求类型。
    ● 5:Refused,服务器拒绝执行请求操作。
    ● 6~15:保留备用。

    1. QDCOUNT:占16位(无符号)。指明Question部分的包含的实体数量。
    2. ANCOUNT:占16位(无符号)。指明Answer部分的包含的RR(Resource Record)数量。
    3. NSCOUNT:占16位(无符号)。指明Authority部分的包含的RR(Resource Record)数量。
    4. ARCOUNT:占16位(无符号)。指明Additional部分的包含的RR(Resource Record)数量。
    Answer、Authority、Additional部分
    Answer、Authority、Additional部分格式一致,每部分都由若干实体组成,每个实体即为一条RR,格式如下图所示: image.png
    1. NAME:长度不定,可能是真正的数据,也有可能是指针(其值表示的是真正的数据在整个数据中的字节索引数),还有可能是二者的混合(以指针结尾)。若是真正的数据,会以0x00结尾;若是指针,指针占2个字节,第一个字节的高2位为11。
    2. TYPE:占2个字节。表示RR的类型,如A、CNAME、NS等,见以上RR介绍;
    3. CLASS:占2个字节。表示RR的分类,见以上RR介绍;
    4. TTL:占4个字节。表示RR生命周期,即RR缓存时长,单位是秒;
    5. RDLENGTH:占2个字节。指定RDATA字段的字节数;
      RDATA:即之前介绍的value,含义与TYPE有关,见以上RR介绍。
      DNS协议是工作在应用层的,运输层依赖的是UDP协议。

      用wireshark抓到的一个DNS包 image.png

    DNS的工作过程

    当我们在一台客户端上通过浏览器访问someschool.edu/index.html...
    的时候,DNS的工作过程是这样的:

    1.在这台用户主机上运行有DNS的客户机
    2.该浏览器从上述URL中抽取someschool.edu,发给本主机的DNS客户机
    3.DNS客户机向DNS服务器发送一个包含主机名someschool.edu的请求
    4.返回的响应报文里包含有目的IP地址,由浏览器获取并对该IP地址对应的HTTP服务器发起一个TCP连接。

    DNS服务器的层次和类别

    DNS服务器是有层次的,它可以分为三种类型:根DNS服务器顶级域(Top-Level Domain, TLD)DNS服务器权威DNS服务器,分别对应下面三个层次(从上至下)

    image.png
    根DNS服务器
    因特网上有13个根DNS服务器, 其中大部分分布在北美洲,下面显示的是2012年的根DNS服务器分布图 image.png
    顶级域DNS服务器

    顶级域DNS服务器负责顶级域名,如com,org,edu和gov和所有国家的顶级域名如cn,uk,jp(edu教育机构域名,gov政府部门域名,org非盈利性的组织,com企业域名)

    权威DNS服务器

    在因特网上具有公共可访问的主机的每个组织机构必须提供公共可访问的DNS记录,这些记录将这些主机的名字映射为IP地址。
    由组织机构的权威DNS服务器保存这些DNS记录,组织机构可以选择实现它自己的权威DNS服务器来保持这些记录,或者通过支付费用将这些记录存储在某个服务提供商的DNS服务器中。多数大学和大公司实现和维护它们自己基本的权威DNS服务器。

    本地DNS服务器

    还有一类比较重要的DNS服务器,叫做本地DNS服务器(local DNS server),它并不在上面说的DNS层次结构中。

    本地DNS服务器的作用

    ●主机和本地DNS服务器一般是相邻的,当主机发出DNS请求的时候,该请求会被发往本地DNS服务器,它起着代理的作用,并将该请求转发到DNS服务器层次结构中
    ●本地DNS服务器可以通过缓存主机名/IP地址,减少对相同主机名的查询而消耗的时间,改善延时和性能。

    DNS的工作机理

    DNS从实体的角度上看,就是一个分布式的数据库,它实现关键数据的查询和插入过程:

    在DNS中查询记录

    实际上,在DNS服务中,并不能通过对某个DNS服务器,通过仅仅一次的"请求/响应"就取得主机名/IP地址的查询结果。相反,需要多个不同的DNS服务器之间进行多次交互才能获取最终的查询结果

    image.png
    如上图所示例子,主机cis.poly.edu想知道主机gaia.cs.umass.edu的IP地址,并且主机gaia.cs.umass.edu的权威DNS服务器为dns.umass.edu

    则DNS查询过程如下:
    1.主机cis.poly.edu首先向它的本地DNS服务器dns.poly.edu发送一个DNS查询报文,该查询报文含有要求转换的主机名gaia.cs.umass.edu
    2.本地DNS服务器dns.poly.edu将该报文转发至根DNS服务器。
    3.该根DNS服务器注意到DNS服务器的edu前缀并向本地DNS服务器dns.poly.edu返回负责edu的顶级域DNS服务器的ip地址列表
    4.本地DNS服务器接收到了返回的报文,根据报文中的IP地址,向该顶级域DNS服务器发送查询报文
    5.顶级域DNS服务器注意到了umass.edu前缀,用包含权威DNS服务器的IP地址进行响应,该权威DNS服务器是负责马萨诸塞大学的dns.umass.edu
    6.本地DNS服务器直接向主机dns.umass.edu重发查询报文
    7.主机dns.umass.edu使用gaia.cs.umass.edu的IP地址作为响应,传回给本地DNS服务器
    8.最终,本地DNS服务器将包含最终结果的查询报文转发给请求主机http://cis.poly.edu
    总共8份报文

    可以看到,这8份报文由以下两部分组成:

    ●请求主机和本地DNS服务器的请求/响应,共两份报文

    ●本地DNS服务器和根DNS服务器,顶级域DNS服务器,权威DNS服务器的请求响应,共6份报文


    image.png

    DNS查询方式

    DNS查询分为递归查询和非递归查询
    所谓递归查询是指接收请求的第一个域名服务器必须自始至终对请求进行处理,或向其它域名服务器进行请求且最终获得授权数据,并对请求进行应答。采用递归查询时,当所请求的域名信息在自身缓冲区时,域名服务器直接返回缓冲数据。此时递归查询请求标志无效。
    所谓非递归查询是指接收请求的第一个域名服务器可以返回可靠数据(本身有时),也可以返回指向其它服务器的指针(相当于将查询的接力棒传给了最接近的域名服务器)。
    主机的地址解析程序在查询时可以指定是否用递归还是非递归查询方式。非递归查询方式与递归查询方式相比响应速度快。

    相关文章

      网友评论

          本文标题:DNS(域名系统) 学习笔记

          本文链接:https://www.haomeiwen.com/subject/hwsytftx.html