|浅谈DNS和HOSTS文件的区别和关系

|浅谈DNS和HOSTS文件的区别和关系

TCP/IP 是基于 IP 地址进行通信的 , 但是 IP 地址是由一串复杂且易混淆的数字组成 , 不便于人们区别和记忆 。 为了方便记忆 , 便出现了另外一种更方便的标识符 , 这就是域名 。 这样我们在进行网络通信时 , 直接使用简便的域名就可以 , 而无需输入一大串IP地址 , 大大提升了访问效率和准确率 。

但如何实现域名和IP地址的一一对应关系 , 是需要亟待解决的一个问题 。 因此 , 系统会通过一个本地HOSTS文件 , 来实现域名转换IP地址额功能 。 hosts 文件包括主机名和 IP 地址的对应关系 。 当需要通过主机名访问主机时 , 它就会查看本地的 hosts 文件 , 从文件中找到相对应的 IP 地址 , 然后进行报文发送 。 如果在 hosts 文件中没找到相关信息 , 则主机访问失败 。
由于hosts文件储存在本地 , 所以查找响应速度快 , 但缺点也十分明显 。 一方面 , 每台主机的hosts文件都需要手动更新 , 不能实时获得我们想要访问站点的对应关系 , 且操作起来比较繁琐容易出错;另一方面 , 随着互联网规模的不断扩大 , 接入计算机的数量不断增加 , 维护难度越来越大 , 每台主机同步更新 , 几乎是一件不可能完成的任务 。
因此 , 我们需要一种更加智能简便容易维护的翻译机制 , 来完成相同的翻译功能 , 于是便出现了DNS域名系统 , 一个可以解决主机名和 IP 地址互相转换的系统 。 无论网络规模变得多么庞大 , 都能在一个小范围内通过 DNS 进行管理 。
DNS与hosts文件一样 , 同样储存着域名与IP地址之间的对应关系 , 所不同的事DNS独立于主机存在 , 所以无需用户手动更新 , 且DNS基于其独有的递归查询方式 , 可自动更新存储记录值 , 因此可以快速获得新站点的IP地址 , 解析访问效率大为提升 。
但与host文件一样 , 一台DNS服务器无论性能多么强大都无法存储所有主机记录 , 所以域名系统是一个分布式数据库系统 , 域名(主机名)到 IP 地址的解析可以由若干个域名服务器共同完成 。 每一个站点维护自己的信息数据库 , 并运行一个服务器程序供互联网上的客户端查询 。 DNS 提供了客户端与服务器的通信协议 , 也提供了服务器之间交换信息的协议 。 由于是分布式系统 , 即使单个服务器出现故障 , 也不会导致整个系统失效 , 消除了单点故障 。
DNS查询机制
当客户端对某个域名发起访问后 , 系统会首先查看浏览器缓存、hots文件、DNS缓存等本地记录 , 如果有记录直接返回给客户端 , 完成访问 。
如果本地没有记录 , 就需要借助DNS完成查询过程 , 首先主机会向递归服务器进行请求 , 如果递归服务器有记录 , 直接返回结果;
如果没有记录 , 递归服务器就会代替客户端向根服务器进行请求 , 根服务器返回域名所属的顶级域名服务器;
递归服务器向所属顶级服务器发起请求 , 顶级服务器返回域名所在的权威域名服务器;
权威服务器负责对查询域名的解析任务 , 存储着域名权威解析记录 , 权威服务器向对其发起请求的递归服务器返回查询结果;
递归服务器将记录返回给客户端 , 同时将记录存储在本机缓存 , 以供下次查询时使用 。
【|浅谈DNS和HOSTS文件的区别和关系】从以上流程中可以看出 , 域名解析是按照 DNS 分层结构的特点 , 自顶向下进行的 。 但是如果每一个域名解析都从根域名服务器开始 , 那么根域名服务器有可能无法承载海量的流量 。 在实际应用中 , 大多数域名解析都是在本地域名服务器完成 。 通过合理设置本地域名服务器 , 由本地域名服务器负责大部分的域名解析请求 , 提高域名解析效率 。