域名系统时一种用于TCP/IP应用的分布式数据库,提供主机名和IP地址之间的转换,以及电子邮件的选路信息。单个站点不能拥有所有的信息。每个站点保留自己的数据库,并运行自己的服务器程序供其他客户查询查询。
对DNS的访问是通过地址解析器完成的,解析器主要通过两个库函数:gethostbyname(3) 和 gethostbyaddr(3)来访问。
解析器不像TCP/IP协议那样是操作系统的内核。
7.04.00.png
一个独立管理的DNS子树称为一个区域。一个常见的区域是一个二级域。如noao.edu。许多二级域也将它们的区域划分为更小的区域。
一旦一个区域的授权机构被委派后,由它负责向该区域提供多个名字服务器。当一个新系统加入到一个区域后,该区域的DNS管理者为该新系统申请一个域名和一个IP地址,并将它们加到名字服务器的数据库中。
一个名字服务器负责一个或多个区域。一个区域管理者必须为该区域提供一个主名字服务器和至少一个辅助名字服务器。这两个服务器是独立亢余的,以应付故障情况。
主,辅名字服务器的主要区别在于主名字服务器从磁盘文件调取该区域的所有信息,而辅名字服务器从主服务器调入所有信息。(区域传送)
当一个新主机加入一个区域后,区域管理者把适当信息加入到运行在主名字服务器上的一个磁盘文件中,然后通知主名字服务器重新调入它的配置文件。辅名字服务器定时轮询主名字服务器是否有新数据。
当一个名字服务器没有请求的信息时,它必须和其他的名字服务器联系。每个名字服务器必须知道如何与根名字服务器联系,必须知道根名字服务器的IP地址。跟服务器则知道所有二级域中每个授权名字服务器的IP。
DNS的另一个特性是高速缓存,当一个名字服务器收到有关映射信息时,会将信息存放在高速缓存中,之后若遇到相同请求,则可以直接用缓存中的结果而无需向其他服务器查询。
DNS的报文格式
7.20.41.png查询问题部分的格式:
7.24.01.png查询名是要查找的名字,是一个或多个标识符的序列。
资源记录部分的格式
7.26.01.png域名是记录中资源数据对应的名字。
生存时间字段是客户程序保留该资源记录的秒数。
指针查询
给定一个IP地址,返回与该IP地址对应的域名。
高速缓存
高速缓存是为了减少internet上DNS的通信量,由名字服务器维护的。
DNS名字服务器使用的熟知端口号无论对于UDP还是TCP都是53,所以DNS均支持UDP和TCP访问。
当名字解析器发出一个查询请求,返回响应中的TC(删减标志)比特被设置为1,表示响应长度超过了512字节,只能返回前512个字节。遇到这样的情况,名字解析器通常使用TCP重发原来的查询请求。因为TCP能将数据流分为一些报文端,所以它就能用多个报文段来传送任意长度的用户数据。同样,辅名字服务器向主名字服务器执行的区域传送也使用TCP,因为这里传送的数据远比一个查询响应大得多。
DNS服务器主要使用UDP,那么DNS查询和响应通常经过广域网,分组丢失率和往返时间更大,无论是名字解析器还是名字服务器都要自己处理超时和重传。
网友评论