瀏覽器開啟一個網頁的全流程

2023-06-11 06:00:34

瀏覽器開啟一個網頁的全流程

簡介

網際網路日常生活中最為常見的行為便是在瀏覽器輸入一個網址, 然後瀏覽網頁內容, 這樣一個簡單的行為背後有哪些技術細節呢, 本文將做一些介紹.

全流程可拆分為4個主要步驟

  1. 將域名解析為IP地址
  2. 與目標主機建立TCP連線 (三次握手)
  3. 傳送與接受資料
  4. 與目標主機斷開TCP連線 (四次揮手)

詳細介紹

1. 將域名解析為IP地址

IP地址是什麼?

IP地址類似於網際網路世界中的門牌號, 公網IP地址全球唯一, 其作為網際網路裝置的識別符號, 用來實現不同裝置之間的通訊.

IPv4和IPv6的區別

  • 主要區別: IPv4長度為32 bit, 而IPv6長度為128 bit (能夠唯一標識裝置的數量大大增加)
  • 此外在效率, 安全性和對移動裝置的支援上IPv6也更優優勢

域名是什麼?

網際網路中的任何一個裝置都可以通過一個公網IP存取, IP地址是數位, 記憶起來很麻煩, 所以就用域名來記憶. 域名的格式類似於hi.test.com, 其從右往左閱讀, 最右側為頂級域名(如.com, .org, .net), 頂級域名由ICANN維護; 次右為二級域名, 表示其他資訊, 這些資訊還可以繼續向左疊加.

為什麼使用域名?

  • IP地址是一串數位, 不便於記憶, 使用域名易於記憶
  • 一個域名可以對應多個IP, 使用者在存取時可以被分配到最近的伺服器, 同時也可以做負載均衡和容災

域名解析的簡要流程

  1. 查詢DNS快取
    1. 瀏覽器快取
    2. 作業系統快取
    3. 路由器快取
    4. 本地DNS伺服器快取 (例如企業, 學校的區域網DNS伺服器)
    5. ISP伺服器快取 (例如中國移動, 中國電信)
  2. 查詢外部DNS伺服器 (由本地DNS伺服器或者ISP迭代執行)
    1. 查詢根DNS伺服器, 獲取頂級DNS伺服器地址
    2. 查詢頂級DNS伺服器, 獲取NameServer伺服器地址
    3. 查詢NameServer, 獲取DNS解析結果

DNS解析過程中使用UDP協定

使用Wireshark抓包

  1. 使用者端->伺服器: [FIN]
  2. 伺服器->使用者端: [ACK]
  3. 伺服器->使用者端: [FIN]
  4. 使用者端->伺服器: [ACK]

為什麼建立連線是三次握手, 而關閉時需要四次揮手?

建立連線時: 伺服器端接收到使用者端的SYN後, 直接傳送 SYN+ACK 同時完成應答(ACK)和同步(SYN), 因此只需要三次.

TCP是全雙工的通訊協定, 使用者端傳送FIN表示自己的資料傳送完畢, 但此時伺服器端依然可以傳送資料到使用者端, 需要等待伺服器端傳送完畢資料後再傳送FIN表示伺服器端也完畢.

參考

【總結】存取一個網頁的全過程_網頁存取全過程_toumingren527的部落格-CSDN部落格

存取一個網頁的全過程(超詳細版)_web存取的過程_小包同學666的部落格-CSDN部落格

一個域名可以對應多個IP嗎?如何通過DNS實現? - 知乎 (zhihu.com)

DNS域名詳細解析過程(最全面,看這一篇就夠)_dns解析_bangshao1989的部落格-CSDN部落格

瀏覽器輸入網址,到顯示網頁全過程 - 知乎 (zhihu.com)

存取一個網頁的全過程(超詳細版)_web存取的過程_小包同學666的部落格-CSDN部落格

使用 WireShark 分析 TCP/IP 三次握手 和 四次揮手 - bylijian - 部落格園 (cnblogs.com)

http、https、tcp三次握手,四次揮手學習筆記 - 知乎 (zhihu.com)

聊聊 TCP 中的 KeepAlive 機制 - 知乎 (zhihu.com)

一次完整的HTTP請求過程是怎麼樣的呢?【圖文詳解】 - 知乎 (zhihu.com)

一文徹底搞懂 TCP三次握手、四次揮手過程及原理 - 知乎 (zhihu.com)

http://www.tcpipguide.com/free/t_TCPConnectionTermination-2.htm

TCP/IP協定棧詳解_mayifan_blog的部落格-CSDN部落格

深入理解HTTP協定 - 知乎 (zhihu.com)

https://www.geeksforgeeks.org/state-the-core-components-of-an-http-response/

https://zhuanlan.zhihu.com/p/359141330

後文

有些地方寫的有問題或者不夠明確, 歡迎看到這裡的朋友們糾正和補充

內容比較多, 後續還會繼續更新完善