4.4.1 路由解析

在介绍DNS域名解析时,笔者曾提到翻译域名无须像查电话本一样刻板地一对一翻译,根据来访机器、网络链路、服务内容等各种信息,可以玩出很多“花样”,内容分发网络将用户请求路由到它的资源服务器上就是依靠DNS服务器来实现的。根据我们对DNS域名解析的了解,一次没有内容分发网络参与的用户访问,其解析过程如图4-5所示。

图4-5 没有内容分发网络参与的用户访问的解析过程

那么,有内容分发网络介入会发生什么变化呢?我们不妨先来看一段对网站“icyfenix.cn.”进行DNS查询的真实应答记录,这个网站就是通过国内的内容分发网络对位于GitHub Pages上的静态页面进行加速的。通过dig或者host命令,能够很方便地得到DNS服务器的返回结果(结果中头4个IP的城市地址是笔者手工加入的,后面的其他记录就不一个一个查了),如下所示:


$ dig icyfenix.cn

; <<>> DiG 9.11.3-1ubuntu1.8-Ubuntu <<>> icyfenix.cn
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60630
;; flags: qr rd ra; QUERY: 1, ANSWER: 17, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;icyfenix.cn.                   IN      A

;; ANSWER SECTION:
icyfenix.cn.            600     IN      CNAME   icyfenix.cn.cdn.dnsv1.com.
icyfenix.cn.cdn.dnsv1.com. 599  IN      CNAME   4yi4q4z6.dispatch.spcdntip.com.
4yi4q4z6.dispatch.spcdntip.com.  60 IN  A  101.71.72.192  #浙江宁波市
4yi4q4z6.dispatch.spcdntip.com.  60 IN  A  113.200.16.234 #陕西省榆林市
4yi4q4z6.dispatch.spcdntip.com.  60 IN  A  116.95.25.196  #内蒙古自治区呼和浩特市
4yi4q4z6.dispatch.spcdntip.com.  60 IN  A  116.178.66.65  #新疆维吾尔自治区乌鲁木齐市
4yi4q4z6.dispatch.spcdntip.com.  60 IN  A  118.212.234.144
4yi4q4z6.dispatch.spcdntip.com.  60 IN  A  211.91.160.228
4yi4q4z6.dispatch.spcdntip.com.  60 IN  A  211.97.73.224
4yi4q4z6.dispatch.spcdntip.com.  60 IN  A  218.11.8.232
4yi4q4z6.dispatch.spcdntip.com.  60 IN  A  221.204.166.70
4yi4q4z6.dispatch.spcdntip.com.  60 IN  A  14.204.74.140
4yi4q4z6.dispatch.spcdntip.com.  60 IN  A  43.242.166.88
4yi4q4z6.dispatch.spcdntip.com.  60 IN  A  59.80.39.110
4yi4q4z6.dispatch.spcdntip.com.  60 IN  A  59.83.204.12
4yi4q4z6.dispatch.spcdntip.com.  60 IN  A  59.83.204.14
4yi4q4z6.dispatch.spcdntip.com.  60 IN  A  59.83.218.235

;; Query time: 74 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Sat Apr 11 22:33:56 CST 2020
;; MSG SIZE  rcvd: 152

根据以上解析信息,DNS服务为“icyfenix.cn.”的查询结果先返回了一个CNAME记录(icyfenix.cn.cdn.dnsv1.com.),递归查询该CNAME时,返回了另一个看起来更奇怪的CNAME(4yi4q4z6.dispatch.spcdntip.com.)。继续查询后,这个CNAME返回了十几个位于全国不同地区的A记录,很明显,这些A记录就是分布在全国各地、存有本站缓存的CDN节点。CDN路由解析的具体工作流程如下。

·架设好“icyfenix.cn.”的服务器后,在你的CDN服务商上将服务器的IP地址注册为“源站”,注册后你会得到一个CNAME,即本例中的“icyfenix.cn.cdn.dnsv1.com.”。

·在你购买域名的DNS服务商上将得到的CNAME注册为一条CNAME记录。

·当第一位用户来访时,将首先发生一次未命中缓存的DNS查询,域名服务商解析出CNAME后,返回给本地DNS,之后链路解析的主导权就开始由内容分发网络的调度服务接管了。

·本地DNS查询CNAME时,由于能解析该CNAME的权威服务器只有CDN服务商所架设的权威DNS,这个DNS服务将根据一定的均衡策略和参数,如拓扑结构、容量、时延等,在全国各地能提供服务的CDN缓存节点中挑选一个最适合的,并将它的IP代替源站的IP地址,返回给本地DNS。

·浏览器从本地DNS拿到IP地址后,将该IP当作源站服务器来进行访问,此时该IP的CDN节点上可能有,也可能没有缓存过源站的资源,这点将在稍后的4.4.2节讨论。

·经过内容分发后的CDN节点,就有能力代替源站向用户提供所请求的资源了。

以上步骤反映在时序图上,如图4-6所示,读者可自行与本节开头给出的没有内容分发网络参与的图4-5进行对比。

图4-6 有内容分发网络参与的路由解析过程