DNS详解(一)

一、域名系统(Domain Name System, DNS)

在Internet网络中,计算机相互识别彼此靠的是IP,IP就是用句号分割的一串数字,如202.156.36.89。然而对于人类而言,这样的数字是不容易记忆的,于是给这些数字起名字,这些名字就是所谓的域名。每个域名只能对应一个IP地址(此语似乎有误,但尚未理解,欢迎拍砖),但是同一个IP可以有几个名字,其中一个称为规范主机名,其他的称为别名。

说到起名字,是不能乱起的。DNS发展过程中,人们逐渐规范了域名的命名方式,即采用句点分隔的办法,将域名分为不同的层级,这也方便了后来的管理。正规表示的域名的格式类似这样: 三级域名.二级域名.顶级域名.    如www.baidu.com.   注意,末尾有一个句点,这个句点称为根域名,但是一般都忽略不写(不写不等于不存在),作用类似于linux的文件系统的根目录符号“/”。顶级域名是如com.
  org.   cn.  这样的存在,是已经被规定好了的,无法自己取名字的,只能沿用;而二级域名 如baidu.com以及三级域名如www.baidu.com是可以自己取名字的。可以看到,越往前域名的级别越低,三级域名之前还可以继续添加四级、五级,但是一般也就到五级了(未查证)。低级别的域名称为上一级域名的子域名。父域名下面可以设置多个子域名,它们指向不同的IP,如baidu.com下面可以有wenku.baidu.com
 baike.baidu.com tieba.baidu.com等。假设你注册了一个域名(其实是租赁,过期而不再续费后,就会被销毁供其他人注册、使用),就可以任意设置、使用它的子域名,换句话说,以这个域名为命名基础的子域名也同时被你买断了。

不过显而易见的是,只能注册二级或更低级的域名,顶级域名已经被规定为com、org、net等,或者就是国家的英文缩写如cn(代表中国),简而言之,顶级域名是被一些强力组织如政府垄断的,不能修改。一般而言,注册的域名都是二级域名,但是现在很多好的二级域名(如business.com)都已经被抢注了,不得不佩服这些眼光长远之人的赚钱之道,于是只能注册更低级的域名。

二、DNS服务器

有了DNS,还要有能支持这套理论的硬件,这就是DNS服务器了。我们可以设想,如果把“将域名解析成IP”这件事完全交给一台服务器,然后全球所有的上网主机都需要访问该服务器以获得解析服务,这会是怎样一副场景?全球能上网的主机那么多,这台服务器的访问量绝对会居高不下,那么可能许多人都要排队等候;另外,一旦这台服务器除了故障,那就谁都别想上网了。。

所以,现实中的硬件体系是不会这么设计的。实际上,全球DNS服务器是一个大的分布式数据库系统,对应于域名系统的每一个层级,(都)有专门的服务器来进行管理、服务。如下图:

(此为盗图)

最顶层是根域名服务器(实际上是一个大的系统,而不是只有一台,但这里不再详细介绍,google之),根域名服务器中只存储下一级域名(即顶级域名)的DNS服务器的IP信息,同样的道理,顶级域名服务器里只存储二级域名服务器的IP信息,依此循环。

这些DNS服务器都称为权威服务器,它们对自己存储的信息都拥有读写的权力,通俗的讲,这些服务器可以给属于自己管理的IP起名字(当然实际操作由人类完成,比如叫www.baidu.com),他说这个IP叫什么,那这个IP就叫什么,因此称之为权威。于此对应的,是所谓的本地缓存服务器,这也是一种专门的DNS服务器,不同的是,这类服务器对自己所存储的信息只有读而没有写的权力,即它们不能随意修改IP的名字。本地缓存服务器一般用于链接互联网终端用户,比如我们这种普通网民。每台主机链接入网时,其ISP都会为其分配一台本地缓存服务器的IP,自己的电脑需要DNS服务时,首先询问的是本地缓存服务器,然后由该服务器向外面的主DNS服务器系统查询。它的角色类似于代理。

那么我们来模拟一下,解析一条域名的大致流程是怎样的:

(1)每台主机操作系统上首先都会配备DNS客户端,它发起解析请求比如zh.wikipedia.org

(2)客户端询问本地缓存服务器,本地缓存服务器不知道

(3)本地缓存服务器询问根域名服务器,根域名服务器不存储某个具体的IP,他只有某个顶级域名的DNS服务器IP。于是它通过分析该请求的顶级域名部分,就把管理org顶级域的那些DNS服务器的IP返回给本地缓存服务器

(4)本地缓存服务器询问org顶级域的DNS服务器,该服务器对比自己的存储信息,发现也没有这个域名的IP信息,但是却有管理wikipedia.org域的DNS服务器的IP,于是返回这个IP

(5)本地缓存服务器询问管理wikipedia.org域的DNS服务器,该服务器查询自己的存储,发现正好有对应的IP,于是直接返回该IP

(6)本地缓存服务器将最终结果返回给客户端,同时保留一个这个查询以及答案的备份,这个备份就是缓存。下次再遇到其他客户端查询此域名,直接可以给出答案,而不必再像上面那样反复追问。

在终端可以使用dig命令具体查看,上图:

图中,127.0.1.1是我的本地缓存服务器的IP,这个服务器的BIND软件(成为一台DNS服务器所必须的软件,当然也有竞争者)的配置文件中会有根域名服务器的IP,这几个IP基本是不会变化的;

有了根域名服务器的IP,向其中的一个(本例是g.root-servers.net.)发起查询,得到的回答是com顶级域DNS服务器的IP;

向其中一个(k.gtld-servers.net)发起查询,得到baidu.com二级域名的DNS服务器IP;

向其中一个(ns4.baidu.com)发起查询,得到的是一个规范名bk.n.shifen.com.  也就是说,baike.baidu.com只是一个别名;

于是只好再次使用dig,参数改成bk.n.shifen.com.  然后就能得到最终答案(自己动一下手吧)。

然后就是几个没有搞清楚的问题:

(1)根域名服务器里面存放的只是顶级域名的DNS服务器 的IP,但顶级域名实际上数量相对较少,所以其存储量应该不大。但是根域名服务器却做成一个系统。共有13个IP,每个IP下都有至少几十台服务器,全球大概有1000多台。我猜,之所以这么做,不是因为存储量的问题,而是访问太频繁的缘故。从上面可以看出,本地缓存服务器查询的第一站就是根域名服务器。但是我没有证据。

(2)入网的主机都会分配IP,DNS服务器本身也不例外。在第4步中,顶级域的DNS服务器一般存放的信息仍然是其子域名的DNS服务器的IP,而不会是某个具体主机(我们可以理解为非DNS服务器),但是我没有证据。

时间: 2024-10-10 01:17:01

DNS详解(一)的相关文章

Centos 6.5 DNS详解

Centos 6.5  DNS详解 为什么会出现DNS?为了让你上网浏览网页时不必直接输入IP地址而是输入更易记忆和理解的主机名字 主机间通信依靠IP地址.计算机诞生之初是没有DNS概念的,当时的主机数量寥寥无几,主机通信依靠的是写在host文件中的主机名到IP地址的对应关系来查询IP地址,然后使用IP进行通信.但是随着时间的推移,主机数量急剧增长,host文件的弊端显露无疑.此时急需一种高效方便的解决方案.DNS应时而生.是的DNS就是用于主机名到IP的解析的. 下面结合下图分析dns解析过程

05-Linux中DNS详解(二)

接"04-Linux中DNS详解(一)" 六.在Linux上测试域名解析1.先检查DNS是否设置正确 cat /etc/resolv.conf [resolv.conf] # Generated by NetworkManager nameserver 192.168.80.100 2.使用nslookup来测试域名解析a.常规解析法 nslookup wwww.zhangyujia.cn ----- Server: 192.168.80.100 Address: 192.168.80

Linux系统DNS详解(BIND)

一.Linux运维实战之DNS基础    DNS服务作为网络的一种基础架构,在网络中有举足轻重的地位.它担负着整个网络用户计算机的名称解析工作.没有正确的名称解析,服务器就无法识别各客户机.我们在日常进行的浏览网页等上网活动,无一例外都在使用DNS服务.*******************************************************************************    DNS的基本知识:        DNS服务器的组成        DNS域名称

linux DNS详解

DNS服务 DNS:域名服务(domain  nsme  service) 作用:将域名解析成IP(正向解析)或者把IP解析成域名(反向解析) DNS顶级域的分类: 组织域:.com  .net  .org ..... 国家域:.cn   .tw   .jp  ..... 反向域:将ip解析为域名 DNS记录类型: A:正向解析条目 PTR:反向解析条目 NS:代表域内的DNS服务器 MX:代表域内的邮件服务器 CNAME:别名 SOA:用于标识域内的DNS服务器 注意:每添加一条NS记录,就应

linux架构学习第二十四天-DNS详解及bind搭建各种DNS测试

内容: 一.DNS 1.域名系统概述 2.域名的结构 3.域名服务器 4.域名解析过程 5.域名服务器的资源记录(resource record RR) 二.bind搭建DNS服务器 1.bind的安装 2.搭建DNS服务器 3.搭建主从DNS服务器 4.实现DNS子域 5.实现DNS视图view(智能DNS) 一.DNS 1.域名系统概述 域名系统DNS(Domain Name System)是因特网使用的命名系统,用来把便于人们使用的机器名字转换成为IP地址.域名系统其实就是名字系统.为什么

DNS详解及DNS主从配置

DNS 全称domain name system域名系统的缩写,它是一种将IP地址转换成对应的主机名或者将主机名转换成对应的IP的一种服务机制.其中通过域名解析出IP叫做正向解析,通过IP解析出域名叫做反向解析.DNS使用TCP和UDP协议,端口号都是53,但它主要使用UDP,服务器之间备份使用TCP.全世界只有13台"根"服务器,一个主根服务器放在美国,其他12台为辅根服务器,DNS服务器根据角色可分为:主DNS,从DNS,缓存DNS服务器,DNS转发服务器. 首先来看看域名的结构组

Linux进阶:DNS详解

DNS服务和BIND 本章内容 名字解析 DNS服务 实现主从服务器 实现子域 实现view 编译安装 压力测试 DNS排错 DNS服务 DNS:Domain Name Service 应用层协议 C/S,53/udp, 53/tcp BIND:Bekerley Internat Name Domain ISC (www.isc.org) 本地名称解析配置文件:hosts /etc/hosts %WINDIR%/system32/drivers/etc/hosts 122.10.117.2 ww

DNS详解

许多应用层软件经常直接使用域名系统 DNS (Domain Name System),但计算机的用户只是间接而不是直接使用域名系统. 因特网采用层次结构的命名树作为主机的名字,并使用分布式的域名系统 DNS. 名字到 IP 地址的解析是由若干个域名服务器程序完成的.域名服务器程序在专设的结点上运行,运行该程序的机器称为域名服务器. 因特网的域名结构 因特网采用了层次树状结构的命名方法. 任何一个连接在因特网上的主机或路由器,都有一个唯一的层次结构的名字,即域名. 域名的结构由标号序列组成,各标号

Linux 下DNS详解

配置之前先了解一下bind DNS服务器软件:BIND是一种开源的DNS(Domain Name System)协议的实现,包含对域名的查询和响应所需的所有软件.它是互联网上最广泛使用的一种DNS服务器,对于类UNIX系统来说,已经成为事实上的标准. 为了构架DNS服务器来解析域名或ip地址,我们得安装BIND和caching-nameserver.为了TCP和UDP53数据包能通过,我们也有必要配置路由器. 安装 BIND 软件包 1.安装 # yum -y install bind cach