DNS 的原理就是一层层从根域名递归查询,其中让我觉得有疑问的就是 CNAME。
反复使用命令查询七牛的官网,我知道他们一定会使用 CDN,CDN 也是 CNAME 使用最多的场景。
$ dig qiniu.com
; <<>> DiG 9.10.6 <<>> qiniu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14562
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;qiniu.com. IN A
;; ANSWER SECTION:
qiniu.com. 212 IN CNAME mid-lvs-public.qiniu.com.
mid-lvs-public.qiniu.com. 212 IN CNAME jjh-lvs-public.qiniu.com.
jjh-lvs-public.qiniu.com. 212 IN A 180.97.147.243
;; Query time: 72 msec
;; SERVER: 223.5.5.5#53(223.5.5.5)
;; WHEN: Mon Aug 10 18:41:59 CST 2020
;; MSG SIZE rcvd: 101
可以看到路径是这样子的 qiniu.com.
=> mid-lvs-public.qiniu.com.
=> jjh-lvs-public.qiniu.com.
=> 给了一个 A 记录 180.97.147.243
。
最终我们的请求肯定也都是发到 A 记录上,也就是将 qiniu.com 交到 180.97.147.243
,这个 IP 对应的服务接受到请求才开始往客户端吐数据。
CNAME 提供一个窍门将解析 A 记录的权利交到下一个域名上,具体下一个域名对应的 ip 可能以后会变,但是对于上一个域名所对应的域名不会变,这个点很像 JAVA 中的一个接口,接口的实现可能会变,但是接口名和方法名提前就确定好了。
网友评论