DNS
DNS(Domain Name System)域名系统是因特网使用的命名系统。用户在使用网络服务时是通过使用域名来进行对指定站点的訪问的,但是机器确是通过IP地址来处理的。为什么机器不用域名来处理呢?由于IP地址的长度是固定的32位,而域名的长度并非固定的,机器处理起来比較困难。
所以就须要将域名解析为IP地址。
DNS就是用来进行域名解析的server。DNS系统被设计成为一个联机分布式数据库,採用客户-server方式。DNS使大多数名字都在本地进行解析,仅少量解析须要在因特网上通信。因此DNS系统的效率挺高。
当某一个应用程序须要把主机名解析为IP地址时,该应用程序就调用解析程序。并成为DNS的一个客户,把待解析的域名放在DNS请求报文中,以UDP用户数据报方式发给本地域名server(使用UDP是为了减小开销)。本地域名server在查找域名后,将相应的IP地址放在回答报文中返回。应用程序获得目的主机的IP地址后既可进行通信。
域名server
在介绍DNS的工作原理之前。我们须要将DNSserver分个类:根域名server、顶级域名server、权限域名server和本地域名server。
根域名server: 最高层次的域名server,也是最重要的域名server。
全部的根域名server都知道全部的顶级域名server的域名和IP地址。根域名server是最重要的server,若要对因特网上不论什么一个域名解析。仅仅要自己无法解析,就首先要求助根域名server。假设全部的根域名server都瘫痪了,整个DNS就无法工作了。在非常多时候,根域名server并不直接将查询到的域名转为IP地址,而是告诉本地server下一步应该找哪一个顶级域名server进行查询。
顶级域名server : 这些域名server负责管理在该顶级域名器注冊的全部二级域名。当收到DNS查询时,就给出最后答案,答案可能是最后的结果,也可能是下一步应当找的域名server的IP地址。
权限域名server : 负责一个区的域名server。当一个权限域名server不能查询到终于结果的话。就会告诉用户下一步须要查找哪个权限域名server。
本地域名server : 当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名server。主机向本地域名server的查询一般都是採用递归查询。所谓递归查询就是假设主机所询问的本地域名server不知道被查询域名的IP地址。那么本地域名server就以DNS客户的身份,向其它根域名server继续发出查询请求报文,而不是让该主机自己进行下一步查询。
本地域名server向根域名server的查询一般都是採用迭代查询。所谓迭代查询就是当根域名server收到本地域名server发出的查询请求报文后,要么告诉本地域名server下一步应该查询哪一个域名server。然后本地server自己进行兴许的查询。(而不是替代本地server进行兴许查询)。
各域名server关系图例如以下:
工作原理及过程
接下来我们通过一个完整的流程来了解DNS的完整工作流程。
假定域名为 m.xyz.com的主机想知道还有一个主机(域名为y.abc.com)的IP地址。
增加,主机m.xyz.com打算发送邮件给主机y.abc.com。这时就必须知道主机y.abc.com的IP地址。过程例如以下:
1. 主机m.xyz.com 先向其本地域名serverdns.xyz.com进行递归查询。
2. 本地域名server採用迭代查询,它先向一个根域名server查询;
3. 根域名server告诉本地域名server。下一次应查询的顶级域名serverdns.com的IP地址;
4. 本地域名server向顶级域名serverdns.com进行查询;
5. 顶级域名serverdns.com告诉本地域名server,下一次应查询的权限域名serverdns.abc.com的IP地址。
6. 本地域名server向权限域名serverdns.abc.com进行查询;
7. 权限域名serverdns.abc.com告诉本地域名server,所查询的主机y.abc.com的IP地址;
8. 本地域名server最后把查询结果告诉主机m.xyz.com。
以上八个步骤总共要使用八个UDP用户数据报的报文。本地域名server经过三次迭代查询后,从权限域名serverdns.abc.com得到了主机y.abc.com的IP地址,最后把结果返回给发起查询的主机m.xyz.com。
为了提高DNS查询效率。并减轻根域名server的负荷和降低因特网上的DNS查询报文数量,在域名server中广泛地使用快速缓存。用来存放近期查询过的域名以及从何处获得域名映射信息的记录。