很久沒看dns這個協議了,回憶了一下發現不太記得了。所以來複習一下。參考:謝希仁的《計算機網路》

dns就是知道了域名,找域名對應的ip。即domain name system,域名系統

注意:dns是應用層協議,和http這類協議並列,傳輸層使用的是udp協議,使用udp是為了減少開銷。

為什麼機器在處理ip數據報時要使用ip地址而不使用域名呢?這是因為ip地址的長度是固定的32位(ipv6為128位,也是定長的)。而域名的長度並不是固定的,機器處理起來比較困難。

域名系統被設計成為一個聯機分散式資料庫系統,並採用客戶-伺服器方式。

域名到ip的解析過程:當一個應用進程需要把主機名解析為ip地址時,該應用進程就調用解析程序,並成為dns的一個客戶,把待解析的域名在dns請求報文中,以udp用戶數據報方式發送給本地域名伺服器。本地域名伺服器在查找域名後,把對應的ip地址放在回答報文中返回。應用進程獲得目的主機的ip地址後即可進行通信。

若本地域名不能回答該請求,則此域名伺服器就暫時成為了dns中的另一個客戶,並向其它域名伺服器發送查詢請求。這種過程直至找到能夠回答該請求的域名伺服器為止。

mail.cctv.com com為頂級域名,cctv為二級域名,mail為三級域名。

頂級域名包括國家頂級域名,如cn,us,uk, 通用頂級域名,如com(公司企業),net(網路服務機構)等。

域名伺服器分為根域名伺服器,頂級域名伺服器,許可權域名伺服器三種。如圖:

結合圖片理解即可。

根域名伺服器並不是由13臺機器所組成,而是13套裝置。每個裝置使用一個域名。a.rootservers.netm.rootservers.net 。比如f.rootservers.net 這個根域名伺服器,有很多個機器(60臺左右吧),這六十臺分佈在世界各個角落,這樣在世界各地都能儘快找到這個域名跟伺服器。根伺服器的分佈很不合理,例如在北美,平均每375萬的網民可以分攤到1個根域名伺服器,而亞洲是2000萬網民,這樣就導致亞洲的網民上網速度明顯低於北美的。

為了提高域名的可靠性,dns域名伺服器都把數據複製到幾個域名伺服器來保存,其中一個是主域名伺服器(master),其它的都是輔助域名伺服器(secondary),當主域名伺服器出故障時,輔助域名伺服器可以保證dns的查詢工作不會中斷,主域名伺服器定期把數據複製到輔助域名伺服器當中,而更改數據只能在主域名伺服器中進行。這樣就保證了數據的一致性。(這就很像分散式了)

域名解析過程:

1.主機向本地域名伺服器的查詢一般都是採用遞歸查詢。所謂遞歸查詢就是,如果主機所詢問的本地域名伺服器不知道被查詢的ip地址,那麼本地域名伺服器就以dns客戶的身份,向其它根域名伺服器發出查詢請求報文(即替該主機繼續查詢),而不是讓該主機自己進行下一步的查詢。也就是發出請求的客戶不需要再工作了。

2.本地域名伺服器向根域名伺服器的查詢通常採用迭代查詢。迭代查詢的特點是這樣的:當根域名伺服器收到本地域名系統發出的迭代查詢請求報文時,要麼給出所要查詢的ip,要麼告訴本地域名伺服器:「你下一步應當向哪一個域名伺服器進行查詢。」當然,本地域名伺服器也可以採用遞歸查詢,這取決於最初的查詢請求報文的設置。

可參考:

DNS遞歸和迭代查詢原理-風花-51CTO博客 下圖摘自此鏈接

自己瞭解一下,一般來說都是 DNS遞歸查詢和迭代查詢的區別 - Dream home - CSDN博客 這樣的:

基本上來說到之類大家應該對dns有比較深入的瞭解了。

最後大家可以參考:DNS介紹與原理 - UnixFBI 運維特工

這文章的最後使用命令跟蹤了dns的解析過程, 大家可以跟著瞭解一下。

基本上了解到這裡就差不多了。

//對dns的一個應答過程的詳解

查詢流程詳解:

(1)客戶端瀏覽器中鍵入magedu.com發出查詢請求,瀏覽器將調用本地stub resolver解析器(存根解析器)去本地(/etc/hosts)查詢有沒有相關的記錄,有則返回結果

(2)本地hosts沒有查到,則查找本地DNS解析器緩存,如果查到則直接返回,完成域名解析。

(3)如果hosts與本地DNS解析器緩存都沒查詢到,則查詢TCP/IP參數中設置的首選DNS伺服器(即本地DNS伺服器),此伺服器收到查詢請求時首先檢查是否是自己負責的區域,如果是則返回權威應答給客戶機,完成域名解析。

(4)如果要查詢的域名,不由本地DNS伺服器區域解析,但該DNS伺服器已緩存了此網址映射關係,則調用這個IP地址映射,完成域名解析,此解析不具有權威性

(5)如果本地DNS伺服器本地區域文件與緩存解析都失效,則根據本地DNS伺服器的設置(沒有設置轉發器)進行查詢,如果未用轉發模式,本地DNS就把請求發至13臺根DNS,根DNS伺服器收到請求後會判斷這個域名(.com)是誰來授權管理,並會返回一個負責該頂級域名伺服器的一個IP。本地DNS伺服器收到IP信息後,將會聯繫負責 .com域的這臺伺服器。這臺負責 .com域的伺服器收到請求後,如果自己無法解析,它就會找一個管理 .com域的下一級DNS伺服器地址(magedu.com)給本地DNS伺服器。當本地DNS伺服器收到這個地址後,就會找magedu.com域伺服器,重複上面的動作進行查詢,直至找到magedu.com主機。

(6)如果用的是轉發模式(設置轉發器),此DNS伺服器就會把請求轉發至上一級ISP DNS伺服器,由上一級伺服器進行解析,上一級伺服器如果不能解析,或找根DNS或把轉請求轉至上上級,以此循環。不管是本地DNS伺服器用是是轉發,還是根提示,最後都是把結果返回給本地DNS伺服器,由此DNS伺服器再返回給客戶機。

註:從客戶端到本地DNS伺服器是屬於遞歸查詢,而DNS伺服器之間就是迭代查詢。

上面這段話摘自 :Linux運維實戰之DNS基礎-技術日誌-51CTO博客 感覺這個講得比較好了。

由於評論中隊權威應答這塊有疑問,我之前也沒瞭解過,所以去網上了解了一下,如果沒理解錯的話,應該就是上文所說的,如果此次dns查詢是在dns伺服器的緩存中,那麼返回的就不是權威應答,如果是直接查到存有該域名映射的伺服器,那麼返回的就是權威應答。(也就是說,二次查詢的肯定是非權威應答)

這裡我有點不太確定,因為我試著用wireshark去抓dns的包,發現並沒有出現

結合Wireshark分析DNS 協議 和這篇文章中一樣的權威應答區域。 不知道是因為我這個本地的dns伺服器(湖南長沙電信)緩存的特別多,還是咋地。反正我沒見過權威應答區域就不太相信這個。

然後是SOA:

我在 DNS的SOA記錄-Csslinux-51CTO博客 這裡學習了一下:

總結一下就是 記錄了改域名的一些時間參數配置,還有管理者之類的信息。我就不抄過來了。。

不知道自己關於soa和權威應答著方面的知識理解錯了沒有,歡迎指正。

歡迎交流討論。


推薦閱讀:
相關文章