網路協議 16 DNS 協議 網路世界的位址簿

2022-01-19 05:19:44 字數 4406 閱讀 8608

網路協議 11 - socket 程式設計(下):眼見為實耳聽為虛

網路協議 12 - http 協議:常用而不簡單

網路協議 13 - https 協議:加密路上無盡頭

網路協議 14 - 流**協議:要說愛你不容易

網路協議 15 - dns 協議:網路世界的位址簿

其實說起 dns 解析,應該都知道它很像位址簿。就像我們去一家新開的沃爾瑪超市,通過位址簿查出來沃爾瑪在哪條路多少號,然後再去找。

在網路世界中,也是這樣的。我們可以記住**的名稱,但是很難記住**的 ip 位址,因此需要乙個「位址簿」,幫我們將**名稱轉換成 ip。這個「位址簿」就是dns 伺服器

對於 dns 伺服器而言,全球每個人上網,都需要訪問它。

而全球的網民數,據最新統計,已經有 40 億,每個人都訪問它,可想而知 dns 伺服器會有很大的訪問流量壓力(高併發)。

而且,它還非常重要,一旦出了故障,整個網際網路都將癱瘓(高可用)。

此外,上網的人分布在全世界各地,如果大家都去同乙個地方的某一台伺服器,時延將會非常的(分布式)。

因此,dns 伺服器一定要具備高可用、高併發、分布式的特點。

基於此,dns 伺服器設計成樹狀的層次結構。如下圖:

客戶端發出 dns 請求給本地網域名稱伺服器。我們訪問,客戶端會問本地網域名稱伺服器, www.cnblogs.com 的 ip 是什麼?(本地網域名稱伺服器,如果網路是通過 dhcp 配置,本地 dns 是由你的網路服務商,如電信、聯通等自動分配,它通常就在網路服務商的機房裡);

本地 dns 收到來自客戶端的請求,查詢「位址簿」,返回 ip 或請求根網域名稱伺服器。我們可以理解為伺服器上快取了一張網域名稱與 ip 對應的大表,如果能找到 www.cnblogs.com,就直接返回對應的 ip 位址。如果沒有找到,本地 dns 會去問它的根網域名稱伺服器;

根 dns 收到來自本地 dns 的請求,返回 .com 對應的頂級網域名稱伺服器的位址。根網域名稱伺服器是最高層次的,全球共有 13 套,它不直接用於網域名稱解析,而是指明怎樣去查詢對應 ip。它發現請求的網域名稱字尾是 .com,就會返回 .com 對應的頂級網域名稱伺服器的位址;

本地 dns 伺服器收到頂級 dns 伺服器位址,請求頂級 dns 伺服器查詢網域名稱 ip

頂級 dns 伺服器返回權威 dns 伺服器位址。頂級網域名稱伺服器就是大名鼎鼎的,負責 .com、.net、.org 這些二級網域名稱,比如 cnblogs.com,它會返回對應的權威 dns 伺服器位址;

本地 dns 伺服器收到權威 dns 伺服器位址,請求權威 dns 伺服器查詢網域名稱 ip。而 cnblogs.com 的權威 dns 伺服器就是網域名稱解析結果的原出處;

權威 dns 伺服器返回對應 ip。權威 dns 伺服器查詢「位址簿」,獲取到網域名稱對應 ip 位址,返回給本地 dns 伺服器;

本地 dns 伺服器收到 ip,返回給客戶端

客戶端與目標建立連線

至此,我們完成了 dns 的解析過程,整個過程如下圖:

站在客戶端角度,上述過程是一次dns 遞迴查詢過程。因為本地 dns 全權為它代勞,它只要坐等結果就好了。在這個過程中,dns 除了可以通過名稱對映為 ip 位址外,它還可以做另外一件很重要的事 -負載均衡

還是拿我們逛沃爾瑪超市為例。它可能在乙個城市裡會有多家店,我們要逛沃爾瑪,可以就近找一家,而不用都去同一家,這就是負載均衡。

dns 做負載均衡也有花樣可以玩。

1)dns 做內部負載均衡

所謂的內部負載均衡,其實很好理解。就像我們的應用訪問資料庫,在應用裡配置的資料庫位址。如果配置成 ip 位址,一旦資料庫換到了另外一台機器,我們就要修改配置。如果我們有很多臺應用同時連乙個資料庫,一換 ip,就需要將這些應用的配置全部修改一遍,是不是很麻煩?所以,我們可以將資料位址配置成網域名稱。在更換資料庫位置時,只要在 dns 伺服器裡,將網域名稱對映為新的 ip 位址就可以了。

在這個基礎上,我們可以更進一步 。例如,某個應用要訪問另外乙個應用,如果配置另外乙個應用的 ip 位址,那麼這個訪問就是一對一的。但是當被訪問的應用因流量過大撐不住的時候,我們就需要部署多個應用。這時候,我們就不能直接配置成 ip,而是要配置網域名稱了。只要在網域名稱解析的時候,配置好策略,這次返回乙個 ip,下次返回第二個 ip,就實現了負載均衡。

2)dns 做全域性負載均衡

為了保證我們應用的高可用性,往往會將應用部署在多個機房,每個地方都會有自己的 ip 位址。當使用者訪問某個網域名稱的時候,這個 ip 位址可以輪詢訪問多個資料中心。如果乙個資料中心因為某種原因掛了,只要將這個 ip 位址從 dns 伺服器中刪掉就可以了,使用者不會訪問到宕機的伺服器,保證了應用的可用性。

另外,我們肯定希望使用者能訪問就近的資料中心。這樣客戶訪問速度就會快很多,體驗也會好很多,也就實現了全域性負載均衡的概念。

負載均衡示例

我們通過 nds 訪問資料中心物件儲存上的靜態資源為例,來看一看整個過程。

假設全國有多個資料中心,託管在多個運營商,每個資料中心有三個可用區。物件儲存可以通過跨可用區部署,實現高可用性。在每個資料中心中,都至少部署兩個內部負載均衡器,內部負載均衡器後面對接多個物件儲存的前置伺服器(proxy-server)。那麼,請求過程如下圖:

當乙個客戶端要訪問 object.yourcompany.com 的時候,需要將網域名稱轉換為 ip 位址進行訪問,所以它要請求本地 dns 解析器;

本地 dns 解析器先檢視本地的快取是否有這個記錄。如果有,就直接用,省略後續查詢步驟,提高相應時間;

如果本地無快取,就需要請求本地的 dns 伺服器;

本地 dns 伺服器一般部署在資料中心或者你所在的運營商網路中。本地 dns 伺服器也需要看本地是否有快取,如果有,就直接返回;

本地沒有,通過第 5、6、7 步驟獲取到 ip 位址,快取到本地 dns 解析器中,然後在返回給客戶端。

對於不需要做全域性負載均衡的簡單應用來講,yourcompany.com 的權威 dns 伺服器可以直接將 object.yourcompa.com 這個網域名稱解析為乙個或者多個 ip 位址,然後客戶端可以通過多個 ip 位址,進行簡單的輪詢,實現簡單的負載均衡。

但是對於複製的應用,尤其是跨地域跨運營商的大型應用,就需要更加複雜的全域性負載均衡機制,因而需要專門的裝置或者伺服器來做這件事情,這就是全域性負載均衡器(gslb,global server load balance)

在 yourcompany.com 的 dns 伺服器中,一般是通過配置 cname 的方式,給 object.yourcompany.com 起乙個別名。例如 object.vip.yourcompany.com,然後告訴本地 dns 伺服器,讓它請求 gslb 解析這個網域名稱,gslb 就可以在解析這個網域名稱的過程中,通過自己的策略實現負載均衡。

上圖中畫了兩層的 gslb,是因為分運營商和地域。我們希望不同運營商的客戶,可以訪問對應運營商機房中的資源,這樣不跨運營商訪問,有利於提高吞吐量,減少時延。兩層 gslb 的過程如下:

第一層 gslb,通過檢視請求它的本地 dns 伺服器所在的運營商,就知道使用者所在的運營商。假設是移動,通過 cname 的方式,通過另乙個別名 object.yd.yourcompany.com,告訴本地 dns 伺服器去請求第二層的 gslb;

第二層 gslb,通過檢視請求它的本地 dns 伺服器的位址,知道使用者所在的地理位置,然後將距離使用者位置比較近的乙個 region 的六個內部負載均衡的位址,返回給本地 dns 伺服器;

本地 dns 伺服器將結果返回給本地 dns 解析器;

本地 dns 解析器將結果快取後,返回給客戶端;

客戶端開始訪問屬於相同運營商的,且距離比較近的 region1 中的物件儲存。當然,客戶端得到了六個 ip 位址,它可以通過負載均衡的方式,隨機或者輪詢選擇乙個可用區進行訪問。物件儲存一般會有三個備份,從而實現對儲存讀寫的負載均衡。

參考:維基百科-網域名稱系統 詞條;

知乎-網域名稱解析;

劉超 - 趣談網路協議系列課;

網路協議分層 網路協議介紹

現在的網路都採用分層的方式進行工作 高層 包括應用層 表示層 會話層 傳輸層,負責主機之間的資料傳輸 底層 網路層 資料鏈路層 物理層,負責網路資料傳輸 從高層到底層分別是 應用層 提供程式之間的通訊,常見協議有http ftp 表示層 處理資料格式 資料加密等,常見協議有nbssl lpp 會話層...

網路協議 RPC協議

遠端呼叫協議,用於定義服務之間的介面呼叫規範標準 最早的rpc框架之一 1.2.1 外部資料表示法 xdr 規定互動協議的檔案,包括 與古老的rpc協議相比,雙方的soap協議沒必要完全一致 引數順序 引數個數等 更加靈活 也是乙個xml,描述了方法名 服務名 埠 請求引數等資訊,通過在服務位址後加...

網路協議 restful協議

restful api rest風格介面介紹 rest representational state transfer,是一種軟體架構風格,提供一系列限制指導,用於更好的建立web service。符合rest 架構風格的web service 稱為restful web service。其核心是以...