应用层—域名系统DNS

来源:互联网 发布:知乎 北京 裁缝店 编辑:程序博客网 时间:2024/05/16 17:10

域名系统DNS(Domain Name System)是因特网使用的命名系统,用于把便于人们使用的机器名字转化为IP地址。用户和因特网上的某个主机进行通信的时候,必须要知道对方的IP地址,但是IP地址对于用户来说是很那记住的,所以在应用层为了便于用户记忆各种网络应用,更多地是使用域名。

DNS是分布式的系统,所以即使单个计算机出现问题,也不会影响到整个DNS系统的正常运行。域名到IP地址的解析是由分布在因特网上的许多域名服务程序共同完成的,解析过程大致是这样的:当一个应用进程需要把主机名解析为IP地址时,该应用进程就要调用解析程序,然后成为DNS的一个客户,把解析的域名放在DNS请求报文中,以UDP用户数据报方式发给本地域名服务器(采用UDP是为了减小开销),本地域名服务器在查找到域名之后,把对应的IP地址放在回答报文中返回。如果本地服务器不知道这个域名怎么转换,那么该域名服务器就暂时成为DNS中的另外一个客户,并向其他域名服务器发出查询请求。
通过以上的描述,相信大家也对DNS域名系统有了大致的了解。下面将要继续介绍因特网的域名结构:
早期的因特网使用的是非等级的名字空间,但是由于因特网上的用户数量急剧增加,所以因特网后来就使用了层次树状结构的命名方法,任何一个连接在因特网上的主机或者是路由器,都有一个唯一的层次结构的名字,就是域名(domain name)。“域”是名字空间中一个可被管理的划分。域还可以划分很多子域。这样就有了顶级域、二级域、三级域等。例如:mail.cctv.com,每一个域名都是由标号序列组成的,标号之间用点隔开。最右边的是顶级域名,然后依次向左看是二级域名,三级域名。DNS规定,域名中的标号必须是英文字母或者是数字,每个标号不能够超过63个字符(一般来说,为了记忆,最好不要超过12个字符),也不区分大小写字符。标号中除了连字符“-”之外不能够使用其他的符号。由多个标号组成的域名整体不能够超过255个字符。
了解了因特网的域名结构之后,接着我们再来了解下域名服务器。本来理论上来说,可以让每一级域名都有一个相应的域名服务器,就像域名树一样。但是这样做会使得域名服务器的数量非常多。DNS采用了划分区的方法来解决这个问题:

一个服务器所负责管辖的范围叫做区,每个区都设置了一个相应的权限域名服务器(authoritative name server),用来保存该区域所有主机的域名到IP地址的映射。DNS服务器的管辖范围不是以“域”为单位的,而是以“区”为单位的。从上图我们可以发现,左边的域abc.com和区“abc.com”是一样的,但是右边不一样了,区abc.com和y.abc.com两者属于了域abc.com。不难发现区是域的子集。
下面我们将要了解四种不同域名服务器:
1、根域名服务器:
根域名服务器是最高层次的域名服务器,也是最重要的,所有域名服务器只要自己无法解析,就要首先求助于根域名服务器。在因特网中共有13个不同的IP地址的根域名服务器,它们的名字是用一个英文字母命名的,从a一直到m。但是这些域名服务器不是简简单单像看上一样只有13个机器负责。而是由13套装置,每一套装置使用一个域名,每一套装置又在不同的地点有不同的机器负责,几乎是遍布了全世界。但需要我们注意的是,根域名服务器一般是不直接把需要查询的域名转化为IP地址返回给本地域名服务器的,而是告诉本地域名服务器下一步应该去找哪一个顶级域名服务器查询。
2、顶级域名服务器
3、权限域名服务器
4、本地域名服务器(local name server):
当一个主机发出DNS查询请求的时候,这个查询报文首先应该发送给本地域名服务器。
知道了域名服务器之后,我们还要知道域名服务器是怎么进行域名解析的,大致来说应该有两种方法:
1、主机向本地域名服务器的查询一般都是采取递归查询(recursive query),所谓的递归查询是这样的,主机向本地域名服务器询问解析域名,如果本地域名服务器不知道的话,那么本地域名服务器就作为DNS客户的身份,咨询根域名服务器,而不是让主机自己进行下一步查询,最后将咨询到的结果返回给主机。
2、本地域名服务器向根域名服务器的查询一般是迭代查询(iterative query),所谓的迭代查询是这样的,当根域名服务器收到了本地域名服务器的请求的时候,根域名服务器告诉本地域名服务器下一步应该向哪一个域名服务器进行查询。而不是替本地域名服务器进行下一步查询。
DNS系统为了提高查询效率,还使用了高速缓存,存在与主机还有本地域名服务器中,如果近期查询过的域名就会被缓存在其中,下一次进行查询的时候就直接从缓存中找就好了。
0 0