IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    DNS编程开发(1)—DNS工作原理

    cjhust发表于 2014-10-31 15:11:45
    love 0

    1、知识百科

    网络中的主机通信是通过IP地址来实现的,通常IPv4的地址是四个数字加点组成,如果和每台主机通信我们都要去记忆IP地址的话,这通常对于人类来讲是相当痛苦的。于是网络上就有了一套为了解决这个问题的方案出现了,也就是DNS主机名称解析系统。它是一套能够将数以千万计的IP地址通过查询DNS数据库,轻松的转化成与之对应的一串单词字符串,也就是主机名,网络上称之为域名,相对于IP地址,用单词组成的域名明显好记多了。

    DNS域名解析系统是有层级关系的,整个层级关系的表现形式就像一棵大树,每一层,我们称之为域。最顶层的域我们通常叫作根域,用点号表示,第二层通常用com、net、edu、gov、mil、org....,这层我们叫作顶级域,往下第三层,也就是我们经常见到的域名了,如51cto.com,这一层我们称之为二级域,当二级域加上www后,就是第四层了,就这样一直往下细分。域名的写法通常是由小到大,从左往右书写,用点连接,最后加点表示根,整个结构如下图所示:

    image


    2、资源记录

    我们要查询这些庞大数据当然要有专门的主机负责这些工作了,提供查询、存储DNS数据服务的主机我们称之为DNS服务器。网络上为了方便域名的注册、管理、解析,将DNS域名映射到特定类型的资源信息,我们称之为资源记录。资源记录是有类型的,主要有SOA、NS、MX、A、PTR、AAA和CNAME这7种类型。

    类型

    含义

    特点

    SOA

    起始授权

    只能有一个,而且必须是第一个

    NS

    域名服务器

    用于表示DNS服务器的域名地址

    MX

    邮件交换器

    用于一个域下的邮件使用

    A

    域名-->IP

    我们经常用到的就是它了

    PTR

    IP-->域名

    和A记录相反,用于反向解析

    AAAA

    域名-->IPv6

    基本不用

    CNAME

    别名记录

    用于作A记录的域名的别名


    3、工作原理

    image

    假设以wubinary.blog.51cto.com为例:

    第一步:当我们使用DNS客户端请求查询此域名的的A记录时,DNS服务器首先会判断所要查询域名是属于哪个区域,是否在自己的管辖范围,假设此次域名不在管辖范围。


    第二步:为了确定当前域名是在哪个级别,DNS服务器要向根询求帮助,根会向DNS服务器返回所在域名的顶级域的DNS服务器地址,也就是根的下一级com的DNS服务器地址。此时DNS服器根据这个地址又再次查询,此次查询获得了51cto.com的DNS的服务器地址。于是终于确定了wubinary.blog.51cto.com的区域所在的DNS服务器地址了。DNS服务器的此类确定一个地址,并使用这个址去查询下一个的查询方式我们称之为迭代查询。


    第三步:确定了区域地址后,51cto.com为了向DNS服务器返回结果需要一级一级的往下查。一开始查询到了blog.51cto.com的DNS服务器地址,于是blog.51cto.com的DNS服务器则向下查询。blog.51cto.com又查询到了wubinary.blog.51cto.com的DNS服务器地址,此时的地址正是DNS服务器要找的地址。到了这一步,wubinary.blog.51cto.com的DNS服务器则会把结果向它的上级汇报,于是上一级又向上一级汇报,最终结果回到了最初的DNS服务器,此时DNS客户端才能获得最终的IP地址。像这样DNS服务器的数据逐级遍历及逐级返回的过程,我们称之为递归查询。

    备注:如果我们查询的域名正好和当前查询使用的DNS服务器所匹配,则DNS服务器会先查询本地缓存是否存在,如果存在则返回缓存数据,如果不存在则去数据文件中读取数据并运回结果。

    三个与解析有关的配置文件

    /etc/hosts:此文件早期在没有出现DNS服务器的时候,作用和DNS服务器类似,不过随着网络的发展,单个文件根本无法满足需求,于是,此文件通常运用于本地IP解析。

    /etc/resolv.conf:定义DNS服务器IP地址,本地解析域名通常使用的都是这里面定义的IP地址。

    /etc/nsswitch.conf:这个文件则是来决定先要使用/etc/hosts还是/etc/resolv.conf的设置。

    备注:理解DNS的树状结构、递归及迭代查询后,其它就好办了。


    4、DNS查询

    递归查询

    一般客户机和服务器之间属递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到结果后转交给客户机。

    迭代查询

    一般DNS服务器之间属迭代查询,如:若DNS2不能响应DNS1的请求,则它会将DNS3的IP给DNS2,以便其再向DNS3发出请求;

    区别

    迭代查询和递归查询是可以发送到域名服务器的两种请求。递归查询是最常见的发送到本地域名服务器的请求。当本地域名服务器接受了客户机的查询请求时,本地域名服务器将力图代表客户机来找到答案,而在域名服务器执行所有工作的时候,客户机只是等待。如果本地域名服务器不能直接回答,则它将在域名树中的各分支上下递归搜索来寻找答案。

    对于一个递归查询,DNS服务器将持续搜索直到收到回答。这种回答可以是主机的IP地址,也可以回答“主机不存在”。不论是哪种结果,递归域名服务器将把结果返回给客户机。一个域名服务器若设置为使用前向服务器,则它将发送递归查询到指定的前向主机。这台收到前向查询的主机也将工作在递归模式以回答查询。如果本地服务器不是一个从属服务器,过一会儿它可能会自行开始查询过程,尽管它仍然希望从它的前向主机处得到回答。如果本地域名服务器设置为一个前向服务器的从属服务器,则工作方式会有所不同。客户机可以发送递归查询到一台从属服务器,但从属服务器不能进行递归查询,它实质上将成为其前向服务器的客户机等待回答。

    迭代查询则有所不同。迭代查询的最好例子是一台本地域名服务器发送请求到根服务器。当某个企业的本地域名服务器向根服务器提出查询,根服务器并不一定代表本地域名服务器来担当起回答查询的责任。另一种说法是根服务器不接收递归查询。事实上,根服务器只是为解析查询做一件事:指引本地域名服务器到另一台主机来查询回答。这种做法通常称为重指引,也是期望得到的迭代查询的结果。例如,当根服务器被要求查询www.isi.edu的地址,根服务器不会到ISI域名服务器查询www主机的地址,它只是给本地域名服务器返回一个提示,告诉本地域名服务器到ISI域名服务器去继续查询和得到结果。



沪ICP备19023445号-2号
友情链接