百度百科中的DNS介紹DNS介紹
DNS(Domain Name System,域名系統(tǒng))绪抛,萬(wàn)維網(wǎng)上作為域名和ip地址相互映射的一個(gè)分布式數(shù)據(jù)庫(kù),能夠使用戶更方便的訪問(wèn)互聯(lián)網(wǎng)鬼吵,而不用去記住能夠被機(jī)器直接讀取的ip數(shù)串。通過(guò)域名篮赢,最終得到該域名對(duì)應(yīng)的ip地址的過(guò)程叫做域名解析(或主機(jī)名解析)齿椅。DNS協(xié)議運(yùn)行在UDP協(xié)議之上,使用端口號(hào)53启泣。在RFC文檔中RFC 2181對(duì)DNS有規(guī)范說(shuō)明涣脚,RFC 2136對(duì)DNS的動(dòng)態(tài)更新進(jìn)行說(shuō)明,RFC 2308對(duì)DNS查詢的反向緩存進(jìn)行說(shuō)明寥茫。
DNS是什么
DNS是Domain Name System的簡(jiǎn)寫遣蚀,中文翻譯過(guò)來(lái)就是域名系統(tǒng),是用來(lái)將主機(jī)名轉(zhuǎn)換為ip的。事實(shí)上芭梯,除了進(jìn)行主機(jī)名到IP地址的轉(zhuǎn)換外险耀,DNS通常還提供主機(jī)名到以下幾項(xiàng)的轉(zhuǎn)換服務(wù):
1.主機(jī)命名(host aloasing)。有著復(fù)雜規(guī)范主機(jī)名的主機(jī)可能有一個(gè)或多個(gè)別名玖喘,通常規(guī)范主機(jī)名較復(fù)雜甩牺,而別名讓人更容易記憶。應(yīng)用程序可以調(diào)用DNS來(lái)獲得主機(jī)別名對(duì)應(yīng)的規(guī)范主機(jī)名累奈,以及主機(jī)的IP地址贬派。
2.郵件服務(wù)器別名(mail server aliasing)。DNS也能完成郵件服務(wù)器別名到其規(guī)范主機(jī)名以及ip地址的轉(zhuǎn)換澎媒。
3.負(fù)載均衡(load distribution)搞乏。DNS可用于冗余的服務(wù)器之間進(jìn)行負(fù)載均衡。一個(gè)繁忙的站點(diǎn)戒努,如abc.com请敦,可能被冗余部署在多臺(tái)具有不同ip的服務(wù)器上。在該情況下柏卤,在DNS數(shù)據(jù)庫(kù)中冬三,該主機(jī)名可能對(duì)應(yīng)著一個(gè)ip集合匀油,但應(yīng)用程序調(diào)用DNS來(lái)獲取該主機(jī)名對(duì)應(yīng)的ip時(shí)缘缚,DNS通過(guò)某種算法從該主機(jī)名對(duì)應(yīng)的ip集合中,挑選出某一ip進(jìn)行響應(yīng)敌蚜。
DNS的作用
DNS是因特網(wǎng)的目錄服務(wù)
DNS是因特網(wǎng)的目錄服務(wù)桥滨,它提供了主機(jī)名到ip地址映射的查詢服務(wù)。這種服務(wù)的起源之一是人和路由器的需求之間的矛盾弛车,主機(jī)可以用主機(jī)名或ip地址標(biāo)識(shí)齐媒,對(duì)我們?nèi)藖?lái)說(shuō)我們很喜歡像taobao.com或者是baidu.com之類的由便于記憶的單詞組成的主機(jī)名,但對(duì)于路由器來(lái)說(shuō)纷跛,它難以處理這種字母數(shù)字組成的主機(jī)名喻括,而更能接受ip地址。所以DNS就是根據(jù)主機(jī)名查詢對(duì)應(yīng)的ip地址的服務(wù)贫奠。
當(dāng)然DNS的作用不僅于此唬血。
DNS提供的具體服務(wù):
●提供了主機(jī)名到ip地址映射的查詢服務(wù)
●提供主機(jī)別名(host aliasing)服務(wù),有著復(fù)雜主機(jī)名的主機(jī)可以有一個(gè)或者多個(gè)別名,例如:aaa.xxx.com的主機(jī)可能還會(huì)有aaa.com和xxx.com兩個(gè)別名唤崭,在這種情況下拷恨,aaa.xxx.com叫做規(guī)范主機(jī)別名(canonical hostname)。主機(jī)別名的特征是比規(guī)范主機(jī)名更容易記憶谢肾,DNS可以提供根據(jù)主機(jī)別名獲取規(guī)范主機(jī)名的服務(wù)腕侄。
●提供負(fù)載分配服務(wù)(load distribution)。一般來(lái)說(shuō),被繁忙訪問(wèn)的大型站點(diǎn)是分布在多臺(tái)服務(wù)器上的冕杠,這個(gè)時(shí)候微姊,主機(jī)名和ip地址就不是一一對(duì)應(yīng)的關(guān)系,而是一個(gè)主機(jī)名對(duì)應(yīng)一個(gè)ip地址的集合拌汇。在大量的柒桑,連續(xù)的多次訪問(wèn)中,DNS通過(guò)旋轉(zhuǎn)ip地址達(dá)到負(fù)載均衡的目的:在向這個(gè)主機(jī)名發(fā)出DNS請(qǐng)求的時(shí)候噪舀,服務(wù)器會(huì)用包含全部這些ip地址的報(bào)文進(jìn)行回答魁淳,但在每個(gè)不同的回答中會(huì)旋轉(zhuǎn)這些ip地址的擺放順序,而客戶機(jī)總向報(bào)文中排在最前面的ip地址發(fā)出請(qǐng)求与倡。
DNS的性質(zhì)
從兩個(gè)層面上理解DNS:
第一界逛,從協(xié)議的層面看,它是一種應(yīng)用層協(xié)議
第二纺座,從實(shí)體的層面看息拜,它是一個(gè)由分層的DNS服務(wù)器實(shí)現(xiàn)的分布式數(shù)據(jù)庫(kù)
DNS應(yīng)用層協(xié)議
DNS資源記錄
DNS服務(wù)器存儲(chǔ)的資源記錄(Resource Records,RRs)净响,一條資源記錄(RR)記載著一個(gè)映射狀態(tài)少欺。每條RR通常包含如下表所示的一些信息:NAME和RDATA表示的含義根據(jù)TYPE的取值不同而不同,常見(jiàn)的:
1.若TYPE=A馋贤,則name是主機(jī)名赞别,value是其對(duì)應(yīng)的ip;
2.若TYPE=NS配乓,則name是一個(gè)域仿滔,value是一個(gè)權(quán)威DNS服務(wù)器的主機(jī)名。該記錄表示name域的域名解析將由value主機(jī)名對(duì)應(yīng)的DNS服務(wù)器來(lái)做犹芹;
3.若TYPE=CNAME崎页,則value是別名為name的主機(jī)對(duì)應(yīng)的規(guī)范主機(jī)名;
4.若TYPE=MX腰埂,則value是別名為name的郵件服務(wù)器的規(guī)范主機(jī)名飒焦;
5......
整體及Header部分
DNS協(xié)議
Header部分是一定有的蛔趴,長(zhǎng)度固定為12個(gè)字節(jié)挑辆;其余4部分可能有也可能沒(méi)有,并且長(zhǎng)度也不一定,這個(gè)在Header部分中有指明鱼蝉。Header的結(jié)構(gòu)如下:
1.ID:占16位洒嗤。該值由發(fā)出DNS請(qǐng)求的程序生成,DNS服務(wù)器在響應(yīng)時(shí)會(huì)使用該ID魁亦,這樣便于請(qǐng)求程序區(qū)分不同的DNS響應(yīng)渔隶。
2.QR:占1位。指示該消息是請(qǐng)求還是響應(yīng)洁奈。0表示請(qǐng)求间唉;1表示響應(yīng)。
3.OPCODE:占4位利术。指示請(qǐng)求的類型呈野,有請(qǐng)求發(fā)起者設(shè)定,響應(yīng)消息中復(fù)用該值印叁。0表示標(biāo)準(zhǔn)查詢被冒;1表示反轉(zhuǎn)查詢;2表示服務(wù)器狀態(tài)查詢轮蜕。3~15目前保留昨悼,以備將來(lái)使用。
4.AA(Authoritative Answer跃洛,權(quán)威應(yīng)答):占1位率触。表示響應(yīng)的服務(wù)器是否是權(quán)威DNS服務(wù)器。只在響應(yīng)消息中有效税课。
5.TC(TrunCation闲延,截?cái)啵赫?位痊剖。指示消息是否因?yàn)閭鬏敶笮∠拗贫唤財(cái)唷?br>
6.RD(Recursion Desired韩玩,期望遞歸):占1位。該值在請(qǐng)求消息中被設(shè)置陆馁,響應(yīng)消息復(fù)用該值找颓。如果被設(shè)置,表示希望服務(wù)器遞歸查詢叮贩。但服務(wù)器不一定支持遞歸查詢击狮。
7.RA(Recursion Available,遞歸可用性):占1位益老。該值在響應(yīng)消息中被設(shè)置或被清除彪蓬,以表明服務(wù)器是否支持遞歸查詢。
8.Z:占3位捺萌。保留備用档冬。
9.RCODE(Response code):占4位。該值在響應(yīng)消息中被設(shè)置。取值及含義如下:
● 0:No error condition酷誓,沒(méi)有錯(cuò)誤條件披坏;
● 1:Format error,請(qǐng)求格式有誤盐数,服務(wù)器無(wú)法解析請(qǐng)求棒拂;
● 2:Server failure,服務(wù)器出錯(cuò)玫氢。
● 3:Name Error帚屉,只在權(quán)威DNS服務(wù)器的響應(yīng)中有意義,表示請(qǐng)求中的域名不存在漾峡。
● 4:Not Implemented涮阔,服務(wù)器不支持該請(qǐng)求類型。
● 5:Refused灰殴,服務(wù)器拒絕執(zhí)行請(qǐng)求操作敬特。
● 6~15:保留備用。
- QDCOUNT:占16位(無(wú)符號(hào))牺陶。指明Question部分的包含的實(shí)體數(shù)量伟阔。
- ANCOUNT:占16位(無(wú)符號(hào))。指明Answer部分的包含的RR(Resource Record)數(shù)量掰伸。
- NSCOUNT:占16位(無(wú)符號(hào))皱炉。指明Authority部分的包含的RR(Resource Record)數(shù)量。
- ARCOUNT:占16位(無(wú)符號(hào))狮鸭。指明Additional部分的包含的RR(Resource Record)數(shù)量合搅。
Answer、Authority歧蕉、Additional部分
Answer灾部、Authority、Additional部分格式一致惯退,每部分都由若干實(shí)體組成赌髓,每個(gè)實(shí)體即為一條RR,格式如下圖所示:- NAME:長(zhǎng)度不定催跪,可能是真正的數(shù)據(jù)锁蠕,也有可能是指針(其值表示的是真正的數(shù)據(jù)在整個(gè)數(shù)據(jù)中的字節(jié)索引數(shù)),還有可能是二者的混合(以指針結(jié)尾)懊蒸。若是真正的數(shù)據(jù)荣倾,會(huì)以0x00結(jié)尾;若是指針骑丸,指針占2個(gè)字節(jié)舌仍,第一個(gè)字節(jié)的高2位為11鳖孤。
- TYPE:占2個(gè)字節(jié)。表示RR的類型抡笼,如A苏揣、CNAME、NS等推姻,見(jiàn)以上RR介紹平匈;
- CLASS:占2個(gè)字節(jié)。表示RR的分類藏古,見(jiàn)以上RR介紹增炭;
- TTL:占4個(gè)字節(jié)。表示RR生命周期拧晕,即RR緩存時(shí)長(zhǎng)隙姿,單位是秒;
-
RDLENGTH:占2個(gè)字節(jié)厂捞。指定RDATA字段的字節(jié)數(shù)输玷;
用wireshark抓到的一個(gè)DNS包
RDATA:即之前介紹的value,含義與TYPE有關(guān)靡馁,見(jiàn)以上RR介紹欲鹏。
DNS協(xié)議是工作在應(yīng)用層的,運(yùn)輸層依賴的是UDP協(xié)議臭墨。
DNS的工作過(guò)程
當(dāng)我們?cè)谝慌_(tái)客戶端上通過(guò)瀏覽器訪問(wèn)someschool.edu/index.html...
的時(shí)候赔嚎,DNS的工作過(guò)程是這樣的:
1.在這臺(tái)用戶主機(jī)上運(yùn)行有DNS的客戶機(jī)
2.該瀏覽器從上述URL中抽取someschool.edu,發(fā)給本主機(jī)的DNS客戶機(jī)
3.DNS客戶機(jī)向DNS服務(wù)器發(fā)送一個(gè)包含主機(jī)名someschool.edu的請(qǐng)求
4.返回的響應(yīng)報(bào)文里包含有目的IP地址胧弛,由瀏覽器獲取并對(duì)該IP地址對(duì)應(yīng)的HTTP服務(wù)器發(fā)起一個(gè)TCP連接尤误。
DNS服務(wù)器的層次和類別
DNS服務(wù)器是有層次的,它可以分為三種類型:根DNS服務(wù)器结缚,頂級(jí)域(Top-Level Domain, TLD)DNS服務(wù)器和權(quán)威DNS服務(wù)器损晤,分別對(duì)應(yīng)下面三個(gè)層次(從上至下)
根DNS服務(wù)器
因特網(wǎng)上有13個(gè)根DNS服務(wù)器, 其中大部分分布在北美洲掺冠,下面顯示的是2012年的根DNS服務(wù)器分布圖頂級(jí)域DNS服務(wù)器
頂級(jí)域DNS服務(wù)器負(fù)責(zé)頂級(jí)域名沉馆,如com码党,org德崭,edu和gov和所有國(guó)家的頂級(jí)域名如cn,uk揖盘,jp(edu教育機(jī)構(gòu)域名眉厨,gov政府部門域名,org非盈利性的組織兽狭,com企業(yè)域名)
權(quán)威DNS服務(wù)器
在因特網(wǎng)上具有公共可訪問(wèn)的主機(jī)的每個(gè)組織機(jī)構(gòu)必須提供公共可訪問(wèn)的DNS記錄憾股,這些記錄將這些主機(jī)的名字映射為IP地址鹿蜀。
由組織機(jī)構(gòu)的權(quán)威DNS服務(wù)器保存這些DNS記錄,組織機(jī)構(gòu)可以選擇實(shí)現(xiàn)它自己的權(quán)威DNS服務(wù)器來(lái)保持這些記錄服球,或者通過(guò)支付費(fèi)用將這些記錄存儲(chǔ)在某個(gè)服務(wù)提供商的DNS服務(wù)器中茴恰。多數(shù)大學(xué)和大公司實(shí)現(xiàn)和維護(hù)它們自己基本的權(quán)威DNS服務(wù)器。
本地DNS服務(wù)器
還有一類比較重要的DNS服務(wù)器斩熊,叫做本地DNS服務(wù)器(local DNS server),它并不在上面說(shuō)的DNS層次結(jié)構(gòu)中往枣。
本地DNS服務(wù)器的作用
●主機(jī)和本地DNS服務(wù)器一般是相鄰的,當(dāng)主機(jī)發(fā)出DNS請(qǐng)求的時(shí)候粉渠,該請(qǐng)求會(huì)被發(fā)往本地DNS服務(wù)器分冈,它起著代理的作用,并將該請(qǐng)求轉(zhuǎn)發(fā)到DNS服務(wù)器層次結(jié)構(gòu)中
●本地DNS服務(wù)器可以通過(guò)緩存主機(jī)名/IP地址霸株,減少對(duì)相同主機(jī)名的查詢而消耗的時(shí)間雕沉,改善延時(shí)和性能。
DNS的工作機(jī)理
DNS從實(shí)體的角度上看去件,就是一個(gè)分布式的數(shù)據(jù)庫(kù)坡椒,它實(shí)現(xiàn)關(guān)鍵數(shù)據(jù)的查詢和插入過(guò)程:
在DNS中查詢記錄
實(shí)際上,在DNS服務(wù)中尤溜,并不能通過(guò)對(duì)某個(gè)DNS服務(wù)器肠牲,通過(guò)僅僅一次的"請(qǐng)求/響應(yīng)"就取得主機(jī)名/IP地址的查詢結(jié)果。相反靴跛,需要多個(gè)不同的DNS服務(wù)器之間進(jìn)行多次交互才能獲取最終的查詢結(jié)果
如上圖所示例子缀雳,主機(jī)cis.poly.edu想知道主機(jī)gaia.cs.umass.edu的IP地址,并且主機(jī)gaia.cs.umass.edu的權(quán)威DNS服務(wù)器為dns.umass.edu梢睛。
則DNS查詢過(guò)程如下:
1.主機(jī)cis.poly.edu首先向它的本地DNS服務(wù)器dns.poly.edu發(fā)送一個(gè)DNS查詢報(bào)文肥印,該查詢報(bào)文含有要求轉(zhuǎn)換的主機(jī)名gaia.cs.umass.edu
2.本地DNS服務(wù)器dns.poly.edu將該報(bào)文轉(zhuǎn)發(fā)至根DNS服務(wù)器。
3.該根DNS服務(wù)器注意到DNS服務(wù)器的edu前綴并向本地DNS服務(wù)器dns.poly.edu返回負(fù)責(zé)edu的頂級(jí)域DNS服務(wù)器的ip地址列表
4.本地DNS服務(wù)器接收到了返回的報(bào)文绝葡,根據(jù)報(bào)文中的IP地址深碱,向該頂級(jí)域DNS服務(wù)器發(fā)送查詢報(bào)文
5.頂級(jí)域DNS服務(wù)器注意到了umass.edu前綴,用包含權(quán)威DNS服務(wù)器的IP地址進(jìn)行響應(yīng)藏畅,該權(quán)威DNS服務(wù)器是負(fù)責(zé)馬薩諸塞大學(xué)的dns.umass.edu
6.本地DNS服務(wù)器直接向主機(jī)dns.umass.edu重發(fā)查詢報(bào)文
7.主機(jī)dns.umass.edu使用gaia.cs.umass.edu的IP地址作為響應(yīng)敷硅,傳回給本地DNS服務(wù)器
8.最終,本地DNS服務(wù)器將包含最終結(jié)果的查詢報(bào)文轉(zhuǎn)發(fā)給請(qǐng)求主機(jī)http://cis.poly.edu
總共8份報(bào)文
可以看到愉阎,這8份報(bào)文由以下兩部分組成:
●請(qǐng)求主機(jī)和本地DNS服務(wù)器的請(qǐng)求/響應(yīng)绞蹦,共兩份報(bào)文
●本地DNS服務(wù)器和根DNS服務(wù)器,頂級(jí)域DNS服務(wù)器榜旦,權(quán)威DNS服務(wù)器的請(qǐng)求響應(yīng)幽七,共6份報(bào)文
DNS查詢方式
DNS查詢分為遞歸查詢和非遞歸查詢
所謂遞歸查詢是指接收請(qǐng)求的第一個(gè)域名服務(wù)器必須自始至終對(duì)請(qǐng)求進(jìn)行處理,或向其它域名服務(wù)器進(jìn)行請(qǐng)求且最終獲得授權(quán)數(shù)據(jù)溅呢,并對(duì)請(qǐng)求進(jìn)行應(yīng)答澡屡。采用遞歸查詢時(shí)猿挚,當(dāng)所請(qǐng)求的域名信息在自身緩沖區(qū)時(shí),域名服務(wù)器直接返回緩沖數(shù)據(jù)驶鹉。此時(shí)遞歸查詢請(qǐng)求標(biāo)志無(wú)效绩蜻。
所謂非遞歸查詢是指接收請(qǐng)求的第一個(gè)域名服務(wù)器可以返回可靠數(shù)據(jù)(本身有時(shí)),也可以返回指向其它服務(wù)器的指針(相當(dāng)于將查詢的接力棒傳給了最接近的域名服務(wù)器)室埋。
主機(jī)的地址解析程序在查詢時(shí)可以指定是否用遞歸還是非遞歸查詢方式辜羊。非遞歸查詢方式與遞歸查詢方式相比響應(yīng)速度快。