DNS基础及域名系统架构

一、域名

在讲解DNS之前,首先粗略的说一下域名这个东西

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

通常对于一个域名来说,其主要分为3个部分

www.google.com

主机名    域名    类型

①类型  标志着该域名的类型(com、cn、edu、org等)

②域名  域的名称,如上面的 google

③主机名  域里面一台主机的名字,如www这台主机

其实严格的来说,域名后面还有一个 ".",所以完整的域名应该是  www.google.com.

对于域名来说,其大小写是不敏感的,在浏览器里面我们输入大小写都指向的同一个ip地址

二、DNS

从上面可以知道,每一个域名都对应了一个IP地址,我们访问一个域名时,其实底层的操作系统进行通信时还是通过IP地址来进行通信,所以我们就需要有一个服务能将域名转换成对应的IP地址,或者反向的将IP地址转换成域名,这个服务就是DNS(Domain Name System)。

DNS提供的服务就是在IP和域名之间进行转换,DNS服务是由DNS服务器来提供的,一般提供DNS服务的都有一个单独的DNS服务器,这个DNS服务器的作用就是用来保存我们的域名到其IP地址之间的解析,例如我们在访问 www.google.com 这个域名的时候,我们的主机首先会向一个DNS服务器发起一个DNS的请求,请求DNS服务器告诉我www.google.com这个域名的IP地址,此时DNS服务器就会给我们返回该域名的IP地址,这个时候我们再根据这个IP地址访问www.google.com这台服务器

DNS服务就是将我们的域名解析成其对应的IP地址,我们日常使用的支持网络的计算机一般是做为DNS客户端来使用的,应用程序、服务、进程等等通过操作系统底层的功能发起对DNS服务器的查询,来对指定的域名进行解析

在Linux系统当中,一般是使用系统底层提供的gethostbyname()这个函数来进行域名解析的

在Linux系统当中,解析域名通常可以基于以下三种方式:

①文件 (/etc/hosts、/etc/networks)

hosts是主机文件,里面存放的是域名到IP地址的一个对应,在windows下也有这样一个文件,通常linux下通过文件来解析域名都是通过 /etc/hosts 这个文件

[[email protected] ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

因为hosts文件里面保存的就是域名到IP地址直接的对应关系,我们也可以手动的去将我们的域名指定为其它的IP,例如我们将 www.google.com 的 ip 修改为 192.168.1.1

[[email protected] ~]# ping www.google.com
PING www.google.com (173.194.72.103) 56(84) bytes of data.

[[email protected] ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.1     www.google.com

[[email protected] ~]# ping www.google.com
PING www.google.com (192.168.1.1) 56(84) bytes of data.

我们看到,我们在 /etc/hosts 文件里加上 192.168.1.1 www.google.com 这条映射关系以后,此时在ping www.google.com时,其ip地址变成了我们自己设定的 192.168.1.1了,但是我们知道其IP地址肯定不是这个。为此,我们可以在操作系统上将一些域名的IP地址直接写到 hosts 文件里面,这样在进行解析时可以直接去访问我们指定的IP地址

②DNS  这个就是通过我们指定的DNS服务器来对我们的域名进行解析了

③NIS  这个用的非常少

我们可以通过查看 /etc/nsswitch.conf 这个文件来查看DNS解析的顺序

[[email protected] ~]# cat /etc/nsswitch.conf
#
# /etc/nsswitch.conf
#
# An example Name Service Switch config file. This file should be
# sorted with the most-used services at the beginning.
#
# The entry ‘[NOTFOUND=return]‘ means that the search for an
# entry should stop if the search in the previous entry turned
# up nothing. Note that if the search failed due to some other reason
# (like no NIS server responding) then the search continues with the
# next entry.
#
# Valid entries include:
#
#    nisplus            Use NIS+ (NIS version 3)
#    nis            Use NIS (NIS version 2), also called YP
#    dns            Use DNS (Domain Name Service)
#    files            Use the local files
#    db            Use the local database (.db) files
#    compat            Use NIS on compat mode
#    hesiod            Use Hesiod for user lookups
#    [NOTFOUND=return]    Stop searching if not found so far
#

# To use db, put the "db" in front of "files" for entries you want to be
# looked up first in the databases
#
# Example:
#passwd:    db files nisplus nis
#shadow:    db files nisplus nis
#group:     db files nisplus nis

passwd:     files
shadow:     files
group:      files

#hosts:     db files nisplus nis dns
hosts:      files dns

# Example - obey only what nisplus tells us...
#services:   nisplus [NOTFOUND=return] files
#networks:   nisplus [NOTFOUND=return] files
#protocols:  nisplus [NOTFOUND=return] files
#rpc:        nisplus [NOTFOUND=return] files
#ethers:     nisplus [NOTFOUND=return] files
#netmasks:   nisplus [NOTFOUND=return] files     

bootparams: nisplus [NOTFOUND=return] files

ethers:     files
netmasks:   files
networks:   files
protocols:  files
rpc:        files
services:   files

netgroup:   nisplus

publickey:  nisplus

automount:  files nisplus
aliases:    files nisplus

我们看到我们 hosts 解析的顺序先是通过 file 文件来进行解析,再是通过DNS进行解析,我们可以直接修改该文件来控制我们的查询顺序

三、DNS查询

我们可以通过 host 或者 dig 命令来查询我们域名对应的IP地址

①host(显示内容较少)

[[email protected] ~]# host www.google.com
www.google.com has address 74.125.31.104
www.google.com has address 74.125.31.147
www.google.com has address 74.125.31.106
www.google.com has address 74.125.31.99
www.google.com has address 74.125.31.103
www.google.com has address 74.125.31.105
www.google.com has IPv6 address 2404:6800:4008:c01::6a

②dig (显示内容详细)

[[email protected] ~]# dig www.google.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 <<>> www.google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65143
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.google.com.            IN    A

;; ANSWER SECTION:
www.google.com.        5    IN    A    74.125.31.104
www.google.com.        5    IN    A    74.125.31.147
www.google.com.        5    IN    A    74.125.31.106
www.google.com.        5    IN    A    74.125.31.99
www.google.com.        5    IN    A    74.125.31.103
www.google.com.        5    IN    A    74.125.31.105

;; Query time: 2012 msec
;; SERVER: 192.168.198.2#53(192.168.198.2)
;; WHEN: Mon Jun  3 19:49:55 2013
;; MSG SIZE  rcvd: 128

我们看到dig命令查询出来的内容非常多,对于里面的每一行语句的含义,将在后续随笔中详细讲解

对于DNS查询来说,其实DNS是一个树状的结构,查询的时候是根据域名从右到左来进行查询,域名每一级由独立的一个或者多个DNS服务器来进行查询

我们看到,当我们在对 www.google.com 这个域名进行查询时,首先是通过 . 这个根DNS服务器去查询 com 这个类型的 DNS 服务器地址,然后再通过 com 对应的多台DNS服务器(每一层都有多个DNS服务器)去查询 google 这个域名的DNS服务器,最后再通过 google的DNS服务器去查询主机名为 www 的这台主机的资源记录,从而得到 www.google.com 的IP地址。我们可以通过 dig +trace www.google.com 这个命令来追踪整个DNS查询的过程

[[email protected] ~]# dig +trace www.google.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 <<>> +trace www.google.com
;; global options: +cmd
.            5    IN    NS    f.root-servers.net.
.            5    IN    NS    g.root-servers.net.
.            5    IN    NS    h.root-servers.net.
.            5    IN    NS    i.root-servers.net.
.            5    IN    NS    j.root-servers.net.
.            5    IN    NS    k.root-servers.net.
.            5    IN    NS    l.root-servers.net.
.            5    IN    NS    m.root-servers.net.
.            5    IN    NS    a.root-servers.net.
.            5    IN    NS    b.root-servers.net.
.            5    IN    NS    c.root-servers.net.
.            5    IN    NS    d.root-servers.net.
.            5    IN    NS    e.root-servers.net.
;; Received 508 bytes from 192.168.198.2#53(192.168.198.2) in 28138 ms

com.            172800    IN    NS    a.gtld-servers.net.
com.            172800    IN    NS    b.gtld-servers.net.
com.            172800    IN    NS    c.gtld-servers.net.
com.            172800    IN    NS    d.gtld-servers.net.
com.            172800    IN    NS    e.gtld-servers.net.
com.            172800    IN    NS    f.gtld-servers.net.
com.            172800    IN    NS    g.gtld-servers.net.
com.            172800    IN    NS    h.gtld-servers.net.
com.            172800    IN    NS    i.gtld-servers.net.
com.            172800    IN    NS    j.gtld-servers.net.
com.            172800    IN    NS    k.gtld-servers.net.
com.            172800    IN    NS    l.gtld-servers.net.
com.            172800    IN    NS    m.gtld-servers.net.
;; Received 492 bytes from 193.0.14.129#53(193.0.14.129) in 26867 ms

google.com.        172800    IN    NS    ns2.google.com.
google.com.        172800    IN    NS    ns1.google.com.
google.com.        172800    IN    NS    ns3.google.com.
google.com.        172800    IN    NS    ns4.google.com.
;; Received 168 bytes from 192.54.112.30#53(192.54.112.30) in 8681 ms

www.google.com.        300    IN    A    173.194.72.103
www.google.com.        300    IN    A    173.194.72.99
www.google.com.        300    IN    A    173.194.72.106
www.google.com.        300    IN    A    173.194.72.104
www.google.com.        300    IN    A    173.194.72.147
www.google.com.        300    IN    A    173.194.72.105
;; Received 128 bytes from 216.239.38.10#53(216.239.38.10) in 82 ms

我们看到整个DNS查询过程就是上述的根据域名从右到左来一步步查询, . root DNS -> com DNS -> google DNS -> www

DNS查询类型一共有两种,一种是 迭代查询 (Iterative Query),另一种是 递归查询 (Recursive Query)我们通过下面两个示意图就可以知道这两种查询的区别了

①迭代查询 (Iterative Query)

②递归查询 (Recursive Query)

我们看到迭代查询时本地DNS Server会首先向 . DNS Server发出请求,此时 . DNS Server会返回给本地DNS Server com的 DNS Server,这样依次类推下去,最后将 www.google.com的ip地址返回,而递归查询,则只是本地DNS Server向 . DNS Server发出一个请求,然后解析IP是交给了其下属的DNS Server来完成,最后将IP地址返回,由于递归查询在每个DNS Server上会有缓存信息,所以一般我们都是使用两种查询方式相结合的方式来进行DNS查询的

四、资源记录

在DNS服务器上,DNS的信息都是通过一个叫做资源记录(RR Resource Record)的格式来进行保存的,RR不仅能够保存域名到IP地址的信息,还能保持其他很多的信息

资源记录常用的属性有:

- NAME  (主机名)

- CLASS   (类别,通常是IN)

- TYPE  (类型,资源记录的类型)

- RDATA  (信息)

如:

  www  IN  A  192.168.1.1

  mail  IN  A  192.168.1.2

  server1  IN  CNAME  www

        IN  MX 10 mail.gmail.com.(对于MX记录,后面的域名一定要写完整,即最后的 . 也要加上)

  NAME  CLASS  TYPE  RDATA

上面都是我们的资源记录。DNS的资源记录可以记录许多类型的资源,而不仅仅是IP地址,常见的资源记录类型如下:

资源记录类型(TYPE)   表示内容
    A     IPv4地址
   AAAA   IPv6地址  
     MX   邮件记录
   CNAME   别名
      PTR    指针(逆向解析)
      SRV   服务资源

我们可以使用DNS的高级查询命令来查看这些资源记录的信息

①dig -t a www.google.com  查看域名的IPv4地址

[[email protected] ~]# dig -t a www.google.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 <<>> -t a www.google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52161
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.google.com.            IN    A

;; ANSWER SECTION:
www.google.com.        5    IN    A    74.125.31.103
www.google.com.        5    IN    A    74.125.31.99
www.google.com.        5    IN    A    74.125.31.147
www.google.com.        5    IN    A    74.125.31.104
www.google.com.        5    IN    A    74.125.31.106
www.google.com.        5    IN    A    74.125.31.105  //  这些都是 www.google.com 的IPv4地址

;; Query time: 2010 msec
;; SERVER: 192.168.198.2#53(192.168.198.2)
;; WHEN: Mon Jun  3 20:45:30 2013
;; MSG SIZE  rcvd: 128

②dig -t mx gmail.com  查看gmail.com这个域名的邮件记录

[[email protected] ~]# dig -t mx gmail.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 <<>> -t mx gmail.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44633
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 4

;; QUESTION SECTION:
;gmail.com.            IN    MX

;; ANSWER SECTION:
gmail.com.        5    IN    MX    40 alt4.gmail-smtp-in.l.google.com.
gmail.com.        5    IN    MX    30 alt3.gmail-smtp-in.l.google.com.
gmail.com.        5    IN    MX    10 alt1.gmail-smtp-in.l.google.com.
gmail.com.        5    IN    MX    5 gmail-smtp-in.l.google.com.
gmail.com.        5    IN    MX    20 alt2.gmail-smtp-in.l.google.com.  // gmail.com的邮件服务器

;; ADDITIONAL SECTION:
alt3.gmail-smtp-in.l.google.com. 5 IN    AAAA    2607:f8b0:400d:c02::1a
alt1.gmail-smtp-in.l.google.com. 5 IN    AAAA    2a00:1450:4010:c03::1b
gmail-smtp-in.l.google.com. 5    IN    AAAA    2607:f8b0:400e:c01::1a
alt4.gmail-smtp-in.l.google.com. 5 IN    AAAA    2607:f8b0:400c:c01::1a  // gmail.com邮件服务器对应的IP地址

;; Query time: 2003 msec
;; SERVER: 192.168.198.2#53(192.168.198.2)
;; WHEN: Mon Jun  3 20:47:32 2013
;; MSG SIZE  rcvd: 262

③dig -x 42.121.135.98  逆向解析 42.121.135.98 这个IP地址得到其域名 (博客园的IP)

[[email protected] ~]# host www.cnblogs.com
www.cnblogs.com has address 42.121.135.98
[[email protected] ~]# dig -x 42.121.135.98

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 <<>> -x 42.121.135.98
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 22590
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;98.135.121.42.in-addr.arpa.    IN    PTR

;; AUTHORITY SECTION:
121.42.in-addr.arpa.    5    IN    SOA    hidden-master.aliyun.com. hostmaster.aliyun-inc.com. 2013060300 7200 900 2592000 600

;; Query time: 2004 msec
;; SERVER: 192.168.198.2#53(192.168.198.2)
;; WHEN: Mon Jun  3 20:51:27 2013
;; MSG SIZE  rcvd: 126
时间: 2024-10-10 13:34:54

DNS基础及域名系统架构的相关文章

从DNS基础到在CentOS6.5上&ldquo;玩着&rdquo;搭建一个支持正向、反向解析的&ldquo;

1.什么是DNS? (Domain Name System)域名系统. DNS其实实现的功能很简单也很有效,它能够让用户可以不用记得那些经常要访问服务器的ip地址,直接要你输入类似拼音格式的就可以访问到那些数字串的ip地址.假设以61.120.155.14(举个例子),我们总是用这些数字进行网页服务器的访问岂不是很蛋疼,毕竟很多人还是对文字甚至拼音字母更容易让正常人记忆.这就是DNS的功能. 当然,它不仅能把那些你输入的拼音字母转换成ip地址的数字串,它还支持把那些数字串转换成你想访问的实际的网

linux之DNS基础配置

DNS:domain Name Service  监听在53/udp, 53/tcp C/S架构:S(bind).C(共享) bind:bekerley internet name domain FQDN:Full Qualified Domain Name完全限定域名 www.magedu.com.: FQDN      magedu.com:域名       主机名解析 :把一种名称转换为另一种名称的过程 ,一般指字串和数字之间的转换.       解析库:某种存储             

DNS(一)--DNS基础

DNS DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串.通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析).DNS协议运行在UDP协议之上,使用端口号53. DNS功能和作用 每个IP地址都可以有一个主机名,主机名由一个或多个字符串组成,字符串之间用小数点隔开.有了主机名,就不要死记硬背每台IP设备的IP地址,只要记住相对直观有意义的主

DNS基础知识

DNS基础 DNS就是Domain Name System的简称,即域名系统. DNS主要是将难于记忆的IP地址转换为域名,便于人们访问. DNS服务器可以分为3种:主域名服务器.辅助域名服务器.缓存服务器. 主域名服务器:本身提供DNS服务,本身含有区域数据文件 辅助域名服务器:和Master一起提供DNS服务,当Master服务器上的配置信息修改的时候,会同步更新到Slave服务器上. 缓存服务器:没有区域文件,只是帮助客户端向外部DNS请求查询,然后将查询的结果保存到它的缓存中. DNS是

UML的基础元件之架构元件(三)

 Structural Things Anactive class is a class whose objects own one or more processes or threads and therefore can initiate control activity. An active class is just like a class except that its objects represent elements whose behavior is concurren

UML的基础元件之架构元件(四)

 Structural Things An artifact is a physical and replaceable part of a system that contains physical information ("bits"). In a system, you'll encounter different kinds of deployment artifacts, such as source code files, executables, and scrip

DNS基础二

DNS基础二 作者:Danbo 时间:2015-7-26 递归查询:迭代查询: 正向解析.反向解析: 每个对应关系我们称作:Record(记录),根据记录实现的功能,我们分为记录的类型.将主机名转换为IP地址的,我们称之为A(Address)记录:将IP地址转换为主机名的,我们称之为PTR(Pointer)指针记录.正向和反向的两套数据库必须分开存放. SOA(Start of Authority,起始授权)记录:授权这个区域的主DNS服务器,域名管理员的电邮地址等.NS:本区域内所使用的域名服

Linux DNS基础知识与配置

基础概念 程序大都都是有客户端和服务端组成,客户端(Client):用于发起应用请求:服务端(Server):接收并响应请求提供服务.Client是主动请求方,如何实现Server能够及时识别并处理Clinet的某种请求呢?这就引入了端口和监听的概念. 端口(PORT): 可以认为是服务的一种认证,1-1023端口号都被一些通用的应用程序所占用,例如Client请求:80端口,服务端就知道Client请求http服务,同时给予响应.( DNS基于UDP/53号端口和TCP/53号端口,TCP用于

Linux运维实战之DNS基础

DNS服务作为网络的一种基础架构,在网络中有举足轻重的地位.它担负着整个网络用户计算机的名称解析工作.没有正确的名称解析,服务器就无法识别各客户机.我们日常进行的浏览网页等上网活动,无一例外都在使用DNS服务.本次博文我们就来谈谈DNS的基本知识. [本次博文的主要内容] DNS服务器的组成 DNS域名称空间 DNS服务器的工作原理 DNS的名称解析库及资源记录 一.DNS服务器的组成: [DNS是什么]: 由网络知识可知:两台主机之间相互通信依靠的是IP地址,而数字对我们人类来说难以记忆,所以