本文提供域名系統 (DNS) 查詢程式的概觀,以及 DNS 伺服器如何解析查詢。 它也說明 DNS 伺服器如何使用遞歸和反覆專案來解析查詢。
DNS 查詢的運作方式
當 DNS 用戶端需要查閱名稱時,它會查詢 DNS 伺服器來解析名稱。 用戶端傳送的每個查詢訊息都包含三項資訊,並指定要回答的伺服器問題:
- 指定的 DNS 網域名稱,表示為完整網域名稱 (FQDN)。
- 一種指定的查詢類型,可以是依類型指定資源記錄(RR),或是特殊類型的查詢操作。
- DNS 網域名稱的指定類別。 對於執行 Windows作系統的 DNS 伺服器,這個類別應該一律指定為因特網 (IN) 類別。
例如,指定的名稱可以是計算機的 FQDN,例如 host-a.example.contoso.com.
,以及指定以該名稱尋找位址 (A) RR 的查詢類型。 請將 DNS 查詢視為客戶端向伺服器提出的一個由兩個部分構成的問題,例如「您是否有名為 hostname.example.contoso.com.
的電腦的任何 A 資源記錄?」當用戶端從伺服器收到答案時,它會讀取並解釋已回答的 A 資源記錄,從中得知該電腦名稱所對應的 IP 位址。
下表描述常見的 DNS 查詢類型和對應的識別碼。
類型 | 身份證 |
---|---|
一個 | 1 |
AAAA 級 | 28 |
服務導向架構 (SOA) | 6 |
SRV | 33 |
DNS 查詢會以許多不同的方式進行解析。 客戶端有時可以使用從先前查詢取得的快取資訊,在本機回應查詢。 DNS 伺服器可以使用自己的資源記錄資訊快取來響應查詢。 DNS 伺服器也可以代表客戶端查詢其他 DNS 伺服器。 此程序稱為遞歸。 伺服器會解析名稱,然後將答案傳回用戶端。
此外,用戶端本身可以嘗試連絡其他 DNS 伺服器來解析名稱。 當用戶端這樣做時,它會根據來自伺服器的轉介答案使用不同的查詢。 此程式稱為反覆專案。
一般而言,DNS 查詢程式會在兩個部分發生:
- 名稱查詢會從用戶端計算機開始,並傳遞至解析程式 DNS 用戶端服務以進行解析。
- 當無法在本機解析查詢時,您可以視需要查詢 DNS 伺服器來解析名稱。
本文將更詳細地說明每個過程。
迭代的運作方式
重覆查詢是在下列條件下,DNS 用戶端與伺服器之間所使用的名稱解析的類型:
- 用戶端會要求使用遞歸,但在 DNS 伺服器上停用遞歸。
- 查詢 DNS 伺服器時,用戶端不會要求使用遞歸。
用戶端的反覆要求會告訴 DNS 伺服器,用戶端預期 DNS 伺服器可以立即提供的最佳答案,而不需要連絡其他 DNS 伺服器。
使用反覆專案時,DNS 伺服器會根據自己關於查詢名稱數據之命名空間的特定知識來回答用戶端。 例如,如果內部網路上的 DNS 伺服器收到來自本機客戶端對 www.contoso.com
的查詢,它可能會從其名稱快取中回傳答案。 如果查詢的名稱目前未儲存在伺服器的名稱快取中,伺服器可能會提供轉介來回應。 轉介是客戶端所查詢名稱較接近之其他 DNS 伺服器的 NS 和 RR 清單。
使用反覆專案時,DNS 伺服器可以進一步協助名稱查詢解析,而不只是將自己的最佳答案傳回給用戶端。 針對大多數反覆查詢,用戶端會使用其本機設定的 DNS 伺服器清單,如果主要 DNS 伺服器無法解析查詢,則會連絡整個 DNS 命名空間中的其他名稱伺服器。
Windows DNS 用戶端服務不會執行遞歸。
快取的運作方式
當 DNS 伺服器使用遞迴或迭代來處理客戶端查詢時,它們會探索並獲取大量關於 DNS 命名空間的資訊。 然後伺服器會將此資訊儲存到緩存中。
快取可讓您加速 DNS 解析效能,以取得熱門名稱的後續查詢,同時大幅減少網路上的 DNS 相關查詢流量。
當 DNS 伺服器代表用戶端進行遞歸查詢時,它們會暫時快取資源記錄。 快取的資源記錄包含從 DNS 伺服器取得的資訊。 這些伺服器是網域名稱伺服器的權威。 在進行反覆查詢時,會學習這項資訊。 這些查詢有助於完整回應代表用戶端執行的遞歸查詢。 稍後,當其他用戶端放置符合快取記錄之資源記錄資訊的新查詢時,DNS 伺服器可以使用快取的資訊來回答它們。
快取資訊時,時間To-Live (TTL) 值會套用至所有快取的資源記錄。 只要快取資源記錄的TTL未過期,DNS 伺服器就可以繼續快取。 當回應符合這些記錄的客戶端查詢時,它可以再次使用快取的資源記錄。 大部分區域設定中的快取 TTL 值,會使用在權威區域起始(SOA)資源記錄中設定的最小(預設)TTL。 根據預設,最小 TTL 為 3,600 秒(一小時),但可以調整,或視需要,可以在每個資源記錄上設定個別快取 TTL。
備註
根據預設,DNS 伺服器服務會使用根提示檔案 cache.dns
,儲存在伺服器電腦上的 <systemroot>\System32\Dns
資料夾中。 此檔案包含 DNS 命名空間根伺服器的 NS 和 A 資源記錄(因特網根伺服器或內部網路根伺服器)。 當 DNS 伺服器服務啟動時,會查詢根伺服器清單,以取得所有根伺服器的目前清單。 查詢的結果可用來更新根提示檔案。 此作業也會在執行服務時定期執行。 當系統管理員對根提示進行變更時,這些變更會寫回根提示檔案。
DNS 用戶端服務解析程式
當本機電腦上的程式使用 DNS 網域名稱時,該要求會傳遞至 DNS 用戶端服務進行解析,該服務首先會檢查本機快取資訊。 如果可以解析查詢的名稱,則會回答查詢,並完成程式。
下圖顯示 DNS 用戶端查詢 DNS 用戶端服務以取得名稱解析的簡單範例。
本機解析程式快取可以包含從兩個可能來源取得的名稱資訊:
如果在本機設定主機檔案,當 DNS 用戶端服務啟動時,就會將來自該檔案的任何主機名對位址對應載入快取中。
在先前 DNS 查詢的回應中取得的資源記錄會新增至快取,並保留一段時間,由存留時間 (TTL) 決定。
如果查詢不符合快取中的條目,客戶端會繼續查詢 DNS 伺服器以解析名稱。
下圖顯示 DNS 用戶端服務,檢查 DNS 查詢的快取。
使用一個以上的 DNS 伺服器 IP 設定 DNS 用戶端,會將容錯功能新增至您的 DNS 基礎結構。 新增多個 DNS 伺服器 IP 可確保如果主要 DNS 伺服器、網路連結或支援基礎結構失敗,仍可解析 DNS 名稱。
名稱失敗可能會導致應用程式或元件停止響應,資源中斷,必須等待相依逾時到期,可能直接或間接導致操作失敗。 如需所有可能案例的詳細討論,請參閱 DNS 用戶端解析逾時。
基於這些原因,建議您使用多個 DNS 伺服器來設定任何 Windows 用戶端。 不過,Windows 用戶端解析程式會根據設定的 DNS 伺服器數目而有所不同。
DNS 伺服器查詢過程
當 DNS 伺服器收到查詢時,它會先檢查它是否可以授權地響應查詢。 DNS 伺服器會使用伺服器本機設定區域中所包含的資源記錄資訊來進行檢查。
如果查詢的名稱符合本地區域資訊的對應 RR,伺服器會權威性地回答,使用這項資訊解析查詢的名稱。
如果查詢的名稱沒有任何區域資訊存在,伺服器會檢查它是否可以使用先前查詢的本機快取資訊解析名稱。 如果在這裡找到匹配項,伺服器會以此資訊作答。 同樣地,如果慣用的伺服器可以從其快取中向要求的用戶端提供一個匹配的肯定回應,則查詢完成。
如果查詢的名稱在其慣用伺服器上找不到相符的答案,無論是從其快取或區域資訊,查詢程式都可以繼續,使用遞歸來完整解析名稱。 此程式牽涉到其他 DNS 伺服器的協助,以協助解析名稱。 根據預設,DNS 用戶端服務會要求伺服器使用遞歸程式,在傳回答案之前,先代表用戶端完整解析名稱。
為了讓 DNS 伺服器正確執行遞歸,它首先需要 DNS 網域命名空間中其他 DNS 伺服器的一些實用連絡資訊。 此資訊會以根提示的形式提供。 根提示是初步資源記錄的清單。 DNS 服務會使用這些記錄來定位對 DNS 網域命名空間樹根具有權威性的其他 DNS 伺服器。 根伺服器是域名系統(DNS)命名空間樹中根域名和頂級域的權威。
藉由使用根提示來尋找根伺服器,DNS 伺服器就能夠完成遞歸的使用。 理論上,此過程可讓任何 DNS 伺服器定位在命名空間樹狀結構中的任何層級所使用的任何其他 DNS 域名的權威伺服器。
下列步驟描述查詢 DNS 伺服器的過程:
如果查詢是完整功能變數名稱 (FQDN),表示其結尾為終止點 (
.
),則查詢會提交至 DNS 伺服器。 例如,www.contoso.com.
如果查詢是未限定的多標籤查詢,這表示它不會以終止點 (
.
) 結尾,DNS 用戶端會將它提交至具有終止點的 DNS 伺服器(.
)。 例如,www.contoso.com.
如果不合格的是單一標籤查詢,例如
www
。 然後,行為會根據 NIC 上的 DNS 設定而有所不同。如果有 DNS 後綴搜尋清單,DNS 用戶端服務會依序將它們從第一個附加到單一標籤查詢,並將附加有結尾點的查詢(
.
)提交至 DNS 伺服器。 此過程為重複執行的過程,直到所有 DNS 後綴搜尋清單都已使用。如果未設定 DNS 後綴搜尋清單,則 DNS 用戶端服務會將主要 DNS 後綴附加至具有終止點的單一標籤查詢(
.
),並提交至 DNS 伺服器。當 DNS 用戶端設定為執行名稱下放時,它會下放主要 DNS 字尾,並在主要 DNS 字尾失敗時,傳送另一個附帶終止點(
.
)的查詢。 例如,如果解析www.test.contoso.com
失敗,用戶端會下放至www.contoso.com
如果在網路介面卡上設定了連線專用的 DNS 後綴,查詢會加上一個結尾句點(
.
)然後提交至 DNS 伺服器。
在所有情況下,回應都會儲存在 DNS 用戶端快取中,而不論回應是正面還是負數。
下列流程圖說明查詢 DNS 伺服器的描述程式。
DNS 遞歸
請考慮使用遞歸進程,在客戶端查詢單一 DNS 伺服器時找出名稱 host-b.example.contoso.com.
。 當 DNS 伺服器和用戶端第一次啟動,且沒有本機快取資訊來協助解析名稱查詢時,此過程就會發生。 假設客戶端查詢的名稱是伺服器無法根據其配置區域辨識的域名。
首先,首選伺服器會解析完整名稱,並判斷它需要負責該頂級網域的授權伺服器位置,com
。 然後,它會使用反覆查詢 com
DNS 伺服器,以取得 contoso.com
伺服器的轉介。 接下來,來自 contoso.com
伺服器的轉介答案會傳送到 DNS 伺服器,以回應 example.contoso.com
。
最後會連絡到example.contoso.com.
伺服器。 因為此伺服器包含查詢名稱做為其設定區域的一部分,所以它會以授權方式回應起始遞歸的原始伺服器。 當原始伺服器收到回應時,它會檢查答案是否為授權。 如果是,伺服器會將此回應轉送回要求用戶端,並完成遞歸查詢程式。
雖然遞歸查詢程式在執行時可能會耗用大量資源,但 DNS 伺服器具有一些效能優勢。 例如,在遞歸程式期間,執行遞歸查閱的 DNS 伺服器會取得 DNS 網域命名空間的相關信息。 伺服器會快取這些資訊,這些資訊可以再次用於協助加速回應使用或比對該資訊的後續查詢。 隨著時間的推移,這些快取資訊可能會逐漸佔據伺服器記憶體資源的重要部分。 每當 DNS 服務重新啟動時,就會清除快取。
DNS 查詢自適應逾時
DNS 查詢自適性逾時功能可讓 DNS 查詢逾時根據先前查詢所需的時間進行調整,減少大部分查詢的逾時時間。 可以增加超時設定以應對高延遲連結,例如衛星連結。 Windows 市集應用程式可以針對每個網路介面優化 DNS 逾時設定。
根據網路的過去效能,不會在逾時 DNS 查詢之前等候 1,000 毫秒,而是將第一次逾時調整為介於 25 毫秒到 1,000 毫秒之間。
DNS 伺服器未回應的快取
非回應 DNS 伺服器會快取並定期重試。 這項淘汰可讓 DNS 用戶端一致地使用最佳的可用伺服器,並花較少的時間等待沒有回應的 DNS 伺服器。
下列圖示顯示範例 DNS 用戶端依照本節的程序查詢每個適配器上的每個伺服器。
DNS 用戶端服務會依下列順序查詢 DNS 伺服器:
DNS 用戶端服務會將名稱查詢傳送至慣用適配卡 DNS 伺服器清單中的第一部 DNS 伺服器,並等候一秒的回應。
如果 DNS 用戶端服務在一秒內未收到來自第一部 DNS 伺服器的回應,它會將所有仍在考慮的適配卡上的名稱查詢傳送至第一部 DNS 伺服器,並等候兩秒的回應。
如果 DNS 用戶端服務在兩秒內未收到任何 DNS 伺服器的回應,它會將查詢傳送至仍在考慮的所有適配卡上的所有 DNS 伺服器。 DNS 用戶端服務接著會等候兩秒的回應。
如果 DNS 用戶端服務仍然未收到來自任何 DNS 伺服器的回應,則會將名稱查詢傳送至仍在考慮的所有適配卡上的所有 DNS 伺服器,並等候四秒的回應。
如果 DNS 用戶端服務未收到來自任何 DNS 伺服器的回應,DNS 用戶端會將查詢傳送至仍在考慮的所有適配卡上的所有 DNS 伺服器,並等候八秒的回應。
如果 DNS 用戶端服務在八秒內未收到任何伺服器的回應,DNS 用戶端服務會以逾時回應。如果 DNS 用戶端服務未收到來自特定介面卡上任何 DNS 伺服器的回應,則會在該介面卡上將所有對那些伺服器的查詢在接下來的 30 秒內設為逾時。
如果 DNS 用戶端服務在任何時間點收到來自伺服器的負面回應,則會從此搜尋期間移除該適配卡上的每部伺服器。 例如,如果替代配接器 A 上的第一部伺服器在步驟 2 中提供負面回應,DNS 用戶端服務就不會查詢替代配接器 A 清單中的任何其他伺服器。
如果 DNS 用戶端服務收到正回應,它會停止查詢名稱、將回應新增至快取,並將回應傳回給用戶端。
DNS 用戶端服務會更快速地追蹤哪些伺服器回應名稱查詢,並根據伺服器回復名稱查詢的速度,在清單中向上或向下行動伺服器。
替代查詢回應
DNS 查詢的上述描述假設進程以傳回給用戶端的正回應結尾。 不過,查詢也可以傳回其他答案。 以下是最常見的查詢答案:
- 權威答案
- 正面答案
- 轉介答案
- 負面答案
授權答案是來自對查詢名稱擁有直接管理權的 DNS 伺服器的權威性回應。 此答案包含 DNS 訊息中設定的授權位,以指出其真實性。
正回應可以包含查詢的 RR 或 RR 清單(也稱為 RR 集合),以符合查詢訊息中指定的 DNS 功能變數名稱和記錄類型。
轉介答案包含查詢中名稱或類型未指定的其他 RR。 如果不支援遞歸程式,則會將這種類型的答案傳回給用戶端。 記錄用來作為有用的參考答案,用戶可以利用迭代來繼續查詢。 轉介答案包含更多數據,例如查詢類型以外的 RR。 例如,如果 DNS 伺服器在此區找不到任何查詢主機名 www
的 A 資源記錄,但它找到 www
的 CNAME 資源記錄,它可以在回應客戶端時包含該資訊。 如果客戶端能夠使用迭代,則可以利用轉介資訊進行更多查詢,試圖完整解析自身的名稱。
來自伺服器的負面回應可能表示兩個可能的結果之一:
- 授權伺服器在 DNS 命名空間中找不到查詢的名稱。
- 授權伺服器找到所查詢的名稱,但該名稱不存在指定類型的記錄。
解析程式會處理查詢,並將結果傳回至要求程式。 回應可以是正數或負數。 此外,解析程式會快取回應以供日後使用。
如果在單一 UDP 訊息封包中傳送和解析查詢的結果回應太長,DNS 伺服器就可以透過 TCP 連接埠 53 啟動故障後備回應,以在 TCP 連線的會話中完全回應用戶端。
當 DNS 用戶端受限於解析特定 DNS 伺服器的名稱,例如位於內部網路上的 DNS 伺服器時,停用在 DNS 伺服器上使用遞歸。 當 DNS 伺服器無法解析外部 DNS 名稱時,遞歸也可能被停用。 在此情況下,客戶端系統應自動轉移至另一部 DNS 伺服器以進行名稱解析。 如果您在 DNS 伺服器上停用遞歸,就無法在同一部伺服器上使用轉發器。
根據預設,DNS 伺服器在執行遞歸查詢並連絡其他 DNS 伺服器時,會使用數個預設計時。 這些預設值包括:
- 遞歸重試間隔為3秒。 此間隔是 DNS 服務在重試遞歸查閱期間所做的查詢之前所等候的時間長度。
- 遞歸超時時間間隔為8秒。 此間隔是 DNS 服務在重試遞歸查閱失敗之前等候的時間長度。
在大部分情況下,這些參數不需要調整。 不過,如果您透過慢速廣域網 (WAN) 連結使用遞歸查閱,您可以透過稍微調整設定來改善伺服器效能和查詢完成。
相關內容
若要深入瞭解反向查閱程式,請參閱 反向查閱。