CDN與DNS知識彙總

在性能優化的時候,比較常見的一個建議是,把資源部署在CDN上,那麼問題來了,CDN是什麼?這樣作有什麼好處?html

DNS

咱們先講一下域名系統DNS(Domain Name System)吧。前端

他是一個分佈式數據庫,功能是聯繫域名和ip地址。域名與ip的對應關係,被稱爲記錄(record),可分爲各類類型linux

  • A: Address,域名指向的IP地址,一個域名能夠有多個A記錄。
  • NS:Name Server,保存下一級域名信息的服務器地址
  • MX:Mail eXchange,接受電子郵件的服務器地址
  • CNAME:Canonical Name,返回另外一個域名,令當前查詢域名挑去該域名,多個域名->服務器的映射。
  • PTR: Pointer Record,只用於ip地址查詢域名

DNS由下面三個部分組成git

  • 名稱解析器(resolver)
  • 域名空間(domain name space)
  • 名稱服務器(name server)

假如你要訪問baidu.com,須要先經過dns系統查出他的ip地址如220.181.57.216,才能訪問。github

dns查詢的過程

那麼問題來了,dns是怎麼經過域名來查出ip的呢?咱們以瀏覽器輸入www.example.com爲例,數據庫

  1. 檢查瀏覽器緩存
  2. 檢查操做系統緩存,常見的如hosts文件
  3. 檢查路由器緩存
  4. 若是前幾步都沒沒找到,會向ISP(網絡服務提供商)的LDNS服務器查詢
  5. 若是LDNS服務器沒找到,會向跟域名服務器(Root Server)請求解析,分爲如下幾步:api

    1. 跟服務器返回頂級域名(TLD)服務器如.com,.cn,.org等的地址,全球只有13臺,該例子中會返回.com的地址
    2. 接着向TLD發送請求,而後會返回次級域名(SLD)服務器的地址,本例子會返回.example的地址
    3. 接着向SLD域名服務器經過域名查詢目標IP,本例子會返回www.example.com的地址
    4. Local DNS Server會緩存結果,並返回給用戶,緩存在系統中。
DNS安全問題
  1. DNS反射/放大攻擊

    向大量開放DNS服務器發送大範圍域名查詢的DNS請求,並將該DNS請求的源IP地址僞形成想要攻擊的目標IP地址。因爲請求數據比相應數據小得多,攻擊者能夠利用該技術放大掌握的帶寬資源和攻擊流量。瀏覽器

  2. DDOS攻擊可能形成域名解析癱瘓
  3. DNS/域名劫持
    在劫持的網絡範圍內攔截域名解析的請求,分析請求的域名,返回假的IP地址或者使請求失去響應。DNS劫持經過篡改DNS服務器上的數據返回給用戶一個錯誤的查詢結果來實現的。
  4. DNS污染

DNS污染是一種讓通常用戶因爲獲得虛假目標主機IP而不能與其通訊的方法,指的是用戶訪問一個地址,國內的服務器(非DNS)監控到用戶訪問的已經被標記地址時,服務器假裝成DNS服務器向用戶發回錯誤的地址的行爲。
dns污染與dns劫持的區別在於,dns劫持修改了dns的解析結果,dns污染是不通過dns服務器,返回錯誤信息緩存

  1. DNS信息黑客被修改
DNS優化

能夠看出,dns解析是一個漫長的過程,如何優化這一過程呢?安全

  1. DNS Prefetching

    用戶在請求某個連接以前,瀏覽器先嚐試解析該連接的域名再將其進行緩存。這樣真正請求的時候就不須要進行DNS解析。

能夠

    • 在服務器中響應設置X-DNS-Prefetch-Control的值爲on啓動預解析
    • HTML中,<meta http-equiv="x-dns-prefetch-control" content="on">
    • 對特定域名預解析<link rel=」dns-prefetch」 href=」//fonts.googleapis.com」>
    1. 域名收斂

      建議將靜態資源只放在一個域名下面,能夠有效減小dns的請求

    2. httpdns

      基於Http協議向HTTPDNS服務器發送域名解析請求,替代了基於DNS協議向運營商Local DNS發起解析請求的傳統方式,能夠避免運營商的域名劫持和進行精準調度。

    這過程分爲兩步

    1. 客戶端直接訪問HttpDNS接口,獲取業務在域名配置管理系統上配置的訪問延遲最優的IP。(基於容災考慮,仍是保留次選使用運營商LocalDNS解析域名的方式)
    2. 客戶端向獲取到的IP後就向直接往此IP發送業務協議請求。以Http請求爲例,經過在header中指定host字段,向HttpDNS返回的IP發送標準的Http請求便可。

    CDN

    CDN是什麼

    講完DNS,如今能夠開始講CDN了,CDN的全稱是Content Delivery Network,即內容分發網絡,它可以實時地根據網絡流量和各節點的鏈接、負載情況以及到用戶的距離和響應時間等綜合信息將用戶的請求從新導向離用戶最近的服務節點上。其目的是使用戶可就近取得所需內容,解決 Internet網絡擁擠的情況,提升用戶訪問網站的響應速度。

    典型的CDN系統由下面三個部分組成

    • 分發服務系統

      最基本的工做單元就是Cache設備,cache(邊緣cache)負責直接響應最終用戶的訪問請求,把緩存在本地的內容快速地提供給用 戶。同時cache還負責與源站點進行內容同步,把更新的內容以及本地沒有的內容從源站點獲取並保存在本地。Cache設備的數量、規模、總服務能力是衡 量一個CDN系統服務能力的最基本的指標

    • 負載均衡系統

      主要功能是負責對全部發起服務請求的用戶進行訪問調度,肯定提供給用戶的最終實際訪問地址。兩級調度體系分爲全局負載均衡(GSLB)和本 地負載均衡(SLB)。GSLB主要根據用戶就近性原則,經過對每一個服務節點進行「最優」判斷,肯定向用戶提供服務的cache的物理位置。SLB主要負 責節點內部的設備負載均衡

    • 運營管理系統

      分爲運營管理和網絡管理子系統,負責處理業務層面的與外界系統交互所必須的收集、整理、交付工做,包含客戶管理、產品管理、計費管理、統計分析等功能。

    CDN的過程

    使用CDN的方法很簡單,只須要修改本身的DNS解析,設置一個CNAME指向CDN服務商便可。

    用戶訪問未使用CDN緩存資源的過程爲:

    1. 瀏覽器經過前面提到的過程對域名進行解析,以獲得此域名對應的IP地址;
    2. 瀏覽器使用所獲得的IP地址,向域名的服務主機發出數據訪問請求;
    3. 服務器向瀏覽器返回響應數據

    使用CDN後

    1. 當用戶點擊網站頁面上的內容URL,通過本地DNS系統解析,DNS系統會最終將域名的解析權交給CNAME指向的CDN專用DNS服務器。
    2. CDN的DNS服務器將CDN的全局負載均衡設備IP地址返回用戶。
    3. 用戶向CDN的全局負載均衡設備發起內容URL訪問請求。
    4. CDN全局負載均衡設備根據用戶IP地址,以及用戶請求的內容URL,選擇一臺用戶所屬區域的區域負載均衡設備,告訴用戶向這臺設備發起請求。
    5. 區域負載均衡設備會爲用戶選擇一臺合適的緩存服務器提供服務,選擇的依據包括:根據用戶IP地址,判斷哪一臺服務器距用戶最近;根據用戶所請求的URL中攜帶的內容名稱,判斷哪一臺服務器上有用戶所需內容;查詢各個服務器當前的負載狀況,判斷哪一臺服務器尚有服務能力。基於以上這些條件的綜合分析以後,區域負載均衡設備會向全局負載均衡設備返回一臺緩存服務器的IP地址。
    6. 全局負載均衡設備把服務器的IP地址返回給用戶
    7. 用戶向緩存服務器發起請求,緩存服務器響應用戶請求,將用戶所需內容傳送到用戶終端。若是這臺緩存服務器上並無用戶想要的內容,而區域均衡設備依然將它分配給了用戶,那麼這臺服務器就要向它的上一級緩存服務器請求內容,直至追溯到網站的源服務器將內容拉到本地。

    上面的字太多,有點繞?通俗點就是用戶訪問的資源本來是存放在你本身的服務器,經過修改DNS讓用戶根據IP等狀況來選擇合適的CDN緩存服務器來獲取資源。

    CDN的優勢

    這樣作有什麼好處呢?

    1. 本地Cache加速,加快訪問速度
    2. 鏡像服務,消除運營商之間互聯的瓶頸影響,保證不一樣網絡的用戶都能獲得良好的訪問質量
    3. 遠程加速,自動選擇cache服務器
    4. 帶寬優化,分擔網絡流量,減輕壓力,
    5. 集羣抗攻擊
    6. 節約成本

    最後

    本文章爲前端進階系列的一部分,
    歡迎關注和star本博客或是關注個人github

    引用

    1. 瀏覽器緩存之DNS
    2. 1.2 CDN的基本工做過程 - 51CTO.COM
    3. CDN技術詳解
    4. DNS 預讀取
    相關文章
    相關標籤/搜索