DNS域名解析

艾賀發表於2018-03-05

這個知識點已經是老生常談,快被寫爛了,但是為了自己能理解的更清楚一點,還是選擇整理出一篇自己的文章。

DNS( Domain Name System)是“域名系統”的英文縮寫,主要作用就是將便於人類記憶的單片語合(如www.taobao.com),解析成不太容易記憶的數字組合(61.154.126.109)。

我覺得這是網際網路發展的必須結果,想一想如果沒有DNS系統,平時我們想要訪問百度,淘寶,騰訊的網站,都要在瀏覽器中輸入一長串的數字,耗時又不方便,並且一旦想要訪問的網站增多了,很多人也不願意記這麼多的數字在腦袋中。

然後好一點的辦法就是把那些數字記錄到一個清單裡,對應是那個網站。僅供個人使用的時候還挺方便,但是一旦與網民互相交流的時候,每個人的清單列法不一樣,討論起來也不一致,所以規範很重要。

DNS就相當於整個網站對映的規範,適應與全球的網站,國內GFW即利用了DNS汙染使得我們無法訪問一些國外的網站。

過程

DNS解析過程可以分為有快取的解析與無快取的解析,一般都是有快取的,雖然情況更復雜一些,但更貼近實際。

  1. 如果是在瀏覽器中輸入域名, 檢測瀏覽器是否有解析過的IP地址快取,有的話直接使用上次解析的IP結果。

  2. 瀏覽器無快取,則檢查系統快取。*nix下會檢查/etc/hosts檔案中是否有對應的快取。Windows下會檢查C:WindowsSystem32driversetchosts中內容。

    注意:黑客可以在解析的任一流程中修改解析對應的IP,將解析的IP指向黑客的伺服器,導致域名被劫持。

  3. 本地快取如果都沒有的話,會將要解析的域名(www.taobao.com)傳送到本地設定的 DNS伺服器。即LDNS
    Linux下的NameServer配置資訊在/etc/resolve.conf.

    這個專門的域名解析伺服器效能都會很好,它們一般都會快取域名解析結果,80%的域名解析到這裡基本已經完成了,所以LDNS主要承擔了域名的解析工作。

  4. 如果LDNS沒有命中結果,就直接到Root Server域名伺服器請求解析

  5. 根據域名伺服器返回給本地域名伺服器一個所查詢域的主域名伺服器,(gTLD Server)地址。gTLD是國際頂級域名服務,如.com, .cn, .org。

  6. 本地域名伺服器LDNS再向上一步返回的gTLD伺服器傳送請求。

  7. 接受請求的gTLD伺服器查詢並返回對應Name Server域名伺服器的地址。Name Server通常是註冊的域名伺服器。
    假如這是你再某個域名服務提供上申請的域名,那麼這個域名的解析任務由這個域名提供商的伺服器來完成。

  8. Name Server域名伺服器會查詢儲存域名和IP的關係對映表,正常情況下都根據域名得到目標IP記錄,連同一個TTL值返回給DNS Server域名伺服器。

  9. 根據返回該域名對應的IP和TTL值,本地DNS伺服器,LDNS會快取這域名和IP的對應關係,快取時間由TTL值來控制。

  10. 把解析的結果返回給使用者,使用者根據TTL值快取在本地系統快取中,域名解析過程結束。

最後

DNS域名解析過程在面試中也是經常問到的問題,做個整理,希望能幫助到大家,以後自己也方便檢視。

參考

  • 深入理解Java Web 技術內幕


相關文章