前端渣渣對DNS的正確理解,臥槽無情

DNS

📢 感興趣的能夠去看看阿寬的博客html

爲何會有這篇文章?

要解釋這個緣由,得從我剛入部門那天,在每日的工做總結裏,跟部門經理提了,想有技術分享,而後提升組裏的技術氛圍,因而呢,組裏每週五,都會輪流進行分享,從項目架構,到 flutter,微前端,網絡,(小聲 bb: 其實我大部分都沒聽懂...)前端

因而,上週五就是我分享了...分享啥呢?前端?算了...因而就定了個題,分享網絡吧,可是網絡也很大啊,後邊想了想,就分享 DNS 吧,由於我對 DNS 瞭解不深,恰好經過此次,去對 DNS 瞭解一下~因此就有了這篇文章 ~linux

看到沒,這就是典型的本身挖坑給本身跳git

先打個預防針

我不能保證你能學到啥,只是圍繞 DNS,而後一塊兒聊一下前端對 DNS 的一個理解,若是我哪裏寫錯了,能夠提出來哈,固然,大佬就請繞路 ~github

這也不是一個標題文,"乾貨"這詞被我用雙引號標識起來了嘛~算法

此文章僅表明筆者對 DNS 的一個理解 ~ 此文章的書寫順序是一個"時間線",但願你,能仔細讀讀哈~ 下面進入正文 👇數據庫

介紹

(其實不想介紹,由於這個也是我百度百科查的...)瀏覽器

DNS 全稱 :Domain Name System,域名服務系統,它做爲將域名和 IP 地址相互映射的一個分佈式數據庫,可以令人更方便地訪問互聯網。緩存

既然說是域名服務系統,咱們得先知道,什麼是域名? 好比下邊這些,均可以說是域名 👇bash

www.pengdaokuan.cn
www.pdk.com
www.seewo.com
www.class.seewo.com
www.cvte.com
複製代碼

那麼,咱們從一個簡單的問題入手,域名是如何註冊的?

域名註冊流程

  • 域名註冊人向轉銷商進行購買域名服務
  • 轉銷商表明註冊人進行註冊,但沒有與 ICANN 簽定合同的關係
  • 通過 ICANN 認證的組織(經銷商)來處理域名註冊,將須要請求的域名及域名的聯繫方式和技術信息發送給註冊管理機構
  • 註冊管理機構會在註冊表上記錄 Whois 的聯繫方式,還會將此域名文件添加到主服務器。
  • 更新全部信息,此域名即被視爲已註冊且可使用。

👉 你能夠經過這裏瞭解: WHOIS

DNS 爲何要經過 IP 確認通訊對象

ok,按照上邊的流程,咱們註冊了一個域名 www.pengdaokuan.cn (沒錢維護,已經die了),而後呢,咱們知道,在瀏覽器中,輸入 IP 或者 域名,均可以訪問咱們的目的網站,既然如此,爲何不經過域名去確認通訊對象,而是經過 IP 呢?

不要跟我說,由於 TCP/IP 協議規定要知道目的 IP 地址,因此就選擇 IP 確認通訊 ~ 固然,這應該也是一方面的緣由,可是具體的緣由以下 👇

📢 從運行效率上來說,IP 地址是 32 比特,也就是 4 字節,而域名,最短也要十幾個字節,最長的時候,可能達到 255 字節,換句話講,使用 IP 地址只須要處理 4 字節的數字,如今用域名,就要處理十幾甚至 255 個字節的字符,這嚴重影響效率。同時添加了路由器的負擔,傳送數據也會花費更長的時間。

好比我發送一個 2KB 的字符串,中間有可能經過光纖傳遞傳遞,也有可能其餘的方式,如早期的銅纜。不一樣的鏈接材料帶寬不一樣。有可能一個包的 maxSize 只能 1KB。應用層的數據在通信過程當中會根據通信設備的帶寬分紅不少個包。一個 http 請求並非只發了一個包,可能一次請求被拆成了不少個包。因此若是用域名,網絡請求的數據量會增長不少。

這時,有鍵盤俠出來發言了 : 「那使用高性能路由器不就能解決這個問題了嗎」

ok,可是要知道,路由器的速度是有極限的,互聯網內部流動的數據量已經讓路由器疲於應付了。雖然隨着技術發展,路由器性能會不斷提高,可是與此同時,數據量也以更快的速度在增加。因此說,用域名確認通訊對象不是一個明智的選擇 ~

DNS 能否使用 TCP

咱們常說,DNS 使用 UDP 進行傳輸,那麼 DNS 可不可使用 TCP 呢?

經過百度百科,咱們知道,DNS 使用的是 53 端口,是能夠經過 TCP 和 UDP 進行傳輸,只是說,大部分時候都用的 UDP 協議,但在如下兩種狀況,會以 TCP 協議進行傳輸 :

  • 返回的響應超過 512 字節(不知道爲啥超過 512 就要用 TCP 的,拖出去砍了)
  • 區域傳送

區域傳送

可能此時此刻,你在想,我特麼知道區域傳送是啥有什麼用,我一個前端仔,只要知道 DNS 解析 url 的流程就完事了嘛,ok,若是是這樣想的,能夠直接滾動到下邊啦 ~

DNS 區域傳送(DNS zone transfer)指的是一臺備用服務器使用來自主服務器的數據刷新本身的域(zone)數據庫,目的是爲了作冗餘備份,防止主服務器出現故障時 dns 解析不可用。

📌 區域傳送是主域名服務器向輔助域名服務器傳送變化的那部分數據,輔域名服務器會定時向主域名服務器進行查詢,以便了解數據是否有變更。若有變更,會執行一次區域傳送,進行數據同步。

既然說到了傳送變更的那部分數據,那麼不得不提區域文件了...科普一下概念

DNS區域(ZONE):DNS域名空間中連續的樹,將域名空間按照須要劃分爲若干較小的管理單位。

DNS服務器中,必須先創建區域,在區域中創建子域,在區域或者子域中添加主機記錄。

存儲區域數據的文件,稱爲區域文件。一臺DNS服務器上能夠存放多個區域文件,同一個區域文件也能夠存放在多臺DNS服務器上。

區域文件包含主機名和對應IP地址、刷新間隔和過時時間等信息。
複製代碼

區域文件一般只配置一個域名,區域名字即爲域名。它能夠包含多個記錄。它的表達形式爲 :一條記錄就是一條從資源到名字的單一映射。

Zone File SOA 起始受權記錄

咱們能夠來看一下 SOA 起始受權記錄,注意,上邊說到,輔助域名服務器會定時向主域名服務器進行查詢,那麼定時的時間是多久,如何知道是否數據改變?

pengdaokuan.cn.  IN SOA pdk.com. pdk.qq.com. (
                                12083   ; serial number
                                3h      ; refresh interval
                                30m     ; retry interval
                                3w      ; expiry period
                                1h      ; negative TTL
)
複製代碼

來簡單講一下 👇

  • pengdaokuan.cn. : 這是區域的根。這裏指定這個 zone 文件是給 pengdaokuan.cn. 這個域名的

  • IN SOA : "IN"這個部分的意思是 internet(在不少記錄中會出現)。SOA 是指示符用來表示這是一個 SOA 記錄。

  • pdk.com. : 這裏定義了這個域名的主名字服務器。名字服務器能夠是主服務器或者從服務器。若是動態 DNS 被配置,這裏就須要一臺主服務器。若是沒有配置動態 DNS,這裏就只是你的一個主名字服務器。

  • pdk.qq.com. : zone 區域管理員的 email 地址。email 地址中的@被替代爲一個點。若是郵箱地址中有點那麼須要使用一個""反斜槓來替代,好比 xx.xxx@qq.com(須要寫成 xx\xxx.qq.com)。

  • 12083 : 這個是 zone 文件的序列號。每次編輯 zone 文件,必需要增長一次這個文件的這個數字讓它正確傳播。從服務器會檢查主服務器的 zone 文件的序列號是否比他們系統裏現有的序列號大。若是是,它就會請求一個新的 zone 文件,不然就繼續使用老的文件。(這就是爲何會知道數據發生改變了

  • 3h : 這個是 zone 文件的刷新間隔週期。從機會等待這個時間週期而後輪詢主機,檢查 zone 文件變化。(這就是定時發送查詢,看是否有數據變更

  • 30m : 這是重試 zone 文件的間隔時間。若是從機在刷新時間到達後沒法鏈接主機,他會等待一段時間並從新嘗試輪詢主機。

  • 3w : 過時時間。若是一個名字服務器從機在這個時間段裏沒法鏈接服務器,它就不能做爲這個區域的權威來發揮響應

  • 1h : 這個時間段是名字服務器緩存一個名字錯誤的時間量,若是它不能在文件中找到請求的名字。

其餘記錄

A 記錄

  • 記錄類型 type=A
  • 記錄值爲 IPv4 地址
  • TTL 記錄了生存時間,即緩存中資源記錄的過時時間, 默認 600 秒
www.pengdaokuan.cn IN A 174.15.41.94
www.pdk.handsome.cn IN A 168.168.168.168 (開個玩笑)
複製代碼

AAAA 記錄

  • 記錄類型 type=AAAA
  • 記錄值爲 IPv6 地址
  • TTL 記錄了生存時間,即緩存中資源記錄的過時時間,默認 600 秒
www.pengdaokuan.cn IN AAAA IPv6_address
www.pdk.handsome.cn IN AAAA IPv6_address
複製代碼

CNAME 記錄(這個很重要的喲,後邊 CDN 講到)

  • 記錄類型 CNAME
  • 記錄值爲 CNAME 指向的域名,只能夠填寫域名
  • TTL 記錄了生存時間,即緩存中資源記錄的過時時間,默認 600 秒
www.cname1.pdk.cn IN CNAME www.cname2.pdk.cn
www.cname2.pdk.cn IN CNAME www.pengdaokuan.cn
www.pengdaokuan.cn IN A 174.15.41.94
複製代碼

NS 記錄

  • 記錄類型 type=NS
  • 不支持泛解析
  • 記錄值爲要受權的 DNS 服務器域名,爲了保證服務可靠性,至少添加 2 組 DNS 服務
  • TTL 記錄了生存時間,即緩存中資源記錄的過時時間,默認 600 秒
IN  NS     pdk1.root.com.
        IN  NS     pdk2.root.com.
pdk1    IN  A      174.15.41.94
pdk2    IN  A      168.168.168.168
複製代碼

DNS 區域傳送有哪些方式

上邊也說了,會進行區域傳送,那麼問題又來了,區域傳送有那種方式?

  • 徹底區域傳送
  • 增量區域傳送

當一個新的 DNS 服務器添加到區域中,並配置爲備份服務器時,它會執行徹底區域傳送,在主服務器上獲取完整的資源記錄副本;同時,爲了保證數據同步,主 DNS 服務器有更新時也會及時經過備份服務器查詢從而更新(增量區域傳送

那麼請問,DNS 域傳送會不會存在漏洞呢?

答案是 : 會!!!

✨ 若是 DNS 服務器配置不當,可能致使匿名用戶獲取某個域的全部記錄。形成整個網絡的拓撲結構泄露給潛在的攻擊者。一般採用的一個重要的手段是使用 Private DNS。將內部網絡與外部互聯網隔離開。

在 window 上,經過 nslookup 來測試 DNS 傳送

  1. 這是用nslookup查詢百度的 IP 信息
  1. 我想列出百度的一些相關記錄等,而後被拒絕了
  1. 想查一些 A 記錄或者 ns 記錄,均被拒絕

都被拒絕或者是超時,這......好的,這沒得辦法繼續演示了,固然對於 nslookup 的更多使用,你們能夠去查一下,這邊就很少說了,正常狀況下,若是存在域傳送漏洞,那麼就會暴露了一些重要信息,好比 👇 :

攻擊者可以獲取到 :
1. 網絡的拓撲結構,服務器集中的地址段(好比經過type=CNAME記錄得知)
2. 數據庫服務器的IP地址(可經過type=A記錄查出)
3. 其餘敏感服務器的相關信息
4. ....
複製代碼

DNS 分層結構

DNS 域名系統,主要實現的功能是將域名轉換成ip地址的一個服務。它是由一個分層的 DNS 服務器實現的分佈式服務器,同時。它也是一個使得主機可以查詢分佈式數據庫的應用層協議。

下面這個圖應該會更加清晰一些,畫的太累了 😥

DNS 解析流程(劃重點)

(畫圖真的累了,我太難了...)

上邊的流程很明顯了,我就不文字說明了,爲此,我還特地的下了個抓包軟件進行驗證

感興趣的能夠下這個 : Wireshark

在這裏邊,能夠經過 host 文件,進行一個檢驗,若是 host 有映射,不會發 DNS 查詢包,若是沒有 host 映射,會去查本地 DNS 緩存,若是有緩存,也不會發 DNS 查詢包。

DNS 解析器如何工做

上邊說了,若是本地 host 沒有映射,同時本地 DNS 沒有緩存,那麼就要發起 DNS 查詢了~

咱們都知道,DNS 解析域名成 IP,那麼它到底如何作的?

解析器就是一段程序,它是存在於操做系統的 Socket 庫中,Socket 庫用於調用網絡功能的程序組件集合。當根據域名查詢IP地址時,瀏覽器會調用Soket庫中的解析器。

通常來說,應用程序編寫的操做內容都是從上到下的,當執行到須要調用解析器的部分時,對應的那一行程序就會被執行,應用程序就會暫停。Socket 庫的解析器開始運行。

這裏就是經過 gethostbyname() 作的騷處理,直接看圖,就能看得懂了,若是你想看更加詳細的,能夠看這裏

不想看的,能夠看這裏,這是 gethostbyname 的函數原型以及 hostent

struct hostent {
  char  *h_name;            /* official name of host,主機的規範名 */
  char **h_aliases;         /* alias list,主機的別名 */
  int    h_addrtype;        /* host address type,ip地址類型 */
  int    h_length;          /* length of address,ip地址長度 */
  char **h_addr_list;       /* list of addresses,主機的ip地址 */
  #define h_addr h_addr_list[0]
}

struct hostent *gethostbyname(const char *name);

struct hostent *myhost = gethostbyname(argv[1]);

printf("%s\n", inet_ntoa(*(struct in_addr *)myhost->h_addr));

複製代碼

看懂了嗎,看不懂的小夥伴能夠移步百度或者 google,進行更詳細的資料查詢 ~

權威 DNS/遞歸 DNS

調用解析器以後,解析器會向 DNS 服務器發送查詢請求,而後 DNS 服務器會返回響應信息。響應信息中包含查詢到的 IP 地址,解析器會取出 IP 地址,並將其寫入瀏覽器指定的內存地址中。完成對 IP 地址的查詢,接下來,瀏覽器會向 Web 服務器發送消息時,從內存地址取出 IP 地址,並將它與 HTTP 請求消息一塊兒交給操做系統就能夠了。 ---------來自書籍《網絡是怎樣鏈接的》

看流程圖,咱們知道,DNS 查詢有兩種方式,一種是迭代查詢,另外一種是遞歸查詢,至於在講這兩種查詢以前,咱們先來了解一下,什麼是 權威 DNS 和遞歸 DNS

權威 DNS

權威 DNS 是特定域名記錄(例如「pdk.com」)在域名註冊商處所設置的 DNS 服務器,用於特定域名自己的管理(增長、刪除、修改等)。

權威 DNS 服務器只對本身所擁有的域名進行域名解析,對於不是本身的域名則拒絕訪問。好比,向「pdk.com」的權威 DNS 服務器查詢「baidu.com」的域名確定會查詢失敗。

遞歸 DNS

遞歸 DNS(也稱本地 DNS 或者緩存 DNS)用於域名查詢。遞歸 DNS 會迭代權威服務器返回的應答,直至最終查詢到的 IP 地址,將其返回給客戶端,並將請求結果緩存到本地。

對用戶發出的域名解析請求,遞歸 DNS 必須給出一個最終的 IP 地址結果。完整的遞歸 DNS 查詢流程須要 DNS 服務器從根域名 「.」 服務器,頂級域名服務器(例如「.com」),一級域名服務器(例如「pdk.com」)等一級一級遞歸查詢,直到最終找到權威服務器取得結果,並返回給客戶。同時,遞歸服務器根據域名 TTL (time to live),緩存查詢結果,便於相同域名重複查詢。

迭代查詢和遞歸查詢

針對這兩種查詢,我就很少說,我畫了兩個圖,同時對於流程步驟均在圖中,直接看圖吧 👇

遞歸查詢

迭代查詢

經過遞歸查詢或迭代查詢後,查詢的結果會在本地 DNS 作緩存,這樣能夠減小查詢的次數,加快域名解析過程

在配置 DNS 解析的時候,須要指定 DNS 解析的 TTL(Time To Live)參數,這個參數告訴本地 DNS 服務器,域名緩存的最長時間。緩存時間過了以後,本地 DNS 服務器就會刪除這條記錄,刪除以後,若是有用戶訪問這個域名,就要重複一遍上述複雜的流程。

🔔 tips: 若是不會常常修改 IP 地址的話,能夠將 TTL 設置到協議最大值,即 24 小時。帶來的好處是,讓域名解析記錄可以更長時間的存放在本地 DNS 服務器中,以加快全部用戶的訪問。

DDNS、NAT 技術、內網穿透

其實真的不想講這幾個玩意,可是 DNS 真的涉及的太廣了,固然我也沒有很瞭解,只是說去查詢過這方面的資料(沒辦法,不查我分享就 gg 了)

在講這些以前,咱們一塊兒回顧一下什麼是內網,什麼是外網,公網 ip 地址,私網 ip 地址...

內、外網是相對於防火牆而言的,在防火牆內部叫作內網,反之就是外網。在必定程度上外網等同於公網,內網等同於私網。

咱們目前廣泛使用的,仍然仍是 IPv4 地址,分爲 A、B、C、D、E 五類(具體的自行百度一下,謝謝合做),其中 A、B、C 類是咱們常見的 IP 地址段。在這三類地址中,大多數爲公有地址,須要向國際互聯網信息中心註冊。在 IPv4 地址中預留了 3 個 IP 地址段,做爲私有地址,供家庭、企業、學校等內部組網使用。

好比

IP 地址區段 IP 數量 分類網絡說明
10.0.0.0 - 10.255.255.255 16777216 單個 A 類網絡
172.16.0.0 - 172.31.255.255 1048576 16 個連續 B 類網絡
19.168.0.0 - 192.168.255.255 65536 256 個連續 C 類網絡

除了這三個 ip 地址段爲私有 ip 地址外,其它的都爲公網 ip。一般狀況下,按照須要容納的主機數選擇私有地址段。家庭網絡規模比較小,一個 C 類地址,192.168.1.x 能夠容納 254 個終端,足夠使用。

好比個人手機鏈接的 wifi,ip 地址爲 :

或者我電腦的 IP 地址爲 :

這裏就有人以爲,你貼這兩個圖出來幹哈用的,舉個例子,以家中接入外網的路由爲中心,家中全部使用路由器的設備,他們大多數以19二、17二、10開頭的 IP,通過路由器以後才連到外網。

內網 IP 和外網 IP 什麼關係呢?在如今的網絡中,公網 IP 又稱外網 IP,是在 Internet 使用的 IP 地址,而內網 IP 地址則是在局域網中使用的 IP 地址。 因爲公網 IP 是比較緊張的,全世界那麼多網絡設備根本沒法知足,內網的產生就是爲了解決這個難題的!

你們都去過網吧吧(反正我初中時候每天逃課去打 CF),其實呢,一個網吧有 N 臺電腦,可是它其實只須要一個公網 IP 就能夠給下邊的電腦提供上網了,而那麼多臺機子,各自擁有不一樣的內網 IP。若是其中的某臺機子,想要訪問公網(Internet),那麼得須要NAT技術,就能夠了。

NAT 技術

NAT 地址網絡轉換,經過在路由器上安裝 NAT 軟件,它至少有一個有效的公網 IP 地址,經過 NAT 路由器將內部私有 IP 轉換成公網 IP。它的問題在於 NAT 設備自動屏蔽了非內網主機主動發起的鏈接,也就是說,從外網發往內網的數據包將被 NAT 設備丟棄,這使得位於不一樣 NAT 設備以後的主機之間沒法直接交換信息.

咱們最多見的一種方式是 : 端口映射,原理爲將外網主機的 IP 地址的一個端口,映射到內網中一臺機器,提供相應的服務。當用戶訪問該 IP 的這個端口時,服務器自動將請求映射到對應局域網內部的機器上。

👇 下邊是一個 NAT 技術的原理圖

PPP0 是經以太網接口 PPP 撥號時建立的鏈路接口,用以創建 PPP 撥號鏈接。PPP 撥號是虛擬撥號,虛擬撥號是寬帶鏈接的撥號方式,需支持 PPPOE 協議,會分配一個 IP。

我知道,直接講這種原理,你們都不想聽,下面經過一個圖來說解,(畫圖是真的累啊...)

我相信,你們應該都看得懂這個圖吧,此時咱們的主機 IP 爲內網 IP,而上一層的路由器 IP 是運營商經過 DHCP 分配的 IP,它不是一個公網 IP,而是內網 IP,也能夠說是大局域網 IP。若是,咱們想要外部主機訪問家裏服務器,要獲得一個公網 IP 地址,而不是大局域網 IP 地址。

理所固然的,你可能就會想說,經過 NAT 技術,也就是端口映射獲得一個外網的 IP 嘛,but !!! 咱們作端口映射以後,獲得的 IP,不是公網的 IP,而是一個大局域網的 IP,由於咱們只作了一次 NAT 技術轉發,這也就是爲啥端口映射失敗的緣由。

由於在路由器上作端口映射,但在運營商服務器這邊沒有作端口映射,你告訴我,這能正確嘛?

固然,若是你很牛逼,能穿透到運營商這邊去操做,那是很棒的,but !!! 運營商服務器是已經被徹底控制了,你還想在人家上邊作一層端口映射?作個錘子...

那麼,在大內網狀況下,作端口映射,明顯這條路是不會通的,那咋辦,難不成坐吃等死嗎?不,還有其餘辦法,想要正確的映射,就須要一個穿透的東西。這就是內網穿透

內網穿透

內網穿透,也叫作 NAT 穿透。它的目的就是進行 NAT 穿透,使得具備某一個特定源 IP 地址和源端口號的數據包不被 NAT 設備屏蔽而正確路由到內網主機。

也就是說,外部主機想要和局域網內的主機進行通訊,能夠經過內網穿透這條路。

內網穿透必須涉及到一個東西,叫作域名。好比 www.pdk.com,申請了域名以後,咱們是須要域名綁定 IP 的,由於沒有公網 IP,那麼咱們須要在本身的終端或者是主路由器存在一個內網穿透的服務軟件。經過這個服務,將域名綁定的服務器和本身終端的服務器聯繫起來。

有了聯繫,就會將本身電腦上的端口直接映射到域名上,咱們申請的這個域名是在服務商那邊的,它有本身的服務器,也有本身的公網 IP。咱們把這個域名投射出去,投射到外網,至關於域名就是個人公網 IP 了,經過訪問域名,就與電腦本地的軟件聯繫起來,這樣直接訪問到被大內網層層阻隔的內部服務器。(須要購買域名和安裝穿透軟件)

💢 注意: 這裏均是我的的理解和認知,若是有大佬瞭解更加詳細或者是我講的不正確,請指出,謝謝 ~

DDNS

那麼 DDNS 又是個什麼狀況呢? 首先,DDNS 針對的不是一個內網用戶,而是一個公網 IP,若是你直接 PPPOE 撥號,你家裏就有一個公網 IP,有了公網 IP,你不須要內網穿透(你都是公網 IP 了,穿個毛啊)

那麼問題來了,我都有公網 IP 了,我爲啥還須要 DDNS 勒?由於運營商給的不是一個穩定的 IP 地址,而是會變的,好比說今天撥號獲得的是這個地址,那麼過兩天,它重置了一下,它把你的 PPPOE 重撥了一下,那麼獲得的是另外一個 IP 地址。若是咱們作了端口映射,正常狀況下,是 ojbk 的,可是若是 IP 地址改變了,對不起,端口映射就失效了。

那麼,咱們若是在 IP 地址變更狀況下,端口映射有效勒?那就須要一個域名。要知道,DDNS 和內網穿透本質是相同的,利用域名技術達到穩定內網穿透,域名是不變的,軟件與服務器的聯繫也是一種穩定的方式,DDNS 針對的是 公網 IP,好比運營商直接分配動態 IP,自身就有固定 IP,PPPOE 撥號獲得的一個不穩定 IP(今天撥號和明天撥號不是一個相同 IP),正常端口映射就會變化,若是 IP 地址改變,可是端口映射就會失效。

當 IP 發生改變,好比今天的是 xxx.xxx.x.1,明天的變成了 xxx.xxx.x.2 , 那麼咱們在路由器作了 DNS 設置以後,會作不斷的掃描,好比 10 分鐘掃描一次,而後會把 IP 改變的信息,上傳到購買的服務器,此時會對域名映射的 IP 進行一個修改,而後域名會獲得一個正確的公網 IP,從而實現端口映射。

可能有點懵逼...總之就是,若是你獲得了公網 IP,你須要 DDNS,若是你是在大局域網下,是內網 IP,你須要內網穿透。

CDN

可能這時候你有又有疑問了,MD,不是在講 DNS 嗎,怎麼跑到 CDN 了,由於我喜歡 ~

CDN,內容分發網絡,和 DNS 結合,讓用戶訪問延遲最小的節點,當用戶請求資源時,就近返回節點上緩存的資源,而不須要每一個用戶的請求都到源站獲取,避免網絡擁塞、緩解源站壓力,保證用戶訪問資源的速度和體驗。

咱們先來看個圖,你們都買過東西吧,在京東買和在淘寶買,快遞哪一個到的快?

這部廢話嗎?確定是京東啊,爲啥,由於京東在邊緣節點有一個儲貨倉啊,經過網購看 CDN 原理,一圖勝千言,直接看圖吧,親 ~

CDN 有啥優點??(百度能夠查獲得)

  • 提升頁面加載速度
  • 本地 Cache 加速,加快訪問速度
  • 遠程加速,自動選擇 cache 服務器
  • 帶寬優化,分擔網絡流量,減輕壓力
  • 節約成本

DNS 負載均衡

一個域名解析到多個 IP 地址,當用戶向咱們的域名發起請求時,DNS 服務器會自動根據咱們設置好的調度策略(好比: 輪詢等),選擇一個合適的 IP 返回給用戶,用戶再向該 IP 發起請求。

好比如今咱們配置了多條A記錄

www.pdk.com IN A 175.12.84.47
www.pdk.com IN A 175.12.84.48
www.pdk.com IN A 175.12.84.49
....
複製代碼

將 DNS 做爲第一級負載均衡,A 記錄對應着服務器的 IP 地址

可是,其實更優良的方案應該是 : 將 DNS 做爲第一級負載均衡,A記錄對應着內部負載均衡的IP地址,經過內部負載均衡將請求分發到真實的 Web 服務器上。

大部分網站老是部分使用 DNS 域名解析,利用域名解析做爲第一級負載均衡手段,即域名解析獲得的一組服務器並非實際提供服務的物理服務器,而是一樣提供負載均衡服務器的內部服務器,這組內部負載均衡服務器再進行負載均衡,將請求發到真實的服務器上,最終完成請求。

優勢 :

  • 負載均衡工做,交給 DNS 服務器處理,省掉了負載均衡服務器維護的麻煩,能夠提升性能;
  • 能夠支持基於地址的域名解析,解析成距離用戶最近的服務器地址,能夠加快訪問速度。

缺點 :

  • 目前的 DNS 是多級解析的,每一級 DNS 均可能緩存 A 記錄,當某臺服務器下線以後,修改了 A 記錄,要使其生效也須要一段時間,這段時間,DNS 任然會將域名解析到已下線的服務器上,最終致使用戶訪問失敗。
  • 不可以按服務器的處理能力來分配負載。DNS 負載均衡採用的是簡單的輪詢算法,不能區分服務器之間的差別

我不騙大家,這個優缺點我百度查的,若是你想了解更多 DNS 負載均衡,能夠自行去查哈,(而後你就會發現,還有不少知識須要去了解的 ~)

DNS 劫持(域名劫持)

互聯網的攻擊手段,經過攻擊 DNS,或僞造 DNS 的方法,把目標網站域名解析到錯誤的地址從而實現用戶沒法訪問目標網站的目的。

常見的現象是什麼呢 ?

你輸入的 url = http://www.pdk.com,而後出來的是某不良網址(性感荷官,在線發牌的那種)

那麼域名劫持的原理是怎樣的呢?

那如何才能防止域名劫持?

答案就是 : 報警吧!!!

(開個玩笑,如何防止域名劫持,百度也可以知道了 ~)

最後再說兩句話

做爲一名前端,其實 DNS 真的瞭解的不是很深,可是經過此次的一個分享(分享前的瞭解和資料查詢),最起碼我知道了內網穿透、DDNS 這些玩意,雖然不能說這篇文章的含金量多高,可是最起碼,知道了關於 DNS 的一些基礎知識~

若是你以爲這篇文章哪一個地方寫錯了,請在評論區留言,我會及時修改 ~

這是一篇記錄文,你們看看就好哈 ~

💢 容許我爆個粗口,畫圖真 ji 兒的累,爲了防止被偷圖,我還在每一個圖加了 "小彭" 關鍵詞,啊哈哈哈,對不起,我太狗了

文章首發地址 : 📢 阿寬的博客

相關文章
相關標籤/搜索