前言
當我們想瀏覽某一個網頁時,一般都會輸入對應的URL,這個其實就是請求對應資源的過程。那麼這個過程實質上經歷了什麼呢?
流程概述
- 查詢IP - 客戶端根據域名查詢對應的IP
- 建立連線 - 客戶端根據IP地址與伺服器連結
- 相互通訊 - 客戶端與資源伺服器通訊
- 斷開連線 - 客戶端與資源伺服器斷開連線
具體流程詳解
1.查詢IP
- 瀏覽器搜尋自己的 DNS 快取,查詢成功返回其對應 IP 地址,失敗則進行下一步;
- 搜尋系統中的 DNS 快取,查詢成功返回其對應 IP 地址,失敗則進行下一步;
- 搜尋系統中的 hosts 檔案,查詢成功返回其對應 IP 地址,失敗則進行下一步;
- 系統傳送一個請求到路由器上,路由器查詢其快取,查詢成功返回其對應 IP 地址,失敗則進行下一步;
- 系統將域名傳送至 LDNS(本地域名伺服器),查詢成功返回其對應 IP 地址,失 敗則 LDNS 向 Root Name Server(根域名伺服器)發起請求獲得域的頂級域名 伺服器地址,然後依次請求獲得各級域名伺服器地址,最後獲得域名對應 IP 地址;
- LDNS 將 IP 地址返回給作業系統並快取起來;
- 系統將 IP 地址返回給瀏覽器並快取起來;
- 瀏覽器獲得 IP 地址,發起建立連線的請求。
2.建立連線 - 三次握手
瀏覽器獲取相應的IP之後,就會對目標伺服器發起建立連線的請求,建立連線主要分三步,就是常說的三次握手:
- 瀏覽器傳送想和伺服器建立連線的請求(你好,可以認識一下麼?)
- 伺服器傳送同意建立連線的響應(你好,當然可以啊!)
- 瀏覽器向伺服器傳送確認受到響應的請求,並建立連線。(很高興認識你。)
3.相互通訊
建立連線之後,本次連線的主要目的來了,就是資料互動,這裡主要說客戶端請求資料
- 客戶端傳送一個請求頁面資源的請求
- 伺服器返回對應的資源
- 客戶端請求到相應的資源之後,進行頁面渲染之類的活,可能會繼續請求css、js等資源
4.斷開連線
資料通訊之後,要通過“四次揮手”斷開連線
- 瀏覽器向伺服器傳送想斷開連線的請求 (我要走啦);
- 伺服器向瀏覽器傳送收到請求的響應 (我知道啦);
- 伺服器向瀏覽器傳送斷開連線的請求;(可以了,我走啦)
- 瀏覽器斷開連線,並向伺服器傳送一個反饋請求,伺服器收到後斷開連線 (好的,拜拜)。
注意
斷開連線為為什麼必須這麼繁瑣的四次揮手?
主要是因為當客戶端告訴伺服器想斷開連線的時候,伺服器的資料不一定已處理完畢,所以伺服器是先告訴客戶端說已經收到了它想斷開連線的請求,然後當伺服器中資料處理完畢時,便斷開請求並通知客戶端,客戶端收到後也斷開請求並通知伺服器。