目錄數據庫
什麼是DNS數組
DNS的特色瀏覽器
DNS的工做原理緩存
反向解析服務器
DNS的報文格式網絡
1、什麼是DNS
dom
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在計算機網絡中擁有不可缺乏的地位。ide
DNS本質是用於TCP/IP應用程序的數據庫,該數據庫中記錄了域名和IP的對應關係,同時也是一種用於客戶端和服務端通信的應用層的計算機網絡協議。計算機要將域名解析成IP(或者將IP反解成域名),須要先去詢問DNS服務器的數據庫,查詢獲得域名和IP的對應關係,才能開始使用IP地址進行計算機通信。 spa
目前提供DNS功能的經常使用軟件爲BIND, 該軟件產生的服務名叫作named。
2、DNS的特色
DNS服務器具備分佈式、階層式的特色。
全球有那麼多的計算機,要讓一臺服務器記錄全部的域名和IP的對應關係的數據庫,那這臺服務器確定要炸了,所以人們想到了將這些龐大的數據庫分佈式地存儲於不一樣的計算機中,讓他們共同提供查詢域名和IP的功能,目前全球共有13臺根服務器,其中1臺主根服務器,12臺輔助根服務器;
同時爲了方便管理這些域名,人們規定域名的命名採用分層的結構,即採用相似樹狀結構的命名方式。在這顆倒狀樹中,每一個節點有一個最多63個字符的標識,樹的最頂端的根用 . 來標識,從最底部的節點到最頂部的根節點的標識串聯起來,不一樣節點的標識之間也用 . 來分割,這樣的一組就表示一個完整的域名(FQDN),例如www.baidu.com.,不過人們一般將最後. 去掉,即www.baidu.com,這是不完整域名。
2.1 域名格式
. ---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分段傳輸了。
3、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服務器在返回給客戶端。這樣完成整個流程。
DNS中的遞歸和迭代的重要區別是:遞歸是查詢者變化,迭代是查詢者不變。
4、反向解析
咱們熟知的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和域名的映射關係。總之,反向解析的本質仍是正向解析。
5、DNS的報文格式
上圖是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報文的包頭部分
上圖是查詢問題部分的字段格式:
查詢名----表示要查詢的域名
查詢名是由一連串的序列組成的,例如www.baidu.com.在報文中的表示方式爲3www5baidu3com0,數字表示計數,由於域名樹每一個節點的字符數最多爲63,因此數字的範圍爲0~63,最後都以0結尾,表示root;
查詢類型--表示要查詢什麼樣的記錄,響應報文就返回什麼類型的記錄;常見的記錄類型有:
A-----IP地址
NS----name server,域名的DNS服務器
CNAME-別名
PRT---指針類型,用於反向解析
MX----域名的郵件服務器
查詢類----一般爲1,表示查詢的是互聯網類型,即咱們常常在查詢結果中看到的IN
上圖表示的回答、受權、額外信息三個可變字段的通常格式,用於響應報文
域名-----指定響應的域名,存儲格式和上邊的同樣
類型-----指定記錄類型
類-------通常爲1,表示互聯網類型,即IN
生存時間-表示該記錄能夠再客戶端的緩存中存放多長的時間
資源數據長度-表示返回的記錄的數據長度,例如A記錄,則數據長度爲4字節的IP地址長度
資源數據-表示具體的記錄結果