???DNS(Domain Name System)
中文名稱為“域名系統(tǒng)”,它可以將你輸入的域名與IP之間進行轉換恨诱,所有公共網(wǎng)站都可以使用公共IP地址連接到Internet的服務器上運行,但這樣不利于人們記憶胜茧,于是我們必須想一種方法粘优,讓大家更方便的記住訪問服務器地址并能夠支持客戶端與服務器之間的通信仇味,于是就有了DNS系統(tǒng),將域名轉換成IP地址雹顺,這樣我們?nèi)ピL問網(wǎng)站則通過域名去訪問(例如丹墨,www.jd.com)。
域名解析過程
為了解決上述問題嬉愧,在早期的時候通常是使用一個文件來管理將主機名與IP地址一一對應贩挣,這個
文件就叫做hosts文件,該文件中定義了主機名與之對應的IP地址没酣,于是大家都使用這種方法王财,一種
叫“getipbyhostname()”,將域名轉換成IP(這里用映射或許比較好理解)裕便,一種叫“gethostnamebyip()”
搪搏,將ip轉換成主機名,這種方法在一段時間內(nèi)確實好用闪金。
那么問題來了疯溺,這種方法在早期計算機還非常的不普及確實好用,但是這種方法也有一個很大的
缺陷哎垦,假如服務器今天添加10臺囱嫩,明天添加好幾十臺,那么這個文件是不是每天都要更新漏设,那這樣
不是很麻煩嗎墨闲,那怎么辦呢?如果有專門的人來維護這個文件郑口,我們只從那里直接下載覆蓋hosts
文件就行鸳碧,確實是這樣,有專門的機構(IANA)來做這些事情犬性,以后任何服務器要想使用域名瞻离,就向
這個機構去申請,這個機構分配之后會更新自己的庫并添加這條記錄乒裆,然后你可以去下載這個文件
覆蓋掉自己的hosts文件就OK了套利。
雖說上述問題貌似解決了不少問題,但仔細想想好像還有問題鹤耍,那就是主機名和IP的對應關系
無法自動的在所有的計算機內(nèi)更新肉迫,且要將主機名加入該文件只能想IANA注冊,若IP數(shù)量太多稿黄,該
文件過大喊衫,也不利于其它主機同步化了,存儲也是個大問題杆怕,那如何去解決該問題呢族购,于是就有了
“DNS服務器”鼻听。
DNS服務器就是為了解決時效性和存儲的問題,IANA機構提供一臺服務器联四,當我們通過主機
名來訪問服務器撑碴,會利用getipbyhostname()方法首先會去檢查hosts文件有沒有對應的IP,如果
沒有則去訪問DNS服務器朝墩,如果注冊了客戶端與服務器就能通訊了醉拓,那這樣就解決了更新hosts文件
的問題及存儲問題,那有沒有想過收苏,當?shù)诙稳ピL問服務器的時候亿卤,還會去DNS服務器中找嗎,有可
不會鹿霸,因為在第一次訪問的時候本地會把結果緩存下來排吴,第二次去找則是先去hosts文件中查找,沒有則去緩存中查找懦鼠。
DNS結構
DNS是利用樹形的結構钻哩,將主機名的管理分配給不同層級的DNS服務器來管理,這樣做的好處就
在于每個DNS服務器管理的數(shù)據(jù)量沒有想像的那么大肛冶,在DNS系統(tǒng)的最上層是“.”街氢,這個DNS服務器叫
root,我們也可以叫做根睦袖,因為它根Linux文件系統(tǒng)一樣有層級概念珊肃,在根下有頂級域ttl(.com,.net,.org,.gov,.edu,.mil)
,頂級域下面有二級域(baidu馅笙、jd伦乔、tmall、....)董习,二級域下面也可以有三級域或者直接是主機烈和,
這種機制被稱為“授權管理機制”。
頂級域:
.com | 公司阱飘、行號斥杜、企業(yè) |
---|---|
.org | 組織虱颗、機構 |
.edu | 教育單位 |
.gov | 政府單位 |
.net | 網(wǎng)絡沥匈、通信 |
.mil | 軍事單位 |
國家域:
???.iq,.tw,.hk,.jp,.cn
DNS查詢類型:
???1)遞歸查詢
???2)迭代查詢
所謂的`遞歸查詢`就是從客戶端發(fā)出請求到訪問本地DNS服務器的過程,之間只發(fā)出一個請求忘渔。
所謂`迭代查詢`就是從客戶端發(fā)出請求到訪問本地DNS服務器高帖,如果該請求不是本地DNS服務器
負責的解析域則去請求根,根如果不負責則把結果返回給本地DNS服務器畦粮,讓它去找其它的域散址,之間有多個請求乖阵。
DNS解析方式
:
???正向解析(主機名--->IP)
???反向解析(IP--->主機名)
DNS第一次完整查詢經(jīng)過的流程
Client --> hosts文件 --> DNS Local Cache --> DNS Server(recursion) -->
自己負責解析的域:直接查詢數(shù)據(jù)庫并返回答案
不是自己負責解析域:Server Cache --> iteration(迭代)
???例如:我們要想知道www.baidu.com主機的IP,整個查詢的流程是怎么樣的(如圖:)
首先本地主機去hosts文件中查找有沒有對應的www.baidu.com這個家伙预麸,沒有就是請求本地DNS服務器瞪浸,結果發(fā)現(xiàn)這個家伙不是我負責的,那它就去請求root吏祸,root說這個我不負責对蒲,但我知道.com這個負責,于是告訴localDNSserver你去找.com吧贡翘,localDNSserver就去找.com蹈矮,結果.com也說不負責管理這個家伙,同樣給出反饋說.baidu知道鸣驱,于是localDNSserver就去找.baidu.com了泛鸟,一查,發(fā)現(xiàn)www.baidu.com注冊了踊东,于是把結果返回給localDNSserver北滥,最后把結果給本機,最后就能夠訪問www.baidu.com了闸翅,著實辛苦碑韵,是不是感覺踢皮球啊。