DNS & CDN & HTTPDNS 原理簡析
背景:
域名系統(tǒng) DNS (Domain Name System ):
作為域名和 IP 地址相互映射的一個分布式數(shù)據(jù)庫,通過 DNS 可以將域名迅速解析為對應(yīng)的 IP 地址酵熙,從而方便我們訪問 Internet 上的任意一臺主機(或網(wǎng)站)轧简。
CDN(Content Delivery Network):
其基本思路是盡可能避開互聯(lián)網(wǎng)上有可能影響數(shù)據(jù)傳輸速度和穩(wěn)定性的瓶頸和環(huán)節(jié),使內(nèi)容傳輸?shù)母熵叶⒏€(wěn)定哮独。
HTTPDNS
: 使用 HTTP 請求來模擬 DNS 請求
0x00 DNS 原理
DNS 服務(wù)器類型:
- 內(nèi)部 DNS :位于內(nèi)網(wǎng)中,提供內(nèi)網(wǎng) DNS 服務(wù)察藐,也具備 Internet DNS 緩存與轉(zhuǎn)發(fā)能力
- 外部 DNS:位于 Internet 中皮璧,提供 Internet 的 DNS 服務(wù)(包括 DNS 緩存與轉(zhuǎn)發(fā))
- 主 DNS:提供 DNS 服務(wù)(包括查詢,緩存寫入)
- 輔 DNS:只提供 DNS 查詢服務(wù)分飞,與主 DNS 同步數(shù)據(jù)庫
- 唯緩存 DNS:自身不具備 DNS 解析能力悴务,但具有 DNS 緩存數(shù)據(jù)庫
- 轉(zhuǎn)發(fā) DNS:具備轉(zhuǎn)發(fā)特性,能將 DNS 請求轉(zhuǎn)發(fā)給其他 DNS 服務(wù)器
- 權(quán)威 DNS: 自身數(shù)據(jù)庫中存在與 DNS 請求相對應(yīng)的映射
- 非權(quán)威 DNS:不存在相對應(yīng)的映射譬猫,而存在對應(yīng)緩存查詢結(jié)果
本地 DNS:
即在主機的 DNS 設(shè)置值
域名組成:
[ 主機名 ].[ 二級域名 ].[ 頂級域名 ]讯檐,因此可以根據(jù)域名來在樹形結(jié)構(gòu)
中找到一條從根到葉的路徑,葉節(jié)點即是權(quán)威 DNS
DNS 服務(wù)器的功能:
- 權(quán)威 DNS染服,自身具備解析能力
- 轉(zhuǎn)發(fā) DNS
- 緩存 DNS
在由路由器組成的局域網(wǎng)中别洪,本地 DNS 設(shè)置為自動獲取(路由器)柳刮,路由器 DNS 設(shè)置為(ISP 提供的 DNS)挖垛,主機通過瀏覽器訪問 http://www.reibang.com
時 DNS 請求-響應(yīng)情況:
上圖的文字描述如下:
192.168.110.252
在瀏覽器訪問http://www.reibang.com
192.168.110.252
檢查本地 hosts 文件中是否存在www.reibang.com
對應(yīng)的 IP- 若無,
192.168.110.252
繼續(xù)檢查本地 DNS 緩存中是否存在www.reibang.com
對應(yīng)的 IP- 若無秉颗,
192.168.110.252
向本地 DNS 服務(wù)器發(fā)起 DNS 查詢請求- 路由器接收到 DNS 查詢請求后痢毒,檢查路由器 DNS 緩存
- 若無,路由器以外網(wǎng)地址
202.202.202.202
向本地 DSN 服務(wù)器 (ISP DNS)發(fā)起 DNS 查詢請求- ISP DNS 接收到 DNS 查詢請求后蚕甥,發(fā)現(xiàn)自己不是權(quán)威 DNS 哪替,且無對應(yīng)的緩存數(shù)據(jù),于是將請求轉(zhuǎn)發(fā)給
其他 DNS 服務(wù)器
:happy:其他 DNS 服務(wù)器
接收到請求后菇怀,一樣發(fā)現(xiàn)自己不是權(quán)威 DNS夷家,且無對應(yīng)的緩存數(shù)據(jù),于是開始進行 DNS 迭代查詢:將請求發(fā)送給根域名服務(wù)器
根域名服務(wù)器
接收到請求后敏释,將頂級域名服務(wù)器
(.com) IP 發(fā)送給其他 DNS 服務(wù)器
其他 DNS 服務(wù)器
根據(jù) IP 將 DNS 查詢請求發(fā)送給頂級域名服務(wù)器
頂級域名服務(wù)器
接收到請求后,將二級域名服務(wù)器
(jianshu.com) IP 發(fā)送給其他 DNS 服務(wù)器
其他域名服務(wù)器
根據(jù) IP 將 DNS 查詢請求發(fā)送給二級域名服務(wù)器
二級域名服務(wù)器
接收到請求后摸袁,發(fā)現(xiàn)自己是權(quán)威 DNS 服務(wù)器钥顽,于是將www.reibang.com
映射的 IP120.132.92.21
發(fā)送給其他域名服務(wù)器
其他域名服務(wù)器
接收到解析結(jié)果后,將120.132.92.21
逐層返回傳遞下去靠汁,最終直至192.168.110.252
192.168.110.252
接收到www.reibang.com
解析結(jié)果120.132.92.21
蜂大,根據(jù) IP 與www.reibang.com
建立 TCP 連接闽铐,然后發(fā)起 HTTP 請求主頁內(nèi)容
0x01 DNS 協(xié)議結(jié)構(gòu)
具體詳見:結(jié)合Wireshark分析DNS 協(xié)議
根據(jù)上面的 wireshark 分析結(jié)果可以看出:DNS 服務(wù)器返回的不一定是 IP ,在 DNS 請求中域名為別名時奶浦,則 DNS 服務(wù)器會返回其 A 記錄兄墅;
如上圖中 cdn-qn0.jianshu.io
域名解析返回的是 CNAME 類型結(jié)果 cname iduvrz0.qiniudns.com
,這表明 cdn-qn0.jianshu.io
是別名澳叉,其 cname 指向(A 記錄)是 iduvrz0.qiniudns.com
因為 A 記錄與 IP 映射隙咸,于是主機又向 DNS 服務(wù)器 發(fā)起 iduvrz0.qiniudns.com
DNS 請求
0x02 DNS 循環(huán)與 CDN
DNS循環(huán): 當權(quán)威 DNS 發(fā)現(xiàn)一個域名映射多個 IP 時,會使用 IP 輪詢的方式來將 IP 平均分配給多個 DNS 請求成洗,從而達到負載均衡的效果
CDN: 由于 DNS 循環(huán)時平均分配五督,不能根據(jù)不同服務(wù)器的負載情況優(yōu)化分配,甚至如果有一臺服務(wù)器宕機了瓶殃,DNS 不能及時了解到該情況把該服務(wù)器的 IP 分配出去充包,便會造成無法訪問;因此遥椿,在權(quán)威 DNS 和 服務(wù)器之間加上一個 CDN 層就顯得很必要了基矮;CDN 在具備調(diào)度分配服務(wù)器能力的基礎(chǔ)上,能夠同步服務(wù)器運行情況冠场,然后根據(jù)該情況及時適當調(diào)整調(diào)度策略家浇,從而使得負載均衡能力大大提高;
CDN功能:
- 調(diào)度分配主機慈鸠;負載均衡蓝谨,根據(jù) IP,網(wǎng)絡(luò)流量情況分配最靠近青团,網(wǎng)絡(luò)最通暢的 CDN 節(jié)點實現(xiàn)加速
- 反向代理
- 靜態(tài)緩存譬巫;緩存靜態(tài)資源(html,圖片督笆,音樂芦昔,視頻等)
- 防止 DDOS 攻擊
CDN原理圖:
通過在權(quán)威 DNS 服務(wù)器中配置 images.jianshu.com
的 cname 指向(A 記錄)為 abc.qiniudns.com
在 CDN DNS 中將 abc.qiniudns.com
與 110.110.110.110, 220.220.220.220, 330.330.330.330
三個 IP 映射
就可以實現(xiàn)通過 CDN 給域名images.jianshu.com
加速
更多 CDN 知識參見: CDN 知識
0x03 HTTPDNS
為了防止傳統(tǒng) DNS 解析過程中出現(xiàn)的 DNS 劫持,DNS 緩存版本過舊娃肿,因 DNS 服務(wù)器轉(zhuǎn)發(fā)功能而造成的無法精準定位用戶位置的情況咕缎,于是通過使用
HTTPDNS 為主,傳統(tǒng)DNS為輔
的機制來實現(xiàn)快速料扰,實時凭豪,精準的 DNS 解析,從而提供給用戶快速晒杈,安全穩(wěn)定嫂伞,最新的網(wǎng)站訪問體驗
一篇很好的文章來解釋 HTTPDNS : HttpDNS 服務(wù)詳解