什么是DNS
域名系统DNS是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换及有关电子邮件的选路信息。一个应用程序请求TCP打开连接或使用UDP发送一个数据报之前,必须将一个主机名转换为一个IP地址。
域名结构
各级域名有其上一级域名管理机构管理,而最高的顶级域名则由ICANN进行管理。
域名解析
域名到IP地址的解析过程由下:当某一个应用进程需要把主机名解析为IP地址时,该应用进程就调用解析程序,并成为DNS的一个客户,把解析的域名放在DNS请求报文中,一UDP用户数据报方式发给本地域名服务器(使用UDP是为了减少开销)。本地域名服务器在查找域名后,把对应的IP地址放在回答报文中返回。应用进程获得目的主机的IP地址后即可进行通信。
在详细分析DNS解析过程之前,先来弄懂以下几个概念:
- 根域名服务器:根域名服务器是最重要的域名服务器,是最高层次的域名服务器,也是最重要的域名服务器。所有的跟域名服务器都知道所有的顶级域名服务器的域名和IP地址。
- 顶级域名服务器(即TLD服务器):这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名。当收到DNS查询请求时,就给出相应的回答,这个回答可能是洗最后的结果,也可能是下一步应当查找的域名服务器的IP地址。
- 权限域名服务器:没一个区设置相应的权限域名服务器,用来保存该区中的所有主机的域名到IP地址的映射。DNS服务器的管辖范围是以“区”为单位的。
- 本地域名服务器:当一台主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。每一个互联网服务提供者ISP,或者一个大学,甚至一个大学里的系,都可以拥有一个本地域名服务器。
域名解析的过程
DNS域名解析有两种方法,分别是递归查询和迭代查询
- 递归查询:主机向本地域名服务器的查询。如果主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份向其他根域名服务器继续发出查询请求报文,而不是让该主机自己进行下一步查询。
当然,在查找过程中会优先使用缓存。
前面说了这么多官方的话,总结起来就是:
- 如果浏览器有缓存,直接使用浏览器缓存,否则使用本机缓存,再没有的话就是用host
- 如果本地没有,就向DNS域名服务器查询。先由主机向本地域名服务器进行递归查询,如果没有查到则由本地域名服务器向根服务器进行迭代查询。