從瀏覽器輸入一個URL(www.baidu.com)後執行全過程

從瀏覽器輸入一個URL(www.baidu.com)後執行全過程

1.根據域名到DNS中找到IP
2.根據IP建立TCP連接(三次握手)
3.連接建立成功發起http請求
4.服務器響應http請求
5.瀏覽器解析HTML代碼並請求html中的靜態資源(js,css)
6.關閉TCP連接(四次揮手)
7.瀏覽器渲染頁面

  1、客戶端瀏覽器通過DNS解析到www.baidu.com的IP地址202.108.22.5,通過這個IP地址找到客戶端到服務器的路徑。客戶端瀏覽器發起一個HTTP會話到202.108.22.5,然後通過TCP進行封裝數據包,輸入到網絡層。
  2、在客戶端的傳輸層,把HTTP會話請求分成報文段,添加源和目的端口,如服務器使用80端口監聽客戶端的請求,客戶端由系統隨機選擇一個端口如5000,與服務器進行交換,服務器把相應的請求返回給客戶端的5000端口。然後使用IP層的IP地址查找目的端。 (建立tcp連接)
  3、客戶端的網絡層不用關心應用層或者傳輸層的東西,主要做的是通過查找路由表確定如何到達服務器,期間可能經過多個路由器,這些都是由路由器來完成的工作,我不作過多的描述,無非就是通過查找路由表決定通過那個路徑到達服務器。 (IP的重要功能是尋址和路由)
  4、客戶端的鏈路層,包通過鏈路層發送到路由器,通過鄰居協議查找給定IP地址的MAC地址,然後發送ARP請求查找目的地址,如果得到迴應後就可以使用ARP的請求應答交換的IP數據包現在就可以傳輸了,然後發送IP數據包到達服務器的地址。(IP地址轉爲MAC)

事件順序

(1) 瀏覽器獲取輸入的域名www.baidu.com
(2) 瀏覽器向DNS請求解析www.baidu.com的IP地址
(3) 域名系統DNS解析出百度服務器的IP地址
(4) 瀏覽器發出HTTP請求,請求百度首頁
(5) 瀏覽器與該服務器建立TCP連接(默認端口號80)
(6) 服務器通過HTTP響應把首頁文件發送給瀏覽器
(7) TCP連接釋放
(8) 瀏覽器將首頁文件進行解析,並將Web頁顯示給用戶。

涉及到的協議

(1) 應用層:HTTP(WWW訪問協議),DNS(域名解析服務)
  DNS解析域名爲目的IP,通過IP找到服務器路徑,客戶端向服務器發起HTTP會話,然後通過運輸層TCP協議封裝數據包,在TCP協議基礎上進行傳輸

(2) 傳輸層:TCP(爲HTTP提供可靠的數據傳輸),UDP(DNS使用UDP傳輸)
HTTP會話會被分成報文段,添加源、目的端口;TCP協議進行主要工作

(3)網絡層:IP(IP數據數據包傳輸和路由選擇),ICMP(提供網絡傳輸過程中的差錯檢測),ARP(將本機的默認網關IP地址映射成物理MAC地址)
爲數據包選擇路由,IP協議進行主要工作,相鄰結點的可靠傳輸,ARP協議將IP地址轉成MAC地址。

 >>> 點擊網址後,應用層的DNS協議會將網址解析爲IP地址;

DNS查找過程

  1. 瀏覽器會檢查緩存中有沒有這個域名對應的解析過的IP地址,如果緩存中有,這個解析過程就將結束。

  2. 如果用戶的瀏覽器緩存中沒有,瀏覽器會查找操作系統緩存(hosts文件)中是否有這個域名對應的DNS解析結果。

  3. 若還沒有,此時會發送一個數據包給DNS服務器,DNS服務器找到後將解析所得IP地址返回給用戶。

 >>>在應用層,瀏覽器會給web服務器發送一個HTTP請求;
請求頭爲:GET http://www.baidu.com/HTTP/1.1

 >>>在傳輸層,(上層的傳輸數據流分段)HTTP數據包會嵌入在TCP報文段中;
  TCP報文段需要設置端口,接收方(百度)的HTTP端口默認是80,本機的端口是一個1024-65535之間的隨機整數,這裏假設爲1025,這樣TCP報文段由TCP首部(包含發送方和接收方的端口信息)+ HTTP數據包組成。

 >>>在網絡層中,TCP報文段再嵌入IP數據包中;
  IP數據包需要知道雙方的IP地址,本機IP地址假定爲192.168.1.5,接受方IP地址爲220.181.111.147(百度),這樣IP數據包由IP頭部(IP地址信息)+TCP報文段組成。

 >>> 在網絡接口層,IP數據包嵌入到數據幀(以太網數據包)中在網絡上傳送;
  數據幀中包含源MAC地址和目的MAC地址(通過ARP地址解析協議得到的)。這樣數據幀由頭部(MAC地址)+IP數據包組成。

 >>>數據包經過多個網關的轉發到達百度服務器,請求對應端口的服務;
  服務接收到發送過來的以太網數據包開始解析請求信息,從以太網數據包中提取IP數據包—>TCP報文段—>HTTP數據包,並組裝爲有效數據交與對應線程池中分配的線程進行處理,在這個過程中,生成相應request、response對象。

 >>>請求處理完成之後,服務器發回一個HTTP響應;
  請求處理程序會閱讀請求及它的參數和cookies。它會讀取也可能更新一些數據,並將數據存儲在服務器上。處理完畢後,數據通過response對象給客戶輸出信息,輸出信息也需要拼接HTTP協議頭部分,關閉後斷開連接。斷開後,服務器端自動註銷request、response對象,並將釋放對應線程的使用標識(一般一個請求單獨由一個線程處理,部分特殊情況有一個線程處理多個請求的情況)。

響應頭爲:HTTP/1.1200 OK

 >>>瀏覽器以同樣的過程讀取到HTTP響應的內容(HTTP響應數據包),然後瀏覽器對接收到的HTML頁面進行解析,把網頁顯示出來呈現給用戶。
  客戶端接收到返回數據,去掉對應頭信息,形成也可以被瀏覽器認識的頁面HTML字符串信息,交與瀏覽器翻譯爲對應頁面規則信息展示爲頁面內容。

  1. 由域名→IP 地址
    尋找 IP 地址的過程依次經過了瀏覽器緩存、系統緩存、hosts文件、路由器緩存、 遞歸搜索根域名服務器。

  2. 建立 TCP/IP 連接(三次握手具體過程)

  3. 由瀏覽器發送一個 HTTP 請求

  4. 經過路由器的轉發,通過服務器的防火牆,該 HTTP 請求到達了服務器

  5. 服務器處理該 HTTP 請求,返回一個 HTML 文件

  6. 瀏覽器解析該 HTML 文件,並且顯示在瀏覽器端

  7. 這裏需要注意:

  • HTTP 協議是一種基於 TCP/IP 的應用層協議,進行 HTTP 數據請求必須先建立 TCP/IP 連接

  • 可以這樣理解:HTTP 是轎車,提供了封裝或者顯示數據的具體形式;Socket 是發動機,提供了網絡通信的能力。

  • 兩個計算機之間的交流無非是兩個端口之間的數據通信 , 具體的數據會以什麼樣的形式展現是以不同的應用層協議來定義的。


.
參考文獻
————————————————
[1 ]15.瀏覽器輸入一個網址(www.baidu.com)後執行的全過程 原文鏈接:https://blog.csdn.net/u014590757/article/details/80035410
[2] 從瀏覽器輸入一個URL(www.baidu.com)的全過程 原文鏈接:https://blog.csdn.net/weixin_38497513/article/details/80918425


上一篇:TCP和UDP的區別分析與總結

下一篇:TCP三次握手、四次揮手幾常見面試題全集


歡迎各位訂閱我,謝謝大家的點贊和專注!我會繼續給大家分享我大學期間詳細的實踐項目。

在這裏插入圖片描述

△微信掃一掃關注「邁微電子研發社」公衆號

在這裏插入圖片描述

△掃碼加入「邁微電子研發社」學習輔導羣

在這裏插入圖片描述

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