因特網(wǎng)上的主機(jī)和人類一樣,也可以使用多種方式進(jìn)行識(shí)別岖瑰。主機(jī)的一種識(shí)別方法是用它的主機(jī)名,這些名字便于記憶砂代,也樂于被人們接受蹋订。主機(jī)也可以使用所謂IP地址進(jìn)行識(shí)別。一個(gè)IP地址由4個(gè)字節(jié)組成刻伊,并有著嚴(yán)格的層次結(jié)構(gòu)露戒。我們說IP地址具有層次結(jié)構(gòu)椒功,是因?yàn)閺淖笾劣宜嗽絹碓皆敿?xì)的關(guān)于主機(jī)的位置息。
人們喜歡便于記憶的主機(jī)名標(biāo)識(shí)智什,而路由器則喜歡定長(zhǎng)的动漾、有著層次結(jié)構(gòu)的IP地址。因此需要一種能進(jìn)行主機(jī)名到IP地址轉(zhuǎn)換的目錄服務(wù)荠锭,這就是域名系統(tǒng)旱眯。
1DNS提供的服務(wù)
DNS是:
1:一個(gè)由分層的DNS服務(wù)器實(shí)現(xiàn)的分布式數(shù)據(jù)庫;
2:一個(gè)允許主機(jī)查詢分布式數(shù)據(jù)庫的應(yīng)用層協(xié)議。
DNS服務(wù)器通常是運(yùn)行BIND軟件服務(wù)器機(jī)器证九。DNS協(xié)議運(yùn)行在UDP之上删豺,使用53號(hào)端口。
DNS用于將用戶提供的主機(jī)名解析為IP地址甫贯。例如當(dāng)某個(gè)用戶主機(jī)上的一個(gè)瀏覽器請(qǐng)求某個(gè)網(wǎng)頁時(shí)吼鳞,為了使用戶的HTTP請(qǐng)求消息發(fā)送到Web服務(wù)器,用戶主機(jī)首先必須獲得Web服務(wù)器的IP地址叫搁。
在前面介紹的Socket編程接口中有專門的函數(shù)如gethostbyname()允許程序發(fā)起一個(gè)主機(jī)名到IP地址的查詢赔桌。在Windows系統(tǒng)中專門有一個(gè)服務(wù)叫DNSClient完成DNS查詢工作(控制面板-管理工具-服務(wù)中可見)。
除了進(jìn)行主機(jī)名到lP地址的轉(zhuǎn)換外渴逻,DNS還提供了一些重要的服務(wù):
.主機(jī)別名
主機(jī)別名比主機(jī)規(guī)范名更容易記憶疾党,例如http://www.mit.edu,其真實(shí)的服務(wù)器名字(主機(jī)規(guī)范名)并不是http://www.mit.edu惨奕,大家可以用ping命令發(fā)現(xiàn)它真實(shí)的名字雪位。
.郵件服務(wù)器別名
一個(gè)單位或域中負(fù)責(zé)郵件收發(fā)的主機(jī)。
.負(fù)載均衡
DNS也可以用于在冗余的服務(wù)器之間進(jìn)行負(fù)載分配梨撞”⑾矗可以配置很多冗余的Web服務(wù)器,一個(gè)IP地址集合對(duì)應(yīng)于同一個(gè)規(guī)范主機(jī)名卧波。DNS數(shù)據(jù)庫中存儲(chǔ)著這些IP地址集合时肿。當(dāng)客戶機(jī)為映射到這個(gè)IP地址集合的名字發(fā)出一個(gè)DNS請(qǐng)求時(shí),該服務(wù)器用包含全部這些地址的消息進(jìn)行回答港粱,但在每個(gè)回答中輪回這些地址排放的順序螃成。因?yàn)榭蛻魴C(jī)通常總是向IP地址排在最前面的服務(wù)器發(fā)送HTTP請(qǐng)求消息查坪,所以就在所有這些冗余的Web服務(wù)器之間均衡分配負(fù)載寸宏。這是一種非常傳統(tǒng)的負(fù)載均衡技術(shù)。
2工作機(jī)理概述
假設(shè)運(yùn)行在用戶主機(jī)上的某些應(yīng)用程序(如Web瀏覽器)需要將主機(jī)名轉(zhuǎn)換為IP地址偿曙。這些應(yīng)用程序?qū)⒄{(diào)用DNS的客戶機(jī)端氮凝,并指明需要被轉(zhuǎn)換的主機(jī)名。在很多系統(tǒng)中望忆,應(yīng)用程序執(zhí)行這種轉(zhuǎn)換調(diào)用函數(shù)gethostbyname()覆醇。
DNS的客戶機(jī)端接收到轉(zhuǎn)換請(qǐng)求后朵纷,向網(wǎng)絡(luò)中發(fā)送一個(gè)DNS查詢消息炭臭。所有的DNS請(qǐng)求和回答消息使用UDP數(shù)據(jù)報(bào)經(jīng)端口53發(fā)送永脓。過若干時(shí)間后,用戶主機(jī)上的客戶機(jī)端接收到一個(gè)映射的DNS回答消息鞋仍。這個(gè)查詢結(jié)果則被傳遞到應(yīng)用程序常摧。
從用戶調(diào)用應(yīng)用程序的角度看,這是一個(gè)簡(jiǎn)單威创、直接的轉(zhuǎn)換服務(wù)落午。但事實(shí)上,實(shí)現(xiàn)這個(gè)服務(wù)的系統(tǒng)非常復(fù)雜肚豺,它由分布于全球的大量DNS服務(wù)器組成溃斋。
DNS不能采用集中式設(shè)計(jì)的原因:
.單點(diǎn)故障
.通信負(fù)擔(dān)
.延遲
.維護(hù)
?分布式、層次數(shù)據(jù)庫
為了處理規(guī)模問題吸申,DNS使用了大量的服務(wù)器梗劫,它們以層次方式組織,并且分布在全世界范圍內(nèi)截碴。大致有3種類型的DNS服務(wù)器:根DNS服務(wù)器梳侨、頂級(jí)域DNS服務(wù)器和權(quán)威服務(wù)器。這些服務(wù)器以圖中所示的層次結(jié)構(gòu)組織起來日丹。
假定一個(gè)DNS客戶機(jī)要確定主機(jī)名http://www.mit.edu的IP地址走哺。
域名查詢主機(jī)的DNSClient向本地域名服務(wù)器發(fā)起一個(gè)查詢。
本地域名服務(wù)器首先與根服務(wù)器之一聯(lián)系哲虾,取得頂級(jí)域名edu的TLD服務(wù)器的IP地址丙躏。
本地域名服務(wù)器然后與這些TLD服務(wù)器之一聯(lián)系,取得http://mit.edu權(quán)威服務(wù)器的IP地址束凑。
本地域名服務(wù)器為http://www.mit.edu聯(lián)系權(quán)威服務(wù)器晒旅,返回www主機(jī)的IP地址。
最后湘今,本地域名服務(wù)器將結(jié)果返還給DNSClient敢朱,操作系統(tǒng)將結(jié)果作為函數(shù)調(diào)用返回值給應(yīng)用程序。
三種類型的DNS服務(wù)器摩瞎。
.根ONS服務(wù)器拴签。在因特網(wǎng)上有13個(gè)根DNS服務(wù)器(標(biāo)號(hào)為A到M),其中大部分位于北美洲旗们。
.頂級(jí)域(TLD)服務(wù)器蚓哩。這些服務(wù)器負(fù)責(zé)頂級(jí)域名(如COM,ORG,GOV和所有國家的頂級(jí)域名(如CN)。
.權(quán)威DNS服務(wù)器上渴。將主機(jī)的名字映射為IP地址岸梨,由一個(gè)單位的權(quán)威DNS服務(wù)器負(fù)責(zé)保存這些記錄喜颁。另一種方法是支付費(fèi)用將這些記錄存儲(chǔ)在某個(gè)ISP的權(quán)威DNS服務(wù)器中。
根曹阔、TLD和權(quán)威DNS服務(wù)器都處在DNS服務(wù)器的層次結(jié)構(gòu)中半开。
本地DNS服務(wù)器嚴(yán)格來說并不屬于DNS服務(wù)器的層次結(jié)構(gòu),但它對(duì)DNS層次結(jié)構(gòu)又是很重要的赃份,本地DNS服務(wù)器通常與主機(jī)相隔不超過幾個(gè)路由器寂拆。當(dāng)主機(jī)發(fā)出DNS請(qǐng)求時(shí),該請(qǐng)求被發(fā)往本地DNS服務(wù)器抓韩,它起著代理的作用纠永,并將域名簡(jiǎn)析請(qǐng)求轉(zhuǎn)發(fā)到DNS服務(wù)器層次結(jié)構(gòu)中。
DNS查詢過程中可以是迭代查詢或是遞歸查詢谒拴。
3:DNS緩存
為了改善時(shí)延性能并減少在因特網(wǎng)上傳輸?shù)腄NS消息數(shù)量尝江,DNS廣泛使用了緩存技術(shù)。DNS緩存的原理非常簡(jiǎn)單英上。在請(qǐng)求鏈中炭序,當(dāng)一個(gè)DNS服務(wù)器接收一個(gè)DNS回答時(shí),服
務(wù)器能將回答中的信息緩存在本地存儲(chǔ)器善延。
另一個(gè)對(duì)相同主機(jī)名的查詢到達(dá)該DNS服務(wù)器時(shí)少态,該服務(wù)器能夠提供所要求的IP地址,
即使它不是該主機(jī)名的權(quán)威服務(wù)器易遣。但DNS服務(wù)器在一段時(shí)間后(通常設(shè)置為兩天》將丟棄緩存的信息彼妻。
4:DNS記錄和消息
實(shí)現(xiàn)DNS分布式數(shù)據(jù)庫的所有DNS服務(wù)器共同存儲(chǔ)著資源記錄(ResourceRecord,RR)豆茫。RR提供了主機(jī)名到IP地址的映射侨歉。每個(gè)DNS回答消息包含了一條或多條資源記錄。資源記錄通常以文本的形式保存在DNS服務(wù)器的配置文件中揩魂。資源記錄是一個(gè)包含了下列字段的4元組:
(Name幽邓,Value,Type火脉,TTL)
TTL是該記錄的生存時(shí)間牵舵,它決定了資源記錄應(yīng)當(dāng)從緩存中刪除的時(shí)間。
Name和value的值取決于Type:
如果Type=A倦挂,則Name是主機(jī)名畸颅,value是該主機(jī)名的IP地址。因此方援,一條類型為A的資源記錄提供了標(biāo)準(zhǔn)的主機(jī)名到IP地址的映射没炒。
如果Type=NS,則Name是域犯戏,而value是知道如何獲得該域中主機(jī)IP地址的權(quán)威DNS服務(wù)器的主機(jī)名送火。
如果Type=CNAME拳话,則value是別名為Name的主機(jī)對(duì)應(yīng)的規(guī)范主機(jī)名。該記錄能夠向請(qǐng)求主機(jī)提供一個(gè)主機(jī)名對(duì)應(yīng)的規(guī)范主機(jī)名种吸。
.如果Type=MX弃衍,則value是別名為Name的郵件服務(wù)器的規(guī)范主機(jī)名。使用MX記錄骨稿,一個(gè)公司的郵件服務(wù)器和其他服務(wù)器(如它的web服務(wù)器)可以使用相同的別名笨鸡。為了獲得郵件服務(wù)器的規(guī)范主機(jī)名,DNS客戶機(jī)應(yīng)當(dāng)請(qǐng)求一條MX記錄;而為了獲得其他服務(wù)器的規(guī)范主機(jī)名坦冠,DNS客戶機(jī)應(yīng)當(dāng)請(qǐng)求一條CNAME記錄。
DNS只有查詢和回答消息哥桥,并具有相同的格式辙浑。
如何在DNS數(shù)據(jù)庫中添加記錄
當(dāng)你申請(qǐng)了一個(gè)域名http://test.com,需要向某些注冊(cè)登記機(jī)構(gòu)注冊(cè)域名時(shí)拟糕,需要提供你的主DNS服務(wù)器和輔助權(quán)威DNS服務(wù)器的名字和IP地址判呕。
對(duì)這兩個(gè)權(quán)威DNS服務(wù)器地址,注冊(cè)登記機(jī)構(gòu)確保將一個(gè)類型NS和一個(gè)類型A的記錄輸入TLDcom服務(wù)器送滞。例如注冊(cè)登記機(jī)構(gòu)會(huì)將下列兩條資源記錄插入該DNS系統(tǒng)中:
(http://test.com侠草,http://dns1.test.com,NS)
(http://dns1.test.com犁嗅,210.210.111.12边涕,A)
你如果開通了Web服務(wù)器、郵件服務(wù)器褂微,那么需要在你的主域名服務(wù)器中添加www,主機(jī)的A類型記錄和類型為MX資源記錄功蜓。一旦完成所有這些步驟,人們就可以訪問你的Web站點(diǎn)宠蚂,并向你發(fā)送電子郵件了式撼。