DNS協(xié)議是一種基于UDP的應(yīng)用層協(xié)議,它用于將網(wǎng)站的網(wǎng)址也就是域名,轉(zhuǎn)換為IP地址,以便用戶可以訪問網(wǎng)站。
DNS把域名和IP地址聯(lián)系在一起,有了保存網(wǎng)站域名和IP地址對應(yīng)關(guān)系的DNS服務(wù)器,我們就不用輸入IP地址來訪問一個(gè)網(wǎng)站,而是輸入網(wǎng)址,然后通過向DNS服務(wù)器請求獲取域名對應(yīng)的IP來訪問網(wǎng)站了。
DNS域的命名空間是一種樹狀層次結(jié)構(gòu),一般可分為根域、一級域(也叫頂級域)、二級域、子域以及主機(jī)名。
對應(yīng)地,在域名的每一層都會有一個(gè)域名服務(wù)器,來提供對應(yīng)層級的域名解析服務(wù)。
DNS進(jìn)行域名解析的過程是,主機(jī)先查本地瀏覽器上的DNS緩存,再查本機(jī)操作系統(tǒng)中的DNS緩存以及hosts文件,如果都沒有,才會向本地DNS服務(wù)器發(fā)起DNS域名解析請求,本地DNS服務(wù)器如果有請求域名對應(yīng)的IP地址,則直接返回告訴主機(jī)。如果沒有,就向根域名服務(wù)器發(fā)送請求,根域名服務(wù)器是最高層次的,它不直接用于域名解析,但是它會告訴本地DNS服務(wù)器去找對應(yīng)的頂級域名服務(wù)器,接著,本地DNS服務(wù)器去找對應(yīng)的頂級域名服務(wù)器請求,頂級域名服務(wù)器會告訴本地DNS服務(wù)器去找對應(yīng)的權(quán)威DNS服務(wù)器,本地DNS于是再轉(zhuǎn)向問權(quán)威 DNS服務(wù)器,權(quán)威DNS服務(wù)器查詢后將對應(yīng)的 IP 地址告訴本地 DNS,本地DNS再將IP地址返回給主機(jī)。
這個(gè)時(shí)候,為了避免下次對這個(gè)域名發(fā)起DNS解析時(shí),再來一遍上面的解析過程,主機(jī)和本地DNS都會對剛剛的域名解析結(jié)果進(jìn)行緩存,下次再解析時(shí),如果有緩存就可以直接從緩存中獲取解析結(jié)果。
從上面的過程可以看到,DNS的查詢方式分為兩種,一種是遞歸,一種是迭代。
遞歸查詢指的是如果 A 請求 B,那么 B 作為請求的接收者,一定要給 A 想要的答案。
迭代查詢指的是,如果接收者 B 沒有請求者 A 所需要的準(zhǔn)確內(nèi)容,接收者 B 將告訴請求者 A,如何去獲得這個(gè)內(nèi)容,但是自己并不去發(fā)出請求。
在實(shí)際應(yīng)用中,遞歸查詢通常用于從請求主機(jī)到本地 DNS 服務(wù)器的查詢,而迭代查詢則用于本地 DNS 服務(wù)器向根域名服務(wù)器或者頂級域名服務(wù)器發(fā)出查詢請求。