本文将首先介绍一些DNS相关的基本概念和域名系统架构。


DNS (Domain Name System) 域名服务器的存在是由于IP地址往往难以记忆,所以通常使用域名来对其进行管理,例如www.google.com就是一个域名。但是在访问的时候,系统底层还是通过ip地址来进行访问的,域名和IP地址直接的转换就是通过DNS服务器来完成的。


1. 域名

一个域名主要分为3个部分:

--类型:标志着该域名的类型(顶级域如.net, .com, .org, 国家域如.cn, .uk, .us)

--域名:域的名称,如google

--主机名:域里面一台主机的名字,如www这台主机

严格的来说,域名后面还有一个 ".",所以完整的域名应该是  www.google.com.

下图是互联网域名的整体结构:

wKiom1LQ8TCRYscKAAB-5Vd20a0035.jpg


2. DNS查询类型

在对 www.google.com. 这个域名进行查询时,整个DNS查询过程就是如上图的根据域名从右到左来一步步查询, . root DNS -> com DNS -> google DNS -> www


2.1 递归查询(Recursive Query)

递归查询是一种DNS 服务器的查询模式,在该模式下DNS 服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机。如果DNS 服务器本地没有存储查询DNS 信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机。因为递归查询比较占用系统资源,有安全方面的隐患,所以可以设置DNS服务器不接受递归查询。

2.2 迭代查询(Iterative Query)

DNS 服务器另外一种查询方式为迭代查询,DNS 服务器会向客户机提供其他能够解析查询请求的DNS 服务器地址,当客户机发送查询请求时,DNS 服务器并不直接回复查询结果,而是告诉客户机另一台DNS 服务器地址,客户机再向这台DNS 服务器提交请求,依次循环直到返回查询的结果。


通过下面的示意图就可以知道这两种查询的区别了

wKioL1LQ-5DAy8bSAACeszIHFxU502.jpg

3. 资源记录 (Resource Record)

在DNS服务器上,DNS的信息都是通过一个叫做资源记录的格式来进行保存的,不仅能够保存域名到IP地址的信息,还能保持其他很多的信息:

  • 起始授权记录 (SOA Start Of Authority):SOA总是处于任何标准区域中的第一位。它表示最初创建它的 DNS 服务器或现在是该区域的主服务器的 DNS 服务器。它还用于存储会影响区域更新或过期的其他属性,如版本信息和计时。这些属性会影响在该区域的权威服务器之间进行区域传输的频繁程度。

  • 主机记录(A):是用于名称解析的重要记录,它将特定的主机名映射到对应主机的IP地址上。

  • 别名记录(CNAME): CNAME记录用于将某个别名指向到某个A记录上,这样就不需要再为某个新名字另外创建一条新的A记录。

  • IPv6主机记录(AAAA): 与A记录对应,用于将特定的主机名映射到一个主机的IPv6地址。

  • 域名服务器记录(NS):用来指定该域名由哪个DNS服务器来进行解析。

  • 邮件交换记录(MX Mail Exchange):指向一个邮件服务器,用于电子邮件系统发邮件时根据收信人的后缀来定位邮件服务器。有优先级:0-99

  • PTR记录(Pointer): IP地址的反向解析,格式为ReverseIP.in-addr.arpa.


TTL(Time To Live): 是一条域名解析记录在DNS服务器中的存留时间。当各地的DNS服务器接受到解析请求时,就会向域名指定的NS服务器发出解析请求从而获得解析记录;在获得这个记录之后,记录会在DNS服务器中保存一段时间,这段时间内如果再接到这个域名的解析请求,DNS服务器将不再向NS服务器发出请求,而是直接返回刚才获得的记录,而这个记录在DNS服务器上保留的时间,就是TTL值。


资源记录的格式为:

NAME(主机名) [TTL]    IN     TYPE(类型)     RDATA(信息值)

例如:www6400   IN    A     192.168.1.1


SOA的格式为:( 下面;开头表示注释)
@    [TTL]    IN   SOA   FQDN  admin_mailbox  (
      2014011101   ;序列号, serial number    
      2h  ;刷新时间, refresh time, 通知(notify): 只通知给本区域解析库文件中定义NS记录的所有主机;
      5m ;重试时间, retry time
      7d  ;过期时间, expire time
      1d ;否定答案的TTL

)