你的猜測是對的,就是基於你的IP,DNS返回一個最近的伺服器。所以對cdn來說,維護一個準確及時的ip資料庫非常重要。

有的用戶喜歡配置8.8.8.8為自己的dns伺服器,這就可能誤導了比如騰訊的dns解析,給身在四川自貢的你返回一個美國的伺服器ip.

也有一些非著名isp,比如長城寬頻,可能百度就沒在他們網內部署機器,只能把用戶導向最近的電信或者聯通節點,那就慢的急死人。

我說的都是前幾年的事情,現在可能進步多了。
CDN架構中有一個東西叫做Request Routing System,或者叫做別的名字,但是干就近性判斷和重定向用戶請求的事情。DNS域名解析對應的IP是Request Routing System的IP,然後RRS會有一系列的演算法來分配哪台內容伺服器處理用戶請求。這些演算法可能是挑一個離用戶最近的,或者挑一個最閑的(一般不會用這種演算法)
「發現DNS響應中通過CNAME指向了CDN的域名。」

大概是這樣的。靠這個cname的dns(自己搭建的)返回距離用戶最近的伺服器ip.


在兩個條件下會有正確的結果,運營商的dns支持edns,如果授權dns在技術上也支持了edns技術,那麼寫8.8.8.8也不是問題,會把實際用戶ip帶給授權dns做query。具體可以參見edns-client-subnet文檔。

1. 首先要搞清楚DNS的作用。比如說你訪問www.zhihu.com, DNS解析是第一步的,解析後才會返回IP。

2.
dig http://www.zhihu.com | grep CNAME
www.zhihu.com. 120 IN CNAME eclipse.zhihu.com.
eclipse.zhihu.com. 24 IN CNAME zhihu.com.edgekey.net.
zhihu.com.edgekey.net. 21160 IN CNAME e7448.a.akamaiedge.net.
知乎海外站DNS CNAME去了akamai, 當你訪問http://www.zhihu.com的時候, 你的DNS會問akamai的DNS,這是交互的第一步,所以根據你的DNS IP,就可判斷出你的位置
這也是為什麼不用IP來做匹配的原因,因為DNS解析是第一步

3. 我是廣東聯通的用戶,可以用廣東電信的DNS嗎?(錯用DNS)
可以,根據你廣東電信的DNS,絕大多數情況下會給你廣東電信的緩存伺服器,網路中應該有個叫peering的東西,廣東電信的線路到廣東聯通的線路不是最優的,或者可能沒優化。
所以還是建議用本地ISP的DNS,這樣可以保證線路優化速度好。

4. 可以用GOOGLE DNS嗎?
可以,前面有朋友提到,eDNS的東西,支持eDNS的話,如果檢測到是eDNS,就會根據IP地址來對緩存伺服器進行匹配


可以基於GEOIP資料庫來做,這個資料庫記錄了全球所有IPv4地址的分布,周期性更新——沒記錯是一周一次。

GEOIP


需要edns-client-subnet支持,如果你的dns resolver不支持該協議,那麼很大概率你將會被引導至錯誤的伺服器。感謝Google的提議,DNS才可以根據發起DNS請求的用戶IP地址返回就近伺服器,而不是依據發起DNS請求的Resolver地址作為查詢地址而返回就近伺服器。


用戶的本地dns
IP地址庫+調度系統


推薦閱讀:
相关文章