yifangzhuhou

导航

今日刷题总结12

DNS原理及其解析过程

(1)因特网域名结构

因特网在命名主机时采用层次树状结构的命名方法。任何一个连接到因特网上的主机或路由器都有一个唯一的层次结构名字,即域名(domain name)。每个域名都是由标号(label)序列组成,各标号之间用小数点隔开。如下所示为央视的一个域名,其中com是顶级域名,cctv是二级域名,mail是三级域名。

DNS既不规定一个域名需要包含多少下级域名,也不规定每一级域名代表的意思。各级域名由由其上一级域名管理机构管理。最高的顶级域名由ICANN进行管理。域名只是逻辑概念,并不代表计算机的物理地点。顶级域名可以分为3大类:

a)国家顶级域名采用ISO3166的规定。如cn代表中国,us代表美国,uk代表英国等等;

b)通用顶级域名中最常见的为com(公司企业),net(网络服务机构),org(非营利组织),int(国际组织),gov(美国的政府部门),mil(美国的军事部门)。

c)基础结构域名只有一个,即arpa,用于反向域名解析,因此称为反向域名。

(2)域名服务器

如果DNS树状结构中的每一个节点都采用一个域名服务器,这样域名服务器的数量就会太多,整个DNS的运行效率也会降低。因此采用划分区的方法解决。一个域名服务器管辖的范围称为区,区中的所有节点必须连通,每个区都设置相应的权限域名服务器,用来保存该区中所有主机域名到IP地址的映射。下图是划分区举例。假定abc公司有下属部门x和y,部门x下面有分三个分部u,v,w,而y下面还有下属部门t。图a表示abc公司只设一个区abc.com。这时,区abc.com和域abc.com指的是同一件事。但图b表示abc公司划分为两个区:abc.com和y.abc.com。这两个区都隶属于域abc.com,都各设置了相应的权限域名服务器。不难看出,区是域的子集。

下图以上图(b)中abc公司划分的两个区为例,给出了DNS域名服务器树状结构图。这种DNS域名服务器树状结构图更精准地反映出DNS的分布式结构。图中每个域名服务器都能进行部分域名的IP地址解析,只对域名体系的一部分进行管辖。

 

根据域名服务器的作用,可以将其划分为4种类型:

a)根域名服务器:是最高层次以及最重要的域名服务器。所有根域名服务器都知道顶级域名服务器的域名和对应IP地址。当本地域名服务器无法解析域名时,首先就会求助于根域名服务器。因特网上共有13个不同IP地址的根域名服务器(不是指13个机器,而是13套装置),用从a到m的英文字母分别命名它们的域名,即a.rootservers.net,...,m.rootservers.net。由于采用任播技术,当DNS客户向某个根域名服务器进行查询时,路由器就能找到离这个DNS客户最近的一个根域名服务器。

b)顶级域名服务器:负责管理在该顶级域名服务器注册的所有二级域名。当收到DNS查询请求时,就给出相应应答(可能是最终结果,也有可能是下一级域名服务器的IP地址)。

c)权限域名服务器:负责一个区的域名服务器。当权限域名服务器无法给出最后的查询答案时,就告知DNS客户下一步该去查询哪个权限域名服务器。

d)本地域名服务器:本地域名服务器不属于DNS。当一个主机发送DNS查询请求时,首先会将该报文发送给本地域名服务器。ISP都拥有自己的本地域名服务器。

(3)域名解析过程

解析过程中有两种查询方式:

a)递归查询:主机向本地域名服务器查询一般采用这种方式。如果主机所询问的本地域名服务器无法解析域名,那么本地域名服务器就以DNS客户的身份向根域名服务器发出查询查询请求,即代替主机进行下一步查询。

b)迭代查询:本地域名服务器向根域名服务器查询一般采用这种方式。根域名服务器收到本地域名服务器的查询请求后,如果不能直接给出IP地址,那么就会告知本地域名服务器某个顶级域名服务器的IP地址并且下一步应该该域名服务器查询。顶级域名服务器接收到查询请求后,也是要么给出IP地址,要么告知本地域名服务器某个权限域名服务器的IP地址并且下一步应该向该服务器查询。依次进行直到获得域名的IP地址,然后把这个结果返回给主机。

下图显示了两种查询的区别。

假定域名为m.xyz.com的主机想知道另一个主机y.abc.com的IP地址。例如,主机m.xyz.com打算发送邮件给y.abc.com。这时就必须知道主机y.abc.com的IP地址。下面是上图a的几个查询步骤:

1)主机m.abc.com先向本地服务器dns.xyz.com进行递归查询。

2)本地服务器采用迭代查询。它先向一个根域名服务器查询。

3)根域名服务器告诉本地服务器,下一次应查询的顶级域名服务器dns.com的IP地址。

4)本地域名服务器向顶级域名服务器dns.com进行查询。

5)顶级域名服务器dns.com告诉本地域名服务器,下一步应查询的权限服务器dns.abc.com的IP地址。

6)本地域名服务器向权限域名服务器dns.abc.com进行查询。

7)权限域名服务器dns.abc.com告诉本地域名服务器,所查询的主机的IP地址。

8)本地域名服务器最后把查询结果告诉m.xyz.com。

    整个查询过程共用到了8个UDP报文。为了提高DNS查询效率,并减轻服务器的负荷和减少因特网上的DNS查询报文数量,在域名服务器中广泛使用了高速缓存,用来存放最近查询过的域名以及从何处获得域名映射信息的记录。例如,在上面的查询过程中,如果在m.xyz.com的主机上不久前已经有用户查询过y.abc.com的IP地址,那么本地域名服务器就不必向根域名服务器重新查询y.abc.com的IP地址,而是直接把告诉缓存中存放的上次查询结果(即y.abc.com的IP地址)告诉用户。

        由于名字到IP地址的绑定并不经常改变,为保持告诉缓存中的内容正确,域名服务器应为每项内容设置计时器并处理超过合理时间的项。当域名服务器已从缓存中删去某项信息后又被请求查询该项信息,就必须重新到授权管理该项的域名服务器绑定信息。当权限服务器回答一个查询请求时,在响应中都指明绑定有效存在的时间值。增加此时间值可减少网络开销,而减少此时间值可提高域名解析的正确性。

        不仅在本地域名服务器中需要高速缓存,在主机中也需要。许多主机在启动时从本地服务器下载名字和地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到名字时才使用域名服务器。维护本地域名服务器数据库的主机应当定期地检查域名服务器以获取新的映射信息,而且主机必须从缓存中删除无效的项。由于域名改动并不频繁,大多数网点不需花精力就能维护数据库的一致性。

参考《计算机网络(第5版)》(谢希仁 著)

posted on 2017-08-17 17:17  yifangzhuhou  阅读(229)  评论(0编辑  收藏  举报