從瀏覽器輸入網址回車到看到頁面過程到底經歷了什麼?

老油條IT記發表於2020-08-11

#前言:從瀏覽器輸入網址到回車看到頁面的過程,面試逃不掉的一個問題,我們知道從瀏覽器輸入網址到看到頁面主要是涉及DNS解析,TCP三次握手,請求報文,響應報文,TCP4次揮手。

 

#首先我們先來看一下總體的訪問過程

#總體的訪問過程:首先會進行DNS解析,然後解析得到地址之後客戶端和web伺服器會建立一條TCP連線,其中有一個TCP三次握手過程,當完成握手之後客戶端就會向瀏覽器傳送一條請求報文,伺服器然後進行響應,接著當資料傳輸完之後,伺服器和客戶端有一個TCP四次揮手過程,來結束連線。

 

#然後我們來將過程分解一下

#dns解析流程

在瀏覽器中輸入網址回車後,首先系統會去找這個域名對應的ip,然後再根據這個ip地址查詢web伺服器,
這裡面有個DNS解析流程
        1、系統首先查詢本地的DNS快取和hosts檔案資訊,確認是否有www.baidu.com對應的ip地址,如果有就直接訪問
        這個ip地址對應的www.baidu.com web伺服器
        2、如果沒有,那麼系統會將解析請求傳送給本機網路卡指定的DNS伺服器,稱為LDNS(本地dns),如果本地DNS伺服器
        中有域名www.baidu.com所對應的的ip地址,就會去訪問這個IP對應的web伺服器,如果沒有就去請求其他DNS伺服器
        3、LDNS伺服器會從根域名伺服器開始對於域名www.baidu.com的解析,全球有13臺根伺服器,根域名伺服器沒有
        www.baidu.com的解析記錄,有.com頂級域的解析記錄,然後把.com所對應的DNS伺服器地址返回給LDNS伺服器
        4、LDNS獲取到.com的DNS伺服器地址之後,就去.com伺服器請求www.baidu.com域名的解析,.com裡面也沒有www
        .baidu.com域名對應的地址,但是有baidu.com域名的解析記錄,然後.com伺服器將baidu.com對應的DNS伺服器地址
        返回給LDNS,
        5、同理LDNS去找baidu.com的DNS伺服器請求www.baidu.com的域名解析,然後baidu.com域名DNS伺服器將www.baidu.com地址對應的IP解析記錄傳送回給LDNS
        6、LDNS把解析出的結果www.baidu.com對應的ip地址傳送給客戶端的瀏覽器,然後也記錄到快取中

 

 #瀏覽器通過解析後得到的ip地址和埠號與web伺服器建立一條TCP連線通道

#tcp3次握手過程

 

 

三次握手指一個TCP連線時,需要客戶端和伺服器總共傳送3個包
    第一次握手:建立連線時,客戶端A傳送syn包(syn=j)到伺服器B,並進入Syn_send狀態,等待伺服器B確認
    第二次握手:伺服器B收到syn包,必須確認客戶A的syn(ACK=j+1),同時自己也傳送一個SYN包(syn=k),即SYN+ACK包,然後伺服器B進入SYN_RECV狀態
    第三次握手:客戶端A收到伺服器B的SYN+ACK包,向伺服器B傳送確認包ACK(ACK=k+1),包傳送完畢,客戶端A和服務端B進入ESTABLISHED狀態,完成三次握手

 

#建立TCP連線時,瀏覽器向web伺服器傳送一條HTTP請求報文

請求報文包括:請求行,請求頭部,空白行,請求報文主體
    請求行:
        用來說明客戶端想要做什麼,內容包括方法欄位(請求方法包括:GET:請求指定資源,HEAD,請求響應報文的首部,
        POST:提交資料到伺服器,PUT:傳送的資料取代指定的文件內容,DELETE:刪除Request-URI所標識的資源,MOVE:
        移動)、URL欄位以及HTTP協議版本(最開始的0.9版本,後來又有了1.0,1.1,2.0,其中1.1是主流)
        
    請求頭:
        通過客戶端把請求的相關資訊發給伺服器,內容包括媒體型別,語言型別,主機名等資訊
    
    空行:
        告訴伺服器空行以下內容不屬於請求頭部資訊
    
    請求報文主體:
        用來說明客戶端具體想要做的事情

 

#有請求報文來請求伺服器,就會有伺服器端去響應,為響應報文

 響應報文包括:狀態行,響應頭部,空白行,響應報文主體
    狀態行
        用來說明伺服器響應客戶端的狀態,包括一些狀態碼資訊:一些比較重要的狀態碼資訊有:
            200-ok                        訪問成功
            301-moved permanently       永久跳轉
            403-Forbidden                   禁止訪問,服務端設定了相關許可權,客戶端沒有許可權去訪問
            404-Not Found                    沒有找到訪問的頁面,客戶端請求的頁面不存在
            500-Internal servr error    內部伺服器錯誤
            502-Bad gateway                壞的閘道器
            503-Service Unavailble        服務不可用,服務超載或停機
            504-Gateway Timeout            閘道器超時,沒有在特定時間內處理請求
        
    響應頭將伺服器響應的相關資訊發給客戶端
        
    空行:
        告訴客戶端空行一下內容不屬於響應頭部資訊
        
    響應報文主體:
        將web服務資料資源返回給客戶端
            包括靜態網頁資源,動態網頁資源,和偽靜態資源
            純html格式的為靜態網頁,服務端寫的什麼就返回什麼給客戶端
            常見的靜態網頁字尾有html htm xml
            
            以.php .js .aspx結尾的為動態網頁,以資料庫為基礎,可以實現很多功能
            
            偽靜態網頁是通過一些技術(如rewrite重寫)將動態的URL偽裝成靜態的URL,但實際上還是動態的URL

 

#當完成資料傳輸之後,就會有一個四次揮手的過程來進行斷開連線

#tcp4次揮手過程

  第一次揮手
    客戶端A傳送一個FIN,用來關閉客戶端A到伺服器B的資料傳送
  第二次揮手
    伺服器B收到這個FIN,會回一個ACK,確認序號為收到的序號加1
  第三次揮手
    伺服器B關閉與客戶端A的連線,傳送一個FIN給客戶端A
  第四次揮手
    客戶端A發回ACK報文確認,並將確認序號設定為收到序號加1

 

相關文章