一個用戶在地址欄輸入例如www.baidu.com,DNS解析大概有10個過程:
DNS是Internet上作為域名和IP地址相互映射的一個分布式數據庫,是用戶更方便的訪問Internet,而不用去記住那些IP地址
①瀏覽器先檢查自身緩存中有沒有這個域名對應的IP地址,如果有,解析結束。
②如果瀏覽器緩存中沒有命中,瀏覽器會檢查自身操作系統緩存中有沒有相應的已經解析的過程。而且操作系統也有一個域名解析的過程。windows -> c盤 -> Windows -> System32 -> drivers -> etc -> hosts(如果在這里設置了一個域名對應的IP地址,那么瀏覽器就會首先使用這個IP地址,所以這種操作系統級別的域名解析通常會被黑客利用,通過修改你hosts文件里的內容把域名解析到他指定的ip地址上,造成所謂的域名劫持,所以將hosts文件設置成了只讀模式,防止被惡意篡改。)
③如果還沒有命中域名,這時才會真正的請求本地域名服務器(LDNS)來解析這個域名,這台服務一般在你城市的某個角落,距離不會很遠,並且他的性能很好,一般都會緩存域名解析結果,大概80%的域名解析到這里都結束了。
④如果本地域名服務器還是沒有命中,就直接跳到Root Server域名服務器請求解析
⑤Root Server服務器返回給LDNS一個所查詢域的主域名服務器地址(gTLD Server)
⑥這時LDNS再發送請求給上一步返回的gTLD
⑦接受請求的gTLD查找並返回這個域名對應的Name Server的地址,這個Name Server就是網站注冊的域名服務器
⑧Name Server根據映射關系表找到目標IP,返回給LDNS
⑨LDNS緩存這個域名和對應的IP
⑩LDNS把解析的結果返回給用戶,用戶根據TTL值(一條域名解析記錄在DNS服務器的存留時間)緩存到本地系統緩存中,域名解析過程到此結束。
瀏覽器如何通過域名去查詢URL對應的IP地址?
DNS優化與DNS負載均衡?
了解了DNS的過程,如果每次都經過這么多步驟,是否太耗時間?如何減少該過程的步驟呢?
那就需要DNS優化了
DNS緩存
DNS存在着多級緩存,從離瀏覽器的距離排序的話,有以下幾種: 瀏覽器緩存,系統緩存,路由器緩存,IPS服務器緩存,根域名服務器緩存,頂級域名服務器緩存,主域名服務器緩存。
DNS負載均衡
互聯網用戶巨大的今天,假如億萬請求請求的資源都位於同一台機器上面,那么這台機器隨時可能會蹦掉。處理辦法就是用DNS負載均衡技術,它的原理是在DNS服務器中為同一個主機名配置多個IP地址,在應答DNS查詢時,DNS服務器對每個查詢將以DNS文件中主機記錄的IP地址按順序返回不同的解析結果,將客戶端的訪問引導到不同的機器上去,使得不同的客戶端訪問不同的服務器,從而達到負載均衡的目的。例如可以根據每台機器的負載量,該機器離用戶地理位置的距離等等。
大家耳熟能詳的CDN(Content Delivery Network)就是利用DNS的重定向技術,DNS服務器會返回一個跟用戶最接近的點的IP地址給用戶,CDN節點的服務器負責響應用戶的請求,提供所需的內容。
