1. 域名
在解释DNS之前,我们先简单说一下域名。
比如说我们使用浏览器访问一个网站的时候,我们输入的网站地址就是域名,但是其实我们知道互联网上每一台机器都有一个IP地址,如果我们需要访问一个网站其实就需要输入该网站的IP地址才能访问到服务器,但是IP地址往往比较难记,IPv4就更难记了,更别说IPv6了,所以我们就通过域名来进行管理,但是在访问的时候系统底层还是通过IP地址来访问的,而域名与IP地址的直接转换是通过DNS服务器来完成的,首先我们来了解一下关于域名的一些知识,就以这个域名为例。
通常对于一个域名来说,主要分为3个部分
www.google.com主机名 域名 类型
①type表示域名的类型(com、cn、edu、org等)
②域名名称,同上
③主机名域中的某个主机名,如www主机
其实严格来说,域名后面有一个“。”,所以完整的域名应该是
对于域名来说,其大小写是不敏感的,在浏览器中我们输入大写和小写字母指向的IP地址是一样的。
2. DNS
从上面可以看出,每一个域名都对应着一个IP地址,当我们访问一个域名的时候,底层操作系统其实就是通过IP地址来进行通信的,所以我们需要一个服务,能够把域名转换成对应的IP地址,或者把IP地址反向转换成域名。这个服务就是DNS(Name)。
DNS所提供的服务就是在IP和域名之间进行转换,DNS服务是由DNS服务器提供的,一般提供DNS服务的都有单独的DNS服务器,这个DNS服务器的作用就是保存我们的域名到他们的IP地址之间的解析。比如我们访问这个域名的时候,我们的主机首先会向某个DNS服务器发起DNS请求,请求DNS服务器告诉我这个域名的IP地址,这时候DNS服务器就会给我们返回域名的IP地址,这时候我们就是根据这个IP地址来访问服务器的。
DNS服务就是将我们的域名解析成其对应的IP地址,我们日常使用的联网计算机一般都是作为DNS客户端,应用程序、服务、进程等通过操作系统底层功能发起请求,向DNS服务器查询,解析指定的域名
在Linux系统中,域名解析一般是使用系统底层提供的()函数进行。
在Linux系统中,域名解析通常可以基于以下三种方法:
①文件(/etc/hosts、/etc/)
hosts是主机文件,里面保存着一个域名和IP地址的对应关系,下面也有这样一个文件,通常Linux下通过/etc/hosts文件来解析域名。
[root@xiaoluo ~]# cat /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
因为hosts文件中保存的是域名和IP地址的直接对应关系,所以我们也可以手动将我们的域名指定为另外一个IP,比如我们将ip改为192.168.1.1
[root@xiaoluo ~]# ping www.google.com
PING www.google.com (173.194.72.103) 56(84) bytes of data.
[root@xiaoluo ~]# vim /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.1.1 www.google.com[root@xiaoluo ~]# ping www.google.com
PING www.google.com (192.168.1.1) 56(84) bytes of data.
我们看到,当我们把映射关系192.168.1.1添加到/etc/hosts文件之后,在ping的时候,它的IP地址变成了192.168.1.1,这是我们自己设置的,但是我们知道它的IP地址肯定不是这个。为此,我们可以把一些域名的IP地址直接写入操作系统上的hosts文件中,这样,在解析的时候就可以直接访问我们指定的IP地址了。
②DNS是通过我们指定的DNS服务器来解析我们的域名。
③NIS很少使用
我们可以通过查看文件 /etc/.conf 来检查 DNS 解析的顺序
[root@xiaoluo ~]# 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 nispasswd: 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
我们看到我们的主机解析的顺序是先通过文件file进行解析,再通过DNS进行解析,我们可以直接修改该文件来控制我们查询的顺序。
3. DNS查询
我们可以通过host或者dig命令来查询我们的域名对应的IP地址。
①主机(显示较少内容)
[root@xiaoluo ~]# host www.google.com
www.google.com has address 74.125.31.104www.google.com has address 74.125.31.147www.google.com has address 74.125.31.106www.google.com has address 74.125.31.99www.google.com has address 74.125.31.103www.google.com has address 74.125.31.105www.google.com has IPv6 address 2404:6800:4008:c01::6a
②挖掘(显示详细内容)
[root@xiaoluo ~]# 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.104www.google.com. 5 IN A 74.125.31.147www.google.com. 5 IN A 74.125.31.106www.google.com. 5 IN A 74.125.31.99www.google.com. 5 IN A 74.125.31.103www.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服务器进行查询。
我们看到,在查询这个域名的时候,首先通过根DNS服务器查询com的DNS服务器地址,然后通过com对应的多个DNS服务器(每层都有多个DNS服务器)来查询这个域名的DNS服务器,最后通过DNS服务器查询主机名为www的主机的资源记录,从而获取到IP地址。我们可以使用dig +trace命令来跟踪整个DNS查询过程
[root@xiaoluo ~]# 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.103www.google.com. 300 IN A 173.194.72.99www.google.com. 300 IN A 173.194.72.106www.google.com. 300 IN A 173.194.72.104www.google.com. 300 IN A 173.194.72.147www.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查询过程就是上面按照域名从右到左一步步查询,.->->DNS->www
DNS查询有两种类型,一种是迭代查询(Query),一种是递归查询(Query),我们可以通过下面两个图知道这两种查询的区别。
①迭代查询(Query)
②递归查询(Query)
我们看到在迭代查询时,本地DNS会先向.DNS发出请求,此时.DNS会返回本地DNS com的DNS,以此类推,最后返回IP地址。但是对于递归查询来说,只有本地DNS才会向.DNS发出请求,然后IP解析交给其下级DNS完成,最后返回IP地址。由于递归查询会缓存每个DNS上的信息,所以我们一般采用两种查询方式组合的方式进行DNS查询
4. 资源记录
在DNS服务器上,DNS信息以一种叫做资源记录(RR)的格式保存,RR不仅可以保存从域名到IP地址的信息,还可以保存很多其他的信息。
资源记录常用的属性有:
-NAME(主机名)
-CLASS(类别,通常为 IN)
-TYPE(type,资源记录的类型)
-RDATA(信息)
喜欢:
.168.1.1
.168.1.2
INMX 10.(MX记录后面的域名必须写完整,也就是最后的.也必须加上)
以上就是我们的资源记录了,DNS资源记录可以记录很多种类型的资源,不只是IP地址,常见的资源记录类型如下:
资源记录类型(TYPE)
代表内容
IPv4 地址
高级
IPv6 地址
墨西哥
电子邮件历史记录
别名记录
别名
优先权
指针(逆向分析)
服务车辆
服务资源
我们可以使用DNS高级查询命令来查看这些资源中记录的信息
①dig -ta 查看域名的IPv4地址
[root@xiaoluo ~]# 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.103www.google.com. 5 IN A 74.125.31.99www.google.com. 5 IN A 74.125.31.147www.google.com. 5 IN A 74.125.31.104www.google.com. 5 IN A 74.125.31.106www.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 查看此域名的邮件记录
[root@xiaoluo ~]# 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 -x42.121.135.98 反向解析42.121.135.98此IP地址获取其域名(博客园的IP)
[root@xiaoluo ~]# host www.cnblogs.com
www.cnblogs.com has address 42.121.135.98[root@xiaoluo ~]# 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
本文转载自博客
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。