DNS
计算机必须要向 DNS
服务器查询 Hostname
对应 IP
的信息。 所以 DNS
主机的 IP
就必须要在我的计算机里面配置好才行,并且必须要是输入IP喔,不然计算机怎么连到 DNS
服务器去要求数据呢。所以当有时候QQ能发送消息,但域名访问不了网站,这就有可能是出现了DNS问题。就要排查一下本机的DNS配置是否出现了问题。
DNS
使用了类似树状目录的架构。将主机名的管理分配在不同层级的 DNS
服务器当中,经由分层管理, 所以每一部 DNS
服务器记忆的信息就不会很多,而且若有 IP
异动时也相当容易修改。因为你如果已经申请到主机名解析的授权, 那么在你自己的 DNS
服务器中,就能够修改全世界都可以查询到的主机名了。而不用透过上层 ISP 的维护。
在整个 DNS 系统的最上方一定是 . (小数点)
这个 DNS 服务器称为 root
,最早以前它底下管理的有
com
,edu
,gov
,mil
,org
,net
这种特殊领域- 以国家为分类的第二层的主机名。
这两者称为 Top Level Domains
(TLDs)。
- 一般最上层领域名 (
Generic TLDs, gTLD
):例如 .com, .org, .gov 等等 - 国码最上层领域名 (
Country code TLDs, ccTLD
):例如 .jp, .cn等等
先来谈谈一般最上层领域 (gTLD) 好了,最早 root 仅管理六大领域名,分别如下:
名称 | 代表意义 |
---|---|
com | 公司、行号、企业 |
org | 组织、机构 |
edu | 教育单位 |
gov | 政府单位 |
net | 网络、通讯 |
mil | 军事单位 |
那么看到这么多TLD
,我们可以自己设定一个TLD
吗?当然不可以,因为我们得向上层 ISP
申请领域名的授权才行。各层 DNS 都能管理自己辖下的主机名或子领域,因此 .tw
可以自行规划自己的子领域名字。 例如ISP
提供的 .idv.tw
的个人网站。也就是说『 每个上一层的 DNS
服务器所记录的信息,其实只有其下一层的主机名而已! 』
会这样设定的原因不是没有道理的!这样设计的好处就是:每部机器管理的只有下一层的 hostname
对应 IP
而已,所以减少了管理上的困扰!而下层 Client 端如果有问题,只要询问上一层的 DNS server
即可!不需要跨越上层,除错上面也会比较简单呢!
刚刚说过 DNS
是以类似『树状目录』的型态来进行主机名的管理的 。所以每一部 DNS
服务器都『仅管理自己的下一层主机名』而已, 至于下层的下层,则『授权』给下层的 DNS
主机来管理啦。以下图来说一说原理:
简单来讲就是: 当 DNS 服务器在自己的数据库找不到所需的信息时, 一定会去找 .(root)
,然后再一层一层的向下寻找。
既然 DNS
系统使用的是网络的查询,那么自然需要有监听的端口。就是 53
这个端口。可以到你的 Linux 系统中的 /etc/services
这个文件中看到。搜一下 domain 这个关键词, 就可以查到 53
这个端口了。
[root@test01 yoyo]# cat /etc/services | grep domain
domain 53/tcp # name-domain server
domain 53/udp
domaintime 9909/tcp # domaintime
domaintime 9909/udp # domaintime
[root@test01 yoyo]#
正解与反解
从主机名查询到 IP
的流程称为:正解
从 IP
反解析到主机名的流程称为:反解
因此,正解通常具有底下几种标志:
类型 | 目的 |
---|---|
A | 地址记录,用来指定域名的 IPv4 地址,如果需要将域名指向一个IP 地址,就需要添加 A 记录。 |
AAAA | 用来指定主机名(或域名)对应的 IPv6 地址记录。 |
CNAME | 如果需要将域名指向另一个域名,再由另一个域名ᨀ供 ip 地址,就需要添加 CNAME 记录 (代表这个主机别名的主机名字) |
MX | 如果需要设置邮箱,让邮箱能够收到邮件,需要添加 MX 记录。(接收邮件的服务器主机名) |
NS | 域名服务器记录,如果需要把子域名交给其他 DNS 服务器解析,就需要添加 NS 记录。(管理这个领域名的服务器主机名字) |
SOA | SOA 这种记录是所有区域性文件中的强制性记录。它必须是一个文件中的第一个记录 (管理这个领域名的七个重要参数) |
TXT | 可以写任何东西,长度限制为 255。绝大多数的 TXT 记录是用来做SPF 记录(反垃圾邮件)。 |
AFSDB Andrew | 文件系统数据库服务器记录 |
ATMA | ATM 地址记录 |
HINHO | 硬件配置记录,包括 CPU、操作系统信息 |
ISDN | 域名对应的 ISDN 号码 |
MB | 存放指定邮箱的服务器 |
MG | 邮件组记录 |
MINFO | 邮件组和邮箱的信息记录 |
MR | 改名的邮箱记录 |
PTR | 反向记录 |
RP | 负责人记录 |
RT | 路由穿透记录 |
SRV | TCP 服务器信息记录 |
X25 | 域名对应的 X.25 地址记录 |
这个 CNAME
有啥好处呢?用 A
就好了吧?
其实还是有好处的,举例来说,如果你有一个IP,这个IP是给很多主机名使用的。 那么当你的 IP 更改时,所有的数据就 得通通更新 A 标志才行。 如果你只有一个主要主机名设定 A,而其他的标志使用 CNAME 时,那么当 IP 更改,那你只要修订一个 A 的标志,其他的 CNAME 就跟着变动了,处理起来比较容易。
测试DNS的命令dig
➜ ~ dig baidu.com
; <<>> DiG 9.9.7-P3 <<>> baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58894
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;baidu.com. IN A
;; ANSWER SECTION:
baidu.com. 577 IN A 123.125.114.144
baidu.com. 577 IN A 220.181.57.216
;; Query time: 73 msec
;; SERVER: 172.24.6.11#53(172.24.6.11)
;; WHEN: Thu May 09 17:28:38 CST 2019
;; MSG SIZE rcvd: 70