最近接触一个关于网络加速的项目,项目主要目的是加速用户请求访问网络的响应速度,提高用户体验。在这个项目中总是提及两个名词“DNS”和“CDN”,咋一看,3个字母就有2个字母一样,容易混淆,但此“DN”非彼“DN”,DNS全名:Domain Name System,域名系统,CDN全名:Content Delivery Network,内容分发网络,所以这两不是同一个概念,但它们之间又有着分不开的关系。DNS我们相对熟悉,在电脑配置网络时总遇到,CDN我们日常很少遇到,这里我打算彻底搞清楚DNS和CDN概念及他们之间的关系。
什么是DNS
DNS,全称 Domain Name System 。采用 client/server 模式,DNS client 发出查询请求,DNS server 响应请求。DNS client 通过查询 DNS server 获得主机的 IP 地址,进而完成后续的 TCP/IP 通信过程。
为什么要DNS
大部门分网站服务都是基于TCP/IP协议,而TCP/IP协议又是基于 IP 地址去查找对应主机服务进行通信的,但是 IP 地址是一长串数字不太好记,于是为了好记出现了域名代理IP地址,比如百度:www.baidu.com,我们平时上网访问某个网站都是通过www.xxx.com这种域名方式就行能通信访问。用域名虽然好记方便了客户端的使用,但怎么把域名解析成对应的IP地址呢?
当需要请求的网站数量比较少时,我们就能把对应IP地址和域名的对应关系存在本地hosts文件中,但是随着网络规模的不断扩大、接入计算机的数量不断增加,现在成千上万的网站域名,我们总不能把所有的域名和IP地址对应关系都存在hosts文件中吧,且每台主机的 hosts 文件都需要单独手工更新。维护难度越来越大,每台主机同步更新,几乎是一件不可能完成的任务。
那有没有专门负责做域名解析及管理的呢?这时DNS域名系统就出现了,为了解决域名及IP地址互相转换的系统。
DNS 域名
要理解DNS就得先了解什么是域名 。域名是为了识别主机名的一种分层的名称。因为单独的一台域名服务器是不可能知道所有域名信息,所以域名系统是一个分布式数据库系统,域名(主机名)到 IP 地址的解析可以由若干个域名服务器共同完成。每一个站点维护自己的信息数据库,并运行一个服务器程序供互联网上的客户端查询。DNS 提供了客户端与服务器的通信协议,也提供了服务器之间交换信息的协议。由于是分布式系统,即使单个服务器出现故障,也不会导致整个系统失效,消除了单点故障。
DNS 域名组成
DNS 域的本质是一种管理范围的划分,最大的域是根域,向下可以划分为顶级域、二级域、三级域、四级域等。相对应的域名是根域名、顶级域名、二级域名、三级域名等。不同等级的域名使用点号分隔,级别最低的域名写在最左边,而级别最高的域名写在最右边。
举个栗子:网站域名 www.tsinghua.edu.cn 中,从右到左开始,cn 是顶级域名,代表中国,edu 是二级域名,代表教育机构,tsinghua 是三级域名,表示清华大学,www 则表示三级域名中的主机,并提供了 web 服务。
除了 www 主机外,常见的主机还有 arch 、sem 、mail ,域名如下:
每一级的域名都由英文字母和数字组成,域名不区分大小写,长度不能超过 63 字节,一个完整的域名不能超过 255 个字节。
DNS 域名服务器
DNS 域名空间的层次结构,允许不同的域名服务器管理域名空间的不同部分。域名服务器是指管理域名的主机及软件,它可以管理所在分层的域,每层都设有一个域名服务器。
-
本地域名服务器
互联网接入服务运营商或者一个大的网络机构,像公司、大学等都有一台或多台可以自行管理的域名服务器,这类域名服务器称为本地域名服务器,也称为默认域名服务器。本地域名服务器离客户端较近。当一个 DNS客户端发出 DNS 查询时,首先送到本地域名服务器。如果本地域名服务器数据库中有对应的域名信息,会将查询的域名转换为 IP 地址返回客户端。如果没有,它会以 DNS 客户端的身份向根域名服务器进行查询。根域名服务器收到本地域名服务器的查询后,会返回相关域名服务器的 IP 地址,本地域名服务器再向相关域名服务器发送查询请求。 -
根域名服务器
通常根域名服务器用来管理顶级域,它注册了顶级域名服务器的 IP 地址,本身并不对域名进行解析,但它对 DNS 的检索数据功能起着至关重要的作用。如果想要新增一个一级域名,或者修改已有的顶级域名,就要在根域名服务器中进行新增或变更。IPv4 根域名服务器全球有 13 台,主机名分别为 A ~ M 。1 台为主根服务器在美国,其余 12 个均为辅根服务器,其中 9 个在美国,2 个在欧洲,位于英国和瑞典,1 台在亚洲,位于日本。所有的域名服务器都必须注册根域名服务器的 IP 地址,因为 DNS 根据 IP 地址进行检索时,需要按顺序从根域名服务器开始。 -
授权域名服务器
互联网上的主机在域名服务器上进行注册,这个域名服务器就是主机的授权域名服务器。通常,主机的授权域名服务器就是本地域名服务器。实际上,主机会有两个授权域名服务器,防止单点故障。授权域名服务器上有注册主机域名与 IP 地址的映射信息,当查询注册主机域名时,它会返回相应主机的 IP 地址。如果主机域名和 IP 地址需要进行变更,只需要在授权域名服务器处理即可,不用再向其它域名服务器进行申请或报告。
域名解析
将域名转换为对应的 IP 地址的过程叫做域名解析。在域名解析过程中,DNS client 的主机调用解析器( Resolver ),向 DNS server 发出请求,DNS server 完成域名解析。
客户端在查询 IP 地址时,向本地域名服务器进行递归查询。如果本地域名服务器的数据库有相应数据,则直接返回相应数据。如果没有,则本地域名服务器向根域名服务器进行迭代查询。从根开始对这棵树按照顺序进行遍历,直到找到指定的域名服务器,并由这个域名服务器返回相应的数据。客户端和本地域名服务器会将收到的信息保存在缓存里,这样可以减少每次查询时的性能消耗。
DNS 客户端进行域名 www.tsinghua.edu.cn 的解析的完整过程如下:
- 1、DNS 客户端向本地域名服务器发送请求,查询 www.tsinghua.edu.cn 主机的 IP 地址;
- 2、本地域名服务器查询数据库,发现没有域名为 www.tsinghua.edu.cn 的主机,于是将请求发送给根域名服务器;
- 3、根域名服务器查询数据库,发现没有这个主机域名记录,但是根域名服务器知道 cn 域名服务器可以解析这个域名,于是将 cn 域名服务器的 IP 地址返回给本地域名服务器;
- 4、本地域名服务器向 cn 域名服务器查询 www.tsinghua.edu.cn 主机的 IP 地址;
- 5、cn 域名服务器查询数据库,也没有相关记录,但是知道 edu.cn 域名服务器可以解析这个域名,于是将 edu.cn 域名服务器的 IP 地址返回给本地域名服务器;
- 6、本地域名服务器再向 edu.cn 域名服务器查询 www.tsinghua.edu.cn 主机 IP 地址;
- 7、edu.cn 域名服务器查询数据库,也没有相关记录,但是知道 tsinghua.edu.cn 域名服务器可以解析这个域名,于是将 tsinghua.edu.cn 的域名服务器 IP 地址返回给本地域名服务器;
- 8、本地域名服务器向 tsinghua.edu.cn 域名服务器查询 www.tsinghua.edu.cn 主机的 IP 地址;
- 9、tsinghua.edu.cn 域名服务器查询数据库,发现有主机域名记录,于是给本地域名服务器返回 www.tsinghua.edu.cn 对应的 IP 地址;
- 10、最后本地域名服务器将 www.tsinghua.edu.cn 的 IP 地址返回给客户端,整个解析过程完成。
域名解析是按照 DNS 分层结构的特点,自顶向下进行的。但是如果每一个域名解析都从根域名服务器开始,那么根域名服务器有可能无法承载海量的流量。在实际应用中,大多数域名解析都是在本地域名服务器完成。通过合理设置本地域名服务器,由本地域名服务器负责大部分的域名解析请求,提高域名解析效率。
好了,这篇DNS到这里,下篇准备搞懂CDN及与DNC的关系。