DNS服务器原理介绍(一)

摘要:
DNS是互联网上的一个分布式数据库,用于映射域名和IP地址,使用户可以更方便地访问互联网,而无需记住机器可以直接读取的IP字符串。通过主机名获取主机名对应的IP地址的过程称为域名解析。DNS协议在UDP协议上运行,使用端口号53.nsswitch,它指定查找特定类型信息的方式和顺序。用户可以更好地选择存储模式,例如将用户名解析为UID、将服务解析为PORT、将域名解析为IP等。

DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。

域名

在讲解DNS之前,首先粗略的说一下域名这个东西,比如说我们在用浏览器访问网址的时候,我们输入的网站的地址就是一个域名,例如 www.google.com,但其实我们知道我们标志互联网中的每一个机器都是有一个IP地址的,我们若需要访问一个网站的服务器,实际上是需要输入该网站的IP地址来进行访问的,但是IP地址往往难以记忆,IPv4尚且难记,IPv6就更不用说了,所以我们就通过使用域名来对其进行管理,但是在访问的时候,系统底层还是通过ip地址来进行访问的,域名和IP地址直接的转换就是通过DNS服务器来完成的。

nsswitch框架

域名简单了解过了,再来说一说nsswitch框架这个东东。

nsswitch(name service switch configuration,名称服务切换配置),规定通过哪些途径以及按照什么顺序来查找特定类型的信息。还可以指定某个方法奏效或失效时系统将采取什么动作,是一种通用框架,与各种类型存储进行交互的公共模块化的实现。nsswitch是Linux中的一种解析框架,负责在程序跟存储方式之间做了一层对接。让用户可以更好地选择存储方式,如把用户名解析为UID,服务解析为PORT,域名解析为IP等。这些堆成映射解析的存储方式可以有多种,如nis,ldap,file,mysql等。而nsswitch这种框架就是提供给用户可以方便更换存储方式的;比如默认的用户名和密码等配置默认在/etc/passwd文件中,但是用户可以选项把用户和密码存储在ldap或mysql中,而上层只要通过nsswitch就框架编写的程序,在用到系统用户时就不需要关心这些账号密码存储在哪里了(不需要变动程序),由nsswitch这个中间层来搞定了。在nsswitch的配置文件/etc/nsswitch.conf中有这么一行语句,”hosts: files dns“,就表示域名解析时先找本机的/etc/hosts文件然后再找dns服务器。

需要详细了解可以看/etc/nsswitch.conf配置文件,nsswitch.conf中的每一行配置都指明了如何搜索信息,每行配置的格式如下:

Info: method[[action]] [method[[action]]…]

其中,info指定该行所描述的信息的类型,method为用来查找该信息的方法,action是对前面的method返回状态的响应。action要放在方括号里。当需要提供nsswitch.conf文件所描述的信息的时候,系统将检查含有适当info字段的配置行。它按照从左向右的顺序开始执行配置行中指定的方法。在默认情况下,如果找到期望的信息,系统将停止搜索。如果没有指定action,那么当某个方法未能返回结果时,系统就会尝试下一个动作。有可能搜索结束都没有找到想要的信息。

DNS服务器的出现

20世纪70年代末,域名解析刚开始使用的都是/etc/hosts文件来负责的,在60年代美国军方的一个项目ARPAnet,由电话交换网络转到TCP/IP数据交换网络(数据分组可以以多条路径发送且接收方收到数据并要发送确认)。那个时候接入互联网的只有四个主机美国加州大学的圣巴巴拉分校,洛杉矶大学,犹他州立,斯坦福研究所因为主机很少人们还是可以记住IP地址的,但是因为人最容易记忆的是字符串而不是数字也随着后来加入主机的越来越多人们发现已经记不住哪台主机是那个IP了;因此就出来了给主机命名的概念每一台主机起一个人们容易记忆的字符串,可以人们容易记忆了而主机却识别不了;因此域名解析出现了利用hosts文件就可以标明主机对应的IP是什么;人们访问主机名而主机负责在把主机名解析为IP地址即可。

但是后来随着互联网主机加入的越来越多,hosts文件已经不足以应对。因此美国就出现了一个机构IANA(现在由ICANN管理)负责管理IP和域名的转换;如果A想要接入网络中时就找IANA申请一个IP地址和一个主机名,如果B知道A的主机名想访问A就需要到IANA那里通过FTP下载hosts文件到本地更新自己的hosts文件里面就会有A主机主机名对应的IP地址;随着hosts文件越来越大IANA管理非常麻烦和用户定时就要去IANA哪里下载hosts文件。时间一长这总方法是行不通的。再后来IANA就建立起了DNS负责处理用户提交的请求帮用户解析域名对应的IP地址。

DNS重要性

1)技术角度看

DNS解析是互联网绝大多数应用的实际寻址方式; 域名技术的再发展、以及基于域名技术的多种应用,丰富了互联网应用和协议。

2)资源角度看

域名是互联网上的身份标识,是不可重复的唯一标识资源; 互联网的全球化使得域名成为标识一国主权的国家战略资源。

域名空间结构

DNS的分布式数据库是以域名为索引的,每个域名实际上就是一颗很大的逆向树中的路径,这棵逆向树称为域名空间。这棵树的层次结构如下图,和Linux文件系统的结构非常相似。在顶端,树有唯一的一个根域。在根下又可以有多个任意的分支,这些分支点称为“顶级域”。而在每个顶级域下又可以有多个相同的“二级域”,而树的深度不得超过127层。
DNS服务器原理介绍(一)DNS服务器原理介绍(一)

FQDN

FQDN:(Fully Qualified Domain Name)完全合格域名/全称域名,是指主机名加上全路径,全路径中列出了序列中所有域成员。全域名可以从逻辑上准确地表示出主机在什么地方,也可以说全域名是主机名的一种完全表示形式。从全域名中包含的信息可以看出主机在域名树中的位置。如www.baidu.com. 这个域名,分解后含义如下:

.           #表示根域
.com        #表示顶级域
baidu.com   #表示二级域
www         #表示主机名

根域:目前全世界只有13台根服务器,名字分别为“A”至“M”,其中10台设置在美国,另外3台设置于英国、瑞典和日本。

顶级域:有组织域和国家域,其中组织域有如:.com .org .net .edu .cc .info等等,国家域有:.cn .hk .jp等等。

二级域名:就是真正用于服务的,比如可以根据企业名称自行申请试用什么域名。

主机名:是用来标识这个域名对应的服务是什么,如www一般用于万维网,mail用于邮件,都可以随意设定。

下图是各个分支的表现形式:
DNS服务器原理介绍(一)DNS服务器原理介绍(一)

DNS服务器规则

1) 每一个主机都知道根域在哪里;

2) 上级必须知道下级;

3) 下级不知道上级;

4) 查询两段式递归查询和迭代查询;

5) 根域不迭代(根全球有13台a-m.root-servers.net);

6) 顶级域不迭代;

7) 二级域服务器可以只提供权威查询不提供迭代或转发;

DNS服务器解析过程

1)递归查询

递归查询是最常见的是主机发送到本地域名服务器的请求。当本地域名服务器接受了客户机的查询请求时,本地域名服务器将力图代表客户机来找到答案,而在域名服务器执行所有工作的时候,客户机只是等待。如果本地域名服务器不能直接回答,则它将在域名树中的各分 支上下递归搜索来寻找答案。对于一个递归查询,DNS服务器将持续搜索直到收到回答。这种回答可以是主机的IP地址,也可以回答“主机不存在”。不论是哪种结果,递归域名服务器将把结果返回给客户机。

2)迭代查询(可能发出多次请求)

本地域名服务器向根域名服务器的查询通常是采用迭代查询。当根域名服务器收到本地域名服务器的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地域名服务器进行后续的查询。

一个域名的查询过程解析

如DNS客户端需要解析www.baidu.com.cn这个域名,过程如下图:
DNS服务器原理介绍(一)DNS服务器原理介绍(一)

1、DNS客户端首先找本地DNS服务器进行域名解析,也就是自己设置的DNS地址;

2、本地DNS服务器收到请求后直接查找本服务器是否有此记录,如果有就直接返回域名对应的地址给客户端,那么这个域名的解析就完成了,这个就称为一次“递归查询”;

3、如果本地DNS没有查找到对应的记录,那么此DNS服务器就会请求根域找.cn服务器的地址(当然本地DNS服务器也可能不找根DNS而是直接转发到其他DNS服务器进行域名解析,但是如果被转发的那台DNS服务器不是www.baidu.com.cn的权威服务器还是需要进行找根服务器);

4、根服务器接收到请求后就会去找国际域名服务器列表,然后会返回.cn服务器的地址给本地DNS服务器;

5、本地DNS服务器收到.cn服务器地址后,就会找.cn服务器进行顶级域.com.cn服务器地址的解析,然后.cn服务器会返回.com.cn服务器的地址给本地DNS服务器;

6、本地DNS服务器收到.com.cn地址后,就会找.com.cn服务器解析baidu.com.cn服务器的地址;

7、本地DNS服务器收到baidu.com.cn的地址后,就会找baidu.com.cn服务器解析www.baidu.com.cn主机地址;

8、本地DNS服务器得到www.baidu.com.cn的IP地址后,会马上返回给客户端并缓存此域名;

9、客户端得到IP地址后缓存在本地,然后就可以通过IP地址访问百度服务器;

PS:在这个查询过程中,客户端发出的请求就是递归查询,而DNS服务器发出的请求就是迭代查询;另外,还有一个名词就是权威服务器(权威应答),意思就是真正负责你的域名记录解析的服务器称为权威服务器,其他解析都不能称为权威应答。

DNS服务器类型

1)主DNS服务器

主DNS服务器就是创建了区域的DNS服务器。这里的区域数据是可读可修改的。主DNS服务器中的区域数据也称为正本区域数据。在一个DNS服务网络中,可以建立多个主DNS服务器,这样可以提供DNS服务的容错性。

2)辅助DNS服务器

辅助DNS服务器不创建区域,它的区域数据是从主DNS服务器复制来的,因此,区域数据只能读不能修改,也称为副本区域数据。当启动辅助DNS服务器时,辅助DNS服务器会和建立联系的主DNS服务器联系,并从主DNS服务器中复制数据。辅助DNS服务器在工作时,它会定期地更新副本区域数据,以尽可能地保证副本和正本区域数据的一致性。辅助DNS服务器除了可以从主DNS服务器复制数据外,还可以从其他辅助DNS服务器复制区域数据。

在一个区域中设置多个辅助DNS服务器可以提供容错,分担主DNS服务器的负担,同时可以加快DNS解析的速度。

3)主控DNS服务器

不论是主DNS服务器还是辅助DNS服务器,如果它向其他辅助DNS服务器提供区域数据的复制服务,就称为DNS服务器是主控DNS服务器。如DNS服务器A向DNS服务器B提供数据复制服务,则A就称为主控DNS服务器。

4)高速缓存服务器

高速缓存服务器上不存在任何区域数据,它只帮助DNS客户机向其他DNS服务器进行查询,然后将查询到的数据存储在一份高速缓存Cache中,响应客户机的查询请求。Cache-Only 服务器只负责查询数据,当客户机查询数据时,如果Cache中存在数据,则Cache可以将结果快速反馈给客户机。

5)DNS转发服务器

DNS转发服务器是一种特殊类型的DNS服务器。在一个DNS网络中,如果客户机向指定的DNS服务器解析的域名不成功,DNS服务器就可以将客户机的解析请求发送给一台DNS转发服务器,顾名思义,DNS转发服务器就是将域名请求转发给其他DNS服务器。

免责声明:文章转载自《DNS服务器原理介绍(一)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CDH目录c# 判断窗体是否永在最前(TopMost),调用windows API下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

如何在Ubuntu server中修改IP

详细请移步至博客https://blog.csdn.net/shenzhen_zsw/article/details/74025066 方法一、 sudo  ifconfig eth0 100.100.100.60 netmask 255.255.255.0 注意:100.100.100.60为你想要改换的ip地址(即目标地址)   后面是子网掩码  方法...

342 版本控制系统:概述,本地版本控制系统,集中式版本控制系統,分布式版本控制系統

版本控制系统 为什么要有版本控制系统 在开发过程中,经常需要对一个文件进行修改,甚至删除,但是我们又希望能够保存这个文件的历史记录,如果通过备份,那么管理起来会非常的复杂。 什么是版本控制系统 版本控制系统(Version Control System):是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 版本控制主要的功能就是追踪...

DNS 正向查找与反向查找

原创地址:http://www.cnblogs.com/jfzhu/p/3996323.html 转载请注明出处 所谓正向查找,就是说在这个区域里的记录可以依据名称来查找对应的IP地址。反向查找就是在这个区域里的记录可以依据IP地址来查找对应的记录名称。 下面介绍如何在DNS中创建一个正向查找记录与反向查找记录,使用的环境是Windows Server 2...

gethostbyname() -- 用域名或主机名获取IP地址

#include <netdb.h>    #include <sys/socket.h>    struct hostent *gethostbyname(const char *name);    这个函数的传入值是域名或者主机名,例如"www.google.cn"等等。传出值,是一个hostent的结构。如果函数调用失败,将返...

Tomcat学习总结(3)——Tomcat优化详细教程

Tomcat是我们经常使用的 servlet容器之一,甚至很多线上产品都使用 Tomcat充当服务器。而且优化后的Tomcat性能提升显著,本文从以下几方面进行分析优化。 一、内存优化 默认情况下Tomcat的相关内存配置较低,这对于一些大型项目显然是不够用的,这些项目运行就已经耗费了大部分内存空间,何况大规模访问的情况。即使是本文中的这个只有一个页面的...

zookeeper 介绍与集群安装

zookeeper 介绍 ZooKeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooK...