DNS学习

DNS介绍

简介
DNS是Domain name system的简称,有些地方也称为Domain name server
推荐阅读书籍:《DNS & bind》
DNS主要是用于将域名解析为IP地址的协议,有时候也用于将IP地址反向解析成域名,所以DNS可以实现双向解析。
DNS可以使用TCP和UDP的53端口,基本使用UDP协议的53端口
域分类
最高层的域是根域(root)".",就是一个点,全球只有13个根域服务器,基本上都在美国。根域的下一层就是第二层次的顶级域(TLD)了,顶级域一般两种划分方法:按国家划分和按组织性质划分
◇ 按国家划分:.cn(中国)、.uk(英国)、.us(美国)。基本都是两个字母的。
◇ 按组织性质划分:.org、.net、.com、.edu、.gov、.cc等。
◇ 反向域:arpa。这是反向解析的特殊顶级域。
主机名、域名、FQDN
以百度(www.baidu.com)和百度贴吧(tieba.baidu.com)来举例。
◇ 域名
不论是www.baidu.com还是tieba.baidu.com,它们的域名都是baidu.com,严格地说是"baidu.com."。这是百度所购买的com域下的一个子域名。
◇ 主机名
对于www.baidu.com来说,主机名是www,对于tieba.baidu.com来说,主机名是tieba。其实严格来说,www.baidu.com和tieba.baidu.com才是主机名,它们都是baidu.com域下的主机。一个域下可以定义很多主机,只需配置好它的主机名和对应主机的IP地址即可。
◇ FQDN
FQDN是Fully Qualified Domain Name的缩写,称为完全合格域名,是指包含了所有域的主机名,其中包括根域。FQDN可以说是主机名的一种完全表示形式,它从逻辑上准确地表示出主机在什么地方。
例如www.baidu.com的FQDN是"www.baidu.com.",com后面还有个点,这是根域;tieba.baidu.com的FQDN是"tieba.baidu.com."
DNS解释流程
#以访问www.baidu.com为例。

(1).客户端要访问www.baidu.com,首先会查找本机DNS缓存,再查找自己的hosts文件,还没有的话就找DNS服务器(这个DNS服务器就是计算机里设置指向的DNS)。
(2).DNS服务器收到询问请求,首先查看自己是否有www.baidu.com的缓存,如果有就直接返回给客户端,没有就越级上访到根域".",并询问根域。
(3).根域看到是找.com域的,把到.com域的路(地址)告诉DNS服务器,让DNS服务器去找.com询问。
(4).DNS服务器去找.com,".com"一看是自己辖下的baidu.com,就把baidu.com的IP地址给DNS服务器,让它去找baidu.com。
(5).DNS找到baidu.com,baidu.com发现DNS服务器要找的是自己区域里的www主机,就把这个主机IP地址给了DNS服务器。
(6).DNS服务器把得到的www.baidu.com的IP结果告诉客户端,并缓存一份结果在自己机器中(默认会缓存,因为该服务器允许为客户端递归,否则不会缓存非权威数据)(7).客户端得到回答的IP地址后缓存下来,并去访问www.baidu.com,然后www.baidu.com就把页面内容发送给客户端,也就是百度页面。

#注意
  本机查找完缓存后如果没有结果,会先查找hosts文件,如果没有找到再把查询发送给DNS服务器,但这仅仅是默认情况,这个默认顺序是可以改变的。在/etc/nsswitch.conf中有一行" hosts: files dns"就是定义先查找hosts文件还是先提交给DNS服务器的,如果修改该行为"hosts:  dns files"则先提交给DNS服务器,这种情况下hosts文件几乎就不怎么用的上了。
  由于缓存是多层次缓存的,所以真正的查询可能并没有那么多步骤,假如某主机曾经向DNS服务器提交了www.baidu.com的查询,那么在DNS服务器上除了缓存了www.baidu.com的记录,还缓存了".com""baidu.com"的记录,如果再有主机向该DNS服务器提交ftp.baidu.com的查询,那么将跳过"."".com"的查询过程直接向baidu.com发出查询请求。
/etc/resolv.conf文件
这个文件主要用于定义dns指向,即查询主机名时明确指定使用哪个dns服务器。

#	文件格式
cat /etc/resolc.conf
domain  domain_name       # 声明本地域名,即解析时自动隐式补齐的域名
search  domain_name_list  # 指定域名搜索顺序(最多6个),和domain不能共存,若共存了,则后面的行生效
nameserver  IP1           # 设置DNS指向,最多3个
nameserver  IP2
nameserver  IP3        
options timeout:n attempts:n  # 指定解析超时时间(默认5秒)和解析次数(默认2次)

DNS术语

递归和迭代
例如A主机要查询C域中的一个主机,A所指向的DNS服务器为B,递归和迭代查询的方式是这样的:
递归查询:A --> B --> C --> B --> A
迭代查询:A --> B       A --> C --> A

为什么客户端到DNS服务器阶段是递归查询?因为客户端本身不是DNS服务器,它自己是找不到互联网上的域名地址的,所以只能询问DNS服务器,最后一定由DNS服务器来返回答案,所以DNS服务器需要对这个客户端允许递归。因此,dns解析器(nslookup、host、dig等)所发出的查询都是递归查询
权威服务器和(非)权威应答
#权威服务器(权威者)可以理解为直接上层域的DNS服务器。例如www.baidu.com这台主机的上层域是baidu.com,那么对www来说,它的权威服务器就是baidu.com这个域内负责解析的DNS服务器,而对于baidu.com这个主机来说,它的权威服务器是.com这个域负责解析的DNS服务器。

更具体的说,某域的权威服务器是可以直接查看该域数据(即区域数据文件)的DNS服务器,主、从DNS服务器都是权威服务器。

只有权威服务器给出的应答才是权威应答,否则就是非权威应答。为什么呢?因为一个域中所有的主机都是在DNS服务器中的区域数据文件中记录的,对于主机来说,它们的位置只有直接上层才知道在哪里。

因此如果解析www.baidu.com时要获得权威应答,应该将DNS指向baidu.com这个域内负责解析的DNS服务器。

只有权威服务器直接给出的答案才是永远正确的,通过缓存得到的答案基本都是非权威应答。当然这不是一定的,因为权威服务器给的答案也是缓存中的结果,但是这是权威答案。DNS服务器缓存解析的数据库时间长度是由权威服务器决定的。
DNS解析
在Client和DNS服务器这些个人订制的DNS解析系统中都会使用缓存来加速解析以减少网络流量和查询压力,就算是解析不到的否定答案也会缓存。

但是要访问的主机IP可能会改变,所有使用缓存得到的答案不一定是对的,因此缓存给的答案是非权威的,只有对方主机的上一级给的答案才是权威答案。缓存给的非权威答案应该设定缓存时间,这个缓存时间的长短由权威者指定。

主从DNS服务器
dns服务器也称为name server,每个域都必须有dns服务器负责该域相关数据的解析。但dns服务器要负责整个域的数据解析,压力相对来说是比较大的,且一旦出现问题,整个域都崩溃无法向外提供服务,这是非常严重的事。所以,无论是出于负载均衡还是域数据安全可用的考虑,两台dns服务器已经是最低要求了,多数时候应该配置多台dns服务器。

多台dns服务器之间有主次之分,主dns服务器称为master,从dns服务器称为slave。slave上的域数据都是从master上获取的,这样slave和master就都能向外提供名称解析服务。
资源记录(Resource Recored, RR)
对于提供DNS服务的系统(DNS服务器),域名相关的数据都需要存储在文件(区域数据文件)中。这些数据分为多种类别,每种类别存储在对应的资源记录(resource record,RR)中。也就是说,资源记录既用来区分域数据的类型,也用来存储对应的域数据。
DNS的internet类中有非常多的资源记录类型。常用的是SOA记录、NS记录、A记录(IPV6则为AAAA记录)、PTR记录、CNAME记录、MX记录等。
SOA记录:start of authority,起始授权机构
SOA记录:start of authority,起始授权机构。该记录存储了一系列数据,若不明白SOA记录,请结合下面的NS记录,SOA更多的信息见"子域"部分的内容。格式如下:
#
longshuai.com.   IN  SOA dnsserver.longshuai.com.   mail.longshuai.com. ( 1 3h 1h 1w 1h )

#前三列是声明性的语句,表示"longshuai.com."这个域内的起始授权机构为第四列的值"dnsserver.longshuai.com."所表示的主机。第五列和第六列是SOA的附加属性数据。
#第四列指定了"dnsserver.longshuai.com."为该域的master DNS服务器。
#第五列是该域的管理员邮箱地址,但注意不能使用@格式的邮箱,而是要将@符号替换为点".",正如上面的例子"mail.longshuai.com.",其实际表示的是"mail@longshuai.com"。
#第六列使用括号将几个值包围起来。第一个值是区域数据文件的序列编号serial,每次修改此区域数据文件都需要修改该编号值以便让slave dns服务器同步该区域数据文件。第二个值是刷新refresh时间间隔,表示slave dns服务器找master dns服务器更新区域数据文件的时间间隔。第三个值是重试retry时间间隔,表示slave dns服务器找master dns服务器更新区域数据文件时,如果联系不上master,则等待多久再重试联系,该值一般比refresh时间短,否则该值表示的重试就失去了意义。第四个值是过期expire时间值,表示slave dns服务器上的区域数据文件多久过期。第五个值是negative ttl,表示客户端找dns服务器解析时,否定答案的缓存时间长度。
NS记录:name server
NS记录:name server,存储的是该域内的dns服务器相关信息。即NS记录标识了哪台服务器是DNS服务器。格式如下:

longshuai.com.    IN  NS  dnsserver1.longshuai.com.
longshuai.com.    IN  NS  dnsserver2.longshuai.com.
#前三列仍然是声明性语句,表示"longshuai.com."域内的DNS服务器(name server)为第四列值所表示的"dnsserver.longshuai.com.",如果一个域内有多个dns服务器,则必然有主次之分,即master和slave之分。但在NS记录上并不能体现主次关系
A记录:address
A记录:address,存储的是域内主机名所对应的ip地址。
dnsserver.longshuai.com.    IN  A   172.16.10.15

#客户端之所以能够解析到主机名对应的ip地址,就是因为dns服务器中的有A记录存储了主机名和ip的对应关系。
AAAA记录存储的是主机名和ipv6地址的对应关系。
PTR记录:pointer
PTR记录:pointer,和A记录相反,存储的是ip地址对应的主机名,该记录只存在于反向解析的区域数据文件中(并非一定)16.10.16.172.in-addr.arpa.  IN  PTR  www.longshuai.com.

表示解析172.16.10.16地址时得到主机名"www.longshuai.com."的结果。
CNAME记录:canonical name
CNAME记录:canonical name,表示规范名的意思,其所代表的记录常称为别名记录。之所以如此称呼,就是因为为规范名起了一个别名。什么是规范名?可以简单认为是fqdn。
www1.longshuai.com.     IN  CNAME  www.longshuai.com.

最后一列就是规范名,而第一列是规范名即最后一列的别名。当查询"www1.longshuai.com.",dns服务器会找到它的规范名"www.longshuai.com.",然后再查询规范名的A记录,也就获得了对应的IP地址并返回给客户端。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值