DNS域名解析系統(tǒng)
前言
前兩篇記錄了一下UDP、廣播和多播的相關(guān)筆記。
那么我們在打開TCP連接或者用UDP發(fā)送一個(gè)數(shù)據(jù)報(bào)之前,接收方往往是一個(gè)域名,例如xxx.com,此時(shí)需要將這個(gè)域名轉(zhuǎn)換成IP地址,那么怎么進(jìn)行轉(zhuǎn)換的呢???
就是通過這個(gè)DNS域名系統(tǒng)進(jìn)行轉(zhuǎn)換。
今天就來記錄一下DNS域名系統(tǒng)。
DNS域名系統(tǒng)
DNS域名系統(tǒng)(Domain Name System) 是一種用于TCP/IP應(yīng)用程序的分布式數(shù)據(jù)庫,提供主機(jī)名字和IP地址之間的轉(zhuǎn)換及有關(guān)電子郵件的選路信息。
DNS提供了允許服務(wù)器和客戶程序相互通信的協(xié)議。
從應(yīng)用的角度上看,對DNS的訪問是通過一個(gè)地址解析器來完成的。
解析器通過一個(gè)或多個(gè)名字服務(wù)器來完成主機(jī)名和IP的相互轉(zhuǎn)換。
在一個(gè)應(yīng)用程序請求TCP打開一個(gè)連接或使用UDP發(fā)送給一個(gè)數(shù)據(jù)報(bào)之前,必須將一個(gè)主機(jī)名轉(zhuǎn)換成IP地址。

每個(gè)節(jié)點(diǎn)的標(biāo)識(shí)最長63字符,不區(qū)分大小寫,任何一個(gè)節(jié)點(diǎn)的域名就是將該節(jié)點(diǎn)到最高層的域名串連起來,用“.”分割。
以“.”結(jié)尾的域名被稱為絕對域名或完全合格的域名FQDN,例如:sun.tuc.noao.edu.
如果非“.”結(jié)尾,則認(rèn)為該域名是不完全的。如果不完整的域名由兩個(gè)或兩個(gè)以上的標(biāo)號(hào)組成,則認(rèn)為它是完整的,或者在該域名的右邊加上一個(gè)局部后綴,例如,域名sun加上局部后綴 .tuc.noao.edu. 成為完整的。
「頂級(jí)域名被分成三個(gè)部分:」
(1)arpa是用作地址到名字轉(zhuǎn)換的特殊域
(2)7個(gè)3字符長的普通域
(3)所有2字符長的域被稱為國家域,或地理域
| 域 | 描述 |
|---|---|
| com | 商業(yè)組織 |
| edu | 教育機(jī)構(gòu) |
| gov | 其它美國政府部門 |
| int | 國際組織 |
| mil | 美國軍事網(wǎng)點(diǎn) |
| net | 網(wǎng)絡(luò) |
| org | 其它組織 |
我們?nèi)粘D芙佑|到的就是以com結(jié)尾的域名
比如學(xué)校的就是這樣

至于后面的“.cn”域名表示的是我國頂級(jí)域名
DNS服務(wù)器

根DNS服務(wù)器:返回頂級(jí)域DNS服務(wù)器的IP地址 頂級(jí)域DNS服務(wù)器:返回權(quán)威DNS服務(wù)器的IP地址 權(quán)威DNS服務(wù)器:返回相應(yīng)主機(jī)的IP地址
DNS解析流程

為了提高DNS的解析性能,很多網(wǎng)絡(luò)都會(huì)就近部署DNS緩存服務(wù)器。
瀏覽器訪問www.xxx.com,發(fā)一個(gè)DNS請求,詢問對應(yīng)的IP是啥,并發(fā)給本地域名服務(wù)器(本地DNS)。
「何為本地NDS?」 如果通過DHCP配置,本地DNS由網(wǎng)絡(luò)服務(wù)商(ISP),如電信、移動(dòng)等自動(dòng)分配,通常就在網(wǎng)絡(luò)服務(wù)商的某個(gè)機(jī)房。
本地DNS收到請求,本地DNS緩存著一張域名和IP對應(yīng)的表,如果找到則直接返回IP地址。如果沒有,本地DNS會(huì)去詢問根域名服務(wù)器對應(yīng)的IP地址是啥,根域名服務(wù)器是最高層次的,不直接用于域名解析,當(dāng)能說明可去哪解析。
根DNS收到本地DNS請求后,發(fā)現(xiàn)后綴是.com,返回頂級(jí)域名服務(wù)器的地址
本地DNS隨即請求頂級(jí)域名服務(wù)器查詢對應(yīng)的IP,頂級(jí)域名服務(wù)器管理者二級(jí)域名,比如baidu.com,所以它返回權(quán)威DNS服務(wù)器的地址。
本地DNS拿到權(quán)威DNS服務(wù)器地址,請求獲取對應(yīng)的IP,權(quán)威DNS服務(wù)器查詢后將對應(yīng)的IP地址返回給本地DNS
本地DNS再將IP地址返回客戶端,客戶端和目標(biāo)建立連接。
「本地設(shè)置域名和IP轉(zhuǎn)換」
在linux機(jī)器上通過在文件“/etc/hosts”中配置域名對應(yīng)的IP地址

「設(shè)置DNS域名服務(wù)器」
需要在“/etc/resolv.conf”文件中配置
添加如下內(nèi)容
nameserver 114.114.114.114

負(fù)載均衡
根據(jù)域名查詢IP是一次DNS遞歸查詢過程。本地DNS全權(quán)處理。在此過程中,DNS除了可以通過名稱映射IP地址,還可以做另一件事,就是負(fù)載均衡。
DNS可以做內(nèi)部負(fù)載均衡,域名和IP具有一對多的關(guān)系,配置域名比直接配置IP更具有靈活性。
DNS可以做全局負(fù)載均衡,高可用、就近訪問
例如:DNS 訪問數(shù)據(jù)中心中對象存儲(chǔ)上的靜態(tài)資源
假設(shè)全國有多個(gè)數(shù)據(jù)中心,托管在多個(gè)運(yùn)營商,每個(gè)數(shù)據(jù)中心三個(gè)可用區(qū)(Available Zone)。對象存儲(chǔ)通過跨可用區(qū)部署,實(shí)現(xiàn)高可用性。在每個(gè)數(shù)據(jù)中心中,都至少部署兩個(gè)內(nèi)部負(fù)載均衡器,內(nèi)部負(fù)載均衡器后面對接多個(gè)對象存儲(chǔ)的前置服務(wù)器(Proxy-server)。

對于復(fù)雜的應(yīng)用、跨地域跨運(yùn)營商的大型應(yīng)用,則需要更加復(fù)雜的全局負(fù)載均衡機(jī)制,這就是全局負(fù)載均衡器(GSLB,Global Server Load Balance)。
權(quán)威DNS服務(wù)器中,一般通過配置CNAME的方式,給域名起一個(gè)別名,例如:www.vip.baidu.com,然后告訴本地DNS服務(wù)器,讓它請求GSLB解析這個(gè)域名,GSLB就可以在解析這個(gè)域名的過程中,通過自身策略實(shí)現(xiàn)負(fù)載均衡。
圖中畫了兩層的 GSLB,是因?yàn)榉诌\(yùn)營商和地域。不同運(yùn)營商的客戶,可以訪問相同運(yùn)營商機(jī)房中的資源,這樣不跨運(yùn)營商訪問,有利于提高吞吐量,減少時(shí)延。
第一層 GSLB,通過查看請求它的本地 DNS 服務(wù)器所在的運(yùn)營商,就知道用戶所在的運(yùn)營商。假設(shè)是移動(dòng),通過 CNAME 的方式,通過另一個(gè)別名 object.yd.yourcompany.com,告訴本地 DNS 服務(wù)器去請求第二層的 GSLB。 第二層 GSLB,通過查看請求它的本地 DNS 服務(wù)器所在的地址,就知道用戶所在的地理位置,然后將距離用戶位置比較近的 Region 里面,六個(gè)內(nèi)部負(fù)載均衡(SLB,Server Load Balancer)的地址,返回給本地 DNS 服務(wù)器。 本地 DNS 服務(wù)器將結(jié)果返回給本地 DNS 解析器。 本地 DNS 解析器將結(jié)果緩存后,返回給客戶端。 客戶端開始訪問屬于相同運(yùn)營商的距離較近的 Region 1 中的對象存儲(chǔ),當(dāng)然客戶端得到了六個(gè) IP 地址,它可以通過負(fù)載均衡的方式,隨機(jī)或者輪詢選擇一個(gè)可用區(qū)進(jìn)行訪問。對象存儲(chǔ)一般會(huì)有三個(gè)備份,從而可以實(shí)現(xiàn)對存儲(chǔ)讀寫的負(fù)載均衡。

往期推薦:
推薦一個(gè)生產(chǎn)環(huán)境問題排查利器
