DNS篇之DNS協議詳解


一、DNS原理

1、什麼是DNS?

域名系統(Domain Name System縮寫DNS,Domain Name被譯爲域名)是因特網的一項核心服務,它作爲可以將域名和IP地址相互映射的一個分佈式數據庫,能夠使人更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP數串。

D N S的一個基本特性是使用超高速緩存。即當一個名字服務器收到有關映射的信息(主
機名字到 I P地址)時,它會將該信息存放在高速緩存中。這樣若以後遇到相同的映射請求,
就能直接使用緩存中的結果而無需通過其他服務器查詢。
 

2、DNS頂級域

頂級域名被分爲三個部分:
1) arpa是一個用作地址到名字轉換的特殊域 。
2) 7個3字符長的普通域。有些書也將這些域稱爲組織域。
3) 所有2字符長的域均是基於ISO3166中定義的國家代碼,這些域被稱爲國家域,或地理域

頂級域名(Top level domain,簡稱TLD)由美國的ICANN機構管理

描述
com 商業組織
edu 教育機構
gov 其他美國政府部門
int 國際組織
mil 美國軍事網點
net 網絡
org 其他組織

3、DNS查詢過程

由於 ICANN 管理着所有的頂級域名,所以它是最高一級的域名節點,被稱爲根域名(root domain)。在有些場合,www.example.com 被寫成www.example.com. ,即最後還會多出一個點。這個點就是根域名。

理論上,所有域名查詢都必須先查詢根域名,因爲只有根域名才能告訴你,某個頂級域名由哪臺服務器管理。事實上也確實如此,ICANN 維護着一張列表,裏面記載着頂級域名和對應的託管商。

比如,我要訪問www.example.com ,就必須先詢問 ICANN 的根域名列表,它會告訴我.com域名由 Verisign 託管,我必須去找 Verisign,它會告訴我example.com服務器在哪裏。

由於根域名列表很少變化,大多數 DNS 服務商都會提供它的緩存,所以根域名的查詢事實上不是那麼頻繁。

保存 DNS 根區文件的服務器,就叫做 DNS 根域名服務器(root name server)。

遞歸查詢:客戶端向本地 DNS 服務器(即首選DNS服務器)發出請求後,一直處於等待狀態,直到本地名稱服務器返回查詢結果。當客戶端向本地 DNS 服務器發出請求後,本地 DNS 服務器查詢本機緩存,如果有記錄,則直接返回;如果沒有,則本地 DNS 服務器以客戶端的身份將查詢請求發給根域名服務器,這個過程是遞歸查詢過程。如果遞歸查詢未查出結果,則開始進行迭代查詢。

迭代查詢:本地 DNS 服務器以客戶端的身份將查詢請求發給根域名服務器後,根域名服務器通過查詢返回給本地 DNS 服務器 .com 頂級名稱服務器的IP地址;本地DNS服務器收到 .com 頂級名稱服務器的IP地址後繼續向.com頂級名稱服務器發出請求,頂級名稱服務器收到請求後查詢緩存,如果有記錄則直接返回本地DNS服務器,如果沒有,則返回baidu.com二級名稱服務器的IP地址;本地名稱服務器繼續發出請求,二級名稱服務器同樣查找緩存返回www.baidu.com的IP地址。(最多127級域)。本地 DNS 服務器向根服務器的查詢就是迭代查詢。

一次完整的查詢請求經過的流程: Client -->hosts文件 -->DNS Service Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(迭代) --> 根--> 頂級域名DNS-->二級域名DNS…

二、DNS包結構

1、

DNS查詢響應的一般格式
標識 標誌
問題數 資源記錄數
授權資源記錄數 附加資源記錄數
                                                    查詢問題
                                         回答(資源記錄數可變)
                                         授權(資源記錄數可變)
                                        附加信息(資源記錄數可變)

 

這個報文由12個字節的首部和4個可變的字段組成。

標識字段:由客戶程序設置並由服務器返回結果。客戶程序通過它來確定響應與查詢是否匹配。

標誌字段:16 bit的標誌字段被劃分爲若干子字段

標誌位字段含義
   
QR(1 bit) 0表示查詢報文, 1表示響應報文
opcode(4 bit) 0表示標準查詢,1表示反向查詢,2表示服務器狀態請求
AA(1 bit) 授權回答 (authoritative answer)
TC (1 bit) 可截斷的 (truncated),使用UDP時,它表示當應答的總長度超過512字節時,只返回前512個字節
RD(1 bit) 期望遞歸( recursion desired)。在一個查詢中設置,並在響應中返回。這個標誌告訴域名服務器必須處理這個查詢,也稱爲一個遞歸查詢。如果該位爲 0,且被請求的名字服務器沒有一個授權回答,它就返回一個能解答該查詢的其他名字服務器列表,這稱爲迭代查詢。
RA(1 bit) 可用遞歸。如果域名服務器支持遞歸查詢,則在響應中將該比特設置爲 1。大多數域名服務器都提供遞歸查詢,除了某些根服務器。
zero(3 bit) 必須爲0
rcode(4 bit)

0(沒有差錯)、3(名字差錯)2(服務器錯誤)

名字差錯只有從一個授權名字服務器上返回,它表示在查詢中制定的域名不存在。


隨後的 4個16 bit 字段說明最後 4個變長字段中包含的條目數。對於查詢報文,問題( question )數通常是 1,而其他3項則均爲0。類似地,對於應答報文,回答數至少是 1,剩下的兩項可以是0或非0。

2、DNS查詢報文中的問題部分

DNS查詢報文中問題部分的格式
                                                        查詢名
查詢類型 查詢類

查詢名:即要請求的域名,它是一個或多個標識符的序列。每個標識符以首字節的計數值來說明隨後標識符的字節長度,每個名字以最後字節爲 0結束,長度爲0的標識符是根標識符。如下圖報文06表示了teredo長度,04表示ipv6的長度,以此類推,最後以00結束。計數字節的值必須是 0 ~ 63的數,對於每一級域名長度的限制是63個字符,域名總長度則不能超過253個字符。

最常用的查詢類型是 A類型,表示期望獲得查詢名的 I P地址。一個P T R查詢則請求獲得一個I P地址對應的域名。

查詢類通常是1(IN),指互聯網地址

3、DNS響應報文中的資源記錄部分
     DNS報文中最後的三個字段,回答字段、授權字段和附加信息字段,均採用一種稱爲資源記錄RR( Resource Record)的相同格式。
 

DNS資源記錄格式
                                                        域名(可變長度)
類型
                                                       生存時間
資源數據長度 資源數據(可變長度)
                                                     資源數據(可變長度)

如下圖抓包展示的回答字段的值

域名是記錄中資源數據對應的名字。它的格式和前面介紹的查詢名字段格式相同。

類型說明RR的類型碼。它的值和前面介紹的查詢類型值是一樣的。類通常爲internet數據。

生存時間字段是客戶程序保留該資源記錄的秒數。

資源數據長度說明資源數據的數量。該數據的格式依賴於類型字段的值。對於類型 1( A記錄)資源數據是4字節的I P地址。

三、DNS類型-資源記錄

我們已經見到了一些不同類型的資源記錄(RR):IP地址查詢爲A類型,指針查詢爲類型PTR。也已看到了由名字服務器返回的資源記錄:回答RR、授權RR和附加信息RR。現有大約20種不同類型的資源記錄,下面將介紹其中的一些。

類型 數值 描述
A 1 域名的IPv4地址
AAAA 34 域名的IPv6地址
CNAME 5 域名的別名,可以理解爲域名的重定向,主要方便IP地址的變更
NS 2 指定哪個域名服務器可以解析該域名的子域名
SOA 6 授權機構記錄,記錄ns中哪個是主服務器。
PTR 12 根據IP反向查找域名
HINFO 13 主機信息:包括說明主機CPU和操作系統的兩個字符串。並非所有的站點均提供它們系統的HINFO記錄
MX 15 mtp郵箱域名的IP地址。給client端指明某個域名的郵件服務器地址
AXFR 252 對區域轉換的請求
ANY 255 對所有記錄的請求

四、怎麼發送不同請求?

DNS-nslookup與dig的使用,這是發送DNS請求兩個常用的工具

https://mp.csdn.net/console/editor/html/106328924

五、DNS服務器搭建

https://mp.csdn.net/console/editor/html/106329674

備註:

RFC 1034 [Mockapetris 1987a] 說明了D N S的概念和功能, RFC 1035 [Mockapetris 1987b]詳細說明了DNS 的規範和實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章