DNS是域名系統(DomainNameSystem)的縮寫,該系統用於命名組織到域層次結構中的計算機和網絡服務。域名是由圓點分開一串單詞或縮寫組成的,每個域名都對應一個唯一的IP地址,在Internet上域名與IP地址之間是一一對應的,DNS就是進行域名解析的服務器。DNS命名用於Internet等TCP/IP網絡中,經過用戶友好的名稱查找計算機和服務。DNS是因特網的一項核心服務,它做爲能夠將域名和IP地址相互映射的一個分佈式數據庫。數據庫
DNS協議就是用來將域名解析到IP地址的一種協議,固然,也能夠將IP地址轉換爲域名的一種協議。 緩存
一個組織的系統管理機構, 維護系統內的每一個主機的IP和主機名的對應關係安全
若是新計算機接入網絡,將這個信息註冊到數據庫中服務器
用戶輸入域名的時候,會自動查詢DNS服務器,由DNS服務器檢索數據庫,獲得對應的IP地址網絡
咱們能夠經過命令查看本身的hosts文件:cat /etc/hosts,在域名解析的過程當中仍然會優先查找hosts文件的內容。架構
DNS協議基於UDP和TCP協議的,端口號53,用戶到服務器採用UDP,DNS服務器通訊採用TCP 分佈式
大型運營商、互聯網機構等會向公衆提供免費的DNS服務,例如,谷歌的8.8.8.8 8.8.4.4 阿里巴巴223.5.5.5 223.6.6.6 網站
若是DNS服務器down掉了,那麼你只能經過IP地址來訪問服務了spa
域名系統必需要保持惟一性。3d
爲了達到惟一性的目的,因特網在命名的時候採用了層次結構的命名方法:
1. 每個域名(本文只討論英文域名)都是一個標號序列(labels),用字母(A-Z,a-z,大小寫等價)、數字(0-9)和鏈接符(-)組成
2. 標號序列總長度不能超過255個字符,它由點號分割成一個個的標號(label)
3. 每一個標號應該在63個字符以內,每一個標號均可以當作一個層次的域名。
4. 級別最低的域名寫在左邊,級別最高的域名寫在右邊
關於域名的層次結構,以下圖所示:
說明:www.baidu.com
1. com: 一級域名. 表示這是一個企業域名。同級的還有 「net」(網絡提供商), 「org」(⾮非盈利組織) 等。
2. baidu: 二級域名,指公司名。
3. www: 只是一種習慣用法。
例如:xxx.yyy.zzz.com
從右邊的com是頂級域名,到左依次是:二級域名,三級域名,四級域名
域名的分級:域名能夠劃分爲各個子域,子域還能夠繼續劃分爲子域的子域,這樣就造成了頂級域、二級域、三級域等。
其中頂級域名分爲:國家頂級域名、通用頂級域名、反向域名。
其中頂級域名分爲:國家頂級域名、通用頂級域名、反向域名。
國家頂級域名 | 中國:cn, 美國:us,英國uk… |
---|---|
通用頂級域名 | com公司企業,edu教育機構,gov政府部門,int國際組織,mil軍事部門 ,net網絡,org非盈利組織… |
反向域名 | arpa,用於PTR查詢(IP地址轉換爲域名) |
域名是分層結構,域名服務器也是對應的層級結構。
有了域名結構,還須要有一個東西去解析域名,域名須要由遍佈全世界的域名服務器去解析,域名服務器實際上就是裝有域名系統的主機。
由高向低進行層次劃分,可分爲如下幾大類:
一、根域名服務器
根服務器主要用來管理互聯網的主目錄。
全部根服務器均由美國政府受權的互聯網域名與號碼分配機構ICANN統一管理,負責全球互聯網域名根服務器、域名體系和IP地址等的管理。
全球共有13臺根服務器。1個爲根服務器架構主根服務器,放置在美國。其他12個均爲輔根服務器,其中9個放置在美國,歐洲2個,位於英國和瑞典,亞洲1個,位於日本。 聽說,在主根服務器系統上還有一個更高級的、隱藏着的母服務器,固然也在美國,而全世界全部的頂級域名都是由這臺母服務器來肯定的。
中國尚未本身的根服務器。中國大陸地區內只有6組根服務器鏡像(F,I(3臺),J,L)。當你對某個根服務器發出請求時,請求會被路由到該根服務器離你最近的鏡像服務器。
二、頂級域名服務器
負責管理全部的二級域名
三、權限域名服務器
負責管理一個區。當一個權限域名服務器還不能給出最後的查詢回答時,就會告訴查詢請求的DNS客戶進程,下一步應當找哪個權限域名服務器;
四、本地域名服務器
能夠當作是默認域名服務器,DNS客戶進程收到主機發送過來的域名後,就會最初向該域名服務器發送查詢請求
注:美國控制了域名解析的根服務器,也就控制了相應的全部域名和IP地址,這對於其餘國家來講顯然存在着致命的危險。若是哪一天美國屏蔽某國家的域名,那麼它們的IP地址將沒法解析出來,這些域名所指向的網站就會從互聯網中消失了。由此聯想,若是「.cn」從域名系統中刪除,甚至將分配給中國境內使用IP地址取消的話,中國將成爲國際主幹網的看客。
因此,從國家互聯網安全的角度來看,咱們是須要一個根服務器的。拋開中國政府屏蔽國外網站不說,爲了咱們整個國家的國防安全、在國際互聯網的話語權,中國互聯網絡信息中心CNNIC已經努力向ICANN申請爭取一臺根服務器,使中國的網站都能有所保障。
域名解析整體可分爲兩大步驟,
第一個步驟是本機向本地域名服務器發出一個DNS請求報文,報文裏攜帶須要查詢的域名;
第二個步驟是本地域名服務器向本機迴應一個DNS響應報文,裏面包含域名對應的IP地址。從下面對jocent.me
進行域名解析的報文中可明顯看出這兩大步驟。注意:第二大步驟中採用的是迭代查詢,實際上是包含了不少小步驟的,詳情見下面的流程分析。
域名解析整體可分爲一下過程:
(1) 輸入域名後, 先查找本身主機對應的域名服務器,域名服務器先查找本身的數據庫中的數據.
(2) 若是沒有, 就向上級域名服務器進行查找, 依次類推
(3) 最多回溯到根域名服務器, 確定能找到這個域名的IP地址
(4) 域名服務器自身也會進行一些緩存, 把曾經訪問過的域名和對應的IP地址緩存起來, 能夠加速查找過程
具體可描述以下:
1. 主機先向本地域名服務器進行遞歸查詢
2. 本地域名服務器採用迭代查詢,向一個根域名服務器進行查詢
3. 根域名服務器告訴本地域名服務器,下一次應該查詢的頂級域名服務器的IP地址
4. 本地域名服務器向頂級域名服務器進行查詢
5. 頂級域名服務器告訴本地域名服務器,下一步查詢權限服務器的IP地址
6. 本地域名服務器向權限服務器進行查詢
7. 權限服務器告訴本地域名服務器所查詢的主機的IP地址
8. 本地域名服務器最後把查詢結果告訴主機
遞歸查詢和迭代查詢
(1)遞歸查詢:本機向本地域名服務器發出一次查詢請求,就靜待最終的結果。若是本地域名服務器沒法解析,本身會以DNS客戶機的身份向其它域名服務器查詢,直到獲得最終的IP地址告訴本機
(2)迭代查詢:本地域名服務器向根域名服務器查詢,根域名服務器告訴它下一步到哪裏去查詢,而後它再去查,每次它都是以客戶機的身份去各個服務器查詢。
經過wireshark能夠查看實際抓包狀況,使用dns過濾
一、會話標識(2字節):是DNS報文的ID標識,對於請求報文和其對應的應答報文,這個字段是相同的,經過它能夠區分DNS應答報文是哪一個請求的響應
二、標誌(2字節):
QR(1bit) | 查詢/響應標誌,0爲查詢,1爲響應 |
opcode(4bit) | 0表示標準查詢,1表示反向查詢,2表示服務器狀態請求 |
AA(1bit) | 表示受權回答 |
TC(1bit) | 表示可截斷的 |
RD(1bit) | 表示指望遞歸 |
RA(1bit) | 表示可用遞歸 |
rcode(4bit) | 表示返回碼,0表示沒有差錯,3表示名字差錯,2表示服務器錯誤(Server Failure) |
三、數量字段(總共8字節):Questions、Answer RRs、Authority RRs、Additional RRs 各自表示後面的四個區域的數目。Questions表示查詢問題區域節的數量,Answers表示回答區域的數量,Authoritative namesversers表示受權區域的數量,Additional recoreds表示附加區域的數量
一、Queries區域
a》查詢名:長度不固定,且不使用填充字節,通常該字段表示的就是須要查詢的域名(若是是反向查詢,則爲IP,反向查詢即由IP地址反查域名),通常的格式以下圖所示。
b》查詢類型
類型 | 助記符 | 說明 |
1 | A | 由域名得到IPv4地址 |
2 | NS | 查詢域名服務器 |
5 | CNAME | 查詢規範名稱 |
6 | SOA | 開始受權 |
11 | WKS | 熟知服務 |
12 | PTR | 把IP地址轉換成域名 |
13 | HINFO | 主機信息 |
15 | MX | 郵件交換 |
28 | AAAA | 由域名得到IPv6地址 |
252 | AXFR | 傳送整個區的請求 |
255 | ANY | 對全部記錄的請求 |
c》查詢類:一般爲1,代表是Internet數據
二、資源記錄(RR)區域(包括回答區域,受權區域和附加區域)
該區域有三個,但格式都是同樣的。這三個區域分別是:回答區域,受權區域和附加區域
a》域名(2字節或不定長):它的格式和Queries區域的查詢名字字段是同樣的。有一點不一樣就是,當報文中域名重複出現的時候,該字段使用2個字節的偏移指針來表示。好比,在資源記錄中,域名一般是查詢問題部分的域名的重複,所以用2字節的指針來表示,具體格式是最前面的兩個高位是 11,用於識別指針。其他的14位從DNS報文的開始處計數(從0開始),指出該報文中的相應字節數。一個典型的例子,C00C
(1100000000001100,12正好是頭部的長度,其正好指向Queries區域的查詢名字字段)。
b》查詢類型:代表資源紀錄的類型,見1.2節的查詢類型表格所示
c》查詢類:對於Internet信息,老是IN
d》生存時間(TTL):以秒爲單位,表示的是資源記錄的生命週期,通常用於當地址解析程序取出資源記錄後決定保存及使用緩存數據的時間,它同時也能夠代表該資源記錄的穩定程度,極爲穩定的信息會被分配一個很大的值(好比86400,這是一天的秒數)。
e》資源數據:該字段是一個可變長字段,表示按照查詢段的要求返回的相關資源記錄的數據。能夠是Address(代表查詢報文想要的迴應是一個IP地址)或者CNAME(代表查詢報文想要的迴應是一個規範主機名)等。
ipconfig/flushdns
也能夠經過重啓DNS client 和 DHCP client 兩項服務清空DNS緩存ipconfig /displaydns
來查看DNS緩存的內容nslookup
命令能夠用來查看域名對應的IP地址