域名系統DNS(Domain Name System)是網際網路使用的命名系統,用于把便于人們使用的機器名字轉化為IP位址。使用者和網際網路上的某個主機進行通信的時候,必須要知道對方的IP位址,但是IP位址對于使用者來說是很那記住的,是以在應用層為了便于使用者記憶各種網絡應用,更多地是使用域名。
DNS是分布式的系統,是以即使單個計算機出現問題,也不會影響到整個DNS系統的正常運作。域名到IP位址的解析是由分布在網際網路上的許多域名服務程式共同完成的,解析過程大緻是這樣的:當一個應用程序需要把主機名解析為IP位址時,該應用程序就要調用解析程式,然後成為DNS的一個客戶,把解析的域名放在DNS請求封包中,以UDP使用者資料報方式發給本地域名伺服器(采用UDP是為了減小開銷),本地域名伺服器在查找到域名之後,把對應的IP位址放在回答封包中傳回。如果本地伺服器不知道這個域名怎麼轉換,那麼該域名伺服器就暫時成為DNS中的另外一個客戶,并向其他域名伺服器發出查詢請求。 通過以上的描述,相信大家也對DNS域名系統有了大緻的了解。下面将要繼續介紹網際網路的域名結構: 早期的網際網路使用的是非等級的名字空間,但是由于網際網路上的使用者數量急劇增加,是以網際網路後來就使用了層次樹狀結構的命名方法,任何一個連接配接在網際網路上的主機或者是路由器,都有一個唯一的層次結構的名字,就是域名(domain name)。“域”是名字空間中一個可被管理的劃分。域還可以劃分很多子域。這樣就有了頂級域、二級域、三級域等。例如:mail.cctv.com ,每一個域名都是由标号序列組成的,标号之間用點隔開。最右邊的是頂級域名,然後依次向左看是二級域名,三級域名。DNS規定,域名中的标号必須是英文字母或者是數字,每個标号不能夠超過63個字元(一般來說,為了記憶,最好不要超過12個字元),也不區分大小寫字元。标号中除了連字元“-”之外不能夠使用其他的符号。由多個标号組成的域名整體不能夠超過255個字元。 了解了網際網路的域名結構之後,接着我們再來了解下域名伺服器。本來理論上來說,可以讓每一級域名都有一個相應的域名伺服器,就像域名樹一樣。但是這樣做會使得域名伺服器的數量非常多。DNS采用了劃分區的方法來解決這個問題:
一個伺服器所負責管轄的範圍叫做區,每個區都設定了一個相應的權限域名伺服器(authoritative name server),用來儲存該區域所有主機的域名到IP位址的映射。DNS伺服器的管轄範圍不是以“域”為機關的,而是以“區”為機關的。從上圖我們可以發現,左邊的域abc.com和區“abc.com”是一樣的,但是右邊不一樣了,區abc.com和y.abc.com兩者屬于了域abc.com。不難發現區是域的子集。 下面我們将要了解四種不同域名伺服器: 1、根域名伺服器: 根域名伺服器是最高層次的域名伺服器,也是最重要的,所有域名伺服器隻要自己無法解析,就要首先求助于根域名伺服器。在網際網路中共有13個不同的IP位址的根域名伺服器,它們的名字是用一個英文字母命名的,從a一直到m。但是這些域名伺服器不是簡簡單單像看上一樣隻有13個機器負責。而是由13套裝置,每一套裝置使用一個域名,每一套裝置又在不同的地點有不同的機器負責,幾乎是遍布了全世界。但需要我們注意的是,根域名伺服器一般是不直接把需要查詢的域名轉化為IP位址傳回給本地域名伺服器的,而是告訴本地域名伺服器下一步應該去找哪一個頂級域名伺服器查詢。 2、頂級域名伺服器 3、權限域名伺服器 4、本地域名伺服器(local name server): 當一個主機發出DNS查詢請求的時候,這個查詢封包首先應該發送給本地域名伺服器。 知道了域名伺服器之後,我們還要知道域名伺服器是怎麼進行域名解析的,大緻來說應該有兩種方法: 1、主機向本地域名伺服器的查詢一般都是采取遞歸查詢(recursive query),所謂的遞歸查詢是這樣的,主機向本地域名伺服器詢問解析域名,如果本地域名伺服器不知道的話,那麼本地域名伺服器就作為DNS客戶的身份,咨詢根域名伺服器,而不是讓主機自己進行下一步查詢,最後将咨詢到的結果傳回給主機。 2、本地域名伺服器向根域名伺服器的查詢一般是疊代查詢(iterative query),所謂的疊代查詢是這樣的,當根域名伺服器收到了本地域名伺服器的請求的時候,根域名伺服器告訴本地域名伺服器下一步應該向哪一個域名伺服器進行查詢。而不是替本地域名伺服器進行下一步查詢。 DNS系統為了提高查詢效率,還使用了高速緩存,存在與主機還有本地域名伺服器中,如果近期查詢過的域名就會被緩存在其中,下一次進行查詢的時候就直接從緩存中找就好了。