dns協議也可以稱為dns服務,全稱是domain name system,即網域名稱系統,和http協議一樣,也是乙個位於應用層的協議(服務),它是基於運輸層的udp協議的,關於網路協議的分層介紹,見這裡(還沒有寫好,先放這裡乙個空鏈結)。 從dns的名字我們就可以知道,它提供網域名稱對映到ip位址的服務,那麼在我們詳細說dns協議之前,先來大致講講網際網路的網域名稱結構。
1. 網域名稱結構
我們都知道,在網際網路中,每一台計算機想要訪問網際網路,都需要乙個ip位址來進行網路通訊,可以是形如192.168.1.1
這樣的點分十進位制的ipv4位址,也可以是形如[0:0:0:0:0:0:0:1]
這樣方括號包圍的十六進製制的ipv6位址,但是這些位址不便於記憶,所以就產生了網域名稱這種方便人們記住的東西(當然你要是記憶力好能記住ip位址,在瀏覽器位址列輸入url的時候,也可以直接用ip位址替換掉網域名稱,效果是一樣的)。
網域名稱也可以叫做主機名。這裡我們先給出乙個網域名稱,例如www.abc.com
,以這個網域名稱為例,來看一下網域名稱的結構。
網域名稱採用層次化的結構,其中com
是頂級網域名稱,abc
是二級網域名稱,www
是**網域名稱,從語法上來說,每個網域名稱都是幾個不同層級的名字用.
連線起來的組合,網域名稱不區分大小寫字母,所以www.abc.com
和www.abc.com
是一樣的,按照規定來說,網域名稱有長度限制,這裡就不再細講。
上面提到,com
是乙個頂級網域名稱(tld,top level domain),除了com
之外,頂級網域名稱還有好多,一般來說可以分為:
所以說,在中國,企業的網域名稱一般可以是***.com
、***.com.cn
、***.cn
。
下面這個網域名稱樹,清晰地展示了網際網路的網域名稱空間:
在圖中,edu.cn
下面,劃分除了很多**網域名稱,如tsinghua
、pku
等,一旦某個單位有了乙個網域名稱,它就可以自己決定是否要進一步劃分下屬的子域,網域名稱樹的樹葉節點就是單台計算機的名字,不能再繼續劃分了,例如mail
和www
這兩台計算機的完整網域名稱分別為mail.tsinghua.edu.cn
和www.tsinghua.edu.cn
(這裡起什麼名字都可以,一般來說,人們願意把用作郵件伺服器的計算機叫做mail,把用作**的伺服器叫做www)。
到這裡,我們已經知道了為什麼要有網域名稱以及網域名稱的結構,網域名稱就是為了便於人們記憶而產生的,但是網域名稱是方便人們記憶了,計算機反而不好處理了,它更善於處理ip位址這種東西,所以這裡就用到了我們要講的dns協議,用來把網域名稱對映到ip位址,在了解dns解析網域名稱的過程之前,我們還需要了解一下網域名稱伺服器這種東西(怎麼這麼多東西,寫個部落格好麻煩啊23333)。
2. 網域名稱伺服器(dns伺服器)
上面說到了網域名稱體系的樹狀結構,為了實現網域名稱系統,我們首先想到的就是在網域名稱樹的每個節點都設定一台對應的伺服器,這樣就可以了,但是這樣做的後果就是導致網域名稱伺服器太多,網域名稱系統的執行效率太低,所以,通常是將好多個節點劃分為乙個區,用分割槽的方式來實現網域名稱系統,如下圖:
其中,(a)是abc這個公司只設定了乙個分割槽的樣子,(b)是abc公司設定了兩個分割槽的樣子,這兩個區分別為abc.com
和y.abc.com
,這兩個區對應了兩個許可權網域名稱伺服器(後面還會提到)。下圖可以看出網域名稱伺服器的層次結構:
由上圖可以看出,根據網域名稱伺服器起的作用,可以把網域名稱伺服器分為四種不同的型別:
3. 網域名稱解析過程
在了解了上面的網域名稱結構以及網域名稱伺服器之後,我們來看一下網域名稱的解析過程,總的來講,主機向本地網域名稱伺服器的網域名稱查詢一般採用遞迴查詢,而本地網域名稱伺服器向根網域名稱伺服器的查詢一般採用迭代查詢。
概念其實很簡單,遞迴查詢就是如果主機向本地網域名稱伺服器查詢ip,本地網域名稱伺服器不知道ip位址,這是本地網域名稱伺服器就代替主機稱為dns客戶,向根網域名稱伺服器進行下一步查詢。而迭代查詢就是,在本地網域名稱伺服器向根網域名稱伺服器查詢時,根網域名稱伺服器要麼給出最終的ip位址,要麼給出下一步本地網域名稱伺服器要訪問的頂級網域名稱伺服器的ip位址,之後本地網域名稱伺服器再去訪問相應的頂級網域名稱伺服器(而不是讓根網域名稱伺服器代替本地網域名稱伺服器去進行下一步查詢)。簡單來說,遞迴查詢返回具體ip位址或者報錯沒找到,迭代查詢返回具體ip位址或者返回下一步的ip位址。如下圖:
當然,我們也可以指定查詢方式讓查詢過程全程使用遞迴查詢,如下圖:
下面以乙個例子說說明在無快取的情況下(下面會談到快取),通過dns來查詢網域名稱的步驟,假設網域名稱為m.xyz.com
的主機想要查詢
主機m.xyz.com
先向本地網域名稱伺服器dns.xyz.com
進行遞迴查詢。
本地網域名稱伺服器無法給出ip位址,所以本地網域名稱伺服器向(離自己最近的)根網域名稱伺服器查詢,這是的查詢已經變為了迭代查詢。
根網域名稱伺服器根據本地網域名稱伺服器傳送的報文,知道了下一步應該查詢的是哪個頂級網域名稱伺服器,這時根網域名稱伺服器告訴本地網域名稱伺服器,下一步應該查詢的頂級網域名稱伺服器dns.com
的ip位址。
本地網域名稱伺服器向頂級網域名稱伺服器dns.com
傳送請求查詢。
本地網域名稱伺服器向許可權網域名稱伺服器dns.abc.com
傳送請求查詢。
許可權網域名稱伺服器dns.abc.com
告訴本地網域名稱伺服器想要查詢的網域名稱y.abc.com
的ip位址。
本地網域名稱伺服器在拿到ip位址後,將ip位址返回給主機m.xyz.com
。 這就是網域名稱查詢的具體過程,因為dns協議的基於udp協議,所以上述8個步驟中,總共使用了8個udp報文。
上面提到,這是在沒有快取的情況下的dns查詢,實際上,為了提高查詢的效率以及降低根網域名稱伺服器的負荷,一般來說網域名稱伺服器中都有快取記憶體,用來記錄最近查詢過的網域名稱的快取,如果在查詢網域名稱時,有想要的網域名稱到ip的對映快取,並且快取沒有過期,那麼就直接將快取中網域名稱對映的ip位址返回,省去了接下來的查詢。只有在沒有快取或者快取過期了才會進行下一步的查詢。實際上,不知網域名稱伺服器有快取,每台計算機甚至瀏覽器都會對網域名稱到ip的對映進行快取,這樣一來大大加快的dns的查詢速度。
上面這些就是dns協議的大概了,如果覺得有**寫的不對的,還請多多指教。
DNS協議解析
dns是引用層協議,傳輸層用udp,採用 請求 響應 模式。1.1.網域名稱結構 網域名稱系統並不像 號碼通訊錄那麼簡單,通訊錄主要是單個個體在使用,同乙個名字出現在不同個體的通訊錄裡並不會出現問題,但網域名稱是群體中所有人都在用的,必須要保持唯一性。為了達到唯一性的目的,網際網路在命名的時候採用了...
理解DNS協議
tcp ip協議用ip位址 埠號,確定網路中某台計算機中的某個程式,但ip位址太長不方便記憶,出現了網域名稱 www.baidu.com hosts檔案 儲存網域名稱 ip對應關係的字典 早期,網際網路資訊中心管理hosts檔案,有乙個新的計算機想加入網路,或ip位址要修改 需要到資訊中心申請修改,...
DNS協議分析
dns domain name system,網域名稱系統 dns通過網域名稱和ip位址相互對映的乙個分布式資料庫,使易記的網域名稱替代了枯燥的ip位址。在網際網路中向主機提供網域名稱解析服務的機器即為dns伺服器。dns是基於ip協議中的udp協議,埠號為53。目前,dns分布式查詢方式一般採用遞...