1. 程式人生 > >【計算機網路】【WEB】DNS域名解析過程(十步走) 2018-9-28

【計算機網路】【WEB】DNS域名解析過程(十步走) 2018-9-28

DNS域名解析過程(十步走)

當用戶在瀏覽器中輸入域名並按下回車鍵後

DNS域名解析過程示意圖

第1步

瀏覽器會檢查快取中有沒有這個域名對應的解析過的IP地址,如果快取中有,這個解析過程就將結束。瀏覽器快取域名也是有限制的,不僅瀏覽器快取大小有限制,而且快取的時間也有限制,通常情況下為幾分鐘到幾小時不等,域名被快取的時間限制可以通過TTL屬性來設定。這個快取時間太長和太短都不好,如果快取時間太長,一旦域名被解析到的IP有變化,會導致被客戶端快取的域名無法解析到變化後的IP地址,以致該域名不能正常解析,這段時間內有可能會有一部分使用者無法訪問網站。如果時間設定太短,會導致使用者每次訪問網站都要重新解析一次域名。

第2步

如果使用者的瀏覽器快取中沒有,瀏覽器會查詢作業系統快取中是否有這個域名對應的DNS解析結果。其實作業系統也會有一個域名解析的過程,在 Windows中可以通過C: Windows System32 Adriversletc\hosts檔案來設定,你可以將任何域名解析到任何能夠訪問的IP地址。如果你在這裡指定了一個域名對應的IP地址,那麼瀏覽器會首先使用這個IP地址。例如,我們在測試時可以將一個域名解析到一臺測試伺服器上,這樣不用修改任何程式碼就能測試到單獨伺服器上的程式碼的業務邏輯是否正確。正是因為有這種本地DNS解析的規程,所以黑客就有可能通過修改你的域名解析來把特定的域名解析到它指定的IP地址上,導致這些域名被劫持。 這導致在早期的 Windows版本中出現過很嚴重的問題,而且對於一般沒有太多計算機知識的使用者來說,出現問題後很難發現,即使發現也很難自己解決,所以 Windows7中將hosts檔案設定成了只讀的,防止這個檔案被輕易修改。 在 Linux中這個配置檔案是/etc/ hosts,修改這個檔案可以達到同樣的目的,當解析到 這個配置檔案中的某個域名時,作業系統會在快取中快取這個解析結果,快取的時間同樣是受這個域名的失效時間和快取的空間大小控制的。 前面這兩個步驟都是在本機完成的,所以在圖1-10中沒有表示出來。到這裡還沒有涉及真正的域名解析伺服器,如果在本機中仍然無法完成域名的解析,就會真正請求域名伺服器來解析這個域名了。

第3步

如何、怎麼知道域名伺服器呢?在我們的網路配置中都會有“DNS伺服器地址”這一項,這個地址就用於解決前面所說的如果兩個過程無法解析時要怎麼辦,作業系統會把這個域名傳送給這裡設定的LDNS,也就是本地區的域名伺服器。這個DNS通常都提供給你本地網際網路接入的一個DNS解析服務,例如你是在學校接入網際網路,那麼你的DNS伺服器肯定在你的學校,如果你是在一個小區接入網際網路的,那這個DNS就是提供給你接入網際網路的應用提供商,即電信或者聯通,也就是通常所說的SPA,那麼這個DNS通常也會在你所在城市的某個角落,通常不會很遠。在 Windows下可以通過 ipconfig查詢這個地址,如圖1-11所示 這個專門的域名解析伺服器效能都會很好,它們一般都會快取域名解析結果,當然快取時間是受域名的失效時間控制的,一般快取空間不是影響域名失效的主要因素。大約80%的域名解析都到這裡就已經完成了,所以LDNS主要承擔了域名的解析工作。

第4步

如果LDNS仍然沒有命中,就直接到 Root server域名伺服器請求解析。

第5步

根域名伺服器返回給本地域名伺服器一個所査詢域的主域名伺服器(gTLDServer)地址。gTLD是國際頂級域名伺服器,如.com、.cn、.org等,全球只有13臺左右

第6步

本地域名伺服器( Local dns server)再向上一步返回的gTLD伺服器傳送請求。

第7步

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

第8步

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

第9步

返回該域名對應的IP和TTL值, Local dns Server會快取這個域名和IP的對應關係,快取的時間由TTL值控制。

第10步

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

在實際的DNS解析過程中,可能還不止這10個步驟,如 Name Server也可能有多級,或者有一個GTM來負載均衡控制,這都有可能會影響域名解析的過程。