DNS:域名系統

域名系統(DNS)是一種用於TCP/IP應用程序的分佈式數據庫,它提供主機名字和IP地址之間的轉換及有關電子郵件的選路信息。
分佈式是指在Internet上的單個站點不能擁有全部的信息。每一個站點保留它本身信息數據庫,並運行給一個服務器程序供Internet上的其餘系統查詢。DNS提供了容許服務器和客戶程序相互通訊的協議。數據庫

1. 數據結構

DNS的名字空間和UNix的文件系統類似,也具備層次結構。如圖顯示了這種層次的組織形式:緩存

每一個節點(圓圈)有一個至多63個字符長的標示(不區分大小寫)命名樹上任何一個結點的域名就是將從該結點到最高層的域名串聯起來,中間使用一個點「.」分隔這些域名(Unix文件系統路徑是從樹根依次向下造成的)。
域名樹中的每一個結點必須有一個惟一的域名,但域名樹種的不一樣結點可以使用相同的標識。
以點「.」結尾的域名稱爲絕對域名或徹底合格的域名FQDN(Full Qualified Domain Name),例如sun.tuc.noao.edu.。若是一個域名不以點結尾,則認爲該域名是不徹底的。
頂級域名被分爲三個部分:
(1)arpa是一個用做地址到名字轉換的特殊域
(2)7個3字符長的普通域(組織域)
(3)全部2字符長的域是定義的國家代碼,國家域(地理域)
許多國家將他們的二級域組織成相似於普通域的結構。例如,.ac.uk和.co.uk等服務器

一個獨立管理的DNS子樹稱爲一個區域。一個場景的區域時一個二級域,如noao.edu。許多二級域將他們的區域劃分紅更小的區域。
一旦一個區域的受權機構被委派後,由它負責向該區域提供多個名字服務器。當一個新系統加入到一個區域中時,該區域的DNS管理者爲該新系統申請一個域名和一個IP地址,並將它們加到名字服務器的數據庫中。數據結構

2. DNS報文格式

DNS定義了一個用於查詢和響應的報文格式。如圖顯示這個報文的整體格式:分佈式

這個報文由12字節長的首部和4個長度可變的字段組成。
(1)標識:由客戶端設置並由服務器返回結果,客戶程序經過它來肯定響應與查詢是否匹配。
(2)標誌:16bit的標誌字段被劃分爲若干個字段,如圖:函數

QR:1bit字段,0標識查詢報文,1標識響應報文3d

opcode:4bit字段,0標準查詢,1反向查詢,2服務器狀態請求
AA:1bit字段,表示受權回答(Authoritative Answer),該名字服務器是受權於該域的。
TC:1bit字段,表示可截斷的(truncated),使用UDP時,它表示當應答的總長度超過512字節時,只返回前512個字節。
RD:1bit字段,表示指望遞歸(Recursion Desired)。該比特能在一個查詢中設置,並在響應中返回。這個標誌告訴名字服務器必須處理這個查詢,也稱爲一個遞歸查詢。若是該位爲1,且被請求的名字服務器沒有一個受權回答,它就返回一個能解答該查詢的其餘名字服務器列表,這稱爲迭代查詢。
RA:1bit字段,標示可用遞歸若是名字服務器支持遞歸查詢,則在響應中將該比特設置爲1。
zero:隨後的3bit字段必須是0
rcode:4bit返回碼字段。0沒有差錯,3名字差錯(名字差錯只有從一個受權名字服務器上返回,它表示在查詢中指定的域名不存在)
(3)隨後的4個16bit字段說明最後4個變長字段中包含的條目數。對於查詢報文,問題數一般是1,而其餘3想則均爲0。相似地,對於應答報文,回答數至少是1,剩下的兩項可使0或非0。code

DNS請求報文:blog

DNS響應報文:遞歸

 

 2.1 DNS查詢報文中的問題部分

 問題部分中每一個問題的格式如圖,一般只有一個問題:

查詢名是要查找的名字,它是一個或多個標識符的序列,每一個標識符以首字節的計數值來講明隨後標識符的字節長度,每一個名字以最後字節爲0結束。計數字節的值必須是0~63的數,由於標識符的最大長度爲63。
好比存儲genini.tuc.noao.edu,如圖

每一個問題有一個查詢類型,而每一個響應也有一個類型。大約有20個不一樣的類型值,只有兩個能用於查詢類型:A類型,標示指望得到查詢名的IP地址;PTR查詢則請求得到一個IP地址對應的域名。

實際抓包報文:

 

2.2 DNS響應報文中的資源記錄部分

 DNS報文中最後的三個字段,回答字段、受權字段、附加信息字段,均採用一種稱爲資源記錄RR的相同格式。如圖顯示了資源記錄的格式:

 

(1)域名:記錄中資源數據對應的名字,格式和前面介紹的查詢名字段格式相同
(2)類型:類型說明RR的類型碼,它的值和前面介紹的查詢類型值時同樣的。類一般爲1,指Internet數據
(3)生存時間:客戶程序保留該資源記錄的秒數
(4)資源數據長度:說明資源數據的數量,該數據的格式依賴於類型字段的值,對於類型A資源數據是4字節的IP地址

實際抓包報文:

2.3 高速緩存

爲了減小DNS的通訊量,全部的名字服務器均使用高速緩存,在標準的Unix實現中,高速緩存是有名字服務器而不是由名字解析器維護的。
既然名字解析器做爲每一個應用的一部分,而應用又不可能總處於工做狀態,所以將高速緩存放在只要系統(名字服務器)處於工做狀態就能起做用的程序中顯得很重要。
這樣任何一個使用名字服務器的應用都可得到高速緩存,在該站點使用這個名字服務器的任何其餘主機也能共享服務器的高速緩存。

3. 總結

DNS名字服務器使用的熟知端口號不管是對UDP仍是TCP都是53,這意味着DNS均支持UDP和TCP訪問。
當名字解析器發出一個查詢請求,而且返回響應中的TC(刪減標誌)比特被設置爲1時,它就意味着響應的長度超過了512個字節,而僅返回前512個字節。在遇到這種狀況時,名字解析器一般使用TCp重發原來的查詢請求,它將容許返回的響應超過512個字節。既然TCP能將用戶的數據流分爲一些報文段,它就能用多個報文段來傳送任意長度的用戶數據。
既然DNS主要使用UDP,不管是名字解析器仍是名字服務器都必須本身處理超時和重傳。

例子,啓動Rlogin客戶程序,而後鏈接到一個位於其餘域的Rlogin服務器。(1)客戶程序啓動後,調用它的名字解析器函數將咱們鍵入的主機名轉換爲一個IP地址。一個A類型的查詢請求被送往一個根服務器。(2)由根服務器返回的響應中包含爲該服務器所在域服務的名字服務器名。(3)客戶端的名字解析器將想改服務器的名字服務器重發上述A類型查詢,這個查詢一般是將指望遞歸標誌設置爲1。(4)返回的應答中包含Rlogin服務器的IP地址。(5)Rlogin客戶和Rlogin服務器創建一個TCP鏈接。(6)Rlogin服務器收到來自客戶的鏈接請求後,調用它的名字解析器經過TCp鏈接請求中的IP地址得到客戶主機名。這是PTR查詢請求,由一個根名字服務器垂類。這個根名字服務器可與不一樣於步驟(1)中客戶使用的根名字服務器。(7)這個根名字服務器的響應中含有爲客戶的in-addr.arpa域的名字服務器。(8)服務器上的名字解析器將向客戶的名字服務器重傳上述PTR查詢。(9)返回的PTR應答中含有客戶主機的FQDN。(10)服務器的名字解析器向客戶的名字服務器發送一個A類型查詢請求,查找前一步返回的名字對應的IP地址。(11)從客戶的名字服務器返回的響應含有客戶主機的A記錄。Rlogin服務器將客戶的TCP鏈接請求中的IP地址與A記錄做比較。

相關文章
相關標籤/搜索