輸入url后瀏覽器干了些什么(詳解)


輸入url后瀏覽器干了些什么(詳解)

DNS(Domain Name System, 域名系統) 解析

DNS解析的過程就是尋找哪台機器上有你真正需要的資源過程.但你在瀏覽器張紅輸入一個地址時,例如:baidu.com,其實不是百度網站真正意義上的地址.互聯網上每一台計算機的唯一標識是他的IP地址,但是IP地址並不方便記憶.用戶更細化用方便記憶的網址去尋找互聯網上的其他計算機.也就是上面提到的百度的網址.所以互聯網設計者需要在用戶的方便性與可用性做一個權衡,這個權衡就是一個網址到IP地址的轉換,這個過程就是DNS解析.他實際上充當了一個翻譯的角色,實現了網址到IP地址的轉換.當然如果你直接輸入的是另一台電腦的IP地址來訪問他,那么不存在這一步.

TCP連接(三次握手)

知道了服務器的IP地址,就開始和服務器簡歷連接了.連接的建立需要經歷三次握手

  • 第一次握手: 建立連接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SENT,等待服務器確認.
  • 第二次握手: 服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態
  • 第三次握手: 客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED(TCP鏈接成功狀態),完成三次握手

發送HTTP請求

當服務器與主機建立了鏈接以后,注意開始和服務器進行通信.網頁請求是一個單向請求的過程.即一個主機向服務器請求數據,服務器返回相應的數據的過程.瀏覽器根據URL內容生成HTTP請求,HTTP請求報文是由三部分組成:請求行,請求報頭,請求正文.

服務器處理請求並返回HTTP報文

服務器接到請求后,會根據HTTP請求中的內容來決定如何獲取相應的HTML文件,服務器得到的HTML文件發送給瀏覽器.HTTP響應報文也是由三部分組成:狀態碼,響應頭,響應報文.

  • 狀態碼
    • 1xx: 指示信息,標示請求已接收,急需處理.
    • 2xx: 成功信息,標示請求已被成功接收,理解,接收
    • 3xx: 重定向,要完成請求必須進行更進一步的操作
    • 4xx: 客戶端錯誤,請求有語法錯誤或請求無法實現
    • 5xx: 服務器端錯誤,服務器未能實現合法的錯誤
  • 響應頭
    • 常見的響應頭字段有:Server,Connection..
  • 響應報文
    • 服務器返回給瀏覽器的文本信息,同昌HTML,CSS,JS,圖片等文件就放在這一部分

瀏覽器解析渲染頁面

在瀏覽器還沒有在完全接受HTML文件時便開始渲染,顯示網頁
在執行HTML中的代碼時,根據需要,瀏覽器會繼續請求圖片,CSS,JavaScript等文件.過程同請求HTML

連接結束

四次回收連接

  • 客戶端進程發出連接釋放報文,並且停止發送數據.釋放數據報文首部.FIN=1,其序列號為seq=u(風雨前面已經傳過來的數據的最后一個序號+1),此時,客戶端進入FIN-WAIT-1(終止等待1)狀態.TCP規定,FIN報文段即使不攜帶數據,也要消耗一個序號.
  • 服務器收到連接釋放報文,發出確認報文,ACK=1,ack=u+1,並且帶上自己的序列號seq=v此時,服務端就加入了CLOSE-WAIT(關閉-等待)狀態.TCP服務器同之高層的應用進程,客戶端向服務器的方向接釋放了,這時處於半關閉狀態,及客戶端已經沒有數據要發送了.但是服務器若發送數據,客戶端仍然接收.這個狀態還要持續一段時間,也就是整個CLOSE-WAIT狀態持續的時間.
  • 客戶端收到服務器的確認請求后,此時,客戶端就進入FIN-WAIT-2(終止等待2)狀態,等待服務器發送連接釋放報文(在這之前還需要接收服務器發送的最后數據).
  • 服務器將最后的數據發送完畢后,就像客戶端發送連接釋放報文,FIN=1,ack=u+1,由於在半關閉狀態,服務器很可能又發送了一些數據,假定此時的序列號為seq=w,此時,服務器就進入了LAST-ACK(最后確認)狀態,等待客戶端的確認
  • 客戶端收到服務器的連接釋放報文后,必須發出確認,ACK=1,ack=w+1,而自己的序列號是seq=u+1,此時客戶端進入了TIME-WAIT(時間等待)狀態.注意此時TCP連接沒有釋放,必須經過2MSL(最長報文段壽命)的時間后,當客戶端撤銷相應的TCB后,才進入CLOSED狀態
  • 服務器只要收到客戶端發出的確認,立即進入CLOSED狀態.同樣,撤銷TCB后,就結束了這次TCP連接.可以看到,服務器結束TCP連接的時間比客戶端要更早一些


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM