浅谈DNS

577 阅读6分钟

DNS概述:

概述

DNS(Domain Name System)域名系统,在TCP/IP网络中有非常重要的地位,能提供域名与IP地址的解析服务。简单来说,就是根据域名查出IP地址。

例如:当你访问www.baidu.com时,通过DNS解析IP地址为39.156.69.79。也就是我们访问服务器是通过IP地址进行访问的。

DNS是一个分布式数据库,命名系统采用层次的逻辑结构,如同一颗倒置的树,这个逻辑的树形结构称为域名空间,由于DNS划分了域名空间,所以各机构可以使用自己的域名空间创建DNS信息。

 

注:DNS域名空间中树的最大深度不得超过127层,数的每一个节点最长可以存储63个字节。

域和域名

DNS树的每一个节点代表一个域,通过这些节点,对整个域名空间进行划分,成为一个层次结构。域名空间的每个域的名字,通过域名进行表示。

域名: 通常由一个完全合格域名(FQDN)标识。FQDN能够准确表示出其相对于DNS域树根的位置,也就是节点到DNS树根的完成表述方式,从节点到树根采用反向书写,_并将每一个节点用“.”分隔,_对于DNS域google.com来说,其完全正式域名(FQDN)为google.com。

例如:google为com的子域,其表示方法为google.com,而www为google域中的子域,可以使用www.google.com表示

注意: 通常,FQDN有严格的命名限制,长度不能超过256字节,只允许使用字符a-z,0-9,A-Z和减号(-)。点号(.只允许在域名标志之间(例如‘’google.com‘’)或者FQDN的结尾使用。域名不区分大小。

由最顶层到下层,可以分为:根域名、顶级域、二级域、子域。(全球根域服务器有13台)

Internet域名空间的最顶层是根域,其记录着Internet的重要DNS信息,由Internat域名注册授权机构管理,该机构把域名空间各部分的管理责任分配给连接到Internet的各个组织。

DNS根域下面是顶级域,也由Internet域名注册授权机构管理。共有3种类型的顶级域。

**组织域: ** 采用3个字符的代号,表示DNS域中所包含的组织的主要功能或活动。比如com为商业机构组织,edu为教育机构组织,gov为政府机构组织,mil为军事机构组织,net为网络机构组织,org为非营利机构组织,int为国际机构组织。

**地址域: **采用两个的国家或地区代号,如cn为中国,kr为韩国,us为美国。

反向域: 这是个特殊域,名字为in-addr.arpa,用于将IP地址映射到名字(反向查询)。

DNS查询过程:

DNS的查询过程非常复杂,分为多个步骤。

工具软件dig可以显示整个查询过程

$ dig www.baidu.com

上述命令会输出四段信息。

第一段是查询参数和统计。

第二段是查询内容

上述结果表明,查询域名www.baidu.com的A记录,A是address

第三段是DNS服务器的答复。

上述结果显示,www.baidu.com有三个记录,即三个IP地址。72是TTL值(Time to live的缩写),表示缓存时间。其中我们可以看到www.baidu.com 被CNAME到 www.a.shifen.com 所以我们再查一下 www.a.shifen.com 即可看到其ip.

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

上面结果显示,本机的DNS服务器是192.168.124.1,查询端口是53(DNS服务器的默认端口),以及回应长度是90字节。

DNS记录方式:

域名与IP之间的对应关系,称为‘’记录‘’。根据使用场景,“记录”可以分成不同的类型,前面可以看到了有A记录。

域名解析记录类型:

  • A:地址记录(Address),用来指定域名对应的ip,例如将www.hello.com指定到 113.112.3.xxx, A记录可以将多个域名解析到一个ip地址,但是不能讲一个域名解析到多个ip地址
  • MX:邮件记录(Mail Exchange),返回接收电子邮件的服务器地址。
  • CNAME:规范名称记录(Canonical Name),即别名解析。所谓别名解析就是可以为一个域名设置一个或者多个别名,如将aaa.com解析到bbb.net、将ccc.com也解析到bbb.net,其中bbb.net分别是aaa.com和ccc.com的别名
  • NS:域名服务器记录(Name Server),返回保存下一级域名信息的服务器地址。该记录只能设置为域名,不能设置为IP地址
  • PTR: 逆向查询记录(Pointer Record),只用于从IP地址查询域名。    

域名解析过程图示

图片

两种查询方式:

  1. 递归查询: 递归查询是一种DNS服务器的查询模式,在该模式下DNS服务器接收到客户端请求,必须使用一个准确的查询结果回复客户端。如果DNS服务器本地没有存储查询DNS信息,那么服务器会询问其他服务器,并将返回的查询结果提交给客户端。
  2. 迭代查询: DNS服务器另外一种查询方式为迭代查询,当客户端发送查询请求时,DNS服务器并不直接回复查询结果,而是告诉客户端另一台DNS服务器地址,客户端再向这台DNS服务器提交请求,依此循环直到返回查询的结构为止。

总结:一般情况下,从pc客户端到本地DNS服务器是属于递归查询。而与DNS服务器之间交互查询属于迭代查询。

图示DNS解析baidu的过程:

  1. 终端向 Local DNS发起域名解析请求
  2. Local DNS在获取到域名请求后,首先从Root hins获取根域名服务器的地址(Root hints包含了互联网DNS根服务器的地址信息)
  3. 获取到了根域名服务器地址后,Local DNS向根域名服务器发起DNS解析请求,根域名服务器返回顶级域名服务器地址(com或者cn或者其它)
  4. 随后Local DNS向com域名服务器发起解析请求,并得到baidu.com二级域名服务器地址
  5. Local DNS向baidu.com二级域名服务器发起解析请求,并最终货到了www.baidu.com 的ip地址信息
  6. Local DNS将递归查询获得的IP地址信息缓存并返回给客户端