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层。

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服务器规则

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

2) 上级必须知道下级;

3) 下级不知道上级;

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

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

6) 顶级域不迭代;

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

DNS服务器解析过程

1)递归查询

递归查询是最常见的是主机发送到本地域名服务器的请求。当本地域名服务器接受了客户机的查询请求时,本地域名服务器将力图代表客户机来找到答案,而在域名服务器执行所有工作的时候,客户机只是等待。如果本地域名服务器不能直接回答,则它将在域名树中的各分

支上下递归搜索来寻找答案。对于一个递归查询,DNS服务器将持续搜索直到收到回答。这种回答可以是主机的IP地址,也可以回答“主机不存在”。不论是哪种结果,递归域名服务器将把结果返回给客户机。

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

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

一个域名的查询过程解析

如DNS客户端需要解析www.baidu.com.cn这个域名,过程如下图:

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服务器原理介绍(一)的更多相关文章

  1. DNS服务器原理

    19.1 什么是DNS   主机名自动解析为 IP 就很重要!那就是 DNS.   19.1.1 用网络主机名取得IP的历史渊源   单一档案处理上网的年代: /etc/hosts   利用某些特定的 ...

  2. [转]DNS服务器原理详解与Centos6.x下搭建DNS服务器

    转自:http://blog.it985.com/8958.html DNS 数据库的记录:正解,反解, Zone 的意义 通过DNS解析过程详解这篇文章,我们知道了要想访问www.zmit.cn,最 ...

  3. DNS服务器原理简述、搭建主/从DNS服务器并实现智能解析

    1. TLD:Top Level Domain 顶级域名 组织域:.com, .net, .org, .gov, .edu, .mil 国家域:.iq, .tw, .hk, .jp, .cn, ... ...

  4. DNS服务器:主要介绍DNS的服务原理以及安装及其主从配置

    DNS服务器:主要介绍DNS的服务原理以及安装及其主从配置 一.DNS简介 1.DNS    DNS是域名系统(Domain Name System)的简称,它是一个将域名和IP相互映射的分布式数据库 ...

  5. DNS服务器介绍及设置

    DNS服务器是指“域名解析服务器”,而域名就是我们通常所说的“网址”.在互联网中识别和寻找不同的计算机,实际上是需要知道该计算机的IP地址才能进行访问.比如220.181.38.4,这个IP就是百度的 ...

  6. Linux系统下搭建DNS服务器——DNS原理总结

    2017-01-07 整理 DNS原理 域名到IP地址的解析过程 IP地址到域名的反向域名解析过程 抓包分析DNS报文和具体解析过程 DNS服务器搭建和配置 这个东东也是今年博主参见校招的时候被很多公 ...

  7. DNS服务基础原理介绍

    FQDN 全称域名 localhost(主机名或者是别名).localdomain(域名)    FQDN=主机名.域名 根域               . 顶级域名       .com   .n ...

  8. centos DNS服务搭建 DNS原理 使用bind搭建DNS服务器 配置DNS转发 配置主从 安装dig工具 DHCP dhclient 各种域名解析记录 mydns DNS动态更新 第三十节课

    centos  DNS服务搭建  DNS原理  使用bind搭建DNS服务器 配置DNS转发 配置主从  安装dig工具  DHCP  dhclient  各种域名解析记录  mydns DNS动态更 ...

  9. linux系统中的DNS服务器介绍

    http://lq2419.blog.51cto.com/1365130/1172269 DNS:Domain Name Service,linux上的DNS服务是基于一种软件BIND实现的.BIND ...

随机推荐

  1. ADOdb 支持的数据库包括哪些?

    ADOdb 支持的数据库包括 MySQL, PostgreSQL,Interbase,Firebird,Informix,Oracle,MS SQL 7,Foxpro,Access,ADO,Sybas ...

  2. 《机器学习实践》程序清单3-7 plotTree函数

    这个plotTree函数,比较聪明,比较简化,比较抽象,作者一定是逐步优化和简化到这个程度的.我是花了小两天时间,断断续续看明白的,还是在参考了另一篇文章以后.这里是链接http://www.cnbl ...

  3. SQL Fundamentals: 子查询 || 行列转换(PIVOT,UNPIVOT,DECODE),设置数据层次(LEVEL...CONNECT BY)

    SQL Fundamentals || Oracle SQL语言 子查询(基础) 1.认识子查询 2.WHERE子句中使用子查询 3.在HAVING子句中使用子查询 4.在FROM子句中使用子查询 5 ...

  4. TensorFlow 度量张量和张量或者和零之间的误差值

    用于一个回归任务或者正则问题 # l2损失,output= sum(x ** 2)/2 inputdata = tf.Variable(np.random.rand(2,3), dtype=np.fl ...

  5. Oracle备份恢复之热备份恢复及异机恢复

    原理: 数据库必须运行在归档模式下,否则备份没有意义.备份前冻结块头,使scn号不变化,然后cp物理文件,最后解冻块头.此过程dml语句可以正常执行,动作被写在日志文件里面,当解冻scn号后,日志文件 ...

  6. Java applets A Java applet example

    https://en.wikipedia.org/wiki/Ajax_(programming) https://zh.wikipedia.org/wiki/AJAX Ajax (also AJAX; ...

  7. mysql union出错: "Every derived table must have its own alias"

    SELECT count(*) from (SELECT province_code as area_id, count(*) from t_cas_rural_selected GROUP BY p ...

  8. Steady Cow Assignment---poj3189(多重匹配+二分)

    题目链接:http://poj.org/problem?id=3189 题意:有n头牛,B个牛棚,每头牛对牛棚都有一个喜欢度,接下来输入N*B的矩阵第i行第j列的数x表示:第i头牛第j喜欢的是x; 第 ...

  9. GDB调试qemu源码纪录

    今天介绍下如何利用gdb调试qemu 1.首先获取qemu源码 获取地址:https://www.qemu.org/ 2.编译安装qemu 进入qemu目录 ./configure --enable- ...

  10. startuml 2.6注册

    参考:http://bbs.chinapyg.com/thread-79022-1-1.html 各平台版本均适用,本文更改的为Mac版本.​ 1,打开对应 mac版本的安装包位置,在对应目录/App ...