DNS介绍
IP地址虽然采用了十分记数法.但是对于人脑来说还是非常难以记忆,但是访问互联网网站又一定需要IP,为了应对这个问题.早期的时候是通过hosts文件来绑定主机名和IP的对应关系,
但是这种方法存在非常多的不足,特别是IP和主机名的对应关系越来越多的时候.hosts档案完全无法满足人们的需求.这个时候,伯克利大学发展出一套主机名IP对应系统.称为Berkeley Internet Name Domain, BIND .也就是目前全世界使用最广泛的Domain Name System, DNS
DNS系统采用树状的阶层是架构,
最顶上是root.也称为根域名,
第二层是顶级域名.例如com,org,edu,gov,net,还有国家域名,比如cn(中国),jp(日本),uk(英国),us(美国)等.
和DNS相关的另外一个概念是FQDN( Fully Qualified Domain Name ).完全合格域名. FQDN由两部分组成:hostname和domain name (也就是主机名+域名).最著名的主机名是www.它是所有网站站点的主机名.
举个例子: www.doweidu.com 这个就是一个FQDN完全合格域名.其中doweidu.com是域名.www是主机名
DNS的查询过程
DNS 是以类似『树状目录』的型态来进行主机名的管理的!所以每一部 DNS 服务器都仅管理自己的下一层主机 .下图演示了www.ksu.edu.tw这个主机名的DNS查询过程:
1.首先,当你在浏览器的网址列输入 http://www.ksu.edu.tw 时,你的计算机就会查询本机的hosts文件,是否绑定此主机名和IP的对应关系.
2.浏览器会查看本身的DNS缓存记录
3.客户端(也就是你本机)会向DNS服务器查询http://www.ksu.edu.tw的IP地址
4.如果DNS服务器没有此主机的IP地址,则想最顶层的root服务器查询.但是由于 . 只记录了 .tw 的信息,并不知道具体tw下的某个主机的IP地址.此时 . 会告诉DNS服务器它不知道主机的IP ,不过它知道tw服务器在哪里,你应该向 .tw 去询问才对,然后返回tw服务器的IP地址给DNS服务器
5.DNS Server接着又到 .tw 去查询,而该部机器管理的又仅有 .edu.tw, .com.tw, gov.tw… 那几部主机,经过比对后发现我们要的是 .edu.tw 的网域,所以这个时候 .tw 又告诉 DNS server 说:你要去管理 .edu.tw 这个网域的主机那里查询,我有他的 IP !
6.DNS Server接着又到.edu.tw去查询, .edu.tw 也没有具体主机的IP ,它会返回DNS服务器关于.ksu.edu.tw的地址,让DNS服务器去向.ksu.edu.tw服务器查询
7.当DNS server向.ksu.edu.tw服务器查询www.ksu.edu.tw主机的IP地址时,由于.ksu.edu.tw服务器管理此主机的IP地址关系,所以向DNS server返回正确的www.ksu.edu.tw主机的IP地址.
8.当DNS server查询到了正确的IP地址后,会将此主机名和IP地址缓存在自己的内存中,方便后续其他主机的查询.然后将IP地址返回给客户端,(当然,这个缓存值有时间限制,一般是24小时内,该记录就会被释放).
9.此时客户端浏览器拿到了正确的IP地址,就可以通过www.ksu.edu.tw这个域名访问远程主机的资源.如果DNS server到最后也没有查询到www.ksu.edu.tw主机的IP地址,DNS SERVER会告诉客户端此主机名不存在.客户端浏览器会返回错误信息,告诉用户此网站名不存在.
下面的dig命令详细论证了DNS的查询过程:
1 | [root@localhost ~]$dig +trace www.ksu.edu.tw |
DNS正向解析字段解析
dig对主机进行正向解析的结果有固定的格式和字段.下面解析一下各字段代表的意义
1 | [root@localhost ~]$dig www.baidu.com |
dig不加任何参数的情况下是查询A(address)记录,也就是主机的IP地址.上面输出结果格式简化如下:
1 | [domain] [ttl] IN [[RR type] [RR data]] |
domain: 查询的主机名,最好是用FQDN完全合格域名,也就是域名后面要加一个小数点. 代表根.例如:www.baidu.com. (不要忽略最后的一个.) 可以看到ANSWER SECTION字段的www.baidu.com.结尾有个小数点
ttl: time to live.意思就是当这笔记录被其他 DNS 服务器查询到后, 这个记录会保持在对方 DNS 服务器的快取中,保持多少秒钟的意思.所以,当你反复执行 dig 之后,就会发现这个时间会减少!为什么呢?因为在你的 DNS 快取中,这笔数据能够保存的时间会开始倒数, 当这个数字归零后,下次有人再重新搜寻这笔记录时,你的 DNS 就会重新沿着 . (root) 开始重来搜寻一遍, 而不会从快取里面捉取了 (因为快取内的资料会被舍弃)。
IN: 这个关键字是固定的.
RR type: 这个表示查询类型.这里是查询A记录.
RR data: 查询结果.在这里是查询出来的IP地址
1 |
|
上面演示了查询IP记录的方法.下面是查询其他类型的方法:
- NS:查询管理领域名 (zone) 的服务器主机名
如果你想要知道 www.haoshiqi.net 的主机由哪部 DNS 服务器提供的,那就得要使用 NS (NameServer) 的 RR 类型标志来查询。不过,由于 NS 是管理整个领域的,因此,你得要查询的目标将得输入 domain,亦即 haoshiqi.net才行
1 | [root@localhost ~]$dig -t ns haoshiqi.net |
- SOA :查询管理领域名的服务器管理信息
如果你有多部 DNS 服务器管理同一个领域名时,那么最好使用 master/slave 的方式来进行管理。既然要这样管理, 那就得要宣告被管理的 zone file 是如何进行传输的,此时就得要 SOA (Start Of Authority) 的标志了。
1 | [root@localhost ~]$dig -t soa haoshiqi.net |
SOA 主要是与领域有关,所以前面当然要写 ksu.edu.tw 这个领域名。而 SOA 后面共会接七个参数,这七个参数的意义依序是:
Master DNS 服务器主机名:这个领域主要是哪部 DNS 作为 master 的意思。在本例中, ns3.dnsv3.com 为 主要 DNS 服务器;
管理员的 email:那么管理员的 email 为何?发生问题可以联络这个管理员。
序号 (Serial):这个序号代表的是这个数据库档案的新旧,序号越大代表越新。 当 slave 要判断是否主动下载新的数据库时,就以序号是否比 slave 上的还要新来判断,若是则下载,若不是则不下载。 所以当你修订了数据库内容时,记得要将这个数值放大才行! 为了方便用户记忆,通常序号都会使用日期格式『YYYYMMDDNU』来记忆
更新频率 (Refresh):那么啥时 slave 会去向 master 要求数据更新的判断? 就是这个数值定义的。昆山科大的 DNS 设定每 3600 秒进行一次 slave 向 master 要求数据更新。那每次 slave 去更新时, 如果发现序号没有比较大,那就不会下载数据库档案。
失败重新尝试时间 (Retry):如果因为某些因素,导致 slave 无法对 master 达成联机, 那么在多久的时间内,slave 会尝试重新联机到 master。在本例中,180秒会重新尝试一次。意思是说,每 180秒 slave 会主动向 master 联机,但如果该次联机没有成功,那接下来尝试联机的时间会变成 180秒。若后来有成功,则又会恢复到 180 秒才再一次联机。
失效时间 (Expire):如果一直失败尝试时间,持续联机到达这个设定值时限, 那么 slave 将不再继续尝试联机,并且尝试删除这份下载的 zone file 信息。这设定为 1209600秒。意思是说,当联机一直失败,每 180秒尝试到达 1209600 秒后,slave 将不再更新,只能等待系统管理员的处理。
快取时间 (Minumum TTL):如果这个数据库 zone file 中,每笔 RR 记录都没有写到 TTL 快取时间的话,那么就以这个 SOA 的设定值为主。
CNAME :设定某主机名的别名 (alias)
有时候你不想要针对某个主机名设定 A 的标志,而是想透过另外一部主机名的 A 来规范这个新主机名时, 可以使用别名 (CNAME) 的设定
1 | [root@localhost ~]$dig www.baidu.com |
意思是说,当你要追查www.baidu.com 时,请找 www.a.shifen.com.那个主机,而那个主机的 A 就上面第二行的显示了。
这个 CNAME 有啥好处呢?用 A 就好了吧?其实还是有好处的,举例来说,如果你有一个 IP,这个 IP 是给很多主机名使用的。 那么当你的 IP 更改时,所有的数据就得通通更新 A 标志才行。如果你只有一个主要主机名设定 A,而其他的标志使用 CNAME 时,那么当 IP 更改,那你只要修订一个 A 的标志,其他的 CNAME 就跟着变动了!处理起来比较容易啊!
- MX :查询某领域名的邮件服务器主机名
MX 是 Mail eXchanger (邮件交换) 的意思,通常你的整个领域会设定一个 MX ,代表,所有寄给这个领域的 email 应该要送到后头的 email server 主机名上头才是
反向解析RR数据
在讲反解之前,先来谈谈正解主机名的追踪方式。以 www.api.haoshiqi.net. 来说,整个网域的概念来看, 越右边出现的名称代表网域越大!举例来说,.(root) > net > haoshiqi 以此类推。因此追踪时,是由大范围找到小范围,
但是 IP 则不一样啊!以我们的114.55.224.232 来说好了,当然是 114 > 55 > 224 > 232 ,左边的网域最大! 与预设的 DNS 从右边向左边查询不一样啊!那怎办?为了解决这个问题,所以反解的 zone 就必须要将 IP 反过来写,而在结尾时加上 .in-addr.arpa. 的结尾字样即可。所以,当你想要追踪反解时,那么反解的结果就会是:
1 | [root@localhost ~]$dig -x 114.55.224.232 |
PTR就是反向解析的意思.要注意的就是 zone 的名称了!要将 IP 反转过来写,并且结尾加上 .in-addr.arpa. 才行