超詳細 DNS 協(xié)議解析
時間:2023-02-02 14:52:02 | 來源:建站知識
時間:2023-02-02 14:52:02 來源:建站知識
為了保證網(wǎng)址的正常訪問,域名解析協(xié)議(DNS)其實在背后做出了很多努力,本文將透徹講解 DNS 協(xié)議的原理,了解我們每天都在接觸的網(wǎng)址到底是怎么工作的。
為了保證網(wǎng)址的正常訪問,域名解析協(xié)議(DNS)其實在背后做出了很多努力,本文將透徹講解 DNS 協(xié)議的原理,了解我們每天都在接觸的網(wǎng)址到底是怎么工作的。
1. 什么是 DNS 協(xié)議
在學(xué)習(xí) DNS 協(xié)議之前,我們先區(qū)分一下域名和 IP 地址這個兩個概念:
- IP 地址:一長串能夠唯一地標記網(wǎng)絡(luò)上的計算機的數(shù)字
- 域名:又稱網(wǎng)域,是由一串用點分隔的名字組成的 Internet 上某一臺計算機或計算機組的名稱,用于在數(shù)據(jù)傳輸時對計算機的定位標識(有時也指地理位置)比如
www.baidu.com
不知道有沒有同學(xué)會混淆域名和網(wǎng)址的概念,可以這樣理解,網(wǎng)址里面含有域名。舉個例子:www.gitee.com/veal98
就是一個網(wǎng)址,而 www.gitee.com
就是域名
由于 IP 地址具有不方便記憶并且不能顯示地址組織的名稱和性質(zhì)等缺點,人們設(shè)計出了域名,并
通過域名解析協(xié)議(DNS,Domain Name System)來將域名和 IP 地址相互映射,使人更方便地訪問互聯(lián)網(wǎng),而不用去記住能夠被機器直接讀取的 IP 地址數(shù)串。將域名映射成 IP 地址稱為正向解析,將 IP 地址映射成域名稱為反向解析。
???? DNS 協(xié)議可以使用 UDP 或者 TCP 進行傳輸,使用的端口號都為 53。但大多數(shù)情況下 DNS 都使用 UDP 進行傳輸。
2. 域名詳解
? 那么域名由誰來規(guī)定和管理呢?不能是隨便寫吧?
全世界域名的最高管理機構(gòu),是一個叫做 ICANN (Internet Corporation for Assigned Names and Numbers)的組織,總部在美國加州。
ICANN 負責(zé)管理全世界域名系統(tǒng)的運作。
域名其實是具有一定的層次結(jié)構(gòu)的,從上到下依次為:
根域名、
頂級域名(top level domain,TLD)、
二級域名、(三級域名)
① 頂級域名
先來講講
頂級域名(TLD),即最高層級的域名。簡單說,就是網(wǎng)址的最后一個部分。比如,網(wǎng)址
www.baidu.com
的頂級域名就是
.com
。ICANN 的一項主要工作,就是規(guī)定哪些字符串可以當作頂級域名。截至 2015 年 7 月,頂級域名共有 1058 個,它們大致可以分成兩類:
- 一類是通用頂級域名(gTLD),比如
.com
、.net
、.edu
、.org
、.xxx
等等,共有 700 多個。 - 另一類是國家頂級域名(ccTLD),代表不同的國家和地區(qū),比如
.cn
(中國)、.io
(英屬印度洋領(lǐng)地)、.cc
( 科科斯群島)、.tv
(圖瓦盧)等,共有 300 多個。
當然,ICANN 自己不會去管理這些頂級域名,因為根本管不過來。想想看,頂級域名有1000多個,每個頂級域名下面都有許多批發(fā)商,如果每個都要管,就太麻煩了。ICANN 的政策是,每個頂級域名都找一個
托管商,該域名的所有事項都由托管商負責(zé)。ICANN 只與托管商聯(lián)系,這樣管理起來就容易多了。舉例來說,
.cn
國家頂級域名的托管商就是中國互聯(lián)網(wǎng)絡(luò)信息中心(CNNIC),它決定了
.cn
域名的各種政策。
② 二級域名
而
二級域名(Second Level Domain,SLD) 在通用頂級域名或國家頂級域名之下具有不同的意義:
- 通用頂級域名下的二級域名:一般是指域名注冊人選擇使用的網(wǎng)上名稱,如
yahoo.com
(商業(yè)組織通常使用自己的商標、商號或其他商業(yè)標志作為自己的網(wǎng)上名稱,如 baidu.com
) - 國家頂級域名下的二級域名:一般是指類似于通用頂級域名的表示注冊人類別和功能的標志。例如,在
.com.cn
域名結(jié)構(gòu)中,.com
此時是置于國家頂級域名 .cn
下的二級域名,表示中國的商業(yè)性組織,以此類推。
三級域名是形如
www.baidu.com
的域名,可以當做是二級域名的子域名,特征為域名包含兩個
.
。對于域名所有者/使用者而言,三級域名都是二級域名的附屬物而無需單獨費用。
三級域名甚至不能稱為域名,一般稱之為域名下的 “二級目錄”。
③ 根域名
? 那么
根域名在哪里呢?在層次結(jié)構(gòu)中根域名不是最頂級的嗎?域名中怎么沒有看見它?
由于 ICANN 管理著所有的頂級域名,所以它是最高一級的域名節(jié)點,被稱為根域名(root domain)。在有些場合,
www.xxx.com
被寫成
www.xxx.com.
,即最后還會多出一個點。這個點就是根域名。
理論上,
所有域名的查詢都必須先查詢根域名,因為只有根域名才能告訴你,某個頂級域名由哪臺服務(wù)器管理。事實上也確實如此,
ICANN 維護著一張列表(根域名列表),里面記載著頂級域名和對應(yīng)的托管商。
比如,我要訪問
abc.xyz
,也必須先去詢問根域名列表,它會告訴我
.xyz
域名由 CentralNic 公司托管。根域名列表還記載,
.google
由谷歌公司托管,
.apple
由蘋果公司托管等等。
由于根域名列表很少變化,大多數(shù) DNS 服務(wù)商都會提供它的緩存,所以根域名的查詢事實上不是那么頻繁。
3. 域名服務(wù)器詳解
域名服務(wù)器是指管理域名的主機和相應(yīng)的軟件,它可以管理所在分層的域的相關(guān)信息。一個域名服務(wù)器所負責(zé)管里的分層叫作
區(qū) (ZONE)。域名的每層都設(shè)有一個域名服務(wù)器:
- 根域名服務(wù)器
- 頂級域名服務(wù)器
- 權(quán)限域名服務(wù)器
下面這幅圖就很直觀了:
除了上面三種 DNS 服務(wù)器,還有一種不在 DNS 層次結(jié)構(gòu)之中,但是很重要的 DNS 服務(wù)器,即
本地域名服務(wù)器。下面我們分別講解這四種服務(wù)器都是用來干什么的 ????
① 根域名服務(wù)器
上面我們提到,ICANN 維護著一張根域名列表,里面記載著頂級域名和對應(yīng)的托管商,其實根域名列表的正式名稱是
DNS 根區(qū)(DNS root zone),
保存 DNS 根區(qū)文件的服務(wù)器,就叫做
DNS 根域名服務(wù)器(root name server)。根域名服務(wù)器
保存所有的頂級域名服務(wù)器的地址由于早期的 DNS 查詢結(jié)果是一個 512 字節(jié)的 UDP 數(shù)據(jù)包。這個包最多可以容納 13 個服務(wù)器的地址,因此就規(guī)定全世界有 13 個根域名服務(wù)器,編號從
a.root-servers.net
一直到
m.root-servers.net
。其中 10 臺設(shè)置在美國,另外各有一臺設(shè)置于荷蘭、瑞典和日本。
前面我們說過,理論上
所有域名的查詢都必須先查詢根域名,所以一般來說所有的域名服務(wù)器都會注冊一份根域名服務(wù)器的 IP 地址的緩存,用于在必要的時候向其發(fā)送請求。
② 頂級域名服務(wù)器
按照根域名服務(wù)器管理頂級域名的邏輯,頂級域名服務(wù)器顯然就是用來
管理注冊在該頂級域名下的所有二級域名的,
記錄這些二級域名的 IP 地址。
③ 權(quán)限域名服務(wù)器
按照上面的邏輯,權(quán)限域名服務(wù)器應(yīng)該是管理注冊在二級域名下的所有三/四級域名的,但其實不是這樣,如果一個二級域名或者一個三/四級域名對應(yīng)一個域名服務(wù)器,則域名服務(wù)器數(shù)量會很多,我們需要使用
劃分區(qū)的辦法來解決這個問題。那么權(quán)限域名服務(wù)器就是負責(zé)管理一個“
區(qū)”的域名服務(wù)器。
? 什么是區(qū)?怎樣劃分區(qū)呢?
區(qū)和域其實是不同的,區(qū)可以有多種不同的劃分方法。以百度為例,我們假設(shè)有
fanyi.baidu.com
、
ai.baidu.com
、
tieba.baidu.com
這三個三級域名。我們可以這樣分區(qū),
fanyi.baidu.com
和
tieba.baidu.com
放在
baidu.com
權(quán)限域名服務(wù)器,
ai.baidu.com
放在
ai.baidu.com
權(quán)限域名服務(wù)器中。并且
baidu.com
權(quán)限域名服務(wù)器和
ai.baidu.com
權(quán)限域名服務(wù)器是
同等地位的,而具體怎么分區(qū)是百度公司根據(jù)域名多少、訪問多少等情況去自己規(guī)定的。
畫個圖直觀理解一下:
④ 本地域名服務(wù)器
除了上面三種 DNS 服務(wù)器,還有一種不在 DNS 層次結(jié)構(gòu)之中,但是很重要的 DNS 服務(wù)器,就是
本地域名服務(wù)器(也被稱為
權(quán)威域名服務(wù)器)。本地域名服務(wù)器是電腦解析時的
默認域名服務(wù)器,即電腦中設(shè)置的首選 DNS 服務(wù)器和備選 DNS 服務(wù)器。常見的有電信、聯(lián)通、谷歌、阿里等的本地 DNS 服務(wù)。
每個因特網(wǎng)服務(wù)提供者或一所大學(xué),甚至一所大學(xué)中的各個系,都可以擁有一個本地域名服務(wù)器。
當一臺主機發(fā)出 DNS 查詢請求時,這個查詢請求報文就發(fā)送給該主機的本地域名服務(wù)器。
本地域名服務(wù)器管理本地域名的解析和映射,并且能夠向上級域名服務(wù)器進行查詢。
那么具體本地域名服務(wù)器是如何向上級域名服務(wù)器轉(zhuǎn)發(fā)查詢請求的呢?
4. DNS 查詢方式
具體 DNS 查詢的方式有兩種:
所謂迭代就是,如果請求的接收者不知道所請求的內(nèi)容,那么
接收者將扮演請求者,發(fā)出有關(guān)請求,直到獲得所需要的內(nèi)容,然后將內(nèi)容返回給最初的請求者。
???? 通俗點來說,在遞歸查詢中,如果 A 請求 B,那么 B 作為請求的接收者一定要給 A 想要的答案;而迭代查詢則是指,如果接收者 B 沒有請求者 A 所需要的準確內(nèi)容,接收者 B 將告訴請求者 A,如何去獲得這個內(nèi)容,但是自己并不去發(fā)出請求。
一般來說,
域名服務(wù)器之間的查詢使用迭代查詢方式,以免根域名服務(wù)器的壓力過大。通過下面這兩個圖就能很好的理解了 ????
1)遞歸查詢:
2)迭代查詢:
5. 域名緩存
上面講解的是域名服務(wù)器之間的 DNS 查詢請求過程,但實際上,每個時刻都有無數(shù)網(wǎng)民要上網(wǎng),那每次都去訪問本地域名服務(wù)器去獲取 IP 地址顯然是不實際的。解決方法就是
使用緩存保存域名和 IP 地址的映射。
計算機中 DNS 記錄在本地有兩種緩存方式:瀏覽器緩存和操作系統(tǒng)緩存。
1)
瀏覽器緩存:瀏覽器在獲取網(wǎng)站域名的實際 IP 地址后會對其進行緩存,減少網(wǎng)絡(luò)請求的損耗。每種瀏覽器都有一個固定的 DNS 緩存時間,如 Chrome 的過期時間是 1 分鐘,在這個期限內(nèi)不會重新請求 DNS
2)
操作系統(tǒng)緩存:操作系統(tǒng)的緩存其實是用戶自己配置的 hosts 文件。比如 Windows10 下的 hosts 文件存放在 C:/Windows/System32/drivers/etc/hosts
Windows 系統(tǒng)默認開啟 DNS 緩存服務(wù),服務(wù)名是
DNSClient
,可以緩存一些常用的域名。
使用命令
ipconfig/displaydns
可以查看電腦中緩存的域名。
? 在瀏覽器中進行訪問的時候,會優(yōu)先查詢?yōu)g覽器緩存,如果未命中則繼續(xù)查詢操作系統(tǒng)緩存,最后再查詢本地域名服務(wù)器,然后本地域名服務(wù)器會遞歸的查找域名記錄,最后返回結(jié)果。
主機和本地域名服務(wù)器之間的查詢方式是遞歸查詢,也就是說主機請求本地域名服務(wù)器,那么本地域名服務(wù)器作為請求的接收者一定要給主機想要的答案。
6. 完整域名解析過程
OK,將我們上面所說的域名服務(wù)器之間的 DNS 查詢請求過程和域名緩存結(jié)合起來,就是一個完整的 DNS 協(xié)議進行域名解析的過程。這里我們以正向解析為例(域名解析成 IP 地址):
1)首先搜索
瀏覽器的 DNS 緩存,緩存中維護一張域名與 IP 地址的對應(yīng)表;
2)若沒有命中,則繼續(xù)搜索
操作系統(tǒng)的 DNS 緩存;
3)若仍然沒有命中,則操作系統(tǒng)將域名發(fā)送至
本地域名服務(wù)器,本地域名服務(wù)器查詢自己的 DNS 緩存,查找成功則返回結(jié)果(注意:主機和本地域名服務(wù)器之間的查詢方式是
遞歸查詢);
4)若本地域名服務(wù)器的 DNS 緩存沒有命中,則本地域名服務(wù)器向上級域名服務(wù)器進行查詢,通過以下方式進行
迭代查詢(注意:本地域名服務(wù)器和其他域名服務(wù)器之間的查詢方式是迭代查詢,防止根域名服務(wù)器壓力過大):
- 首先本地域名服務(wù)器向根域名服務(wù)器發(fā)起請求,根域名服務(wù)器是最高層次的,它并不會直接指明這個域名對應(yīng)的 IP 地址,而是返回頂級域名服務(wù)器的地址,也就是說給本地域名服務(wù)器指明一條道路,讓他去這里尋找答案
- 本地域名服務(wù)器拿到這個頂級域名服務(wù)器的地址后,就向其發(fā)起請求,獲取權(quán)限域名服務(wù)器的地址
- 本地域名服務(wù)器根據(jù)權(quán)限域名服務(wù)器的地址向其發(fā)起請求,最終得到該域名對應(yīng)的 IP 地址
4)本地域名服務(wù)器將得到的 IP 地址返回給操作系統(tǒng),同時自己將 IP 地址緩存起來
5)操作系統(tǒng)將 IP 地址返回給瀏覽器,同時自己也將 IP 地址緩存起來
6)至此,瀏覽器就得到了域名對應(yīng)的 IP 地址,并將 IP 地址緩存起來
配合下圖直觀理解: