客戶端啟動時要做的第一件事情就是通過互聯網與機房建立連接,然后用戶才可以在客戶端與后臺服務器進行網絡通信。目前在計算機網絡中應用較為廣泛的網絡通信協議是TCP/IP,它的通信基礎是IP地址,因為IP地址有如下兩個主要功能。
- 標識設備:接入網絡的設備必須有一個獨一無二的IP地址,這樣才能唯一標識一個網絡目標。
- 網絡尋址:將數據包從一個網絡設備發送到另一個網絡設備,需要攜帶目標網絡設備的IP地址,通過TCP/IP中的IP路由尋址功能,數據包最終可以到達目標網絡設備。
客戶端要與機房建立連接,就需要知道機房公網IP地址(暴露在互聯網中可訪問的IP地址),但是IP地址通常由一串冰冷的數字組成,沒有可讀性,不方便記憶,于是人們又制定出另一套字符型的地址方案:域名地址。“域名”是大家都很熟悉的名詞,在瀏覽器中輸入簡單易記的域名(如www.baidu.com
),就可以訪問到對應的網站,它的底層其實是由DNS來實現的。
1.2.1 DNS的意義
DNS( Domain Name System,域名系統)是互聯網中的核心服務,它維護域名與對應 IP地址的映射關系,并提供將域名翻譯為IP地址的域名解析功能。DNS在互聯網中有非常廣泛的應用,它為用戶和互聯網公司帶來了很多便利。例如:
- 互聯網公司可以創建簡單、便于用戶記憶的域名并注冊到DNS服務器,用戶僅需輸入域名就能訪問到對應的網站。
- 通過維護域名與多個IP地址的映射關系,DNS可以將針對同一個域名的不同用戶請求解析到不同的IP地址,從而緩解單一后臺服務器的資源壓力。
- 互聯網公司因架構升級、網絡改造等需要變更機房公網IP地址時,僅需在DNS服務器中重新配置最新的IP地址,而不會對用戶造成任何干擾。
- 基于DNS可以實現靈活的負載均衡策略,比如DNS服務器可以對IP地址進行監測——如果發現機房某公網IP地址對應的服務器宕機,那么DNS服務器可以將這個IP地址及時摘除,防止用戶無法訪問后臺。
接下來詳細介紹DNS的技術原理。
1.2.2 域名結構
如圖1-2所示,域名采用了層次化的樹形結構來命名。樹的頂端節點為根,根的下一層稱為頂級域名,指的是域名的后綴部分,如最常見的.com
、.net
等通用域或者.cn
、.us
等國家域;頂級域名的下一層是二級域名,指的是域名的倒數第二部分,一般表示域名注冊人或主體所使用的網絡名稱,如google.com
、apple.com
;二級域名的下一層是三級域名, 指的是域名的倒數第三部分,表示二級域名的子域名。實際上,域名可能還包括四級域名、五級域名等,它們的含義根據上文類推,每一級域名都控制下一級域名的分配。
對于域名mail.google.com
來說,頂級域名是.com
,二級域名是google.com
,三級域名 是mail.google.com
。
1.2.3 域名服務器
按照域名的層級結構,可以把域名服務器分為4種不同的類型。
(1)根域名服務器(根DNS服務器)
根域名服務器是全球互聯網的中樞神經,它負責互聯網頂級域名的解析,即它掌握著全部頂級域名的名稱與IP地址的映射關系。目前全球僅有13臺IPv4根域名服務器,其中主根域名服務器部署在美國,其余12臺輔根域名服務器有9臺部署在美國、2臺部署在歐洲、1臺部署在日本。根域名服務器由美國政府授權的互聯網名稱與數字地址分配機構(ICANN)統一管理。
(2)頂級域名服務器(頂級DNS服務器)
顧名思義,頂級域名服務器負責管理在每個頂級域名下注冊的二級域名解析工作,即它可以根據二級域名尋找到二級域名服務器的IP地址。頂級域名服務器就相當于一個朝代的封疆大吏。
(3)權威域名服務器(權威DNS服務器)
權威域名服務器負責對特定的域名進行解析,它管理頂級域名下的二級域名、三級域名、四級域名等的服務器。從名字中的“權威”可以看出,權威域名服務器最終決定了一個域名到底應該被解析成哪個IP地址,它是DNS中最核心的部分。
每個域名對應的權威域名服務器都可能不同,每個權威域名服務器僅可解析它負責的域名,比如負責google.com
域名的權威域名服務器無法解析域名apple.com
。大型互聯網公司一般會自建權威域名服務器,而中小型企業一般會將域名托管給知名的權威域名服務商。
(4)本地域名服務器(本地DNS服務器)
本地域名服務器不屬于域名層次結構中的任何一層,但是它對DNS非常重要,相當于域名解析的緩存。任何一臺主機在進行網絡地址配置時,都會配置一臺域名服務器作為本地域名服務器,它是主機在進行域名查詢時首先要查詢的域名服務器。本地域名服務器一般由網絡運營商提供,它作為主機訪問網絡時域名解析的總代理,會將域名解析結果緩存到本地,以便加速主機后面的域名解析過程。
1.2.4 域名解析過程
域名解析一般采用遞歸查詢方式執行,一個完整的域名解析過程如圖1-3所示。
- 當客戶端訪問某個域名時,會先在設備的本地緩存中查找是否有此域名對應的IP地址。本地緩存包括瀏覽器緩存和計算機系統Hosts文件DNS緩存。
- 如果本地緩存中沒有對應的IP地址,則客戶端向本地域名服務器發起域名解析請求。如果本地域名服務器保存了域名對應的IP地址,則可以直接返回;否則,本地域名服務器作為客戶端的全權代理,遞歸地完成域名解析。
- 本地域名服務器先向根域名服務器發起域名解析請求。根域名服務器收到請求后,會根據所要查詢的域名的后綴將所對應的頂級域名服務器(如
.com
)地址返回給本地域名服務器。 - 本地域名服務器根據返回結果向所對應的頂級域名服務器發起查詢請求。頂級域名服務器會先查看自己的緩存中是否有此域名的解析記錄,如果有,則將IP地址解析結果返回給本地域名服務器,本地域名服務器再將其返回給客戶端,域名解析完成。而如果頂級域名服務器的緩存中沒有解析記錄,則將域名對應的權威域名服務器地址返回給本地域名服務器。
- 本地域名服務器繼續向權威域名服務器發起域名解析請求。權威域名服務器最終將與域名關聯的IP地址返回給本地域名服務器,本地域名服務器再將其返回給客戶端,域名解析完成。
可以看到,除客戶端查詢本地緩存和本地域名服務器發起請求之外,域名解析的其余各環節均以本地域名服務器為中心進行遞歸查詢,本地域名服務器在域名解析的整個環節中承擔了代理的角色。
需要額外說明的是,一旦本地域名服務器獲得域名解析記錄,它就會在本地進行記錄緩存,以便下次客戶端再向它查詢同一個域名時可以直接獲得結果,而不用再進行遞歸查詢了。被緩存的域名解析記錄格式大致如圖1-4所示。
當查詢域名(如www.baidu.com
)時,域名解析記錄會包含如下數據。
- 生存周期(TTL):表示這條記錄在本地域名服務器中被緩存的時長。
- 協議類型(Class): 一般標識為IN,表示因特網。
- 記錄類型(Type ): A表示IPv4地址,AAAA表示IPv6地址。
- 記錄數據(Rdata ):與域名關聯的地址信息。
總結
什么是DNS?
- DNS( Domain Name System,域名系統)是互聯網中的核心服務,它維護域名與對應 IP地址的映射關系,并提供將域名翻譯為IP地址的域名解析功能。
域名服務器的類型?
- 根域名服務器
- 頂級域名服務器
- 權威域名服務器
- 本地域名服務器
DNS解析流程?
- 當客戶端訪問某個域名時,會先在設備的本地緩存中查找是否有此域名對應的IP地址。本地緩存包括瀏覽器緩存和計算機系統Hosts文件DNS緩存。
- 如果本地緩存中沒有對應的IP地址,則客戶端向本地域名服務器發起域名解析請求。如果本地域名服務器保存了域名對應的IP地址,則可以直接返回;否則,本地域名服務器作為客戶端的全權代理,遞歸地完成域名解析。
- 本地域名服務器先向根域名服務器發起域名解析請求。根域名服務器收到請求后,會根據所要查詢的域名的后綴將所對應的頂級域名服務器(如
.com
)地址返回給本地域名服務器。 - 本地域名服務器根據返回結果向所對應的頂級域名服務器發起查詢請求。頂級域名服務器會先查看自己的緩存中是否有此域名的解析記錄,如果有,則將IP地址解析結果返回給本地域名服務器,本地域名服務器再將其返回給客戶端,域名解析完成。而如果頂級域名服務器的緩存中沒有解析記錄,則將域名對應的權威域名服務器地址返回給本地域名服務器。
- 本地域名服務器繼續向權威域名服務器發起域名解析請求。權威域名服務器最終將與域名關聯的IP地址返回給本地域名服務器,本地域名服務器再將其返回給客戶端,域名解析完成。