首先我們要知道什么是DNS?
DNS(Domain Name System)是域名系統(tǒng)的英文縮寫(xiě),是一種組織成域?qū)哟谓Y(jié)構(gòu)的計(jì)算機(jī)和網(wǎng)絡(luò)服務(wù)命名系統(tǒng),用于 TCP/IP 網(wǎng)絡(luò)。
當(dāng)我們?cè)跒g覽器輸入一個(gè) URL 地址時(shí),瀏覽器要向這個(gè) URL 的主機(jī)名對(duì)應(yīng)的服務(wù)器發(fā)送請(qǐng)求,就得知道服務(wù)器的 IP,對(duì)于瀏覽器來(lái)說(shuō),DNS 的作用就是將主機(jī)名轉(zhuǎn)換成 IP 地址。
DNS 域名解析,簡(jiǎn)單地說(shuō)就是把域名翻譯成 IP 地址。
瀏覽器會(huì)首先搜索瀏覽器自身的 DNS 緩存,緩存時(shí)間比較短,大概只有1分鐘,且只能容納 1000 條緩存,看自身的緩存中是否有對(duì)應(yīng)的條目,而且沒(méi)有過(guò)期,如果有且沒(méi)有過(guò)期,則解析到此結(jié)束。
如果瀏覽器的緩存里沒(méi)有找到對(duì)應(yīng)的條目,操作系統(tǒng)也會(huì)有一個(gè)域名解析的過(guò)程,那么瀏覽器先搜索操作系統(tǒng)的 DNS 緩存中是否有這個(gè)域名對(duì)應(yīng)的解析結(jié)果,如果找到且沒(méi)有過(guò)期,則停止搜索,解析到此結(jié)束。
在 Linux 中可以通過(guò) /etc/hosts 文件來(lái)設(shè)置,可以將任何域名解析到任何能夠訪問(wèn)的IP 地址。如果在這里指定了一個(gè)域名對(duì)應(yīng)的 IP 地址,那么瀏覽器會(huì)首先使用這個(gè) IP地址。當(dāng)解析到這個(gè)配置文件中的某個(gè)域名時(shí),操作系統(tǒng)會(huì)在緩存中緩存這個(gè)解析結(jié)果,緩存的時(shí)間同樣是受這個(gè)域名的失效時(shí)間和緩存的空間大小控制的。
客戶端通過(guò)瀏覽器訪問(wèn)域名為 www.baidu.com (http://www.baidu.com) 的網(wǎng)站,發(fā)起查詢?cè)撚蛎?IP 地址的 DNS 請(qǐng)求。該請(qǐng)求發(fā)送到了本地 DNS 服務(wù)器上。本地 DNS 服務(wù)器會(huì)首先查詢它的緩存記錄,如果緩存中有此條記錄,就可以直接返回結(jié)果。如果沒(méi)有,本地 DNS 服務(wù)器還要向 DNS 根服務(wù)器進(jìn)行查詢。
本地 DNS 服務(wù)器向根服務(wù)器發(fā)送 DNS 請(qǐng)求,請(qǐng)求域名為 www.baidu.com (http://www.baidu.com) 的 IP 地址。
根服務(wù)器經(jīng)過(guò)查詢,沒(méi)有記錄該域名及 IP 地址的對(duì)應(yīng)關(guān)系。但是會(huì)告訴本地 DNS 服務(wù)器,可以到域名服務(wù)器上繼續(xù)查詢,并給出域名服務(wù)器的地址(.com 服務(wù)器)。
本地 DNS 服務(wù)器向 .com 服務(wù)器發(fā)送 DNS 請(qǐng)求,請(qǐng)求域名 www.baidu.com (http://www.baidu.com) 的 IP 地址。
com 服務(wù)器收到請(qǐng)求后,不會(huì)直接返回域名和 IP 地址的對(duì)應(yīng)關(guān)系,而是告訴本地DNS 服務(wù)器,該域名可以在 baidu.com 域名服務(wù)器上進(jìn)行解析獲取 IP 地址,并告訴 baidu.com 域名服務(wù)器的地址。
本地 DNS 服務(wù)器向 baidu.com 域名服務(wù)器發(fā)送 DNS 請(qǐng)求,請(qǐng)求域名 www.baidu.com (http://www.baidu.com) 的 IP 地址。
baidu.com 服務(wù)器收到請(qǐng)求后,在自己的緩存表中發(fā)現(xiàn)了該域名和 IP 地址的對(duì)應(yīng)關(guān)系,并將 IP 地址返回給本地 DNS 服務(wù)器。
本地 DNS 服務(wù)器將獲取到與域名對(duì)應(yīng)的 IP 地址返回給客戶端,并且將域名和 IP 地址的對(duì)應(yīng)關(guān)系保存在緩存中,以備下次別的用戶查詢時(shí)使用。