背景:html
域名系統 DNS (Domain Name System ):
做爲域名和 IP 地址相互映射的一個分佈式數據庫,經過 DNS 能夠將域名迅速解析爲對應的 IP 地址,從而方便咱們訪問 Internet 上的任意一臺主機(或網站)。數據庫
CDN(Content Delivery Network):
其基本思路是儘量避開互聯網上有可能影響數據傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快、更穩定。瀏覽器
HTTPDNS
: 使用 HTTP 請求來模擬 DNS 請求緩存
DNS 服務器類型:安全
- 內部 DNS :位於內網中,提供內網 DNS 服務,也具有 Internet DNS 緩存與轉發能力
- 外部 DNS:位於 Internet 中,提供 Internet 的 DNS 服務(包括 DNS 緩存與轉發)
- 主 DNS:提供 DNS 服務(包括查詢,緩存寫入)
- 輔 DNS:只提供 DNS 查詢服務,與主 DNS 同步數據庫
- 惟緩存 DNS:自身不具有 DNS 解析能力,但具備 DNS 緩存數據庫
- 轉發 DNS:具有轉發特性,能將 DNS 請求轉發給其餘 DNS 服務器
- 權威 DNS: 自身數據庫中存在與 DNS 請求相對應的映射
- 非權威 DNS:不存在相對應的映射,而存在對應緩存查詢結果
本地 DNS:
即在主機的 DNS 設置值服務器
域名組成:
[ 主機名 ].[ 二級域名 ].[ 頂級域名 ],所以能夠根據域名來在樹形結構
中找到一條從根到葉的路徑,葉節點便是權威 DNS網絡
樹型DNS結構.PNGapp
DNS 服務器的功能:負載均衡
在由路由器組成的局域網中,本地 DNS 設置爲自動獲取(路由器),路由器 DNS 設置爲(ISP 提供的 DNS),主機經過瀏覽器訪問 http://www.jianshu.com
時 DNS 請求-響應狀況:分佈式
dns-process.png
上圖的文字描述以下:
192.168.110.252
在瀏覽器訪問http://www.jianshu.com
192.168.110.252
檢查本地 hosts 文件中是否存在www.jianshu.com
對應的 IP- 若無,
192.168.110.252
繼續檢查本地 DNS 緩存中是否存在www.jianshu.com
對應的 IP- 若無,
192.168.110.252
向本地 DNS 服務器發起 DNS 查詢請求- 路由器接收到 DNS 查詢請求後,檢查路由器 DNS 緩存
- 若無,路由器之外網地址
202.202.202.202
向本地 DSN 服務器 (ISP DNS)發起 DNS 查詢請求- ISP DNS 接收到 DNS 查詢請求後,發現本身不是權威 DNS ,且無對應的緩存數據,因而將請求轉發給
其餘 DNS 服務器
:happy:其餘 DNS 服務器
接收到請求後,同樣發現本身不是權威 DNS,且無對應的緩存數據,因而開始進行 DNS 迭代查詢:將請求發送給根域名服務器
根域名服務器
接收到請求後,將頂級域名服務器
(.com) IP 發送給其餘 DNS 服務器
其餘 DNS 服務器
根據 IP 將 DNS 查詢請求發送給頂級域名服務器
頂級域名服務器
接收到請求後,將二級域名服務器
(jianshu.com) IP 發送給其餘 DNS 服務器
其餘域名服務器
根據 IP 將 DNS 查詢請求發送給二級域名服務器
二級域名服務器
接收到請求後,發現本身是權威 DNS 服務器,因而將www.jianshu.com
映射的 IP120.132.92.21
發送給其餘域名服務器
其餘域名服務器
接收到解析結果後,將120.132.92.21
逐層返回傳遞下去,最終直至192.168.110.252
192.168.110.252
接收到www.jianshu.com
解析結果120.132.92.21
,根據 IP 與www.jianshu.com
創建 TCP 鏈接,而後發起 HTTP 請求主頁內容
具體詳見:結合Wireshark分析DNS 協議
wireshark-dns.PNG
wireshark-cname.PNG
根據上面的 wireshark 分析結果能夠看出:DNS 服務器返回的不必定是 IP ,在 DNS 請求中域名爲別名時,則 DNS 服務器會返回其 A 記錄;
如上圖中 cdn-qn0.jianshu.io
域名解析返回的是 CNAME 類型結果 cname iduvrz0.qiniudns.com
,這代表 cdn-qn0.jianshu.io
是別名,其 cname 指向(A 記錄)是 iduvrz0.qiniudns.com
由於 A 記錄與 IP 映射,因而主機又向 DNS 服務器 發起 iduvrz0.qiniudns.com
DNS 請求
DNS循環: 當權威 DNS 發現一個域名映射多個 IP 時,會使用 IP 輪詢的方式來將 IP 平均分配給多個 DNS 請求,從而達到負載均衡的效果
CDN: 因爲 DNS 循環時平均分配,不能根據不一樣服務器的負載狀況優化分配,甚至若是有一臺服務器宕機了,DNS 不能及時瞭解到該狀況把該服務器的 IP 分配出去,便會形成沒法訪問;所以,在權威 DNS 和 服務器之間加上一個 CDN 層就顯得很必要了;CDN 在具有調度分配服務器能力的基礎上,可以同步服務器運行狀況,而後根據該狀況及時適當調整調度策略,從而使得負載均衡能力大大提升;
CDN功能:
- 調度分配主機;負載均衡,根據 IP,網絡流量狀況分配最靠近,網絡最通暢的 CDN 節點實現加速
- 反向代理
- 靜態緩存;緩存靜態資源(html,圖片,音樂,視頻等)
- 防止 DDOS 攻擊
CDN原理圖:
cdn.PNG
經過在權威 DNS 服務器中配置 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 映射
就能夠實現經過 CDN 給域名images.jianshu.com
加速
更多 CDN 知識參見: CDN 知識
爲了防止傳統 DNS 解析過程當中出現的 DNS 劫持,DNS 緩存版本過舊,因 DNS 服務器轉發功能而形成的沒法精準定位用戶位置的狀況,因而經過使用
HTTPDNS 爲主,傳統DNS爲輔
的機制來實現快速,實時,精準的 DNS 解析,從而提供給用戶快速,安全穩定,最新的網站訪問體驗
做者:蕪園樓主香獨秀 連接:https://www.jianshu.com/p/a73e963b63b1 來源:簡書 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。