19.1 什么是DNS

 
主机名自动解析为 IP 就很重要!那就是 DNS。
 
19.1.1 用网络主机名取得IP的历史渊源
 
单一档案处理上网的年代: /etc/hosts
 
利用某些特定的档案将主机名与 IP 作一个对应, 如此一来,我们就可以透过主机名来取得该主机的 IP。 就是/etc/hosts 这个档案的用途了
 
缺憾:
  • ip数量太多时,该档案会大到不像
  • 主机名与IP的对应无法自动于所有计算机内更新
 
导致,客户端计算机每次都得要重新下载一次档案才能顺利联网;
 

分布式,阶层式主机名管理架构:DNS系统
 
DNS(Domain Name System),
我们不需要知道主机的IP,只要知道该主机的名称,就能够轻易的连上该主机了。
 
  • DNS 利用类似树状目录的架构,将主机名的管理分配在不同层级的 DNS 服务器当中,经由分层管理, 所以每一部 DNS 服务器记忆的信息就不会很多
  • 若有 IP 异动时也相当容易修改!因为你如果已经申请到主机名解析的授权, 那么在你自己的 DNS服务器中,就能够修改全世界都可以查询到的主机名了!而不用透过上层 ISP 的维护呢! 自己动手当然是最快的
 
DNS 与 BIND
DNS 是一种因特网的通讯协议名称, 至于 Bind 则是提供这个 DNS 服务的软件
 
 
DNS 有关的 FQDN、 Hostname 与 IP 的查询流程,正解与反解、合法授权的 DNS 服务器之意义,以及 Zone 等等的知识。
 
完整主机名:Fully Qualified Domain Name(FQDN)
第一个与 DNS 有关的主机名概念,就是『主机名与领域名 (hostname and domainname)』的观念,以及由这两者组成的完整主机名 Fully Qualified Domain Name, FQDN。
 
DNS 是以树状目录分阶层的方式来处理主机名,那我们知道树状目录中, 那个目录可以记录文件名。领域名底下还可以记录各个主机名, 组合起来才是完整的主机名 (FQDN)
 
我们知道目录树的最顶层是根目录 (/),那么 DNS 既然也是阶层式的,最顶层是啥呢?每一层的 domain name 与 hostname 又该怎么分?
例子:www.ksu.edu.tw;

在上面的例子当中,由上向下数的第二层里面,那个 .tw 是 domain name ,而 com,edu, gov 则是主机的名称,而在这个主机的名称之管理下,还有其他更小网域的主机,所以在第三层的时候,基本上,那个 edu.tw 就变成了 domain name 了!而昆山科大与成大的 ksu, ncku 则成为了 hostname .
 
以此类推,最后得到我们的主机那个 www 是主机名,而 domain name 是由ksu.edu.tw 那个名字所决定的!自然,我们的主机就是让管理 ksu.edu.tw 这个domain name 的 DNS 服务器所管理的啰!
 
注意:
并不是以小数点 (.) 区分 domain name 与 hostname !某些时刻 domain name 所管理的 hostname 会含有小数点。
 
19.1.2  DNS的主机名对应IP的查询流程
 
简单了解 FQDN 的 domain name 与 hostname 之后,接下来我们要谈一谈这个DNS 的:
(1)阶层架构是怎样?
(2)查询原理是怎样?
总是要先知道架构才能知道如何查询主机名的!所以底下我们先来介绍一下整体的 DNS 阶层架构。
 
 
DNS 的阶层架构与 TLD
上面列子:将最上层到昆山科大 (ksu) 时,之间的各层绘制如下图:
 
 
 
 
在整个 DNS 系统的最上方一定是 . (小数点) 这个 DNS 服务器 (称为 root),最早以前它底下管理的就只有:
(1)com, edu, gov, mil, org, .net 这种特殊领域
(2)以国家为分类的第二层的主机名了
这两者称为 Top Level Domains (TLDs),顶级域名
 
 
授权与分层负责
向上层ISP申请域名的授权例如:
台湾地区最上层的领域名是以 .tw 为开头,管理这个领域名的机器 IP 是在台湾,但是 .tw 这部服务器必须向 root (.) 注册领域名查询授权才行
 
 
那么每个国家之下记录的主要下层有哪些领域呢?基本上就是原先 root 管理的那六大类。 不过,由于各层 DNS 都能管理自己辖下的主机名或子领域,
因此,我们的 .tw 可以自行规划自己的子领域名喔! 例如目前台湾 ISP 常提供的 .idv.tw 的个人网站就是一例。
 
每个上一层的 DNS 服务器所记录的信息,其实只有其下一层的主机名而已! 至于再下一层,则直接『授权』给下层的某部主机来管理;
 
这样设计的好处就是:
每部机器管理的只有下一层的 hostname 对应 IP 而已,所以减少了管理上的困扰!而下层 Client 端如果有问题,只要询问上一层的 DNS server;
 
通过DNS查询主机名IP的流程
DNS类似树状的主机名管理:

首先,当你在浏览器的网址列输入 http://www.ksu.edu.tw 时,你的计算机就会依据相关设定 (在 Linux 底下就是利用 /etc/resolv.conf 这个档案) 所提供的 DNS的 IP 去进行联机查询了。由于目前最常见的 DNS 服务器就属 Hinet 的 168.95.1.1这个 DNS,所以我们就拿他来做例子 hinet 的这部服务器会这样工作:
 
1. 收到用户的查询要求,先查看本身有没有纪录,若无则向 . 查询:由于 DNS 是阶层式的架构,每部主机都会管理自己辖下的主机名解译而已。因为 hinet 并没有管理台湾学术网络的权力, 因此就无法直接回报给客户端。此时 168.95.1.1 就会向最顶层,也就是 . (root) 的服务器查询相关 IP 信息。
 
2. 向最顶层的 . (root) 查询:168.95.1.1 会主动的向 . 询问 www.ksu.edu.tw 在哪里呢?但是由于 . 只记录了 .tw 的信息 (因为台湾只有 .tw 向 . 注册而已),此时 . 会告知『我是不知道这部主机的 IP 啦,不过,你应该向 .tw 去询问才对,我这里不管! 我跟你说 .tw 在哪里吧!』
 
3. 向第二层的 .tw 服务器查询:168.95.1.1 接着又到 .tw 去查询,而该部机器管理的又仅有 .edu.tw, .com.tw, gov.tw... 那几部主机,经过比对后发现我们要的是 .edu.tw 的网域,所以这个时候 .tw 又告诉 168.95.1.1 说:『你要去管理 .edu.tw 这个网域的主机那里查询,我有他的 IP !』
 
4. 向第三层的 .edu.tw 服务器查询:同理可证, .edu.tw 只会告诉 168.95.1.1 ,应该要去 .ksu.edu.tw 进行查询,这里只能告知 .ksu.edu.tw 的 IP 而已。
 
5. 向第四层的 .ksu.edu.tw 服务器查询:等到 168.95.1.1 找到 .ksu.edu.tw 之后, .ksu.edu.tw 说:『没错!这部主机名是我管理的~ 我跟你说他的 IP 是...所以此时 168.95.1.1 就能够查到 www.ksu.edu.tw 的 IP 啰!
 
6. 记录暂存内存并回报用户:
查到了正确的 IP 后, 168.95.1.1 的 DNS 机器总不会在下次有人查询www.ksu.edu.tw 的时候再跑一次这样的流程吧! 很远很累的!而且也很耗系统的资源与网络的带宽,所以呢, 168.95.1.1 这个 DNS 会很聪明的先记录一份查询的结果在自己的暂存内存当中,以方便响应下一次的相同要求啊! 最后则将结果回报给 client 端!当然啦,那个记忆在 cache 当中的数据,其实是有时间性的,当过了 DNS 设定记忆的时间 (通常可能是 24 小时),那么该记录就会被释放喔!
 
整个分寸查询的流程就是这样,总是得要先经过 . 根来向下一层进行查询,最终总是能得到答案的。
 
分层的好处是:
  • 主机名修改的仅需要自己的DNS更动即可,不需要通知其他人。

    • 只要主机名经过上层合法的DNS服务器设定,就可以在Internet上面被查询到,这样维护简单,机动性也很高
  • DNS服务器对主机名解析结果的快取时间
    • 每次查询到的结果都会储存在 DNS 服务器的高速缓存中,以方便若下次有 相同需求的解析时,能够快速的响应。通常是10分钟到三天之内。
  • 可持续向下授权(子领域名授权)
    • 没层只管当前层的子层地址在哪。
 
 
命令 dig+ trace ,查看到DNS的搜寻过程!
[root@www ~]# dig +trace www.ksu.edu.tw
; <<>> DiG 9.3.-P1-RedHat-9.3.-.P1.el5 <<>>+trace www.ksu.edu.tw
;; global options: printcmd
. IN NS a.root-servers.net.
. IN NS b.root-servers.net.
....(底下省略)....
# 上面的部分在追踪 . 的服务器,可从 a ~ m.root-servers.net.
;; Received bytes from 168.95.1.1#(168.95.1.1) in ms
tw. IN NS ns.twnic.net.
tw. IN NS a.dns.tw.
tw. IN NS b.dns.tw.
....(底下省略)....
# 上面的部分在追踪 .tw. 的服务器,可从 a ~ h.dns.tw. 包括
ns.twnic.net.
;; Received bytes from 192.33.4.12#(c.root-servers.net) in
ms
edu.tw. IN NS a.twnic.net.tw.
edu.tw. IN NS b.twnic.net.tw.
# 追踪 .edu.tw. 的则有 部服务器
;; Received bytes from 192.83.166.11#(ns.twnic.net) in ms
ksu.edu.tw. IN NS dns2.ksu.edu.tw.
ksu.edu.tw. IN NS dns3.twaren.net.
ksu.edu.tw. IN NS dns1.ksu.edu.tw.
;; Received bytes from 192.83.166.9#(a.twnic.net.tw) in ms
www.ksu.edu.tw. IN A 120.114.100.101
ksu.edu.tw. IN NS dns2.ksu.edu.tw.
ksu.edu.tw. IN NS dns1.ksu.edu.tw.
ksu.edu.tw. IN NS dns3.twaren.net.
;; Received bytes from 120.114.150.1#(dns2.ksu.edu.tw) in ms
 
DNS 端口号:53;
这里,DNS开始以udp传输,若未查到完整信息,则重新以TCP传输;
所以DNS,daemon,会同时启动tcp,udp的port 53,;
 
 
19.1.3 合法DNS的关键:申请领域查询授权
 
与其他服务器不同,DNS服务器的架设有合法不合法之说。
 
向上层领域注册取得合法的领域查询授权
 
如果需要架设DNS,而且是可以连上Internet上面的DNS时,就必须要透过上层DNS服务器的授权
 
所以, 要让你的主机名对应 IP 且让其他计算机都可以查询的到,你有
两种方式:
1. 上层 DNS 授权领域查询权,让你自己设定 DNS 服务器;
2. 直接请上层 DNS 服务器来帮你设定主机名对应!
 
 
拥有领域查询权后,所有的主机名信息都以自己为准,与上层无关。
 
DNS,记录的信息非常的多,重点有两个:
  • 记录服务器所在的NS(NameServer)标志
  • 记录主机名对应的A(Address)标志
 
我们在网络上面查询到的最终结果,都是查询IP的,因此最终的标志要找到的是A这个记录才对。
 

注册的.vbird.org 记录在ISP的DNS服务器名为dns.vbird.org,该笔记录其实是NS,并非A。
 
虽然在 godaddy 服务器内有记录一笔『要查询 .vbird.org 时,请到dns.vbird.org (NS) 去查,这个管理者的 IP 是 140.116...』,
但是这笔记录只是告诉我们要去下一个服务器找, 并不是最终的 A (IP Address) 的答案,所以还得要继续往下找 (随时记得图 19.1-4 的查询流程)。
 
此时,有几种结果会导致dns.vbird.org的IP找不到,或最终IP与godaddy记录的不同结果:
  • dns.vbird.org 服务器挂点时

    • 如果 dns.vbird.org 这部主机宕机,那么在上图显示『查询』箭头的步骤会被中断,因此就会出现『联机不到dns.vbird.org 的 IP』的结果。
  • dns.vbird.org 服务器内的数据库忘记补上数据时
    • 在自己的服务器数据库中,忘记加上 dns.vbird.org 的记录时,最终的结果还是会显示『找不到该服务器的 IP』
  • dns.vbird.org 服务器内的数据库数据编写不一致时
    • 如果是在鸟哥自己服务器的数据库内的 dns.vbird.org 所记录的 IP 与godaddy 的不同,最终的结果会以鸟哥记录的为准。
总之,在ISP上面填写的主机名只是一个参考用的,最终还是要在你自己服务器当中设定好才行。
 
由此可见,DNS查询不是简单的从上层获得下层IP,然后一级级的往下查询。DNS肯定有更加健全的查询算法,通过上层设定的参考,最终由本层设定决定。
 
疑问?????
???????
既然上层仅作参考,实际起作用的是下层自己的设定。那么当上层godaddy设置了dns.vbird.org->NS(140.116.111.12),而本层dns.vbird.org设置了dns.vbird.org->A(150.120.111.12)。那么在从根走到godaddy之后,是如何确定dns.vbird.org,即在godaddy拿到的是假地址,是如何走到dns.vbird.org的。
 
19.1.4 主机名交由ISP 代管还是自己设定DNS服务器。
 
需要架设DNS的时机:
  • 主机数量庞大
  • 需要经常修改server名称。
 
19.1.5 DNS数据库的记录:正解,反解,Zone得意义
 
  • 从主机名查询到 IP 的流程称为:正解
  • 从 IP 反解析到主机名的流程称为:反解
  • 不管是正解还是反解,每个领域的记录就是一个区域 (zone)
 
正解的设定权以及DNS正解zone记录的标志
符合上层NDS所给予的领域范围,即可申请正解DNS服务器;
 
正解zone通常标志:
  • SOA:就是开始验证 (Start of Authority) 的缩写,相关资料本章后续小节说明;
  • NS:就是名称服务器 (NameServer) 的缩写,后面记录的数据是 DNS 服务器的意思;
  • A:就是地址 (Address) 的缩写,后面记录的是 IP 的对应 (最重要);
 
反解的设定权以及 DNS 反解 zone 记录的标志
 
能够设定反解的就只有 IP 的拥有人,亦即你的 ISP 才有权力设定反解的。
那你向 ISP 取得的 IP 能不能自己设定反解呢?答案是不行!
除非你取得的是整个 class C 以上等级的 IP 网段,那你的 ISP 才有可能给你 IP 反解授权。
否则,若有反解的需求,就得要向你的直属上层 ISP 申请才行。
 
反解zone通常标志:
  • SOA:就是开始验证 (Start of Authority) 的缩写,相关资料本章后续小节说明;
  • NS:就是名称服务器 (NameServer) 的缩写,后面记录的数据是 DNS 服务器的意思;
  • PTR:就是指向 (PoinTeR) 的缩写,后面记录的数据就是反解到主机名啰
 
每部DNS都需要的正解zone:hint
 
hint:
根目录在哪里的记录;
 
所以说,一部简单的正解 DNS 服务器,基本上就要有两个 zone 才行,一个是hint ,一个是关于自己领域的正解 zone。
 
 
19.1.6 DNS数据库的类型:hint,master/slave架构
 
hint:.(root)基本数据库类型;
master,slave 是两种基本类型,用来解决DNS服务器主从结构,数据同步问题的。
 
master
  • 要管理员自己手动去修改与设定;并且重启后才生效;
  • 一般来说,我们说的DNS设定,就是指设定这种数据库的类型
  • 给slave的DNS提供数据库内容
 
slave
  • 必须与master相互搭配
  • 只支持一主多从
  • 更改master之后,slave自动更新
 
master/slave的查询优先权?
在 DNS 系统当中,领域名的查询是『先抢先赢』的状态;
 
 
Master / Slave 数据的同步化过程
 
基本上,不论 Master 还是 Slave 的数据库,都会有一个代表该数据库新旧的『序号』,这个序号数值的大小,是会影响是否要更新的动作。
 
更新的两种方式:
  • master主动告知

    • Master 在修改了数据库内容,并且加大数据库序号后, 重新启动 DNS 服务,那 master 会主动告知 slave 来更新数据库,
  • slave主动提出
    • Slave 会定时的向 Master 察看数据库的序号, 当发现 Master 数据库的序号比 Slave 自己的序号还要大 (代表比较新),那么 Slave 就会开始更新
 
 
 

DNS服务器原理的更多相关文章

  1. DNS服务器原理介绍(一)

    DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串.通过主机名,最终 ...

  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. Linux系统下搭建DNS服务器——DNS原理总结

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

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

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

  7. Centos7 搭建DNS服务器与原理配置详解

    在搭建我们自己DNS服务器之前,先必须了解下DNS服务器的作用和原理. DNS是在互联网上进行域名解析到对应IP地址的服务器,保存互联网上所有的IP与域名的对应信息,然后将我们对网址的访问,解析成IP ...

  8. DNS服务器的原理

    当用户去访问一个网站(百度)的时候,首先去请求dns服务器,根据对应的域名返回所在ip,然后再使用ip去访问自己所在服务器空间.简单的说,DNS服务器就像114客服,dns服务器是树状结构的,dns服 ...

  9. IP地址,子网掩码,默认网关,DNS服务器知识详解(转)

    转自:http://www.cnblogs.com/JuneWang/p/3917697.html 为了更深入的学习TCP/IP协议,最近看了不少有关资料,收集整理记录如下,以备后面的使用和方便各位学 ...

随机推荐

  1. j技术方案

    采用.net4.0作为基础技术平台,原来是采用.net4.5的,但是后来发现.net4.5不支持Windows Server2003,所以又降为.net4.0. 1.asp.net mvc 4.0 用 ...

  2. Socket Server-基于线程池的TCP服务器

    了解线程池 在http://blog.csdn.net/ns_code/article/details/14105457(读书笔记一:TCP Socket)这篇博文中,服务器端采用的实现方式是:一个客 ...

  3. 浅谈Java中的hashcode方法

    哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: 1 public native int hashCode(); 根据 ...

  4. Ubuntu开启22端口

    [http://blog.csdn.net/baple/article/details/39288817] 安装OpenSSH Ubuntu缺省没有安装SSH Server,使用以下命令安装: sud ...

  5. npoi上传xlsx文件,并读取数据

    视图 public PartialViewResult UploadIndex() { return PartialView(); } <div> <fieldset style=& ...

  6. seaJs的简单应用

    sea.js的应用模块化: 将Js代码按模块化分开,提高了代码的重用性:seaJs的好处: 解决了文件的依赖 解决了变量名的冲突seaJs的使用 1.定义模块 define(function(requ ...

  7. 考虑virtual函数以外的选择

    在C++中,有四种选择可以替代virtual函数的功能: 1.non-virtual interface(NVI)手法,这是一种template method模式.它以public non-virtu ...

  8. [DFNews] EnCase 更新至 v7.10

    有加密狗的可以注册接收邮件下载 暂时只有英文版 前几天讲课还说到,EnCase的Template倒是好,但是稍微改一下Case Template自带的Bookmark结构,那么Report就看不到了, ...

  9. 在Win2008上运行ASP.NET 1.1程序

    在之前的文章<将Web站点由IIS6迁移至IIS7>中已经提到了关于在Win2008下运行ASP.NET 1.1程序的问题,但还不够完整,因此在这里重新整理一下. 1.要安装.net fr ...

  10. mysql日志与备份恢复

    一.mysql日志: mysql的日志种类有很多,常见的有二进制日志,一般查询日志,满查询日志,中继日志,事务日志等,具体信息可以通过 mysql> SHOW GLOBAL VARIABLES ...