关于域名系统DNS(Domain Name System)
从域名中解析出IP地址。
DNS主要由3部分组成:
① 名称解析器(resolver)
② 域名空间(domain name space)
③ 名称服务器(name server)
DNS服务器获取域名空间的部分信息的方法:
① 由管理员编辑一个原始区域文件;
② 从其他名称服务器那里复制区域文件;
③ 通过向其他DNS服务器查询来获取具有一定时效的缓存信息。
名称服务器的3种主要类型:
① 主(primary)名称服务器:拥有一个区域文件的原始版本的服务器。
② 次(secondary)名称服务器:从其他主名称服务器那里复制一个区域文件。是一个只读版本。次名称服务器通过区域传输(zone transfer)跟随主名称服务器上的区域文件进行变化。
③ 惟高速缓存(caching-only)名称服务器:没有区域文件。它的职责是帮助名称解析器完成名称解析,并缓存解析结果,便于以后使用。当惟高速缓存名称服务器第一次启动时,他没有存储任何DNS信息。它是在启动之后,通过缓存查询的结果来逐渐建立DNS信息。缓存表项的生存时间TTL由提供授权解析结果的名称服务器决定。该服务器将查询的生存时间和名称解析一起返回。
域名解析
TCP/IP 的域名系统是一个有效的、可靠的、通用的、分布式的 名称——地址 映射系统。
域名解析有两种方式:正向解析和反向解析。
① 正向解析:根据域名查询对其对应的IP地址或其他相关信息。
② 反向解析:根据主机的IP地址查询其对应的域名。
DNS在名称空间中设置了一个称谓in-addr.arpa的特殊域,专门用于反向解析。
为了能够使反向解析用与正向解析相同的方法进行解析,反向解析将IP地址的字节倒过来写,构成反向解析的“名称空间”。如:地址是202.119.80.126的主机的域名写成126.80.119.202.in-addr.arpa。
DNS服务器和客户端属于TCP/IP模型的应用层,DNS既可以使用TCP,也可以使用UDP,使用的是TCP/UDP的53号端口。
DNS接收两种类型的解析:递归解析和反复解析
① 递归解析(递归查询):
要求名称服务器系统一次性完成名称——地址变换。
递归查询强制指定的DNS服务器对请求做出响应(响应要么是一个包含相应解析结果的成功的响应,要么是一个失败的响应)。
本地的DNS服务器可能需要通过再查询一些其他的DNS服务器才能完成解析,当DNS服务器从其他服务器得到响应后,再向客户端发送回答。
② 反复解析(迭代查询):
要求客户端本身反复寻求名称服务器的服务来获得最终的解析结果。
过程:名称服务器收到请求后,若能够给出解析结果,则返回最终结果到客户端;如果本名称服务器无法给出解析结果,则返回给请求者它认为能够给出解析结果的服务器的IP地址。
请求者收到该IP地址后,将向该地址发送解析请求,直到获得最终的解析结果或失败的响应。
名称服务器在没有任何可以回答的信息时,将返回一个失败的响应。
怎样提高解析效率
可以采用两步名称解析机制和高速缓存技术解决这个问题。
① 两步名称解析机制
Ⅰ. 先通过本地名称服务器进行解析;
Ⅱ. 如果不行,再采用自顶向下的方法搜索。
优点:既提高了效率,又保证了域名管理的层次结构。
② 高速缓存
在名称服务器中使用高速缓存技术,存放最近解析过的 名称——地址 映射和描述解析该名称服务器位置的信息。
优点:可以避免每次解析非本地名称时都进行自顶向下的搜索,从而减少非本地名称解析带来的开销。
缺点:若授权名称服务器中的 名称——地址 映射已经发生了变化。而高速缓存未能作出相应的刷新,会有一个有效性的问题,缓存失效,从而导致解析错误。
有效性问题解决办法:
服务器向解析器报告缓存信息时,必须注明该信息是非授权的,同时还要指出能够给出授权解析结果的名称服务器的地址。
此外,高速缓存中的每一个映射表项都有一个生存时间TTL,一旦某个表的TTL时间到期,便将它从缓存中删除。