来源

北京的王先生是一位创业者,做了一款 APP,正在为如何存储图片发愁,从朋友哪里听说 UPYUN 服务很好,速度稳定,价格便宜,打算了解一下。于是在浏览器输入了 「www.upyun.com」,发起请求。请求发起之后,浏览器要把这个域名解析成计算机认识的 IP 地址,浏览器首先会查询本地的 hosts 文件,看有没有对应的 IP,如果有则直接使用。

请求

如果本地 hosts 没有,浏览器就会向 DNS 域名解析服务器发起域名解析请求,DNS 的域名解析式递归的,递归的 DNS 会先查看本地 DNS 缓存,如果缓存命中,则将 IP 返回给浏览器,如果没有则向上转发,然后从根域名服务器那里得到了 NS 服务器的地址,再向这个 NS 服务器去请求 IP,由于我们使用的是 Dnspod 的域名解析,Dnspod 发现这个 DNS 服务器是北京电信的,于是会将我们北京电信的节点 IP 返回给浏览器。

浏览器获取 IP 之后,就开始构造 http 请求,北京电信的 CDN 节点服务器就会将资源返回给浏览器,王先生就看到了这个又拍云存储的首页。

问题

如果回头去看上述过程,我们发现,如果用户把本地的 DNS 修改了,随便填了一个地址,恰好这个地址在国外,那么 Dnspod 会根据 IP 列表判定,这个请求来自国外,然后把国外的节点 IP 返回给浏览器。这就带来了一个问题,我在中国访问中国的网站,却要去国外节点请求资源,由于距离和网络延时,用户访问会非常慢,体验很不好。

解决

作为最大的免费 DNS 提供者,Google 也意识到了这个问题,并在积极推动解决。Google 在 2012 年 4 月提交了 01 版文稿。该方案的核心就是通过扩展现有 DNS 协议,通过定义一个新的 client-subnet 字段来携带与用户相关的网络信息。由 Local DNS 服务器依据用户 IP 地址信息生成该字段,并逐级向上传递。

Google Public Dns 和 Dnspod 已经支持这个协议,如果用户将本地的 DNS 地址改成 8.8.8.8,那么在请求域名解析的时候,Dnspod 会根据用户 IP 来判断这是属于北京电信的用户,于是将 UPYUN 北京电信的节点地址返回给浏览器,那么浏览器直接向北京电信节点请求资源,这样访问速度就会快很多。

现状

但是由于目前大多数 ISP 提供商并不支持 edns 协议,所以 Dnspod 大多时候还是根据运营商默认提供的 DNS 服务器 IP 来判断所属区域,一般也是准确的,用户可以就近访问,提升速度。在 linux 命令上可以通过 dig 命令查看是否支持 EDNS 协议。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
root@bin:/wangbin# dig www.upyun.com
; <<>> DiG 9.9.5-3-Ubuntu <<>> www.upyun.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14060
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 14
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.upyun.com. IN A
;; ANSWER SECTION:
www.upyun.com. 40 IN A 124.160.114.200
;; AUTHORITY SECTION:
upyun.com. 497 IN NS ns3.dnsv5.com.
upyun.com. 497 IN NS ns4.dnsv5.com.
;; ADDITIONAL SECTION:
ns3.dnsv5.com. 8924 IN A 125.39.213.166
ns3.dnsv5.com. 8924 IN A 183.60.59.217
ns3.dnsv5.com. 8924 IN A 221.204.186.11
ns3.dnsv5.com. 8924 IN A 112.90.143.36
ns3.dnsv5.com. 8924 IN A 115.236.151.143
ns3.dnsv5.com. 8924 IN A 115.236.151.180
ns3.dnsv5.com. 8924 IN A 119.167.195.9
ns4.dnsv5.com. 80514 IN A 183.60.59.218
ns4.dnsv5.com. 80514 IN A 115.236.151.142
ns4.dnsv5.com. 80514 IN A 122.225.217.194
ns4.dnsv5.com. 80514 IN A 180.153.10.169
ns4.dnsv5.com. 80514 IN A 180.153.162.153
ns4.dnsv5.com. 80514 IN A 183.60.57.191
;; Query time: 13 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Tue Sep 09 14:52:47 CST 2014
;; MSG SIZE rcvd: 308

从 dig 结果可以看出,UPYUN 使用 Dnspod 解析,而且是企业旗舰版哦,其中:OPT PSEUDOSECTION 代表支持 EDNS 协议。