計算機網路應用層之網域名稱系統DNS

2021-08-27 15:28:30 字數 3616 閱讀 4092

一、為什麼存在dns

就像我們寄信需要乙個位址一樣,我們需要向網路上的某台主機通訊,也要知道我們的主機的位址。我們知道,這個位址就是ip位址,它是乙個可以在網際網路上唯一標識一台主機的位址。然而就如我們知道的那樣,ip位址只是4個十進位制數字,並不符合人們的記憶和使用,而人們希望使用有意義的易於記憶的主機名作為位址。而且這也更適合我們的生活習慣。舉個例子吧,就像我們身份證號一樣,每個人都有乙個身份證號,但是我們平時與人交流(通訊)時,並不會叫人們的身份證號,而是叫他的名字。然而通過這個名字(假設沒有重名),去查身份證的話,我們就可以找到乙個對應的身份證號。

然而,從平時使用網際網路來看,我們可以通過兩種方式來識別主機,一種是主機名,一種是ip位址,例如,可以使用

因為dns提供的就是主機名到ip位址轉換的目錄服務,即我們上面說到的,它會把

www.baidu.com轉換成ip位址115.239.210.27。

二、什麼是dns

知道了dns存在的意義後,讓我們更加詳細地看看,什麼是dns吧。dns是乙個由分層的dns伺服器實現的分布式資料庫,它是乙個允許主機查詢分布式資料庫的應用層協議,dns協議執行在udp之上,使用53號埠。

dns通常由其他應用層協議使用,用於將使用者提供的主機名解析為ip位址。下面以客戶機a用瀏覽器通過主機名

1)同一臺使用者主機上執行著dns應用的客戶機端

2)該瀏覽器從輸入的**中取得主機名,並將這個主機名傳給dns應用的客戶機端

3)該dns客戶機向dns伺服器傳送乙個包含主機名的請求

4)該dns客戶機最終收到乙份回答報文,其中包含對應於主機名的ip位址,在這個例子中為115.239.210.27

5)一旦該瀏覽器接收到來自dns的ip位址,它就可以向由該ip位址定位的http伺服器發起乙個tcp連線。

三、dns的工作原理

上面已經簡單地跟大家介紹過dns的工作方式了,但是對於乙個這麼好的服務、乙個這麼好用的協議,這點知識並不能滿足我們的求知慾,反而讓我們更加渴望了解它。

1、分布式、層次資料庫

為了處理規模問題,dns使用了大量的dns伺服器,它們以層次方式組織,並且分布在世界各地。注意,沒有一台dns伺服器具有所有主機的對映,相反,該對映分布在所有的dns伺服器上。大致來說,有3種型別的dns伺服器:根dns伺服器,頂級域dns伺服器(如com dns伺服器、org dns伺服器、edu dns伺服器等)和權威dns伺服器(如yahoo.com dns伺服器,qt-project.org dns伺服器、umass.edu dns伺服器等),它以為根dns伺服器為樹根,按樹形層次結構組織起來。

為什麼dns伺服器不是集中式而是分布式的呢?試想一下,假如網際網路使用集中式的dns伺服器,也就是說,網際網路上的所有主機要使用dns服務,都要向該集中的dns伺服器傳送請求,則當dns伺服器發生故障時,網際網路上的所有的主機都將不能使用dns服務。同時,所有的主機都向該dns伺服器傳送請求,單個的dns伺服器不得不處理所有的dns服務請求,然而dns伺服器能接收到的資料卻受到通訊容量(頻寬)的限制。此外,可能該dns伺服器集合可能離請求主機非常遠,則如果使用集中式的dns伺服器,則請求主機必須把請求傳輸非常遠的距離。看完下面的dns快取後,我們就可以更加清楚地看到分布式、層次的dns伺服器的好處。

ps:至於負責把主機名對應的ip位址的記錄放入根dns伺服器的資料庫的,是乙個全球唯一的機構——註冊登陸機構,就是它把記錄插入資料庫的。

1)根dns伺服器,在網際網路上有13個根dns伺服器(標號從a到m),儘管我們將這13個根dns伺服器中的每乙個都視為單個的伺服器,但實際上,根dns伺服器並不只有13臺主機,每台「伺服器」實際上是冗餘伺服器的群集,以提供安全性和可靠性。

2)頂級伺服器,負責頂級網域名稱(如,com、org、net)和所有國家的頂級網域名稱(如uk,fr,cn)。

3)權威dns伺服器,在網際網路上具有公共可訪問主機的每個組織機構必須提供公共可訪問的dns記錄,這些記錄將這些主機對映為ip位址。

4)本地dns伺服器,在上面的介紹中,沒有介紹本地dns伺服器,嚴格點來說本地dns伺服器並不屬於dns伺服器的層次結構,但是它對dns層次結構是非常重要的,在此不得不提。因為主機的本地dns伺服器通常「鄰近」本主機,所以當主機發出dns請求時,該請求被發往本地dns伺服器,它起著**的作用,並將該請求**到dns伺服器層次結構中。

知道了這些內容之後,我們再來看看,上面所說的dns服務是如何進行的。

1)首先客戶機向其本地dns伺服器傳送dns乙個dns查詢報文,該報文含有要被轉換的主機名

2)本地伺服器向根dns伺服器**該查詢報文

3)根dns伺服器注意到其com字首並向本地dns伺服器返回負責com的頂級dns伺服器的ip位址列表

4)本地dns伺服器再次向這些頂級dns伺服器傳送查詢報文

5)頂級dns伺服器注意到baidu.com字首,並返回權威dns伺服器的ip位址列表進行響應

6)最後本地dns伺服器直接向ww.baidu.com重發查詢報文,該服務用其ip位址進行響應

其查詢過程如下圖所示:

其實在現實中,還有一種查詢方式,如下:

1)首先,同樣地,首先客戶機向其本地dns伺服器傳送dns乙個dns查詢報文,該報文含有要被轉換的主機名

2)本地伺服器向根dns伺服器**該查詢報文

3)根dns伺服器注意到其com字首,並向com頂級dns伺服器**該查詢

4)頂級dns伺服器注意到baidu.com字首,並向ww.baidu.com**該查詢報文

5)最後獲得ip位址後,沿著4、3、2、1傳送響應報文返回到客戶機。

其過程如下圖所示:

第二個方法使用的是遞迴查詢,而第一種方式使用的則包括遞迴查詢和迭代查詢。

2、dns快取

其實前面所描述的過程,並不完全是現實中的查詢過程,至少在大多數情況下不是。為什麼?然而我們說dns是分層的、分布式的,但是,在前面的描述中,我們看到無論是第一種還是第二種查詢方式,都總要訪問那13個根dns伺服器,這就跟集中式沒有什麼區別了,它同樣有著集中式dns的所有缺點!這是因為我們還沒有討論dns系統中的乙個重要特徵——dns快取。

實際上,為了改善時延效能並減少在網際網路上到處傳輸的dns報文數量,dns廣泛使用了快取技術。它的原理非常簡單,在請求鏈中,當乙個dns伺服器接收到乙個dns回答(即包含主到名到ip的對映)時,dns伺服器能將回答中的資訊快取在本地儲存器。

例如,每當本地dns伺服器從某個dns伺服器收到乙個回答時,它就快取包含在該回答中的任何資訊。如果在dns伺服器中快取了乙個主機名/ip位址對,另乙個對相同主機名的查詢到達該dns伺服器時,該伺服器就能夠直接提供所要求的ip位址,即使它不是該主機名的權威dns伺服器。由於主機和主機名與ip位址間的資訊不是永久的,所以dns伺服器在一段時間後,將丟棄快取的資訊。

然而,所有的dns伺服器都採用這種機制——dns快取,也就是說,我們的請求將很少會要去到根dns伺服器才能被查詢出來,可能在本地dns伺服器就已經存在要要求的主機名的快取,也可能是在通向根dns伺服器的途中的某台dns伺服器上找到了。

看到這裡,你應該明白,為什麼dns是分布式、層次式的了吧,也明白為什麼它能解決集中式帶來的問題了吧!

計算機網路基礎 應用層 網域名稱系統DNS

網域名稱系統 domain name system縮寫dns,domain name被譯為網域名稱 是網際網路的一項核心服務,它作為可以將網域名稱和ip位址相互對映的乙個分布式資料庫,能夠使人更方便的訪問網際網路,而不用去記住能夠被機器直接讀取的ip數串。如圖 二級網域名稱 如圖所示是與網域名稱結構...

計算機網路 網域名稱系統

我們知道,在 網上使用的一連串的 數字號碼不好記,而具體的單位名稱或姓名就容易記,同樣,用點分十進位制的方法表示乙個ip位址確實也不好記,因此設計用名字來代替點分十進位制的數字會更加符合我們實際 網際網路的網域名稱系統dns是乙個分布式資料庫聯機系統,採用客戶機 伺服器應用模式,客戶機可以通過網域名...

《計算機網路》之應用層

應用層作為和使用者互動的最高層,其任務是直接為使用者的應用程序提供服務。應用層的具體內容就是規定應用程序在通訊時所遵循的協議。網際網路的應用層協議有很多,如最為熟知的http 埠號80 和ftp 埠號21 支援電子郵件的smtp 埠號25 網域名稱系統dns 埠號53 等。下面我們來簡單介紹網域名稱...