這道題目沒有所謂的完全的正確答案,這個題目可以讓你在任意的一個點深入下去, 只要你對這個點是熟悉的。以下是一個大概流程:
- 瀏覽器向DNS服務器查找輸入URL對應的IP地址。
- DNS服務器返回網站的IP地址。
- 瀏覽器根據IP地址與目標web服務器在80端口上建立TCP連接
- 瀏覽器獲取請求頁面的html代碼。
- 瀏覽器在顯示窗口內渲染HTML。
- 窗口關閉時,瀏覽器終止與服務器的連接。
這其中最有趣的是第1步和第2步(域名解析)。我們輸入的網址(域名)是IP地址的一個別名, 在一個DNS內,一個域名對應一個IP地址。域名系統(DNS) 的工作就是將域名與它的IP地址對應起來。DNS是分布式的,同時也是具有層級關系的。
一個域名服務器雖然只記錄一個小的子網內的主機名和IP地址, 但所有的域名服務器聯合起來工作,就能將全網內的域名與它們的IP地址對應起來。 這也就意味着,如果一個域名服務器無法找到某個請求域名所對應的IP地址, 它就會向其它的域名服務器發出請求進行尋找。
其實就是一個DNS的解析過程:
第一步:客戶機提出域名解析請求,並將該請求發送給本地的域名服務器。
第二步:當本地的域名服務器收到請求后,就先查詢本地的緩存,如果有該紀錄項,則本地的域名服務器就直接把查詢的結果返回。
第三步:如果本地的緩存中沒有該紀錄,則本地域名服務器就直接把請求發給根域名服務器,然后根域名服務器再返回給本地域名服務器一個所查詢域(根的子域)的主域名服務器的地址。
第四步:本地服務器再向上一步返回的域名服務器發送請求,然后接受請求的服務器查詢自己的緩存,如果沒有該紀錄,則返回相關的下級的域名服務器的地址。
第五步:重復第四步,直到找到正確的紀錄。
參考:
http://www.cnblogs.com/lichenghan/p/4019370.html
http://www.cnblogs.com/panxueji/archive/2013/05/12/3073924.html
http://www.cricode.com/2398.html
http://www.berlinix.com/net/from-url-input.php