上次简单说了下 hosts 文件的作用,然后又看了很多这方面的资料,再来总结一下:
在很早之前,全球的网络主机还很少的时候,IP 地址的映射主要靠的就是各主机里的 hosts 文件来实现,那时候的 hosts 文件保存着互联网上所有主机地址的映射。而 hosts 文件的更新是由一个专门来维护 hosts 文件的站点来实现。也就是说那时根本就不需要也没有 DNS 服务器这东西,用自己主机上的 hosts 文件就可以找到对方的 IP 地址然后建立连接了。
但是很明显随着互联网的规模增大,hosts 文件根本不可能存放这么多地址映射的记录,而且这个数量级光数查找就要好些时间了,效率很低。最可悲的还要算那个负责维护更新的站点,要同时为世界上所有主机更新规模巨大的 hosts 文件。
所以 DNS 就这么来了,DNS 承包了 hosts 文件的工作,用来记录世界上各个主机的地址映射(如此一来,hosts 文件已经渐渐被荒废了),当一台主机需要访问另一台主机时,向 DNS 服务器发送一个请求,DNS 服务器就会返回目标主机的 IP 地址回来了。
那么又想到,全世界主机的地址映射都存放在同一台服务器上,并且接受所有主机的请求,一台 DNS 服务器还是承担不了这个重任。但其实 DNS 服务器是层级而且是分布式的,也就是说每个各个主机分成许多个不同的区域,好像我们写地址一样,由大到小,从国家一直到市镇,每个区域有自己的 DNS 服务器群。
所以我们平时访问的域名地址也是按照这种从小到大的顺序命名的,方便 DNS 服务器查找。如:gmail.google.com
,最右的就是顶级域名.com
了,这我们都很熟悉,目前世界上已有超过250个顶级域名了,例如中国的.cn
第二个.google
就是隶属于.com
下的二级域名了,以此类推有三级域名四级域名等。一般都不会超四吧,反正我就没见过了,四级域名都有点少见。
用一棵树来比喻可能更好理解,每个顶级域名都对应多个 DNS 服务器(里面包含一个 master 服务器和多个 slave 服务器,slave 服务器主要用来备份数据,加快解析地址的速度,保证系统的可用性等),每个区域的域名服务器除了保存它们所在地区的主机的地址映射外,还有其父域名服务器和子域名服务器的地址映射,以此关联起来。
这里还说一个重要的,就是域名地址的类型分好几种
然后到这里可能又会产生一个问题就是顶级域名已经是最顶级的域名了,它们没有父级域名,那么顶级域名之间怎么通信呢?
根域名服务器帮我们解决这个问题,它保存了所有顶级域名区域的权威域名服务器记录。所以这是一个十分重要的服务器,截止2014年10月,全球共有504台根域名服务器,嘛~大部分都是被美国控制的。
一般电脑连接上网后,会自动获得一个默认的 DNS 服务器,称为本地域名服务器。查看本机的DNS 服务器的地址方法是:windows打开命令行,输入ipconfig /all
即可
当然,也可以自己手动设置自己可信任的 DNS 服务器,因为之前说过的 DNS 污染导致的安全问题,所以手动设置的方法是:
以 Win10 位例,右击桌面右下角的网络图标 -> 打开网络共享中心 -> 更改适配器设置 -> 选择你连接的网络的图标右键 -> 属性 -> 选中 Internet 协议版本4 按属性
可看出,一般都是默认自动获取的,勾选 使用下面的 DNS 服务器地址 就可以手动设置了。
之前在很多地方都看见一个为8.8.8.8
的地址,这是啥地址?其实这就是所谓的 Google Public DNS,是由 Google 推出的公共免费域名解析服务,目的在于改进网络浏览速度,改善网络用户浏览体验。之前有段时间中国防火长城封锁了这个地址,后来虽然解封了,但毕竟服务器是在国外,怎么也比不上国内的 DNS 服务器来得快,所以也不常用,但可以信赖。除了8.8.8.8
,8.8.4.4
也是 Google 的。
最后再简单说一下用户请求 DNS 服务器返回目标主机地址的流程。
首先,用户 A 要访问用户 B ,用户 A 向其本地域名服务器发送请求,如果用户 B 与用户 A 在同一区域内,则本地域名服务器直接返回地址,贼快。如果用户 B 在遥远的其它地方,我一直以为本地域名服务器会访问它的父级域名服务器,再沿着树一直往上寻找。然而并不是这样的,本地域名服务器自己没有后,会直接请求根域名服务器,根域名服务器会返回一个顶级域名服务器的地址,然后本地域名服务器再去请求该顶级域名服务器,顶级域名服务器再返回一个其它的域名服务器地址回来,本地域名服务器一直这样根据这些地址来请求相应的域名服务器(真是域名服务器界的劳模),直到找到目标主机的地址再返回给用户主机,用户主机用这个地址直接与目标主机建立连接,域名解析完成。
好吧,写完了,真的是每写一篇博文都要花费一个两三小时的时间啊。一直忙于考试,终于能抽出时间来写了。