一篇文章讓你了解DNS


目錄

  • 什么是DNS

  • DNS的特點

  • DNS的工作原理

  • 反向解析

  • DNS的報文格式

 


一、什么是DNS

        DNS--Domain Name System,域名系統。

        互聯網中計算機之間進行通訊,數據怎么走,走向哪里,這些都需要根據IP地址來指引,再如客戶端訪問服務器,客戶端必須知道服務器的IP地址才能將數據正確地發送過去,這么重要的IP地址當然是必不可少的。我們知道現在的IP地址都是由32位的二進制數組成的,為了便於人們記憶,出現了十進制的表示方法,如192.168.0.1,但是人們對數字的記憶太困難了,更何況將來的IPV6(128位)時代,要記憶這些IP地址根本是不可能的。所以出現了更便於人記憶的域名來替代IP的記憶,如www.baidu.com,計算機只需要將域名和IP轉換,就可以通過域名來訪問其他的計算機。其中域名和IP轉換工作就是DNS完成的,由於DNS極其重要,所以DNS在計算機網絡中擁有不可缺少的地位。

        DNS本質是用於TCP/IP應用程序的數據庫,該數據庫中記錄了域名和IP的對應關系,同時也是一種用於客戶端和服務端通訊的應用層的計算機網絡協議。計算機要將域名解析成IP(或者將IP反解成域名),需要先去詢問DNS服務器的數據庫,查詢得到域名和IP的對應關系,才能開始使用IP地址進行計算機通訊。 

        目前提供DNS功能的常用軟件為BIND, 該軟件產生的服務名叫做named。         

 


二、DNS的特點

        DNS服務器具有分布式、階層式的特點。

        全球有那么多的計算機,要讓一台服務器記錄所有的域名和IP的對應關系的數據庫,那這台服務器肯定要炸了,因此人們想到了將這些龐大的數據庫分布式地存儲於不同的計算機中,讓他們共同提供查詢域名和IP的功能,目前全球共有13台根服務器,其中1台主根服務器,12台輔助根服務器

        同時為了方便管理這些域名,人們規定域名的命名采用分層的結構,即采用類似樹狀結構的命名方式。在這顆倒狀樹中,每個節點有一個最多63個字符的標識,樹的最頂端的根用 . 來標識,從最底部的節點到最頂部的根節點的標識串聯起來,不同節點的標識之間也用 . 來分割,這樣的一組就表示一個完整的域名(FQDN),例如www.baidu.com.,不過人們通常將最后. 去掉,即www.baidu.com,這是不完整域名。

2.1 域名格式        

blob.png

        .  ---root

        TLD---頂級域名(top-level domain)

            com     商業機構

            org     其他組織

            edu     教育機構

            ...     等等

        SLD---次級域名(second-level domain)

            用戶可以注冊SLD

            baidu

        host--主機名(三級域名)

            用戶可以任意分配

            www

2.2 域名授權

        DNS的一個重要特征就是域名授權,整個DNS系統中只有一個機構--網絡信息中心NIC有權負責頂級域名的分配和指派能夠划分次級域名的授權機構。

        一棵獨立管理的DNS子樹就是一個區域(zone),一個區域可以再划分更小的區域,例如com.就是一個區域,com.下可以再划分baidu.com.子區域,一個區域被委派了授權機構之后,該機構需要搭建DNS服務器,記錄該區域下的子域名和IP的對應關系,並且該授權機構可以再委派該區域下的子區域的DNS系統,這樣整個DNS結構會是這樣的,根服務器記錄授權的頂級域名的域名和IP的對應關系數據庫,頂級域名服務器記錄授權的次級域名的域名和IP的對應關系數據庫,這樣依次向下委派,就形成了階梯式的管理結構,減輕了每個授權DNS服務器的負載。

2.3 DNS緩存

        DNS的另一個特征就是建立緩存,當一個DNS服務器查詢到域名和IP的映射關系后,會將該映射數據寫入自己的緩存中,如果其他的主機再來詢問相同的映射關系時,直接讀取自己的緩存,而不需要再去詢問其他服務器了。

2.4 DNS的TCP和UDP

        我們知道DNS是同時監聽TCP和UDP的53號端口,那么DNS什么時候使用UDP,什么時候使用TCP呢?

        DNS在大部分情況下是使用UDP的,但是UDP能夠傳輸的DNS報文最大是512字節,如果客戶端在得到響應報文后得知該響應報文不止512字節的時候,客戶端會重新使用TCP發送請求報文,DNS服務器使用TCP將大於512字節的報文分段傳輸,這是其中一種使用TCP的情況;

        另外一種使用TCP的情況是,主從DNS服務器在進行數據庫同步時,那么龐大的數據量,slave是怎么從master哪里更新的,當然使用的是TCP分段傳輸了。

 

 


三、DNS的工作原理

        DNS的解析過程中最重要的兩個概念是遞歸查詢和迭代查詢,

        當你在瀏覽器輸入www.baidu.com的時候,先查詢瀏覽器的緩存中是否有域名和IP的映射關系,如果沒有則查詢本地hosts文件,然后查詢客戶端DNS緩存(如果存在客戶端緩存的話),下一步是本地DNS服務器,檢查本地DNS服務器的hosts文件和DNS緩存,如果還沒有則下一步是ISP,ISP檢查緩存還是沒有;則ISP向根服務器發起詢問請求,根服務器向ISP返回com.的IP地址,ISP向com.發起詢問請求,com.向ISP返回baidu.com.的IP,則ISP再想baidu.com.發起詢問,剛好baidu.com.有www.baidu.com.的IP,向ISP返回該IP地址,ISP得到www.baidu.com的IP后,將IP返回本地DNS服務器,本地DNS服務器在返回給客戶端。這樣完成整個流程。

blob.png

DNS中的遞歸和迭代的重要區別是:遞歸是查詢者變化,迭代是查詢者不變。

 


四、反向解析

        我們熟知的DNS的由域名獲得IP為正向解析,但是DNS也提供了由IP獲得域名的反向解析。這里補充一點,在頂級域中,有一個特殊的域名arpa,它有唯一的一個子域in-addr,其實in-addr.arpa域名是為反向解析做准備的。當一個DNS系統獲得域名授權之后,同時也會獲得in-addr.arpa的授權,假如某域名的IP地址為192.168.138.1,在DNS域名樹中會這樣記錄該IP,in-addr下划分了192子域名,192下划分了168子域名,168下划分了138子域名,138下記錄了1的映射關系,由於DNS的完整域名是從底往上串聯的,因此就成了1.138.168.192.in-addr.arpa.。

        因此當客戶端反向解析192.168.138.1的時候,其實就是正向解析1.138.168.192.in-addr.arpa.,然后就是正向解析的正常流程,最后會訪問到標識為138的DNS服務器獲取該IP和域名的映射關系。總之,反向解析的本質還是正向解析。

blob.png


五、DNS的報文格式

blob.png

        上圖是DNS的一般報文格式:

標識-----兩個字節,是請求報文和應答報文的對應id,用來區分應答報文是哪個請求報文的響應;

標志-----進一步分為不同的字段,分別為

         QR-----一位,0表示該報文為查詢報文,1表示響應報文

         opcode-四位,操作碼字段,0表示正向解析,1表示反向解析

         AA-----一位,授權回答,如果是響應報文設定,說明該響應是本域名的DNS服務器發出的

         TC-----一位,可截斷,使用UDP時,如果響應報文的長度超過512字節,則只返回前512字節。

         RD-----一位,遞歸期望,1表示DNS服務器必須遞歸處理該請求報文

         RA-----一位,遞歸可用,在響應報文中設定,1表示該域名的DNS服務器支持遞歸查詢

         zero---三位,保留字段,必須全為0

         rcode--四位,響應碼,返回一些正確,格式錯誤等信息

問題數

資源記錄數

授權資源記錄數

額外資源記錄數

    -----以上字段分別表示最后那四個可變字段的統計記錄條目數

上邊的12個字節字段是DNS報文的包頭部分

blob.png

        上圖是查詢問題部分的字段格式:

查詢名----表示要查詢的域名

          查詢名是由一連串的序列組成的,例如www.baidu.com.在報文中的表示方式為3www5baidu3com0,數字表示計數,因為域名樹每個節點的字符數最多為63,所以數字的范圍為0~63,最后都以0結尾,表示root;

查詢類型--表示要查詢什么樣的記錄,響應報文就返回什么類型的記錄;常見的記錄類型有:

          A-----IP地址

          NS----name server,域名的DNS服務器

          CNAME-別名

          PRT---指針類型,用於反向解析

          MX----域名的郵件服務器

查詢類----通常為1,表示查詢的是互聯網類型,即我們經常在查詢結果中看到的IN

blob.png

        上圖表示的回答、授權、額外信息三個可變字段的一般格式,用於響應報文

域名-----指定響應的域名,存儲格式和上邊的一樣

類型-----指定記錄類型

類-------一般為1,表示互聯網類型,即IN

生存時間-表示該記錄可以再客戶端的緩存中存放多長的時間

資源數據長度-表示返回的記錄的數據長度,例如A記錄,則數據長度為4字節的IP地址長度

資源數據-表示具體的記錄結果



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM