赞
踩
解析器 名字服务器
DNS(Domain Name System)是一种用于 TCP/IP 应用程序的分布式数据库(这里是指在 Internet 上的单个站点不能拥有所有的信息),它提供主机名字和 IP 地址之间的转换及有关电子邮件的选路信息。
从应用的角度上看,对 DNS 的访问是通过一个地址解析器( resolver )来完成的。在 Unix 主机中,该解析器主要是通过两个库函数 gethostbyname(3)
和gethostbyaddr(3)
来访问的,它们在编译应用程序时与应用程序连接在一起。前者接收主机名字返回 IP 地址,而后者接收 IP 地址来寻找主机名字。
解析器通过一个或多个名字服务器来完成这种相互转换。
以点“.”结尾的域名称为绝对域名或完全合格的域名 FQDN(Full Qualified Domain Name),例如 sun.tuc.noao.edu.。注意的是,DNS名字是由DNS树的底部逐步向上书写的。这意味着对于IP地址为140.252.13.33的sun主机,它的DNS名字为 33.13.252.140.in-addr.arpa。
顶级域名被分为三个部分:
arpa
是一个用作地址到名字转换的特殊域。普通域
。有些书也将这些域称为组织域。国家域
,或地理域。这个树里面的域名并不是统一管理的,网络信息中心(NIS)负责分配顶级域和委派其他制定地区域的授权机构。
一个独立管理的 DNS 子树叫做一个区域 (zone),最常见的区域就是二级域名,比如说.com.cn。我们还可以把这个二级域名给划分成更小的区域,比如说sina.com.cn。一旦一个区域的授权机构被委派后,由它负责向该区域提供多个名字服务器。当一个新系统加入到一个区域中时,该区域的 DNS 管理者为该新系统申请一个域名和一个 IP 地址,并将它们加到名字服务器的数据库中。
DNS 系统是一个分布式的数据库,当一个数据库发现自己并没有某查询所需要的数据的时候,它将把查询转发出去,而转发的目的地通常是根服务器,根服务器从上至下层层转发查询,直到找到目标为止。DNS 还有一个特点就是使用高速缓存,DNS把查询过的数据缓存在某处,以便于下次查询时使用。
DNS 报文由 12 字节长的首部和 4 个长度可变的字段组成。
DNS查询报文中的问题部分
参见书14.4节
正向查询指的是通过域名得到 IP 的查询,而反向查询就是通过 IP 得到域名。例如用 host 命令,host ip
就可以得到服务器的域名,host domainName
就得到 IP。
稍微知道一点数据结构的人都能意识到,在正向查询的域里面做反向查询,其做法只有遍历整个数据集合—-对于DNS来说,那就是遍历整个数据库,这将带来巨大的负担,所以DNS采取了另一种方法,使用另一棵子树来维护IP-〉域名的对应表。这个子树的根节点是in-addr.arpa,而一个IP 例如192.168.11.2)所具有的DNS地址就是 2.11.168.192.in-addr.arpa(ip倒置)。在DNS系统里面,一个反向地址对应一个PTR纪录(对应A纪录),所以反向查询又叫做指针(PTR)查询。
BIND9默认是作为一个高速缓存服务器,其将所有的查询都转交到根服务器去,然后得到结果并放在本地的缓冲区,以加快查询速度。如果有兴趣可以安装一个BIND9来尝试一下。而自己定义的zone则可以规定其在缓存中的时间,一般是1天(就是配置文件中的1D)
DNS服务器支持TCP和UDP两种协议的查询方式,而且端口都是53。而大多数的查询都是UDP查询的,一般需要TCP查询的有两种情况:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。