前面已經提到了訪問一臺機器要靠IP地址和MAC地址,其中,MAC地址能夠經過ARP協議獲得,因此這對用戶是透明的,可是IP地址就不行,不管如何用戶都須要用一個指定的IP來訪問一臺計算機,而IP地址又很是很差記,因而就出現了DNS系統 數據庫
DNS的全稱是Domain Name System。它負責把FQDN(就是以"."分隔結尾的名字)翻譯成一個IP。最初的DNS系統使用的是一個巨大的hosts.txt文件(很吃驚,用 這個就好使了?),但是一段時間之後,開發這就不得不用數據庫來代替hosts.txt文件,最終發展到瞭如今的分佈式數據庫。 緩存
從書中的143頁能夠看到,DNS系統是一個巨大的樹,最上方有一個無名樹根,下一層是arpa,com,edu,gov,int,mil,us, cn。等等,其中arpa,是域名反解析樹的頂端;而com,edu,等域名原本只用在美國(這就是技術特權啊),可是如今幾乎全世界通用;而us, cn,等叫作國家域。這個樹裏面的域名並非統一管理的,網絡信息中心(NIS)負責分配頂級域合委派其餘制定地區域的受權機構。 服務器
一個獨立管理的DNS子樹叫作zone,最多見的區域就是二級域名,好比說.com.cn。咱們還能夠把這個二級域名給劃分紅更小的區域,好比說sina.com.cn。 網絡
DNS系統是一個分佈式的數據庫,當一個數據庫發現本身並無某查詢所須要的數據的時候,它將把查詢轉發出去,而轉發的目的地一般是根服務器,根服 務器從上至下層層轉發查詢,直到找到目標爲止。DNS還有一個特色就是使用高速緩存,DNS把查詢過的數據緩存在某處,以便於下次查詢時使用。 數據結構
DNS報文定義了一個既能夠查詢也能夠響應的報文格式。具體格式能夠看P145頁。對各個字段簡單解釋以下 dom
正向查詢指的是經過域名獲得IP的查詢,而反向查詢就是經過IP獲得域名。例如用host命令,host ip就能夠獲得服務器的域名,host domainName 就獲得IP。 分佈式
稍微知道一點數據結構的人都能意識到,在正向查詢的域裏面作反向查詢,其作法只有遍歷整個數據集合----對於DNS來講,那就是遍歷整個數據庫, 這將帶來巨大的負擔,因此DNS採起了另外一種方法,使用另外一棵子樹來維護IP-〉域名的對應表。這個子樹的根節點是in-addr.arpa,而一個IP 例如192.168.11.2)所具備的DNS地址就是 2.11.168.192.in-addr.arpa(ip倒置)。在DNS系統裏面,一個反向地址對應一個PTR紀錄(對應A紀錄),因此反向查詢又叫 作指針(PTR)查詢。 spa
BIND9默認是做爲一個高速緩存服務器,其將全部的查詢都轉交到根服務器去,而後獲得結果並放在本地的緩衝區,以加快查詢速度。若是有興趣能夠安裝一個BIND9來嘗試一下。而本身定義的zone則能夠規定其在緩存中的時間,通常是1天(就是配置文件中的1D)。 翻譯
DNS服務器支持TCP和UDP兩種協議的查詢方式,並且端口都是53。而大多數的查詢都是UDP查詢的,通常須要TCP查詢的有兩種狀況: 指針
完