一、域名的由来
随着接入互联网的计算机越来越多,IP地址的缺点也就逐渐暴露出来,主要原因在于,对人不够友好,主要有以下几个缺点:
- IP地址是一串数字,难于记忆和输入;
- IP地址可能会随时变化,因为服务器可能会更换位置和网络供应商;
- IP地址不能包含多个网站或子域名;
如何解决此问题?就在IP地址之上再来一次抽象,把数字形式的IP地址转换成更有意义的名字,在字符串的层面上增加新的玩法,于是就出现了DNS域名系统。相比于IP地址,域名有以下有点:
- 域名是字母和数字的组合,更方便人类使用 ;
- 域名可以保持不变,只需要更新DNS记录;
- 域名可以通过URL来区分不同的页面或内容;
二、域名的形式
域名是一个有层次的结构,由多个分段分段组成,每个分组间用 . 来分割,下面是域名的构成和每个分段的意义:
- 顶级域(Top-Level Domain,TLD):域名的最高级别分段,表示域名的分类或者国家,如.com表示商业网站,.org表示非营利组织,.cn表示中国。常见的顶级域还包括.net、.gov及.edu等。
- 二级域(Second-Level Domain,SLD):紧接顶级域,通常用于标识特定的组织、公司、品牌或者个人,如www.baidu.com,baidu就是二级域。
- 子域(Subdomain):二级域下面的一级,可根据需要添加多个子域。子域能进一步细分和组织网站的内容,常见的www就是一个子域。
- 主机名(Hostname):最低级别的分段,表示特定的服务器和设备,如mail.example.com,mail一般代表邮件服务。主机名的作用是让我们更容易记忆。
域名的本质其实是名字空间系统,使用多级域名可以换分出不同的国家、地区、组织、公司和部门等。所以每个域名都是独一无二的,可作为一种身份的标识。
因为域名的这个特性,域名也被扩展到了其他应用领域,如Java的包机制就采用域名作为命名空间,只是采用了反序,如常见的应用包名:org.apache.catalina.webresources.*
三、域名的解析
域名必须转换成IP地址,这个过程就叫做域名解析。全球每天发生的网络流量高达百亿次,绝大部分请求都是基于域名来访问的。所以DNS就成了互联网重要的基础设施,必须要保证域名解析稳定可靠,快速高效。
DNS的核心系统是一个三层树状结构的分布式服务,基本对应域名的结构,如下图:
- 根域名服务器:管理顶级域名,返回com、org、cn等顶级域名的IP地址;
- 顶级域名服务器:管理各自域名下的权威域名服务器,比如com顶级域名服务器可以返回apple.com域名服务器的IP地址;
- 权威域名服务器:管理自己域名下的主机的IP地址,如apple.com权威域名服务器可以返回www.apple.com的IP地址;
根域名服务器最为关键,必须是众所周知的,否则下面的各级服务器就无从谈起。在此架构下,任何一个域名都可以在此树状结构里从顶至下进行查询,最终就获得了域名对应的IP地址。
现要访问www.apple.com这个域名,就要进行如下三个步骤:
- 向根域名服务器发送查询请求,获得com顶级域名服务器的IP地址;
- 向com顶级域名服务器发送查询请求,即可获得apple.com域名服务器的IP地址;
- 最后访问apple.com域名服务器,就得到了www.apple.com的IP地址;
四、域名的缓存
虽然核心的DNS系统遍布全球,服务能力很强也很稳定,但网民如果全往这一个系统里挤,即使不瘫痪,访问的速度也会很慢。
所以在核心DNS系统之外,要有一些手段来减轻域名解析的压力,并且能够快速的获取结果,基本思路就是缓存。
一般大公司及网络运营商都会建立自己的DNS服务器,作为用户DNS查询的代理,代替用户访问核心DNS系统。这类“野生”的服务器被称为“非权威域名服务器”,可以缓存之前的查询结果。如果已经有了记录,就无需在从根服务器发起查询,直接返回对应的IP地址。这类DNS服务器要比核心DNS系统的服务器多很多,且大多数都部署在离用户很近的地方,较为知名的DNS服务器有Goole的8.8.8.8。
其次,操作系统也会对DNS解析结果做缓存,之前访问过的地址,下一次浏览器访问该网址时就不会再跑到DNS里访问了,直接在操作系统中就可以拿到。
另外,操作系统中还会有一个特殊的“主机映射”文件,通常是一个可编辑的文本,如果操作系统中找不到相关DNS缓存记录,就会在这个文件中找。
有了上面的非权威域名服务器、操作系统缓存及主机映射文件后,绝大多数的域名解析工作就不用“跋山涉水”了,直接在本地或者本机就能解决。不仅方便了用户,也极大的减轻了各级DNS服务器的压力,大大提升了访问效率。具体架构如下图: