要想深入理解DNS解析的過程,我們需要知道一些底層的東西和一些周邊的知識,本篇文章會圍繞這些來構建。
名詞解釋
前置知識
DNS
域名系統DNS(Domain Name System)是因特網使用的命名系統,用來把便于人們使用的機器名字轉換為IP地址。DNS屬于應用層協議,是基于UDP協議的。
hosts文件
hosts文件是ARPANET時代的解決方案,那時候只有數百臺計算機,一個hosts就能滿足需求。
域名(Domain)
mail.ccav.com
---- ---- ----
三級域名 二級域名 頂級域名
域名的層級是按照上面這么劃分的,每級域名長度不超過63個字符,不區分大小寫,只能使用數字字母和-。一個完整的域名不超過255個字符。
域名服務器劃分
了解域名服務器劃分之后,就會對DNS解析的過程大概有些了解。域名服務器按照層級分為:
本地域名服務器
本地域名服務器相當于一個班主任,你有點啥事都找他。當一個主機發出DNS查詢的時候,這個查詢的請求就會發送到本地域名服務器。
根域名服務器
根域名服務器是最高層次的域名服務,是校長,只負責規劃大方向。他知道所有頂級域名服務器的域名和IP地址。不管那個本地域名服務器若自己不能不能解析,那首先請求的就是根域名服務器。根域名服務器不會把待查詢的域名直接轉換成IP,而是告訴本地域名服務器下一步應該找哪一個頂級域名服務器進行查詢。
頂級域名服務器
頂級域名服務器是負責各個方向的副校長,有負責安全的,有負責教學的。他負責管理該頂級域名下的所有二級域名,當收到DNS查詢請求后就會給出響應的應答,可能是最終的結果,也可能是下一步應該找到的域名服務器的IP地址。
權限域名服務器
權限域名服務器就是負責一個區的域名服務器,是基層干活的,比如宿管,各科老師,他負責一個更小的區域。當一個權限服務還不能給出最后的回答時,就會告訴查詢請求的DNS客戶,下一步應該找哪個權限域名服務器。
域名查詢的兩種方式
這里只是通俗的講兩種查詢的方式,關于如何更好的理解并記住這種兩種方式,可以看這篇文章《怎么更好的理解DNS的迭代查詢與遞歸查詢》
遞歸查詢
遞歸查詢,就是你找我要一個域名的IP地址,但是我不知道,那我去幫你去向知道的人問這個IP地址。舉個例子就是,你問你班主任怎么做番茄炒雞蛋,你班主任不知道,但是你班主任去問了食堂廚師,然后告訴你。這就叫遞歸查詢。
從host到本地域名服務器一般是用的遞歸查詢。
迭代查詢
迭代查詢就是,你找我要一個域名的IP地址,我也不知道這個IP地址,但是我知道誰知道,我告訴你去找誰問。舉個例子就是,你們班主任到了食堂隨便拉了個人問怎么做番茄炒雞蛋,那個人說,我只是個賣飯的,我不知道,但是我知道A君是在后廚的,你可以去問A君。然后你班主任就去問A君了。吶,這就叫迭代查詢。
從本地域名服務器到根域名服務器一般是用的迭代查詢。
行了,該知道的儲備知識我們知道的差不多了,接下來就看看關鍵的流程吧。
DNS查詢步驟
假設一臺主機想知道y.abc.com這個域名的IP地址,那么整個的查詢過程如下:
- 主機先向其本地域名服務器進行遞歸查詢
- 本地域名服務器采用迭代的查詢,它先向根域名服務器查詢
- 根域名服務器告訴本地域名服務器,下一次應該查詢的頂級域名服務器的IP地址。
- 本地域名服務器向頂級域名服務器發起查詢。
- 頂級域名服務器告訴本地域名服務器,下一次應查詢的權限域名服務器IP地址
- 本地域名服務器向權限域名服務器發起查詢。
- 權限域名服務器告訴本地域名服務器所查詢的IP地址。
- 本地域名服務器把查詢結果告訴主機
給這個過程做個圖示,就是這樣的
整個的DNS查詢過程就是這樣的。結合前面的一些前置知識,你會感覺整個過程更簡單
文章來源:https://segmentfault.com/a/1190000023694985