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

#前言:從瀏覽器輸入網址到回車看到頁面的過程,面試逃不掉的一個問題,我們知道從瀏覽器輸入網址到看到頁面主要是涉及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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章