什么是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
如果用一张图来表示的话,则是这样的