返回

什么是DNS

域名系统(英语:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网

摘自维基百科

DNS原理

域名的结构

在了解DNS解析原理之前,先让我们了解一下域名的结构。我们已 www.baidu.com. 为例。这是一个最简单的域名,一共有四个组成部分, 从左到右分别是., 顶级域,二级域,三级域。

在现在我们不需要输入半角句号,浏览器会帮我们更正。但在不久的以前,人们需要手动加一个半角句号,否则DNS无法解析。至于为什么要这样做,这我也无法搞清楚,知道的小伙伴可以在评论区留言一下,我的猜测是

域名结构本质是一个树结构,第N级域对应的就是第N层,树结构必须有一个根节点,于是就找了一个半角句号做为整棵树的根节点

过程分析

我们以 www.bilibili.com 为例。

只是用文字难以表达,我们结合 dig 语句和其跟踪返回结果来一点一点介绍。

; <<>> DiG 9.11.36-RedHat-9.11.36-7.el8 <<>> +trace www.bilibili.com
;; global options: +cmd
.                       86160   IN      NS      e.root-servers.net.
.                       86160   IN      NS      h.root-servers.net.
.                       86160   IN      NS      l.root-servers.net.
.                       86160   IN      NS      i.root-servers.net.
.                       86160   IN      NS      a.root-servers.net.
.                       86160   IN      NS      d.root-servers.net.
.                       86160   IN      NS      c.root-servers.net.
.                       86160   IN      NS      b.root-servers.net.
.                       86160   IN      NS      j.root-servers.net.
.                       86160   IN      NS      k.root-servers.net.
.                       86160   IN      NS      g.root-servers.net.
.                       86160   IN      NS      m.root-servers.net.
.                       86160   IN      NS      f.root-servers.net.
;; Received 525 bytes from 8.8.8.8#53(8.8.8.8) in 0 ms

由于这里使用的是VPS,DNS服务器就是谷歌的8.8.8.8,国内可能是114.114.114.114。上述是向根服务器请求 .com 顶级域名的地址

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

DNS会向上述的顶级域服务器发送请求,请求 bilibili.com 这个二级域名

下面这段便是返回的结果

bilibili.com.           172800  IN      NS      ns3.dnsv5.com.
bilibili.com.           172800  IN      NS      ns4.dnsv5.com.
;; Received 964 bytes from 2001:502:7094::30#53(j.gtld-servers.net) in 105 ms

上述结果有两条,dnsv5 是 dnspod 的企业套餐。之后DNS服务器会向 dnspod 发送最后一轮查询,查询 www 这个三级域

下述的CNAME则是最终结果。

www.bilibili.com.       300     IN      CNAME   a.w.bilicdn1.com.
bilibili.com.           86400   IN      NS      ns4.dnsv5.com.
bilibili.com.           86400   IN      NS      ns3.dnsv5.com.
;; Received 129 bytes from 35.154.34.246#53(ns4.dnsv5.com) in 126 ms

bilibili 这个域名的特殊性就导致他不可能有 A 记录,否则就直接被打死了,而是CNAME到CDN。

如果想要获得更简短的的记录,可以使用dig +short www.bilibili.com

如果用一张图来表示的话,则是这样的

DNS原理图