定义
域名系统DNS是因特网使用的命名系统,它作为可以将域名和IP地址相互映射的一个分布式数据库。
存在的必要性
就像拜访朋友要先知道别人家怎么走一样,Internet上当一台主机要访问另外一台主机时,必须首先获知其地址,TCP/IP中的IP地址是由四段以"."分开的数字组成,记起来总是不如名字那么方便,所以,就采用了域名系统来管理名字和IP的对应关系。
例如:微软公司的Web服务器的IP地址是207.46.230.229
对应的域名是 www.microsoft.com
不管用户在浏览器中输入的是207.46.230.229还是www.microsoft.com,都可以访问其Web网站。
服务方式
采用客户服务器方式。大多数名字在本地进行解析,少量解析在因特网通信,因此DNS系统的效率很高。由于DNS是分布式系统,即使单个计算机出了故障,也不会妨碍整个DNS系统的正常运行。
域名服务器:运行域名服务器程序的机器
域名到IP地址的解析是由分布在因特网上的许多域名服务器合作完成。
解析过程简单分析
当一个应用进程需要把主机名解析为IP地址时,该应用进程就调用解析程序,并成为DNS的一个客户,把带解析的域名放在DNS请求报文中,以UDP用户数据报方式发给本地域名服务器(使用UDP是为了减少开销)。本地域名服务器在查找域名后,把对应的IP地址放在回答报文中返回。应用进程获得目的的IP地址即可进行通信。
若本地域名服务器不能回答该请求,则此域名服务器就暂时成为DNS中的另一个客户,并向其他域名服务器发出查询请求。这种过程直至找到能够回答该请求的域名服务器为止。
因特网的域名结构
因特网采用了层次树状结构的命名方法,就像全球邮政系统和电话系统那样。任何一个连接在因特网上的主机或路由器,都有一个唯一的名字——域名。
域:名字空间中一个可被管理的划分。
域可分为顶级域、二级域、三级域,等等。
域名标识定义规则:
- 所有节点的标记只能由3类字符组成:26个英文字母(a-z)、10个阿拉伯数字(0~9)和英文连词号(-),并且标记的长度不得超过22个字符。
- 级别最低的域名写在最左边,级别最高的顶级域名写在最右边。完整域名总共不超过255个字符。
- DNS既不规定一个域名需要包含多少个下级域名,也不规定每一级的域名代表什么意思。各级域名由其上一级的域名在整个因特网范围内是唯一的。
注意:点分十进制IP地址中一定是包含3个“点”,一个域名中“点”的数目不一定是3个。
顶级类别域名
-
国家顶级域名(nTLD)
-
cn :中国
-
us : 美国
-
uk : 英国
-
通用顶级域名(gTLD)
-
com:公司企业
-
edu:教育机构
-
gov:政府机构
-
mil:军事部门
-
net:互联网络及信息中心
-
org:非赢利性的组织
-
int :国际组织
域名树
- 叶子结点就是单台计算机的名字,并且不能再继续往下划分子域。
- 虽然中央电视台和清华大学都各有一台计算机取名为mail,但它们的域名不一样,前者是mail.cctv.com,后者是mail.tsinghua.edu.cn。因此,即使世界上还有很多单位的计算机取名为mail,但是每个在因特网中的域名却都必须是唯一的。
- 因特网的名字空间是按照机构的组织来划分的,与物理的网络无关,与IP地址中的“子网”也没有关系。
域名服务器
DNS采用划分区的方法来组织每一个域名服务器
区:一个服务器所负责管辖的范围。
区是域的子集
各单位根据具体情况自己划分自己管辖范围的区。
要求:在一个区中的所有节点必须是相互联通的。
权限域名服务器:保存对应区中所有主机的域名到IP地址映射。
DNS服务器的管辖范围以区为单位。
下图是区的不同划分方法的举例。
全球的域名解析服务器分布:为了保证域名解析的正确和有效性,Internet协会把全球分成了3个区域:美国网络信息中心(负责美国及其他地区)、欧洲网络信息中心(负责欧洲地区)、日本网络信息中心(负责亚洲地区)
根域名服务器:最高层次的域名服务器,所有的根域名服务器都知道所有的 顶级域名服务器的域名和IP地址。
举例:比如你要去找一个人的身份证和名字的对应关系,首先你去派出所查本地人口,查不到就去分局、再去市局、省厅、直到公安部。公安部的户籍信息,就是人口信息的根。
根域名服务器的重要地位:如果本地域名服务器,要对因特网上任何一个域名进行解析,只要子集无法解析,就先要向根域名服务器求助。如果所有的根域名服务器出现故障,那么整个DNS系统就会瘫痪。
根域名服务器的作用:根服务器主要用来管理互联网的主目录,全世界IPv4根服务器只有13台,这13台IPv4根域名服务器名字分别为“a”至“m”),1个为主根服务器在美国。其余12个均为辅根服务器,其中9个在美国,欧洲2个,位于英国和瑞典,亚洲1个位于日本。这些根域名服务器相应的域名分别是a.tootservers.net,…,m.rootservers.net。截至2014年10月,全球有504台根服务器。
注意:根域名服务器并不是13个机器,而是13套装置
根域名服务器采用的技术:任播技术,当DNS客户向某个根域名服务器进行查询时(用这个根域名服务器的IP地址),因特网上的路由器就找到离这个DNS客户最近的一个根域名服务器。
优点:不仅加快了DNS的查询过程,也更加合理地利用了因特网的资源。
例如,根域名服务器f现在有40个地点安装有机器,下图是这40个地点的分布情况(中国有3个,位置是北京、香港、台北)。
注意:根域名服务器并不时直接查询的域名直接转换成IP地址,而是告诉本地域名服务器下一步应该找哪一个顶级域名服务器进行查询。
顶级域名(TLD)服务器:负责管理在该顶级域名服务器注册的所有二级域名。当收到DNS查询请求时,就给出相应的结果(可能是最后的结果,也可能是下一步应当找的域名服务器的IP地址)
权限域名服务器:负责一个区,当一个权限域名服务器还不能给出最后的查询结果时,就会告诉DNS客户,下一步应当找哪一个权限域名服务器。
本地域名服务器:当一个主机发出DNS查询请求时,这个查询请求报文首先发送给本地域名服务器。每一个因特网服务提供者ISP,一个大学,甚至一个大学里的系,都可以拥有一个本地域名服务器(默认域名服务器)。
本地域名服务器离用户较近,一般不超过几个路由器是距离。如果所要查询的主机属于同一个本地ISP时,该本地域名服务器立即就能将查询的主机名转换为它的IP地址,不需要再去询问其他的域名服务器。
域名服务器的可靠性保证:DNS域名服务器(主域名服务器)数据复制到几个域名服务器(辅助域名服务器)来保存。当主域名服务器出故障时,辅助域名服务器可以保证DNS的查询工作不会中断。只能在主域名服务器中更改数据,然后再复制到辅助域名器中,这样就保证了数据的一致性。
域名的具体解析过程
主机向本地域名服务器查询一般都采用递归查询
递归查询:如果主机所访问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其他根域名服务器将继续发送查询请求报文(替该主机继续查询),而不是让该主机进行下一步的查询。
因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询所需的IP地址。
本地域名服务器向根域名服务器的查询是采用迭代查询。
迭代查询:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器:“你下一步应该向哪一个域名服务器进行查询”。然后让本地服务器进行后续的查询(不是替本地域名服务器进行查询)。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向该顶级域名服务器查询。
顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地域名服务器下一步应当向哪一个权限域名服务器进行查询,本地域名服务器就这样进行迭代查询。最后知道了所要解析的域名的IP地址,然后把这个结果返回给发起查询的主机。当然,本地域名服务器也可以采用递归查询。这取决于最初的查询请求报文的设置是要求使用哪一种查询方式。
迭代查询:
递归查询:
高速缓存:在域名服务器中使用了高速缓存,存放最近查询过的域名和从何处获得域名映射信息的记录。
例如:在上图的查询过程中,如果之前有用户查询过域名为y.abc.com的IP地址,那么本地域名服务器就可以不向根域名服务器进行查询,直接把高速缓存中存放的上次的查询结果(即y.abc.com)的IP地址告诉DNS用户。
如果本地域名服务器的缓存中没有y.abc.com的IP地址,而是存放了顶级域名服务器dns.com的IP地址,那么本地域名服务器也可以不向根域名服务器进行查询,而是直接向com顶级域名服务器发送查询请求报文。
作用:提高DNS查询效率,减轻根域名服务器的负荷和减少因特网上的DNS查询报文数量
主机中也需要高速缓存:许多主机在启动时从本地域名服务器下载名字和地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在缓存中找不到名字时才使用域名服务器。