“在日常上網程序中,出于好記的原因,人們更喜歡在瀏覽器中輸入網站的域名?,而不是 IP 地址,比如想要訪問百度,則會輸入 www.baidu.com,而不是 202.108.22.5(或者百度網站的其他 IP),”
本文詳細介紹了 DNS 相關知識,包括 DNS 作業原理、如何提升域名決議速度、以及 DNS 記錄與報文等內容,
1. 域名與域名服務器?
在日常上網程序中,出于好記的原因,人們更喜歡在瀏覽器中輸入網站的域名?,而不是 IP 地址,比如想要訪問百度,則會輸入 www.baidu.com,而不是 202.108.22.5(或者百度網站的其他 IP),
然而計算機網路通信中所識別的標識并不是域名?,而是 IP 地址,因為其可以提供主機在互聯網中的位置資訊,而且是定長的,路由器等設備更容易處理,

為了折中人類和計算機不同的偏好,就出現了 DNS(Domain Name System,域名系統),其主要任務是根據域名查出對應的 IP 地址,
下面先介紹一下域名和域名服務器,之后再介紹 DNS 的作業原理,
域名由若干個英文字串組成(不區分大小寫),各字串之間用點號『.』分隔連接,其中越靠右的表示域名級別越高,
舉個例子,百度的域名為 www.baidu.com,其中 com 是頂級域名(一級域名),baidu 是二級域名,www 是三級域名,
域名服務器(也稱為 DNS 服務器)負責存盤域名和 IP 地址的映射關系,當我們需要獲取某個域名對應的 IP 地址時,只需要從域名服務器中查詢即可,
由于域名非常非常多,如果都存放在一臺域名服務器中,那么不僅查詢速度慢,服務器壓力大,而且難以保證服務的可靠性,因此,DNS 采用了分布式的設計方案,大量的域名服務器之間通過?層次方式組織,分布在全世界范圍內,
一般而言,域名服務器可以分為以下四類:
- 根域名服務器:最高層級的域名服務器,因特網上一共有 13 個根域名服務器(以英文字母 A 到 M 依序命名,格式為[a~m].root-servers.net),每個根域名服務器都知道所有頂級域名服務器的 IP 地址,比如知道負責 com 域的頂級域名服務器的 IP 地址,
- 頂級域名服務器:對于每個頂級域名,如 com、org、edu 等,都有對應的頂級域名服務器,頂級域名服務器知道其所管理的所有權威域名服務器的 IP 地址,比如負責 com 域的頂級域名服務器知道負責 baidu.com 域的權威域名服務器的 IP 地址,
- 權威域名服務器:一個網站需要將其域名和 IP 地址注冊到相應的權威域名服務器中,比如網站 www.baidu.com 的域名和 IP 地址就存盤在負責 baidu.com 域的權威域名服務器中,
- 本地域名服務器:本地域名服務器不屬于上述域名服務器的層次結構,但是它對域名系統非常重要,每個 ISP(如一個大學、一個公司)都有一個本地域名服務器(也叫默認域名服務器),具體在下一節中介紹,

技術薪資:底薪20K-100K+績效(最高底薪50%)
???????微信:HRdajisi
???????釘釘:馬新宇 9455510168
???????telegram:@youmiboss @HRdajisi
???????谷歌郵箱: [email protected]
???????Skype: live:.cid.d850fdc83f05e44a
????【安卓開發工程師】底薪+績效為最高底薪50%
????【IOS開發工程師】底薪+績效為最高底薪50%
????【運維開發工程師】底薪+績效為最高底薪50%??
????【UI設計師】底薪+績效為最高底薪50%??
????【前端react工程師】底薪+績效為最高底薪50%
????【后端go工程師】底薪+績效為最高底薪50%??
????【運維工程師】底薪+績效為最高底薪50%??
????【測驗工程師】底薪+績效為最高底薪50%
????【網路工程師CCIE/HCIE】底薪+績效為最高底薪50%??
????【網路安全工程師】底薪+績效為最高底薪50%
????【運維安全工程師】底薪+績效為最高底薪50%
????【資料中間件研發架構師】底薪+績效為最高底薪50%
????【游戲逆向開發工程師】底薪+績效為最高底薪50%
????【IT資產管理】運維方向底薪+績效為最高底薪50%
????【視頻剪輯創意設計師】底薪+績效為最高底薪50%
????【CDN 基礎架構研發】底薪+績效為最高底薪50%??
????【CDN 基礎架構(專家)】底薪+績效為最高底薪50%
????【DBA】(中_高_專家)底薪+績效為最高底薪50%??
????【GO開發工程師】底薪+績效為最高底薪50%??
????【大資料】(初_中_高)(架構師_專家)
????【JAVA轉GO/轉大資料/轉DBA】公司支持
????【PHP轉GO/轉大資料/轉DBA】公司支持
????【Python轉GO/轉大資料/轉DBA】公司支持
????【NET轉GO/轉大資料/轉DBA】公司支持
????【C++轉GO/轉大資料/轉DBA】公司支持
????【C#轉GO/轉大資料/轉DBA】公司支持
2. 域名決議流程?
知道了域名和域名服務器的基礎知識后,我們來了解一下域名決議的具體流程,以輸入百度域名為例,看看我們的主機是如何得到 www.baidu.com 的 IP 地址的,

- 請求主機向本地域名服務器發送 DNS 查詢報文,詢問 www.baidu.com 的 IP 地址是什么;
- 本地域名服務器轉發此查詢報文到根域名服務器;
- 根域名服務器發現要查詢的頂級域名為 com,于是向本地域名服務器發送回應報文,報文中封裝了負責 com 域的頂級域名服務器的 IP 地址串列;
- 本地域名服務器收到根域名服務器回應的報文后,選擇其中一個頂級域名服務器的 IP 地址,并向其發送查詢報文;
- 頂級域名服務器發現要查詢的二級域名為 baidu,于是向本地域名服務器發送回應報文,報文中封裝了負責baidu.com 域的權威域名服務器的 IP 地址串列;
- 本地域名服務器收到頂級域名服務器回應的報文后,選擇其中一個權威域名服務器的 IP 地址,并向其發送查詢報文;
- 權威域名服務器通過查詢資料庫,找到 www.baidau.com 的 IP 地址,并將此資訊封裝為一個回應報文,發送給本地域名服務器;
- 本地域名服務器將回應報文發送給原請求主機,我們的主機就知道了百度的 IP 地址,DNS 查詢程序結束,
在此程序中,請求主機與本地域名服務器之間的互動稱為遞回查詢?,而本地域名服務器與域名服務器層次結構中相關服務器的互動稱為迭代查詢,
請求主機是如何知道本地域名服務器的 IP 地址的?
當用戶插上網線或者連上 WIFI 后,電腦會通過 DHCP 協議分配一個 IP 地址,與此同時,也會獲取到本地域名服務器的 IP 地址!
本地域名服務器是如何知道根域名服務器的 IP 地址的?
因特網上一共有 13 個根域名服務器,它們的 IP 地址是固定不變的,因此被集成在了作業系統中,每臺電腦都知道!
為了決議出百度域名的 IP 地址,一共發送了 8 份 DNS 報文,用戶本來只是想和百度的服務器進行互動,卻耗費了大量的時間進行域名決議,如果每次都這樣搞,豈不是得慢死?因此就需要有一些提升域名決議速度的方式,
3. 提升域名決議速度?
(1)TCP or UDP
我們都知道,TCP 相較于 UDP 更可靠,但是速度更慢,
DNS 應該采用哪個傳輸層協議呢?
- 如果采用 TCP 協議,不僅需要三次握手建立連接,而且需要進行擁塞控制等,那么域名決議速度將慢成龜速,不利于用戶體驗,
- 如果采用 UDP 協議,萬一丟包了怎么辦?如果決議不出來 IP,怎么訪問目標網站?不利于用戶體驗,
實際上,DNS 主要使用 UDP,在特殊情況下,也會使用 TCP,埠號都是 53,
一般情況下,DNS 報文都比較小,只需要一個包就能承載所有資訊,既然只有一個包,就無需考慮哪個包未送達,直接重發一個包即可,因此無需使用 TCP 那樣復雜的協議,直接使用 UDP 協議,DNS 協議自己處理超時和重傳問題,以提供可靠性服務,
當然有的時候 DNS 報文比較大,比如回應報文中可能一個域名包含有很多 IP 記錄,當服務器回應時,會將報文中的 TC 標志位設定為 1,表示回應長度超過了 512 位元組,此報文僅僅回傳前 512 位元組,當我們的主機收到回應后,就會使用 TCP 協議重發原來的查詢請求,以獲取完整報文,
此外,為了防止本地域名服務器(主域名服務器)宕機而導致無法對域名進行決議,本機還需要設定一個輔助域名服務器,當主域名服務器宕機后,由輔助域名服務器繼續提供域名決議的服務,輔助域名服務器會定時(通常是每隔 3小時)向主服務器發送查詢請求以實作同步,此時傳輸資料較多,因而使用 TCP 協議,
(2)DNS 快取
即使采用 UDP 協議,但是如果每次都需要從根服務器開始一層一層的查詢,仍然很慢,且處于層級結構中的域名服務器將會接收到大量的請求,處理速度進一步降低!
為了提升域名決議速度并減輕域名服務器的壓力,DNS 廣泛使用了快取技術,
當用戶訪問了某個網站后,本地域名服務器會將決議出的域名和 IP 地址的映射關系快取一定時間,在快取過期前,用戶再訪問相同網站時,本地域名服務器就可以直接回傳查詢結果,而無需再去詢問根域名服務器、頂級域名服務器等,這樣就能大大減少傳輸的 DNS 報文數量!
實際上,不僅在本地域名服務器中設定了高度快取,用戶主機也有快取,對于 Windows 電腦,可以通過命令ipconfig/displaydns查詢當前 DNS 快取,比如當我訪問了百度后,本機就會快取以下資訊:
快取雖然提升了 DNS 決議速度,但并不能保證一致性,因為一個網站的域名和 IP 地址的映射關系并不是永久不變的,可能快取的決議結果已失效,因而 DNS 快取時間不能設定太大!
Windows 電腦也可以通過命令ipconfig/flushdns清空本機快取,
(3)切換本地域名服務器
前面提到,在進行域名決議時,主機會向本地域名服務器發起遞回查詢,如果本地域名服務器的性能較差,或者未正確配置快取,那么我們上網的速度將會變得非常慢,因此選擇一個好的本地域名服務器將有助于提升沖浪速度!
默認情況下,本機在聯網時會通過 DHCP 協議自動獲得一個 DNS 服務器地址,那么如果此服務器性能不好,該如何更換呢?
以 Windows 為例,可以通過控制面板?—>網路和 Internet?—>網路連接?—>Internet 協議版本4(TCP/IPv4)修改本地域名服務器的 IP 地址,
互聯網上常見的公共 DNS 服務器的 IP 地址如下:
|
|
首選 DNS 服務器地址 |
備用 DNS 服務器地址 |
|
阿里 |
223.5.5.5 |
223.6.6.6 |
|
騰訊 |
119.29.29.29 |
182.254.116.116 |
|
百度 |
180.76.76.76 |
114.114.114.114 |
|
谷歌 |
8.8.8.8 |
8.8.4.4 |
|
114DNS |
114.114.114.114 |
114.114.115.115 |
?一般情況下,自動獲取的本地域名服務器與主機位于同一個子網中,速度都挺快的,但是如果在上網程序中,發現打開網頁的速度很慢,也可以嘗試使用上面的公共 DNS 服務器,說不定速度會有所改善,
4. DNS 記錄和報文?
實際上,域名服務器中保存并不僅僅是域名和 IP 地址,而是保存了一個資源記錄(Resource Record,RR),
一個資源記錄包含四部分內容,分別是 Name,Value,Type,TTL,
TTL 指的是記錄的生存時間,以秒為單位,它決定了快取此記錄的過期時間,
Name 和 Value 的含義隨著 Type 的不同而不同,舉幾個常見例子:
- 當 Type = A 時(A 是 Address 縮寫,也可用編號 1 表示),Name 表示域名,Value 表示對應的 IP 地址,如(www.example.com,93.184.216.34,A,86400),
- 當 Type = NS 時(NS 是 Name Server 縮寫,也可用編號 2 表示),Name 表示一個域,Value 為負責該域決議的域名服務器的域名,如(baidu.com,ns1.baidu.com,NS,172800),此記錄用于沿著層級結構查詢鏈來路由 DNS 查詢,
如果一臺域名服務器是用于某特定域名的權威域名服務器,那么其將會有一條包含該域名的 A 記錄,
如果一臺域名服務器不是用于某特定域名的權威域名服務器,那么其將包含一條 NS 記錄,該記錄用來指定該域名由哪個域名服務器來進行決議;除此之外,它還將包含一條 A 記錄,該記錄提供了在 NS 記錄中 Value 欄位中的域名服務器的 IP 地址,

接下來介紹一下 DNS 報文的具體內容,DNS 報文分為兩類:查詢報文和回答報文,二者有著相同的格式,如下圖所示:
- 事務 ID:用于標識 DNS 查詢的識別符號,查詢報文和其對應的回答報文有著相同的事務 ID,因此通過它可以區分 DNS 回答報文是對哪個請求進行回應的,
- 標志:此欄位中含有若干標志,比如有一個『QR』標志位用于指出此報文是查詢報文(0)還是回答報文(1),再比如有一個『TC』標志位用于指出此報文長度是否大于 512 位元組,
- 問題數:對應于下面查詢問題的數量(支持同時查詢多個域名,通常為一個),
- 回答資源記錄數:對應于下面回答問題相關資源記錄的數量(一個域名可能有多個 IP 對應,那么將會有多個回答記錄),
- 權威資源記錄數:對應于下面權威域名服務器相關資源記錄的數量,
- 附加資源記錄數:對應于下面附加資訊相關資源記錄的數量,
- 查詢問題:此區域為查詢內容,包含查詢域名和查詢型別(如 www.example.com,A),
- 回答問題:此區域為查詢結果,包含一到多條資源記錄(如 www.example.com,93.184.216.34, A,300),
- 權威域名服務器:此區域為其他權威域名服務器的記錄,即含有指向權威域名服務器的資源記錄,用以繼續決議程序,(如 baidu.com,ns1.baidu.com,NS,172800),
- 附加資訊:此區域為其他有幫助的資訊,比如提供權威域名服務器所對應的 IP 地址,
最后,使用 Wireshark 抓一個 DNS 查詢報文和回答報文:
查詢報文:
回答報文:
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/542904.html
標籤:訊息安全
