1. 程式人生 > >計算機網路之我見-通俗理解計算機網路(八)

計算機網路之我見-通俗理解計算機網路(八)

本篇講解DNS域名解析服務

(DNS理解起來說難也難,說簡單其實也簡單,只要類比一下Linux的虛擬檔案系統還有掛載mount的概念就會很容易理解DNS了,DNS和分散式的檔案系統NFS理念上有些相似之處)

講DNS之前先講一下linux 虛擬檔案系統的概念(有助於理解DNS和域名組成結構)

# Linux檔案系統的目錄結構是隻有一個樹根的樹形組成,根節點用‘\’表示,(正斜槓竟然不好過CSDN稽核,用反斜槓代替)下級子目錄如 "\usr\bin\java\javaw" 這樣表示,其中"\"是根目錄,usr是一級目錄,bin是二級目錄,java是三級目錄,javaw則是具體的檔案節點,是葉子節點

# Linux 檔案系統掛載的概念:

通常情況下,根節點在系統安裝的時候會掛載到一個磁碟的一個分割槽下的真實檔案系統,如果我們有同一磁碟的其他分割槽的檔案系統、其他磁碟上的分割槽上的檔案系統需要訪問怎麼辦?答案是我們需要把這些檔案系統掛載到虛擬檔案系統的某個目錄下,比如,我有個Windows的磁碟,上面有C、D兩個盤,我通過mount掛載命令掛載到 "\win\c,\win\d",然後我上層的程式就可以直接訪問這兩個目錄來訪問Windows盤的C盤和D盤了。這種掛載訪問有啥特點?答:我訪問"\win\c"的時候系統發現這個目錄對應的分割槽不在我磁碟上,然後去windows磁碟上去訪問,然後再找"c"目錄,發現是在win盤的C分割槽上,這樣我就找到了對應的檔案,實際訪問過程是跨了磁碟的,如果安裝了NFS,還可以把一個通過網線連線的遠端機器上的檔案系統掛載上來,上層程序訪問相關檔案的時候就是跨機器訪問了,最終結果是檔案是分散式的,但是我程序可以通過統一的入口--虛擬檔案系統訪問到~

一、DNS域名解析的作用

1 提供域名到IP地址的對映查詢(域名查IP)

2 提供IP到域名的反向指標查詢(IP查域名)

二、域名的組成結構

1 域名是分層次的 ,分為根域名、頂級域名、二級域名、、、N級域名

2 完整域名寫法上和檔案系統反著來:主機名+N級域名+...+二級域名+頂級域名,如 www.baidu.com   www代表主機名 baidu代表二級域名 com是頂級域名(其實還有根域名,用 . 點號表示,相當於檔案系統的/,一般寫域名的時候不寫出來,直接寫到頂級域名結束)

3 頂級域名是由美國的相關機構統一管理的,目前劃分瞭如com、net、org、gov、edu等表示各種型別的機構和公司或政府的頂級域名以及代表國家簡稱的cn、us、jp等上百個按國家劃分的頂級域名,還有一個.arpa頂級域是用來做DNS反向查詢的域,後面有獎

4 頂級域名下繼續劃分多級域名,組成像檔案系統一樣的樹形結構,以某級的域為根節點的完整子樹稱為一個子域!

二、域名DNS伺服器

# DNS伺服器和域名一樣,也是分層級的,層級結構和域名中的域一一對應,每個域名伺服器和一個子域相對應,換句話說,該伺服器負責它所對應的子域下的域名的解析查詢~ 比如指定某伺服器負責com子域,則所有的com域下的域如baidu.com、google.com都要經過該伺服器解析,其中比較特殊的是根域名伺服器,全球共有十三臺根域名伺服器,根域名伺服器對應於域名的根域“.”域,所有的域名解析都需要經過根域名伺服器,根域名伺服器儲存了所有頂級域名的域名伺服器IP地址~

# 域名伺服器的可靠性保證:每個域名伺服器通常都設定多臺機器進行容災,備機定時通過基於TCP的協議從主機獲取資料進行同步~

# 域名伺服器中都儲存了什麼資料?

域名伺服器相當於一個鍵值對資料庫,裡面儲存了常見的如下幾種型別的記錄:

1 A型別記錄,鍵是該伺服器對應的域下的子域名,值是域名對應的IP地址,相當於檔案系統中的最終檔案(不是一個軟連結檔案)

2 NS型別記錄,即指向下一級子域域名伺服器地址的型別,鍵是該伺服器對應的域的下級子域域名,值是該子域伺服器的IP地址

3 CNAME型別記錄,即子域名的別名,鍵是該伺服器對應的域的下級子域域名,值是別名域名(不是IP地址)。

4 PTR型別記錄,指標記錄,用於IP到域名的反向查詢,鍵是反向域名,值是IP對應的域名

通常情況下,允許同一域名伺服器下的一個子域名既有A記錄,又有NS記錄,又有CNAME記錄,它們之間有優先順序關係,有CNAME別名記錄的和A記錄的時候,A記錄優先順序高,有A記錄和NS記錄的時候NS記錄優先順序高。

三、DNS協議

# 域名伺服器一般在53埠同時開啟UDP服務和TCP服務進行監聽,客戶機既可以通過UDP方式傳送DNS請求和接收DNS響應,也可以通過TCP方式進行,UDP方式速度比較快,但是DNS協議的資料包採用了512位元組大小,使用UDP可能會截斷DNS的響應記錄條目數

# DNS協議的格式(這裡不詳細說明具體的格式)

DNS分為請求和響應,請求報文包括請求選項和請求內容;響應報文包括響應選項和響應內容;

請求選項主要有:

1 是否希望遞迴查詢(遞迴查詢在下面的域名解析過程中會有講解)

2 請求的資源型別(請求A記錄查詢,還是請求CNAME別名查詢,還是請求PTR指標查詢等)

請求內容主要是要請求解析的域名~

響應選項主要有:

1 是否是授權回答(是授權回答則說明響應的解析結果是從該域名的授權域名伺服器得到的,非授權回答則說明響應的解析結果是從本地DNS的快取裡得到的~)

2 回答的資源型別(A記錄型別的資源說明響應內容是對應域名的IP地址資源記錄;授權資源型別說明響應的內容是對應域名的下一級授權域名伺服器域名的資源型別;附加資訊資源記錄)

響應內容主要有:

A記錄型別的資源記錄,對應請求域名的解析後的IP地址;

授權資源型別記錄(可能有多個),對應下一級首選域名伺服器的域名(授權伺服器的IP地址在附加資訊資源記錄中);

附加資訊資源記錄,通常當響應型別為授權資源型別時,該資源型別儲存授權資源伺服器域名對應的IP地址。

四、域名解析過程(正向)

1 通常作業系統會提供相關API負責域名解析,傳遞的引數為域名,返回IP地址

2 通常我們配置網絡卡介面的時候會提供DNS伺服器的IP地址

3 通常我們主機本地會有host檔案,裡面放置我們自己寫進去的域名到IP的對映關係

4 當發起DNS查詢的時候,API首先查詢本地Host檔案,如果有對應域名項,則直接返回IP,終止過程

5 我們本機還有配置檔案指明13臺域名伺服器的IP地址,網際網路上的每臺DNS服務都有相應配置檔案指明13臺根伺服器的IP地址

6 本機API發現host檔案沒有對應域名後,開始向網絡卡配置時的配置的DNS伺服器發起DNS查詢請求,請求通常指定“希望遞迴”選項,來讓DNS伺服器幫我們做遞迴查詢,我們本機只需要等待最終的解析結果-IP地址, 請求內容條目是想要解析的域名 如 www.baidu.com

7 該DSN伺服器收到請求後,先查詢本地快取,有相關資源記錄的話直接返回,沒有的話,檢視請求報文的請求選項是“希望遞迴”,則開始進行遞迴查詢過程,第一步先從配置的13臺根伺服器IP中選擇一個,向根伺服器發起查詢(注意,這一步通常不會設定“希望遞迴”選項,因為根伺服器一般只存NS型別記錄,即頂級域名的授權伺服器資訊,根伺服器不會做遞迴查詢的)

8 根伺服器收到請求後,發現是www.baidu.com的解析,會查詢.com頂級域對應的條目,找到並響應給請求方DNS伺服器,響應型別是NS型別記錄,即.com域的授權伺服器列表

9 請求方DNS收到響應後,再從返回的.com域的授權伺服器IP地址中選擇一個,繼續發起查詢,這次請求頭可以帶上“希望遞迴”選項,讓com域的伺服器幫助做遞迴查詢,也可以不帶這個選項,全由自己來負責遞迴查詢,這裡假設仍不帶該選項

10 .com域伺服器收到www.baidu.com的域名解析請求後,查詢本地資源記錄,發現.baidu域對應的也是一個NS型別記錄,即是下級的域名伺服器,則響應給請求方DNS伺服器.baidu域的授權伺服器列表

11 請求方DNS伺服器收到響應後,再向返回的.baidu域的授權伺服器IP發起查詢請求

12 .baidu域伺服器查詢本地資源記錄,發現www域是一個主機A資源記錄,返回給請求方DNS

13 請求方DNS遞迴結束,向源請求主機返回www.baidu.com主機的A記錄,即IP地址資訊,DSN解析宣告結束~

# 額外的說明,在DNS伺服器做遞迴的過程中,如果發現返回的資源記錄型別是CNAME別名,且沒並沒有返回別名對應的IP地址A記錄,則DNS需要進一步對別名做上述的遞迴過程,然後返回給客戶端,如果返回別名的同時也返回了別名的A記錄,則直接使用A記錄響應給客戶端。

五、域名解析反向查詢(簡要介紹)

很多情況下有希望從IP地址反向查詢域名的需求,方法是:

1 把IP地址轉換成一個域名,IP反寫的形式,比如 222.10.1.2轉換後的域名為2.1.10.222.in-addr.arpa,後面的域是固定的域,其中.arpa域是專門用來做反向查詢的頂級域

2 和正向查詢一樣,構造一個DNS請求,請求選項上指定PTR指標查詢型別,說明是發現查詢

3 經過正向查詢差不多的過程,返回DNS響應,響應的資源類性是PTR指標查詢記錄,內容是請求IP對應的域名,查詢結束