什么是DNS
域名系统DNS(Domain Name System)是互联网使用的命名系统,用来把便于人们使用的机器名字转换为IP地址。 为什么不直接用域名,而要用IP IP长度是固定的,而域名的长度是不固定的,对于计算机来说处理IP会更加方便简单,而对于人来说,使用域名比使用IP更加方便简单。
简单的工作原理
- 在浏览器中输入www.baidu.com。
- 浏览器从上述URL中抽取出主机名www.baidu.com,并将这台主机名传给DNS应用的客户端,每个计算机都有DNS客户端,用来与DNS服务器通讯。
- DNS客户向DNS服务器发送一个包含主机名的请求。
- DNS客户最终会收到一份回答报文,其中含有对应于该主机名的P地址。
- 一旦浏览器接收到来自DNS的该IP地址,它就能够向位于该IP地址服务器进程发起一个TCP连接。
DNS负载分配
可以通过DNS实现负载分配,一个域名可以映射多个IP地址,这些服务器均运行在不同的端系统上,DNS数据库中存储着这些IP地址集合。当客户对映射到某地址集合的名字发出一个 DNS请求时,该服务器用IP地址的整个集合进行响应,但在每个回答中循环这些地址次序。
DNS工作机理
理论上来讲,一整个互联网只要有一台DNS服务器就足够了,但是现今的互联网太庞大了,这种单点的机制有着以下的问题:
- 单点故障:DNS服务器挂了,这个互联网都奔溃。
- 通讯困难:请求量过于庞大。
- 距离问题:单点服务器无论部署在哪,都不合适,总有地方离得过远。
- 维护代价高:所有的映射关系都保存在单点,不好维护。
因此,DNS采用了分布式的设计方案,形成了一个分布式的数据库系统。
层次
- 根DNS服务器:在因特网上有13个根DNS服务器(标号为A到M),它们中的大部分位于北美洲。这13个根DNS服务器并不是只是13台单机,而是13个集群,是一个冗余服务器的网络。
这些根服务器负责维护顶级域名如 com、org、net、edu和gov,以及所有国家的顶级域名如cn、fr、ca和jp,根服务器根据域名可以找到对应的顶级DNS服务器。 - 顶级DNS服务器:这些服务器负责顶级域名如 com、org、net、edu和gov,以及所有国家的顶级域名如uk、fr、ca和jp。通过这些顶级域服务器可以查到对应的权威DNS服务器。
- 权威DNS服务器:在因特网上具有公共可访问主机的每个组织机构必须提供公共可访问的DNS记录,这些记录将这些主机的名字映射为IP地址。一个组织机构的权威DNS服务器收藏了这些DNS记录。一个组织机构能够选择实现它自己的权威DNS服务器以保存这些记录;另一种方法是,该组织能够支付费用,让这些记录存储在某个服务提供商的一个权威DNS服务器中。多数大学和大公司实现和维护它们自己基本和辅助(备份)的权威DNS服务器。
还有另一类重要的DNS,称为本地DNS服务器((local DNS server),一个本地DNS服务器严格说来并不属于该服务器的层次结构,但它对DNS层次结构是重要的。 每个ISP(如一个大学、一个系、一个公司或一个居民区的ISP)都有一台本地DNS服务器。当主机与某个ISP连接时,该ISP提供一台主机的IP地址,该主机具有一台或多台其本地DNS服务器的IP地址。 主机的本地DNS服务器通常“邻近”本主机,对某机构ISP而言,本地DNS服务器可能就与主机在同一个局域网中;对于某居民区ISP来说,本地DNS服务器通常与主机相隔不超过几台路由器。 当主机发出DNS请求时,该请求被发往本地DNS服务器,它起着代理的作用,并将该请求转发到DNS服务器层次结构中。
详细的例子
假如我们在浏览器中输入www.baidu.com。
- 我们主机向本地DNS服务器发送DNS请求。
- 本地DNS服务器向根DNS服务器发送请求。
- 根DNS服务器返回com对应的顶级DNS服务器。
- 本地DNS服务器向顶级DNS服务器发送请求。
- 顶级DNS服务器根据二级域名baidu返回baidu.com对应的权威DNS服务器。
- 本地DNS服务器向权威DNS服务器发送请求。
- 权威DNS服务器返回IP地址给本地DNS服务器。
- 本地DNS服务器返回IP地址给我们的计算机。
DNS缓存
实际上,为了改善时延性能并减少在因特网上到处传输的DNS报文数量,DNS 广泛使用了缓存技术。DNS缓存的原理非常简单,在一个请求链中,当某DNS服务器接收一个DNS回答时,它能将该回答中的信息缓存在本地存储器中,下次有同样的域名请求,就可以直接从缓存中得到结果。
迭代查询和递归查询
- 递归查询:我们计算机到本地DNS服务器的查询就是递归查询,计算机直接把请求委托给本地DNS服务器,有本地DNS服务器去请求其他的DNS服务器。
- 迭代查询:本地DNS服务器到根DNS服务器、顶级DNS服务器、权威DNS服务器的查询就是迭代查询,根DNS服务器获得结构之后并不会帮本地DNS服务器去请求顶级DNS服务器,而是把结果给本地DNS服务器,由本地DNS自己去请求顶级DNS服务器,同样的顶级DNS服务器的结果也是如此。
|