【10】TCP/IP協議族詳解-DNS(域名系統)

聲明:本博客參考自《TCP/IP詳解卷一:協議》

1. 概述

域名系統(DNS)是一種用於TCP/IP應用程序的分佈式數據庫。它提供主機名和IP地址之間的轉換及有關電子郵件的選路信息。互聯網上的單個站點(大學、公司等)不能用於所有信息,它們只保留它自己的信息數據庫,並運行一個服務器程序供互聯網上的其它客戶系統訪問。

從應用的角度來說,DNS包括兩個部分:地址解析器和名字服務器。地址解析器在本地完成,名字服務器就是上面提到的分佈式數據庫。在linux主機中解析器通過兩個函數來訪問:gethostbyname()-通過主機名返回IP。gethostbyaddr()-通過IP返回主機名。解析器是應用程序的一部分,跟操作系統的內核無關。內核中的TCP/IP協議族是不知道解析器的。

2. DNS

2.1 基礎

DNS的名字空間和linux的文件系統類似,也具有層次結構。每個結點有一個至多63個字符長度的標識。樹根是沒有任何標識的特殊結點。命名標識中一律不區分大小寫。命名樹上任何一個結點的域名就是將從該結點到最高層的域名串連起來,中間使用一個點“.”分隔這些域名。域名樹中的每個結點必須有唯一的域名,但域名樹中的不同結點可使用相同的標識。

以點"."結尾的域名稱爲絕對域名或完全合格域名FQDN(Full Qualified Domain Name),例如sun.tuc.noao.edu.

頂級域名被分爲三個部分:

①arpa是一個用作地址到名字轉換的特殊域,涉及到IP到域名的轉換。

②7個3字符長的普通域,也稱爲組織域。

③所有2字符的域稱爲國家域或者地理域。

一個獨立管理的DNS子樹稱爲一個區域(zone)。一個常見的區域是二級域,如nano.edu。許多二級域將它們的區域劃分成更小的區域。一旦一個區域的授權機構被委派後,由它負責向該區域提供多個名字服務器。當一個新系統加入到一個區域中時,該區域的 D N S管理者爲該新系統申請一個域名和一個 I P地址,並將它們加到名字服務器的數據庫中。

一個名字服務器負責一個或多個區域。一個區域的管理者必須爲該區域提供一個主名字服務器和至少一個輔助名字服務器。主、輔名字服務器必須是獨立和冗餘的,以便當某個名字服務器發生故障時不會影響該區域的名字服務。主、輔名字服務器的主要區別在於主名字服務器從磁盤文件中調入該區域的所有信息,而輔名字服務器則從主服務器調入所有信息。我們將輔名字服務器從主服務器調入信息稱爲區域傳送。

當一個新主機加入一個區域時,區域管理者將適當的信息(最少包括名字和 I P地址)加入到運行在主名字服務器上的一個磁盤文件中,然後通知主名字服務器重新調入它的配置文件。輔名字服務器定時(通常是每隔 3小時)向主名字服務器詢問是否有新數據。如果有新數據,則通過區域傳送方式獲得新數據。

當一個名字服務器沒有請求信息時,它會請求根服務器(每個主名字服務器都存有根服務器的IP地址),以完成它需要提供的服務。

DNS中有一個超高速緩存,當一個名字服務器收到有關主機名到IP地址的映射之後,它會將信息放入高速緩存中,這樣以後遇到相同的請求就可以之間訪問。

2.2 DNS報文格式

這個報文(查詢和響應)由12字節長的首部和4個長度可變的字段組成。

標識字段用客戶設置並由服務器返回。客戶通過它可以來確認響應和查詢是否匹配。

16bit的標誌字段的劃分如下:

①QR:0-查詢報文。1-響應報文

②opcode:0-標準查詢,1-反向查詢,2-服務器狀態請求

③AA:表示“授權回答”。該名字服務器是授權於該域的。

③TC:表示“可截斷的(truncated)”。使用UDP時,它表示應答的總長度超過512字節時,只返回前512字節。

④RD:表示"期望遞歸(recursion desired)"。該比特能在一個查詢中設置,並在響應中返回。這個標誌告訴名字服務器必須處理這個查詢,也稱這種查詢爲遞歸查詢。如果該位置0,並且被請求的名字服務器沒有一個授權回答,它就返回一個能解答該查詢的
其他名字服務器列表,這稱爲迭代查詢。

⑤RA:表示"可用遞歸"。如果名字服務器支持遞歸查詢,則在響應中將該比特置1。

⑥rcode:4bit的返回碼字段。0-沒有差錯。3-名字差錯。

查詢報文中,問題數通常爲1,其它三項則爲0。類似地,在應答報文,回答(資源記錄)數至少爲1,剩下的兩項可以是0或非0。

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

問題部分的格式如下

①查詢名是要查找的名字,它是一個或多個標識符的序列。每個標識符以首字節的計數值來說明隨後標識符的字節長度,每個名字以最後字節爲 0結束,長度爲0的標識符是根標識符。計數字節的值必須是 0 ~ 6 3的數,因爲標識符的最大長度僅爲 6 3。不像我們已經看到的許多其他報文格式,該字段無需以整32 bit邊界結束,即無需填充字節。下圖是gemini.tuc.noao.edu的儲存方式:

②查詢類型。每個問題有一個查詢類型,而每個響應也有一個類型。查詢類型是類型的超集。

最常見的查詢類型爲A和PTR,分別對應與域名到IP地址和IP地址到域名的轉換。

③查詢類。這個值通常爲1,指互聯網的地址。

2.2.2 DNS響應報文中的資源記錄數

DNS報文中最後的三個字段:回答字段、授權字段、附加信息字段,均採用一種稱爲資源記錄RR(Resource Record)的相同格式。具體的格式如下圖所示:

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

②類型字段。說明RR的類型碼。與查詢類型值是一樣的。

③類。通常爲1,指Internet數據。

④生存時間。指客戶端保留該記錄的秒數。通常爲2天。

⑤資源數據長度。說明資源數據的數量。對於A記錄(IP地址),資源數據長度爲4,資源數據爲4字節的IP地址。

指針查詢-給定一個IP地址,返回該地址對於的域名。

2.3 資源記錄說明

①A:一個A記錄定義一個IP地址,它存儲32bit的二進制數。

②PTR:指針記錄用於指針查詢。通過IP地址獲得域名。

③CNAME:表示“規範域名”。它用來表示一個域名,而有規範名字的域名通常稱爲別名(alias)。某些FTP服務器使用它向其它的系統提供一個易於記憶的別名。

④INFO:表示主機信息,保存主機CPU和操作系統的兩個字符串。

⑤MX:郵件交換記錄。

⑥NS:名字服務器記錄。它說明一個域的授權名字服務器。

2.4 其它要點

注意DNS可以使用UDP也可以使用TCP,當名字解析器發出一個查詢請求,並且返回響應的TC(截斷標誌)比特被設置爲1時,它就意味着響應的長度超過512個字節,而僅返回512個字節。在遇到這種情況時,名字解析器通常使用TCP重發原理的查詢請求,它將運行返回的響應超過512字節。此外,輔助名字服務器從主服務器進行區域傳輸時也會使用TCP。

通過一張圖說明DNS的運行過程:

上圖是遠程登陸協議的DNS運行過程:

(1)首先客戶端向名字服務器發出A類型的DNS請求(注意這裏沒有畫出區域的名字服務器)。這個請求一般會被髮送到根服務器上。

(2)根服務器返回一個NS回答,可以解析客戶端要求域名的名字服務器記錄。

(3)客戶端向指定名字服務器發送A類型請求,獲取Rlogin服務器域名。

(4)名字服務器返回一個A類型的應答。

(5)Rlogin客戶端向Rlogin服務器發出TCP連接。

(6)Rlogin服務器需要對Rlogin客戶端進行檢查。它向自己所在網絡的根名字服務器發出一個PTR類型請求,以獲取域名。TCP連接已經獲得Rlogin客戶端IP地址。

(7)根名字服務器返回NS回答,返回可以解析客戶端要求域名的名字服務器。

(8) Rlogin服務器向指定名字服務器發出PTR類型的請求。

(9)名字服務器返回指定的域名給Rlogin服務器。

(10)Rlogin服務器通過返回的域名,再次發出A類型的查詢獲取IP地址。

(11)名字服務器返回A類型的應答。Rlogin服務器對比域名和IP,通過檢查,允許客戶端的連接。

3. 小結

DNS是任何與互聯網相連主機必不可少的一部分,同時它也廣泛用於專用的互聯網。層次樹是組成DNS域名空間的基本組織形式。應用程序通過名字解析器將一個主機名轉換爲一個 IP地址,也可將一個IP地址轉換爲與之對應的主機名。名字解析器將向一個本地名字服務器發出查詢請求,這個名字服務器可能通過某個根名字服務器或其他名字服務器來完成這個查詢。所有的DNS查詢和響應都有相同的報文格式。這個報文格式中包含查詢請求和可能的回答資源記錄、授權資源記錄和附加資源錄。

 

 

 

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