1. 程式人生 > >當你輸入網址時都發生了什麼(1)——URL解析與DNS

當你輸入網址時都發生了什麼(1)——URL解析與DNS

最近做Java Web也有一段時間了,既然做網站,那麼怎麼能對訪問網站的流程沒有一個基本的呢,所以就整理了一下從輸入網址並回車的到成功訪問到網站的一個過程。

簡單來說,訪問網址的過程大致可以分為五步:

1.解析URL。

2.瀏覽器發起DNS查詢請求。

3.瀏覽器與網站建立連線。

4.進行資料的請求和傳輸。

5.瀏覽器根據伺服器發回的內容解析並渲染頁面。

這篇文章中我先介紹第一步和第二步。

首先我們先來看一下URL的格式:

protocol :// hostname[:port] / path / [;parameters][?query]#fragment

protocol表示的是所使用的協議,比如:https://www.baidu.com/中,用到的協議就是Http協議

hostname表示的是主機名,可以是域名,也可以是IP地址

port表示傳輸協議使用的介面號,可以省略不寫,如果省略不寫,那麼使用的是預設埠。

這三個內容應該是一段URL中最重要的內容。

對URL的解析中非常重要的一步就是得到我們要訪問的網站的IP地址或域名。

我們知道,IP地址是一個用點分十進位制法表示的長32位的地址,所以當我們訪問一個網址,例如說www.baidu.com的時候,實際上訪問的是一個類似於202.108.22.5這樣的地址。那麼如何將域名解析為地址,就是DNS需要做的。

首先,客戶機會檢查瀏覽器中是否快取了域名所對應的IP地址,如果沒有找到,那麼就檢查系統快取,系統快取中方沒有,就檢查路由器快取,如果路由器中快取還沒有,就要去向本地域名伺服器發起請求。

如果本地域名伺服器還沒有,就要去向根域名伺服器發起請求。

我們先來看一下域名伺服器的結構:

最高層次的域名伺服器是根域名伺服器,所有的根域名伺服器都知道所有的頂級域名伺服器的域名和IP地址,

接下來是頂級域名伺服器,然後是許可權域名伺服器。

當本地域名伺服器向根域名伺服器發起查詢時,該查詢是一個迭代查詢,這就意味著,根域名伺服器要告訴本地域名伺服器的內容,要麼是一個我們要訪問的域名對應的IP地址,要麼是本地域名伺服器該向哪個頂級域名伺服器發起查詢請求。當根域名伺服器中沒有我們要查詢的確切IP地址時,根域名伺服器會告訴本地域名伺服器去哪個頂級域名伺服器中查詢,對於頂級域名伺服器,也做類似操作。至於為什麼是這樣的查詢結構,這主要是為了減少伺服器的負擔,具體的內容本文就不再討論了。

而對於本地域名伺服器來說,它給客戶機返回的也只有兩種情況,要麼找到IP地址,並且返回;要麼沒有找到,返回報錯。

當客戶機成功接收到IP地址時,DNS的使命也就告一段落,但是此時我們的客戶機只是知道了伺服器的地址,連結還沒有建立,就好比我們要去拜訪一位朋友,現在只是知道了朋友家的地址,但是還沒有登門拜訪。

那麼下一篇文章就介紹“敲門”和“開門”的過程。