后臺系統可擴展性學習筆記(三)DNS機制原理

文章目錄

  • DNS概念梳理
  • 域名基本概念
  • 資源記錄基本概念
  • 路由策略
  • DNS 域空間結構
  • 實現原理
    • 復制機制
    • 查詢機制
    • 緩存機制
  • 參考

DNS概念梳理

DNS(Domain Name System)相當于互聯網的通訊錄,能夠把域名翻譯成 IP 地址。
從技術角度來講,DNS 是個層次型分布式數據庫,加上一些既定協議,包括數據庫的查詢更新機制、不同服務器間數據庫信息的復制機制,以及數據庫模式(Schema),除層次型數據庫外,還有關系型數據庫和網狀數據庫。

DNS 源于互聯網的早期,當時的互聯網還是美國國防部(the United States Department of Defense)出于研究目的而建立的小型網絡。通過一個 HOSTS 文件來管理網絡中各個計算機的主機名,而這份 HOSTS 文件放在一臺集中管理的服務器上,需要解析主機名的每個站點都要先下載這份文件。

隨著網絡中主機數量的不斷增加,HOSTS 文件更新過程所產生的流量以及文件大小問題逐漸暴露出來。于是,期望建立一個能夠靈活擴展,支持各種數據類型的分布式主機名管理系統,作為互聯網中關鍵的基礎設施,而這個新的分布式系統就是DNS(Domain Name System)

域名基本概念

在這里插入圖片描述
其中,各部分都有對應的名稱:

  • 根域(Root domain):樹根,表示未命名的一級,例如www.example.com.末尾的點號
  • 頂級域(Top-level domain):用來表示國家、區域或者組織類型,例如.com、.edu
  • 二級域(Second-level domain):長度不固定,由個人或組織注冊,例如example.com.中的example部分
  • 子域(Subdomain):從二級域派生而來,由持有二級域的組織/個人自行創建,例如www.example.com
  • 主機名/資源名(Host or resource name):樹結構中的葉子,例如api.aws.amazon.com中最左邊的api
    圖中的 FQND 是指完整域名(Fully Qualified Domain Name),由主機名和域名構成,能夠唯一標識主機在樹結構中的位置。頂級域由管理 DNS 的域名注冊機構負責維護,按國家或區域分配給各個組織。
    mydomain.microsoft.com.(末尾點號.表示根域)為例:
    在這里插入圖片描述

資源記錄基本概念

資源記錄(resource record,簡稱 RR)組成了 DNS 數據庫,常見的有以下幾種:

  • A 記錄(Address record):地址記錄,把域名指向 IP 地址
  • AAAA 記錄(IPv6 address record):IPv6 地址記錄,相當于支持 IPv6 的 A 記錄
  • CAA 記錄(Certification Authority Authorization):證書頒發機構授權記錄,用來指定允許哪些 CA 機構為域名頒發證書
  • CNAME 記錄(Canonical name record):別名記錄,把一個域名指向另一個域名,或其它 CNAME 記錄、A 記錄
  • PTR 記錄(PTR Resource Record):PTR 記錄,把 IP 地址指向域名,與 CNAME 的區別在于直接結束并返回結果,多用于反向解析(通過 IP 反查域名)

其中,CAA 記錄是一種證書安全機制,CA 機構頒發證書時會檢查 CAA 記錄,若未授權就拒絕為該域名頒發證書

路由策略

除基本的映射規則外,DNS 服務可能還支持一些路由策略,比如:

  • 基于權重的路由策略(Weighted routing policy):根據指定的權重值按優先級分發流量
  • 基于延遲的路由策略(Latency routing policy):根據延遲情況解析域名,比如選擇延遲最小的 IP
  • 基于地理位置的路由策略(Geolocation routing policy):根據用戶的地理位置(各國、各大洲等)解析域名
  • 基于地理位置鄰近程度的路由策略(Geoproximity routing policy):根據用戶所在地與目標資源所在地的臨近程度解析域名
  • 故障轉移路由策略(Failover routing policy):用于主動-被動故障轉移模式,一個 IP 出問題之后換用另一個 IP
  • 多值應答路由策略(Multivalue answer routing policy):簡單的 DNS 層負載均衡,可配置一對多映射,從中隨機選取

DNS 域空間結構

DNS 域空間被劃分成區域(Zone)進行管理,區域相當于 DNS 服務器的管轄范圍:
在這里插入圖片描述
一個 DNS 數據庫會被劃分成多個區域,每個區域包含域空間中連續的部分的資源記錄及其 owner 信息,所形成的區域文件(Zone files)由 DNS 服務器負責維護,而一個 DNS 服務器能夠管理零到多個區域。
每個區域對應特定的域名,叫做該區域的根域名(Root domain),區域中包含所有以區域根域名結尾的域名信息。區域文件中的第一條記錄是 SOA(Start of Authority)資源記錄,標識出該區域中作為最佳信息源的主 DNS 域名服務器,以及信息更新相關的一些定時器(如 Refresh Interval、Expire Time 等等)。
委托
區域中的域名可以委托給另一個位于不同 DNS 服務器上的區域,委托(Delegation)就是把 DNS 空間的一部分交由另一個 DNS 服務器負責的過程,比如另一個組織、部門或工作組。這種委托關系通過 NS 資源記錄來標識,記錄中指定了被委托的區域和與之對應的權威服務器域名。
跨區域委托是 DNS 最初的設計目標之一,為了滿足:
1、把一個 DNS 域的管理工作委托給多個組織或部門
2、把一個大 DNS 數據庫的維護工作分散到多個 DNS 服務器上,以提升域名解析性能,和容錯性
3、根據組織隸屬關系,把主機放到合適的域下
需要跨區域解析域名時,就詢問 NS 記錄中的目標區域的 DNS 服務器,例如,microsoft.com.被委托給microsoft.commydomain.microsoft.com兩個區域管理:
在這里插入圖片描述

實現原理

復制機制

域空間中的同一部分可以由多個區域來表示,分為:

  • 主區域(Primary)
  • 輔助區域(Secondary)
  • 存根區域(Stub)

區域下所有記錄的更新都發生在主區域,輔助區域和存根區域都是只讀的主區域副本,區別在于存根區域只含用來標識權威服務器(托管這三種區域的 DNS 服務器)的記錄。而托管主區域的 DNS 服務器就是該區域的主 DNS 服務器,托管輔助區域的 DNS 服務器是輔助 DNS 服務器。
主 DNS 服務器(或輔助 DNS 服務器)上的區域文件可以被復制到多個 DNS 服務器,這個過程叫區域傳輸(Zone transfer),傳輸方式分為 2 種:

  • 推:主 DNS 服務器在區域文件發生變化時,通知一個或多個輔助 DNS 服務器
  • 拉:輔助 DNS 服務器上的 DNS 服務啟動時,以及區域文件的刷新間隔過期時,輔助服務器就主動向主 DNS 服務器詢問變化
    根據所傳輸的數據量分為:
  • 全量:AXFR(A Full Zone Transfer),傳輸所有記錄
  • 增量:IXFR(incremental zone transfer),只傳輸有改動的記錄

查詢機制

DNS 查詢發生在 DNS 客戶端與 DNS 服務器,以及兩個 DNS 服務器之間,一般會一次性查詢特定域名的一組記錄,比如其所有 A 記錄,具體的,DNS 查詢分為 2 種:

  • 遞歸查詢(Recursive):DNS 服務器必須聯系相關的其它 DNS 服務器
  • 迭代查詢(Iterative):DNS 服務器根據本地數據作出響應,如果實在無法解析,就返回一個否定響應

前者常用于 DNS 客戶端(如 DNS 解析器)和 DNS 轉發服務,如果僅靠本地數據(本地區域文件以及之前查詢的結果緩存)無法解析,就上升到根 DNS 服務器(轉發服務先上升到源服務器)。后者常用于 DNS 服務查詢其域之外的域名,此時可能要詢問多個外部 DNS 服務器才能完成解析,以www.whitehouse.gov為例:
在這里插入圖片描述
具體查詢過程如下:
1、客戶端向本地DNS服務器發起遞歸查詢
2、本地DNS服務器向根DNS服務器發起迭代查詢
3、根DNS服務器返回 .gov域名服務器的引用
4、本地DNS服務器向.gov域名服務器發起迭代查詢
5、.gov域名服務器返回whitehouse.gov域名服務器的引用
6、本地DNS服務器向whitehouse.gov域名服務器發起迭代查詢
7、whitehouse.gov域名服務器回應迭代查詢(www.whitehouse.gov的 IP 地址)
7、本地DNS服務器回應最初的遞歸查詢(www.whitehouse.gov的 IP 地址)
引用(DNS Referral)是指間接答案:

DNS轉介。術語引用表示對查詢的響應,該查詢不包含答案部分(為空),但包含一個或多個更接近所需查詢問題的權威名稱服務器(位于域權限部分)。

緩存機制

資源記錄中的 TTL(Time-to-Live)值相當于該記錄的保質期,其它 DNS 服務器根據 TTL 來決定該把這條信息緩存多久。如果記錄沒有指定自身的 TTL 的話,DNS 服務器會從 SOA 記錄繼承默認 TTL,以防其它 DNS 服務器對資源記錄進行擴展緩存

客戶端的 DNS 解析器也會緩存所收到的 DNS 查詢結果,緩存時長同樣遵循 TTL。DNS 服務器用查詢緩存應答時,會把緩存的 TTL 傳遞下去,接收方以收到的 TTL 值為準(而不根據自己的 TTL 重置),以保證資源記錄能夠正常過期

設置 TTL 需要考慮緩存信息的準確性,以及 DNS 服務器的效用和網絡流量問題,二者有些沖突。如果 TTL 太短,出現舊信息的可能性雖然降低了,但 DNS 服務器的效用問題和流量問題就冒出來了,而 TTL 太長的話,緩存信息可能會過時,意味著解析器可能會返回錯誤的結果,但能夠減輕效用問題和流量問題.

參考

http://www.ayqy.net/blog/dns/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376588.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376588.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376588.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

后臺系統可擴展性學習筆記(四)CDN機制原理

文章目錄概念梳理CDN拓撲結構CDN內容分發方式架構原理工作原理實現原理概念梳理 CDN(Content Delivery Network,內容分發網絡)是由分布在不同地理位置的代理服務器及其數據中心組成的網絡,希望在空間距離上為用戶就近提供服務&am…

Javascript 基礎—變量 運算符

經過找工作筆試的洗禮,感覺自己js語法方面掌握的不是很系統,今天來梳理下——變量以及運算符。 基礎篇 和C語言的不同點:是一種弱類型語言,申明變量時不需要指定類型;變量名的命名方法也有不同;簡單類型種類…

后臺系統可擴展性學習筆記(五)負載均衡

文章目錄Load balancer(負載均衡器)請求傳輸拆解DNS 負載均衡客戶端負載均衡OSI 七層模型回顧2 層、3 層負載均衡3/4 層負載均衡7 層負載均衡在 第一節談到了系統的橫向擴展在于從單機擴展到多機,那么面臨的第一個問題就是這些機器如何協同工作,即如何調…

Struts2第一個工程helloStruts極其基本配置

前面已經準備好了Struts-2.3.15,現在就可以直接搭建Struts2的工程了。前面http://blog.csdn.net/huangchnegdada/article/details/9179041有對Struts-2.3.15的準備工作的詳述。 首先打開MyEclispe新建一個Web Project,名字就叫Struts2_0100_Introduction…

[LeetCode]Find Minimum in Rotated Sorted Array

題目描述: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). Find the minimum element. You may assume no duplicate exists in the array. 解題方案: 直接貼代碼&…

后臺系統可擴展性學習筆記(六)反向代理

文章目錄Web代理服務反向代理反向代理作用Web代理服務 Web 代理服務指的是在客戶端資源請求和提供這些資源的 Web 服務之間充當中介的角色,代理服務可以實現在客戶端,或者從客戶端到目標服務器中間的任意環節。 例如,客戶端不直接向提供目標…

(C)單鏈表

老師版 1 #include <stdio.h>2 #include <stdlib.h>3 4 // 定于Node數據類型5 struct Node6 {7 int data; // 數據域8 struct Node *next; // 指針域9 };10 11 // 創建一個單鏈表&#xff0c;并把head節點返回&#xff1b;…

實驗:sigsuspend(),sigprocmask()

實驗&#xff1a;sigsuspend(),sigprocmask()源代碼&#xff1a;/* * Program: pause_suspend.c * To test the difference between sigsuspend() and paus(). * Author: zsl * Date: 2014-10-17 * First release. * 參見網頁&#xff1a;http://blog.csdn.net/liwentao1091/ar…

后臺系統可擴展性學習筆記(七)Service Discovery與微服務

文章目錄應用層微服務架構服務注冊查詢 Service Discovery客戶端 Service DiscoveryDNS-SD DNS-based Service Discovery服務端 Service Discovery服務注冊與注銷自注冊模式第三方注冊模式總結參考應用層 在簡單的 3 層結構中&#xff0c;Web 服務層既要處理請求&#xff0c;又…

很久沒寫代碼了,這(那)幾天真是累死了。。。先寫一個幻方的程序吧

1 #include <stdio.h>2 #include <stdlib.h>3 #include <windows.h>4 5 #define EVEN_DOUBLE_4 4 //雙偶的最基本類型&#xff0c;4階雙偶6 #define SCREEN_SIZE 19 //屏幕顯示不變形的最大尺寸&#xff08;主要是因為窗口大小限制&#xff09;7 #defi…

#pragma once

http://baike.baidu.com/view/1276747.htm?fraladdin 轉載于:https://www.cnblogs.com/prayer521/p/4069040.html

后臺系統可擴展性學習筆記(八)Service Mesh

文章目錄網絡傳輸可靠性將微服務控制下沉到網絡棧&#xff1f;Sidecar從 Sidecar 到 Service MeshService Mesh 部署平臺參考網絡傳輸可靠性 從計網的學習過程中我們可以知道數據在網絡傳輸中可能會出現一些異常狀況&#xff1a; 數據丟失&#xff1a;數據包可能會到達一個緩…

關于Spring batch的學習之CSV2DB

最近在學習Spring batch相關的內容&#xff0c;網上也有不少Spring Batch相關的知識&#xff0c;不過大多都是使用xml進行配置的。這里是我用注解的方式進行相關的學習心得。 首先我們來看如何將一個文本文件中的內容導入到數據庫中。 我們先來看一下我們所需要的環境。我們這里…

后臺系統可擴展性學習筆記(九)Database Replication

文章目錄數據庫擴展一致性問題Replication &#xff08;復制&#xff09;異步復制同步復制半同步復制拓撲結構單主結構多主結構無主結構復制具體措施參考數據庫擴展 之前在第一章后臺系統可擴展性學習筆記&#xff08;一&#xff09;概要談到&#xff1a;理論上&#xff0c;有…

python中的sum函數.sum(axis=1)

看起來挺簡單的樣子&#xff0c;但是在給sum函數中加入參數。sum&#xff08;a&#xff0c;axis0&#xff09;或者是.sum(axis1) 就有點不解了 在我實驗以后發現 我們平時用的sum應該是默認的axis0 就是普通的相加 而當加入axis1以后就是將一個矩陣的每一行向量相加 例如&…

后臺系統可擴展性學習筆記(十)Database Partitioning

為了提升數據庫的處理能力&#xff0c;我們把單庫擴展成多庫&#xff0c;并通過更新同步機制&#xff08;即Replication&#xff09;來保證多份數據的一致性。然而&#xff0c;在 各種復制方案下&#xff0c;每個數據庫都持有一份完整數據&#xff0c;基于全量數據提供增刪改查…

基于FPGA的HDTV視頻圖像灰度直方圖統計算法設計

隨著HDTV的普及&#xff0c;以LCD-TV為主的高清數字電視逐漸進入蓬勃發展時期。與傳統CRT電視不同的是&#xff0c;這些高清數字電視需要較復雜的視頻處理電路來驅動&#xff0c;比如&#xff1a;模數轉換&#xff08;A/D Converter&#xff09;、去隔行&#xff08;De-interla…

后臺系統可擴展性學習筆記(十一)Database Denormalization

之前的兩篇筆記中談到了從單庫擴展到多庫以承載更多的請求量以及單庫&#xff08;表&#xff09;拆分成多庫&#xff08;表&#xff09;&#xff0c;打破單庫的性能瓶頸。 這都是為了應對大數據量下的措施。 然而&#xff0c;除卻數據量外&#xff0c;還有一個極其影響單庫性能…

Java Swing 影樓管理系統之登錄功能

開頭打廣告&#xff0c;Java1234.com。 首先&#xff0c;來個效果圖。 關鍵代碼 1&#xff0c;界面層 private void Jb_DengLuActionPerformed(java.awt.event.ActionEvent evt) {// TODO add your handling code here:String UserName this.Jb_UserNameTxt.getText();String …