因特网中主机和人一样可以使用多种方式进行标识,主机的一种标示方法是用他的主机名,但是主机名几乎没有提供任何关于主机在因特网中的位置信息,路由器很难通过主机名来找到主机,因此,主机使用所谓IP地址来进行标识
识别主机有两种方式,主机名和IP地址.人们喜欢便于记忆的主机名标识方式,而路由器则喜欢定长的,有层次结构的IP地址.为了折中,计算机网络里有一种应用专门提供这样的服务,它就是DNS(Domain Name System)域名系统。DNS是:一个有分层的DNS服务器实现的分布式数据库;一个是的主机能够查询分布式数据库的应用层协议.DNS协议运行在UDP之上,使用53号端口
除了主机名到IP地址的转换外,DNS还提供了一些重要的服务:
DNS的一个简单的设计是在因特网上只使用一个DNS服务器,该服务器包含所有映射.在这种集中式设计中有一些问题:
为了处理扩展性问题,DNS服务器采用层次式组织,并且分布在全世界范围内;大致来说,存在三种DNS服务器:根DNS服务器、顶级域DNS服务器和权威DNS服务器.
举例说明,其工作的普遍流程:一个DNS客户端,希望获得www.baidu.com的IP地址,DNS客户端首先和根DNS服务器取得联系,它将返回负责解析顶级域名com的服务器的IP地址(或者其集合),客户将同这些服务器之一取得联系,然后顶级域DNS服务器建返回baidu.com的权威服务器的IP集合,客户端通过与这些服务器之一取得联系,获得www.baidu.com的IP地址。
DNS缓存实际上是为了改善时延性能并且减少在因特网上传输的DNS报文数量而引入的。DNS缓存原理十分简单,每当DNS服务器发出请求后收到回答时,就将回答的内容缓存在它自己的主机空间上。这样,如果有相同的请求到达时,就不需要再去发出请求,直接使用缓存即可;因为有了缓存,本地DNS就可以直接提供一些经常被访问的主机名所对应的IP地址,而不需要询问根DNS服务器了。由于主句和主机名与IP地址之间的映射并不是永久的,DNS服务器在一段时间之后(通常设置为两天)将丢弃缓存信息.
共同实现DNS分布式数据库的所有DNS服务器存储了资源记录(Resource Record,RR),RR提供了主机名到IP地址的映射.每条资源记录包含下列字段的4元组:(Name,Value,Type,TTL)
TTL是该记录的生存时间,他决定了资源记录应该从缓存中删除的时间
name和value的值取决于type:
Type=A:name是主机名,value是主机名对应的IP地址
Type=NS:name是个域,而value是个知道如何获得该域中主机IP地址的权威DNS服务器主机名
Type=CNAME,value是别名为name的主机对应的规范主机名
Type=MX:value是别名为name的邮件服务器的规范主机名
如果一台DNS服务器是用于某特定主机名的权威DNS服务器,name该DNS服务器回有一条包含用于该主机名的类型A记录
如果服务器不是用于某主机名的权威服务器,那么该服务器将包含一条记录为NS记录,该记录对应于包含主机名的域;他还将包含一条类型A记录,该记录提供了再NS记录的value字段中DNS服务器的IP地址
DNS报文有两种,即查询报文和回答报文,并且两种报文有着相同的结构:
前12字节是首部区域,标识符是一个用来标记该查询的16比特数。该标志符会被复制到相应的回答报文里,以便匹配请求和回答;标志字段有若干标志,用来指出报文的类型(请求还是响应)、查询类型(递归还是迭代)、是否是所请求名字的权威DNS服务器、以及4个有关数量的字段,用来指示4类数据区域出现的数量;
问题区域包含了正在进行的查询信息,包括名字字段、查询类型;
权威区域包含了其他权威服务器的信息;
附加区域包含了其它有帮助的记录,比如在对于一个MX类型的请求回答报文里,回答区域里指出了邮件服务器的规范主机名,而附加区域里就有可能包含一个类型为A的关于该规范主机名的的IP地址;
需要在注册登记机构完成这一任务,当你注册一个域名时,需要向该机构提供你的基本和辅助DNS服务器的名字和IP地址;该注册机构将确保一个类型为NS和类型为A的记录输入对应的顶级域名服务器;这样就完成了插入数据