自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

靈魂拷問,你真的了解DNS嗎?

開發(fā) 架構(gòu)
DNS是域名系統(tǒng)的簡稱,它是一種用于將域名和IP地址相互映射的協(xié)議。簡單地說,它是一種用于將人類可讀的域名(例如www.google.com)轉(zhuǎn)換為瀏覽器可以理解的IP地址(例如 142.251.43.14)的方法。這樣,用戶就可以通過輸入域名來訪問網(wǎng)站,而無需記住網(wǎng)站的IP地址。

大家好,我是菜農(nóng),歡迎來到我的頻道。

都說程序員是面向Google編程,殊不知當(dāng)你輸入 www.google.com 地址的時候,是否有想過,在回車的一瞬間瀏覽器如何將請求發(fā)送,如何到達(dá)目的地為你取得正確的數(shù)據(jù)。

遇到問題我們通常會打開瀏覽器,輸入 www.google.com 回車,然后搜索我們的問題,獲取到我們想要的內(nèi)容后,我們又會心滿意足的關(guān)閉瀏覽器。

而在這一個請求的過程中,瀏覽器內(nèi)部發(fā)生了什么?

我們也許會在某個不經(jīng)意間發(fā)現(xiàn),輸入 142.251.43.14? 這串 IP 也能夠訪問Google網(wǎng)站,而為了讓人覺得高大上一點(diǎn),你改掉了輸入 google.com 的 **"臭毛病"**, 而是每次都會在瀏覽器輸入這串IP,畢竟在回車之前別人總是難以琢磨你要訪問的是哪個網(wǎng)站,除非遇到 "志同道合" 的人。

一開始你使用得不亦樂乎,畢竟敲入這串 IP 也能夠熟能生巧,使用速度也不減當(dāng)年,但某一天你跟往常一樣輸入這串IP 的時候發(fā)現(xiàn)怎樣都訪問不到網(wǎng)站了,你開始急了,并尋找問題,懷疑自己的記憶力是否出現(xiàn)了問題,亦或是網(wǎng)站出現(xiàn)了問題,折騰半天后,發(fā)現(xiàn)是 Google 網(wǎng)站的 IP 發(fā)生了變化,而等待你的就只有兩條路,一是繼續(xù)背下新的 IP 地址,但難保某一天又面臨不能訪問的情況,二是回歸從前,老老實(shí)實(shí)訪問 google.com 。最終你醒悟了,終于發(fā)現(xiàn)背誦 IP 進(jìn)行日常訪問真是個 "有病" 的行為。

那么為什么 www.google.com? 能夠通過 142.251.43.14? 進(jìn)行訪問?這里我們先記住兩個名詞,一個是域名,一個是 IP,www.google.com? 是一個域名,而 142.251.43.14 則是一個 IP。概念:域名可以對應(yīng)有多個 IP 地址。

怎么理解?很簡單,打開你的手機(jī)通訊錄,可以看到 富婆 就是一個 "域名" 的概念,而具體的電話號碼就可以對應(yīng)上 "IP"

圖片

我們想要給一個人打電話,我們可以輸入富婆,也可以輸入具體的電話號碼,當(dāng)然富婆的記憶點(diǎn)低,而電話號碼的記憶點(diǎn)高,而為什么與遇到上面所說的一點(diǎn)時間后再次訪問 IP 就訪問不到網(wǎng)站了,這種情況你可以想象成,富婆換電話了 ~

那么回到我們的內(nèi)容,將域名解析為 IP 的這個過程就是 DNS(Domain Name System) 域名系統(tǒng)。

DNS 產(chǎn)生背景

Internet 將數(shù)量眾多的主機(jī)連接在一起,要讓這些主機(jī)能夠進(jìn)行通信,就需要有一套名字標(biāo)識體系,讓主機(jī)之間能夠彼此找到對方。實(shí)際上,在 Internet 上有多種方式可以進(jìn)行主機(jī)標(biāo)識,既可以用主機(jī)名(域名)標(biāo)識,也可以使用IP地址進(jìn)行標(biāo)識。主機(jī)在互聯(lián)網(wǎng)上的位置主要靠 IP 地址進(jìn)行標(biāo)識,每個 IP 地址都由 4 個字節(jié)組成,有這嚴(yán)格的層次結(jié)構(gòu),以便路由器進(jìn)行識別和處理。但這種純數(shù)字的標(biāo)識方式對于人類的記憶來說簡直是個噩夢,因此提出了主機(jī)名的標(biāo)識方式,就是上述說到的 www.google.com ,這種名字的好處很直接,就是便于記憶。但是對于喜歡 0 和 1 的計(jì)算機(jī)來說,肯定更喜歡 IP 的表達(dá)方式,因此就出現(xiàn)了計(jì)算機(jī)喜歡 IP 地址,人喜歡主機(jī)名的對立情況,那么就需要一個適配器 來完成兩者之間的轉(zhuǎn)換,這就是主機(jī)名與IP地址的映射關(guān)系。

在DNS之初,整個網(wǎng)絡(luò)中只有幾百臺的主機(jī),所有的主機(jī)信息以及主機(jī)名與地址的映射記錄都存放在一個名為 HOST.TXT 的文件中。 HOST.TXT  從一臺名為 SRI-NIC 的主機(jī)上分發(fā)到整個網(wǎng)絡(luò),而維護(hù)映射記錄的方式也很粗暴,通過將變更信息以電子郵件的方式告知管理員,然后進(jìn)行定期 FTP 到 SRI-NIC 上,獲得最新的 HOST.TXT 文件。

但這種方式長期來看肯定是不合實(shí)際的,互聯(lián)網(wǎng)飛速發(fā)展,主機(jī)的數(shù)量日益暴增,存在問題:

  • 無法進(jìn)行分散管理
  • 無法及時全網(wǎng)更新與同步
  • 維護(hù)困難

為了解決以上問題,1984年,南加州大學(xué)信息科學(xué)所的 PaulMockaprtris 發(fā)布了描述 DNS 的 RFC 882 和RFC 883的規(guī)范,簡單來說就是 DNS 誕生了。

DNS 工作原理

DNS 實(shí)際上是一個應(yīng)用層協(xié)議,但它通常被其他的應(yīng)用層協(xié)議所使用,用于將用戶提供的主機(jī)名解析為 IP 地址。

當(dāng)我們在瀏覽器的地址欄上輸入 www.google.com 這樣一個 URL時,實(shí)際上我們想要瀏覽的網(wǎng)頁內(nèi)容都存放在互聯(lián)網(wǎng)中的某臺服務(wù)器上,而瀏覽器的任務(wù)就是找到我們想要訪問的這臺服務(wù)器的 IP 地址,然后向它請求內(nèi)容,而這一整個過程就是 DNS 工作的內(nèi)容。

圖片

如圖所示,DNS 地址解析服務(wù)是在 HTTP 連接建立之前的一個過程。從用戶主機(jī)上調(diào)用應(yīng)用程序的角度來看,DNS是一個提供簡單、直接的轉(zhuǎn)換服務(wù)的黑盒子,但實(shí)際上 DNS 服務(wù)系統(tǒng)運(yùn)轉(zhuǎn)相當(dāng)復(fù)雜,由分布于全球的大量 DNS 服務(wù)器以及相關(guān)應(yīng)用層協(xié)議共同組成。

域名結(jié)構(gòu)

整個互聯(lián)網(wǎng)中的域名空間結(jié)構(gòu)就像是一棵倒置的樹

我們試著將一個 Google 的域名進(jìn)行拆分,www.google.com

圖片

我們驚奇的發(fā)現(xiàn),之前看似簡單的一段域名居然由這么多部分構(gòu)成。既然上部分說到,域名空間結(jié)構(gòu)就像是一棵倒置的樹,那么我們就手動梳理下這棵樹的結(jié)構(gòu)。

圖片

每個頂級域由對應(yīng)的頂級域(TLD)服務(wù)器負(fù)責(zé)管理,除了以下 7 個頂級域名,還有各個國家的頂級域名(cn、uk、ca和 fr 等)也在這一級別進(jìn)行管理。

圖片

每個頂級域再向下展開分支,每個分支域都是一個子域,比如 google.com? 是 com? 的子域,而 google.com? 也可再包含子域,比如 a.google.com、b.google.com。一個域就是域名空間中的一棵子樹,域的名字也就是這棵子樹的頂端節(jié)點(diǎn)的域名。

拆分原理

DNS 承載的流量是全球的流量,那么將結(jié)構(gòu)設(shè)計(jì)為層次結(jié)構(gòu)的原因也很簡單,那就是分布承擔(dān)流量

在每個域中,會有一臺或多臺服務(wù)器用來保存這個域名空間的所有信息,并且響應(yīng)關(guān)于該域名空間的所有請求,這種服務(wù)器就叫做這個域的 權(quán)威域名服務(wù)器(授權(quán)域名服務(wù)器) 。它擁有這個域的所有的域名信息,每個域都可以分為多個子域,而每個權(quán)威域名服務(wù)器可以個一個或多個區(qū)域進(jìn)行解析。

google.com 可以被劃分為三個子域,a.google.com、b.google.com和 c.google.com。每個子域都可以自行維護(hù)自己的權(quán)威域名服務(wù)器,一個域可以有多臺權(quán)威域名服務(wù)器,但是只有一臺是主域名服務(wù)器,這臺主域名服務(wù)器負(fù)責(zé)向其他輔域名服務(wù)器分發(fā)每個域名空間的更新信息。簡單理解,域名空間就相當(dāng)于是一個 小集群

當(dāng)一個子域被授權(quán)出去后,它原本所屬的域就不再包含它的數(shù)據(jù),而只留下一些指針,這些指針指向相應(yīng)子域的授權(quán)域名服務(wù)器。如果有一個請求來詢問該子域的信息,那么所返回的應(yīng)該是該子域權(quán)威服務(wù)器的列表。

因此,DNS 服務(wù)器層由:根 DNS 服務(wù)器、頂級域名(TLD)服務(wù)器和權(quán)威DNS服務(wù)器共同組成 ,共同維護(hù)分布式、層次化的DNS數(shù)據(jù)庫。DNS系統(tǒng)采用樹形設(shè)計(jì)的一個主要目的就是為了分撒管理,而這種分散管理是通過 授權(quán) 來實(shí)現(xiàn)的。對域進(jìn)行授權(quán),就是域管理組織把子域授權(quán)給其他組織進(jìn)行管理,由子域管理者來維護(hù)子域中的數(shù)據(jù),可以自由改動數(shù)據(jù),包括對子域的再次劃分和授權(quán)。

圖片

在 DNS 系統(tǒng)中還有一類非常重要的域名服務(wù)器,叫做 本地DNS服務(wù)器(LDNS),是用戶所在局域網(wǎng)或 ISP 網(wǎng)絡(luò)中 的域名服務(wù)器,本地 DNS 服務(wù)器地址是客戶端網(wǎng)絡(luò)配置的一部分,或者通過 DHCP 方式分配給客戶端。

圖片

針對DNS的分布查詢原理如下:

圖片

瀏覽器發(fā)出的請求會先發(fā)送到本地DNS服務(wù)器,本地DNS服務(wù)器收到瀏覽器的域名解析請求后,會采用遞歸的方式向 DNS 系統(tǒng)中的其他遠(yuǎn)程域名服務(wù)器提出查詢請求。(遞歸方式指每次查詢請求都由本地DNS服務(wù)器發(fā)起,收到答復(fù)后再向下一個遠(yuǎn)程DNS服務(wù)器提出請求,直到獲得結(jié)果。迭代查詢指本地DNS服務(wù)器只將自己知道的最合適的答案返回給查詢者,幫助它把查詢過程繼續(xù)下去,而它本身不再做其他任何查詢)

過程: 本地DNS服務(wù)器首先會去根DNS服務(wù)器請求解析(此時條件是本地DNS服務(wù)器并沒有關(guān)于這個域名的緩存),根域名服務(wù)器中雖然沒有www.google.com?這條記錄的,但它可以知道這個URL屬于com 域?,于是就找到com域服務(wù)器的IP地址,然后訪問com域服務(wù)器,重復(fù)上面的操作,再找到放了google 域?的服務(wù)器是哪個,繼續(xù)往下,直到找到www.google.com?的那條記錄,最后返回對應(yīng)的IP地址。

緩存原理

頻繁使用 DNS 查詢會給使用它的互聯(lián)網(wǎng)應(yīng)用帶來額外的時延,而時延本身不能確定,有可能大有可能小。那么為了解決這個問題就需要引入 緩存 機(jī)制。緩存是指 DNS 查詢結(jié)果在主機(jī)中的緩存,有了緩存就不需要在每次查詢的時候都經(jīng)過復(fù)雜的遞歸過程。當(dāng)然 DNS 數(shù)據(jù)有可能過期,因此 DNS 服務(wù)器不能把數(shù)據(jù)永遠(yuǎn)的存放在緩存中,管理員會為這些數(shù)據(jù)設(shè)置一個生存期(TTL)。超過 TTL 時間的數(shù)據(jù)會被清除,重新向 DNS 服務(wù)器進(jìn)行查詢。

除了DNS服務(wù)器能夠緩存 DNS 響應(yīng)信息之外,客戶端瀏覽器也可以緩存 DNS 響應(yīng)信息,當(dāng)用戶請求頁面域名解析結(jié)果在瀏覽器自身的DNS緩存匯總能夠查到時,就不會向DNS服務(wù)器發(fā)起請求了,這樣可以加快瀏覽網(wǎng)頁的速度。當(dāng)消息記錄時間超過瀏覽器設(shè)置的 DNS 緩存時間時,會重新向DNS服務(wù)器發(fā)起域名解析請求,用新的解析結(jié)果更新緩存。

記錄類型與報(bào)文格式

域名服務(wù)器是根據(jù)資源記錄來對 DNS 請求進(jìn)行應(yīng)答的。在 DNS 系統(tǒng)中,最常見的資源記錄是 Internet 類記錄,資源記錄是一個包含了下列字段的 4 元組:

  • Name
  • Value
  • Type
  • TTL

其中,TTL 是該記錄的生存時間,它決定了資源記錄應(yīng)當(dāng)從緩存中刪除的時間。Name 和 Value 的值取決于 Type,即記錄類型。而記錄類型分為以下幾類:

我這里附上一張阿里云的域名解析配置圖,先有一個大致的概念

圖片

A / AAAA:Address

A 記錄用于描述域名到 IP 地址的映射關(guān)系,對同一個域名可以有多條 A 記錄,也就是說一次DNS查找可以返回多個地址。

CNAME

CNAME 記錄用于描述別名與域名的對應(yīng)關(guān)系,這種記錄允許你將多個名字映射到同一臺計(jì)算機(jī)。比如我們有個域名是 cbuc.com?,那我可以添加一條 www.cbuc.com?  的 CNAME記錄,以便請求 www.cbuc.com? 時也能夠訪問到 cbuc.com? 。查找過程也是通過 www.cbuc.com? 找到 cbuc.com ,繼而找到對應(yīng)的 IP 地址,這里不再贅訴。

NS:Name Server

NS 記錄是域名服務(wù)器記錄,用于指定該域名由哪個 DNS 服務(wù)器來進(jìn)行解析。每個區(qū)域可以有多個域名服務(wù)器,因此可以有多條NS記錄。

SOA:Start Of Authority

SOA 記錄用于指定該區(qū)域的權(quán)威域名服務(wù)器。每個區(qū)域允許切只允許有一個 SOA 記錄,它是資源記錄的第一個條目。

PTR:Pointor Record

PTR 記錄用于描述IP地址到域名的映射關(guān)系

DNS 總結(jié)

DNS是域名系統(tǒng)的簡稱,它是一種用于將域名和IP地址相互映射的協(xié)議。簡單地說,它是一種用于將人類可讀的域名(例如www.google.com)轉(zhuǎn)換為瀏覽器可以理解的IP地址(例如 142.251.43.14)的方法。這樣,用戶就可以通過輸入域名來訪問網(wǎng)站,而無需記住網(wǎng)站的IP地址。

DNS的設(shè)計(jì)原理是使用分層的系統(tǒng)將域名和IP地址相互映射。主要包括以下三個部分:

  • 域名服務(wù)器(DNS服務(wù)器):DNS服務(wù)器是網(wǎng)絡(luò)中的一種特殊服務(wù)器,它存儲了域名和IP地址的映射關(guān)系。當(dāng)用戶訪問一個網(wǎng)站時,瀏覽器會向DNS服務(wù)器發(fā)出請求,DNS服務(wù)器則會返回該網(wǎng)站的IP地址。
  • 域名系統(tǒng)域(DNS域名空間):DNS域是用于組織DNS服務(wù)器的層次結(jié)構(gòu)。它以樹型結(jié)構(gòu)組織DNS服務(wù)器,使得每個服務(wù)器都有一個唯一的名稱,這樣就可以方便地查找到指定的DNS服務(wù)器。
  • 域名系統(tǒng)數(shù)據(jù)庫(DNS數(shù)據(jù)庫):DNS數(shù)據(jù)庫是用于存儲域名和IP地址映射關(guān)系的數(shù)據(jù)庫。它包含了所有域名和IP地址的映射關(guān)系,以便DNS服務(wù)器可以根據(jù)用戶的請求返回正確的IP地址。

簡而言之,當(dāng)用戶訪問一個網(wǎng)站時,瀏覽器會向DNS服務(wù)器發(fā)出請求,DNS服務(wù)器會查詢DNS數(shù)據(jù)庫,并根據(jù)域名和IP地址的映射關(guān)系返回正確的IP地址

DNS系統(tǒng)的設(shè)計(jì)具有以下幾個亮點(diǎn):

  • 可擴(kuò)展性:DNS系統(tǒng)的分層結(jié)構(gòu)允許添加新的DNS服務(wù)器,從而支持更多的域名和IP地址。
  • 可靠性:DNS系統(tǒng)可以通過多臺DNS服務(wù)器進(jìn)行冗余存儲,從而提高系統(tǒng)的可靠性。
  • 靈活性:DNS系統(tǒng)允許用戶隨時修改域名和IP地址的映射關(guān)系,從而使網(wǎng)絡(luò)更加靈活。
  • 可維護(hù)性:DNS系統(tǒng)可以使用緩存技術(shù),從而減少DNS數(shù)據(jù)庫的查詢次數(shù),降低系統(tǒng)的維護(hù)成本。

責(zé)任編輯:武曉燕 來源: 菜農(nóng)曰
相關(guān)推薦

2022-07-26 00:00:22

HTAP系統(tǒng)數(shù)據(jù)庫

2014-04-17 16:42:03

DevOps

2019-08-01 10:20:10

2019-09-16 08:40:42

2014-11-28 10:31:07

Hybrid APP

2020-02-27 10:49:26

HTTPS網(wǎng)絡(luò)協(xié)議TCP

2023-03-16 10:49:55

2021-01-15 07:44:21

SQL注入攻擊黑客

2021-11-09 09:48:13

Logging python模塊

2022-08-26 01:10:32

TCPSYNLinux

2021-06-02 09:47:48

RSA2021

2022-03-16 18:27:39

開發(fā)低代碼軟件開發(fā)

2018-03-19 09:13:16

2019-08-12 11:14:00

JVM垃圾對象

2025-01-03 08:09:15

2024-02-02 08:50:20

Node.js元數(shù)據(jù)自動化

2017-10-18 22:01:12

2023-10-24 08:53:24

FutureTas并發(fā)編程

2012-05-31 09:56:54

云安全

2015-07-31 10:35:18

實(shí)時計(jì)算
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號