金三銀四網(wǎng)絡(luò)面經(jīng)之 DNS 詳解
作者 | Cooper Song責(zé)編 | 郭芮DNS全稱Domain Name System,也就是域名系統(tǒng)用戶要訪問一個(gè)網(wǎng)站,需要知道它的IP地址而DNS系統(tǒng)主要提供的服務(wù)就是主機(jī)名與IP地址的映射,即輸入一個(gè)域名,比如www.baidu.com,可以得到www.baidu.com的服務(wù)器IP地址39.156.66.18。
之所以需要域名系統(tǒng),是IP地址太難記了,這就好比人與人之間使用姓名或乳名更好記,而不是認(rèn)識(shí)一個(gè)人就背過人家的身份證號(hào)互聯(lián)網(wǎng)的用戶也是人,所以網(wǎng)上沖浪者們也更容易也更喜歡記住一些網(wǎng)站的域名,比如百度www.baidu.com、淘寶www.taobao.com、京東www.jd.com;而路由器則顯然更容易識(shí)別IP地址。
因此從主機(jī)名到IP地址這個(gè)映射就顯得尤為重要
在我看來,這種服務(wù)的提供更像是一種數(shù)據(jù)庫(kù)查詢:SELECT IP FROM DNS WHERE NAME=www.baidu.com;我好像沒猜錯(cuò),DNS就是一個(gè)由分層的DNS服務(wù)器(通常是運(yùn)行BIND軟件的UNIX機(jī)器)實(shí)現(xiàn)的分布式數(shù)據(jù)庫(kù),也是一個(gè)使得主機(jī)能夠查詢分布式數(shù)據(jù)庫(kù)的應(yīng)用層協(xié)議(運(yùn)行在UDP之上,使用53號(hào)端口)。
雖說是數(shù)據(jù)庫(kù),但不是一個(gè)普通的數(shù)據(jù)庫(kù),而是一個(gè)分布式數(shù)據(jù)庫(kù),分布式數(shù)據(jù)庫(kù)由大量的DNS服務(wù)器實(shí)現(xiàn)當(dāng)然,DNS也可以只用一個(gè)服務(wù)器來實(shí)現(xiàn),這樣做的好處是簡(jiǎn)單,但也有大大的壞處,特別是互聯(lián)網(wǎng)用戶越來越多,一個(gè)DNS服務(wù)器是遠(yuǎn)遠(yuǎn)不夠的,會(huì)出現(xiàn)很多問題,主要問題如下:。
單點(diǎn)故障如果唯一的一臺(tái)DNS服務(wù)器崩了,整個(gè)因特網(wǎng)都不能使用DNS服務(wù)了,所有用戶都不能通過www.baidu.com這樣的域名訪問網(wǎng)站了,整個(gè)因特網(wǎng)隨之癱瘓通信容量唯一的一臺(tái)DNS服務(wù)器不得不處理所有的DNS查詢,必須為所有請(qǐng)求訪問的主機(jī)產(chǎn)生HTTP請(qǐng)求報(bào)文。
近距離的集中式數(shù)據(jù)庫(kù)如果唯一的一臺(tái)DNS服務(wù)器在美國(guó)紐約,那么中國(guó)用戶、澳大利亞用戶的查詢都得先傳播到地球的另一邊,在傳播過程中還有可能遇到網(wǎng)絡(luò)擁塞,會(huì)導(dǎo)致嚴(yán)重的時(shí)延維護(hù)唯一的一臺(tái)DNS服務(wù)器需要為所有因特網(wǎng)的主機(jī)保留記錄,數(shù)據(jù)規(guī)模是非常龐大的,隨著聯(lián)網(wǎng)的主機(jī)數(shù)增多,還要不斷地更新(插入insert、刪除delete、修改update)。
正是由于上面那些問題,網(wǎng)絡(luò)專家們提出了分布式、分層次數(shù)據(jù)庫(kù)這一解決方案DNS服務(wù)器主要分為三種,一種是頂端的根DNS服務(wù)器,一種是位于中間的頂級(jí)域(Top-Level Domain,簡(jiǎn)稱TLD)DNS服務(wù)器,一種是位于下層的權(quán)威DNS服務(wù)器。
根服務(wù)器全世界共有400多個(gè),它提供用戶訪問域名所屬的頂級(jí)域服務(wù)器的IP地址頂級(jí)域服務(wù)器管理著一類網(wǎng)站權(quán)威服務(wù)器的IP地址,后綴名為.com、.gov、.edu、.org的URL分屬于comDNS服務(wù)器、govDNS服務(wù)器、eduDNS服務(wù)器、orgDNS服務(wù)器。
此外,每個(gè)國(guó)家都有自己的頂級(jí)域服務(wù)器,比如.cn屬于中國(guó)、.jp屬于日本、.uk屬于英國(guó)、.fr屬于法國(guó)、.th屬于泰國(guó)在因特網(wǎng)上具有公共可訪問主機(jī)的每個(gè)組織機(jī)構(gòu)必須提供公共可訪問的DNS記錄,這些記錄將這些主機(jī)的名字映射為IP地址,一個(gè)組織機(jī)構(gòu)的權(quán)威DNS服務(wù)器會(huì)收藏這些DNS記錄,或者讓這些記錄存儲(chǔ)在服務(wù)提供商的一個(gè)權(quán)威DNS服務(wù)器中。
一般大學(xué)和大廠都會(huì)實(shí)現(xiàn)和維護(hù)自己的權(quán)威DNS服務(wù)器,比如麻省理工自己實(shí)現(xiàn)的mit.eduDNS服務(wù)器、亞馬遜自己實(shí)現(xiàn)的amazon.comDNS服務(wù)器、百度自己實(shí)現(xiàn)的baidu.comDNS服務(wù)器,baidu.com就會(huì)提供百度網(wǎng)址大全site.baidu.com的IP地址。
用戶主機(jī)向根DNS服務(wù)器發(fā)出查詢請(qǐng)求,根服務(wù)器返回給用戶主機(jī)相應(yīng)的頂級(jí)域DNS服務(wù)器的IP地址,用戶主機(jī)再根據(jù)頂級(jí)域DNS服務(wù)器的IP地址向相應(yīng)的頂級(jí)域服務(wù)器發(fā)出查詢請(qǐng)求,頂級(jí)域DNS服務(wù)器返回給主機(jī)相應(yīng)的權(quán)威DNS服務(wù)器的IP地址,用戶主機(jī)再根據(jù)權(quán)威DNS服務(wù)器的IP地址向相應(yīng)的權(quán)威DNS服務(wù)器發(fā)出查詢請(qǐng)求,該權(quán)威DNS服務(wù)器最終向用戶主機(jī)發(fā)送查詢主機(jī)名的IP地址發(fā)送給用戶主機(jī)。
舉個(gè)例子,我的電腦要訪問百度網(wǎng)址大全site.baidu.com,向根DNS服務(wù)器發(fā)送查詢請(qǐng)求,根DNS服務(wù)器識(shí)別到后綴.com,返回給用戶主機(jī)comDNS服務(wù)器的IP地址,用戶主機(jī)根據(jù)comDNS服務(wù)器的IP地址向comDNS服務(wù)器發(fā)送查詢請(qǐng)求,comDNS服務(wù)器返回給用戶主機(jī)百度權(quán)威DNS服務(wù)器baidu.com的IP地址,用戶再向百度的權(quán)威服務(wù)器baidu.comDNS服務(wù)器發(fā)送查詢請(qǐng)求,百度的權(quán)威服務(wù)器當(dāng)然熟悉自家網(wǎng)站,就把百度網(wǎng)址大全site.baidu.com的IP地址返回給了用戶主機(jī)。
更多的,用戶主機(jī)請(qǐng)求域名對(duì)應(yīng)的IP地址會(huì)借助一個(gè)本地DNS服務(wù)器,這個(gè)DNS服務(wù)器一般是一個(gè)小區(qū)或者一個(gè)機(jī)構(gòu)的ISP(Internet Service Provider,可以理解為運(yùn)行商)提供的,本地DNS服務(wù)器獲取到最終的IP地址后,再返回給用戶主機(jī)。
訪問示意圖如下:
圓圈表達(dá)了請(qǐng)求的時(shí)序關(guān)系根DNS服務(wù)器和頂級(jí)域服務(wù)器更像是中間的領(lǐng)路人,這兩種服務(wù)器指引著主機(jī)找到最終要訪問的IP地址DNS系統(tǒng)是設(shè)有緩存機(jī)制的,如果某個(gè)DNS服務(wù)器收到了一條主機(jī)名到IP地址的映射記錄,就把這個(gè)記錄存到本地緩存里,下次收到某域名的請(qǐng)求時(shí),如果該域名在本DNS服務(wù)器緩存中,就可以直接返回該域名的IP地址。
這將大大減少時(shí)延,如果沒有緩存機(jī)制,上圖中的8個(gè)步驟缺一不可;而有了緩存機(jī)制,用戶主機(jī)甚至都可以直接從本地DNS服務(wù)器那里得到自己想要的IP地址,示意圖如下:
參考文獻(xiàn):[1]James F Kurose,Keith W Ross.Computer Networking A Top-Down Approach Seventh Edition[M].Beijing:China Machine Press,2018:83.
作者簡(jiǎn)介:Cooper Song,大學(xué)計(jì)算機(jī)專業(yè)在校生,本科在讀,學(xué)生開發(fā)者。