1、在瀏覽器輸入一個地址,並回車。
- 解析url
- 檢查緩存,如果緩存有,則直接讀取緩存,緩存沒有則進行DNS解析
- 進行DNS域名解析
- 瀏覽器發起TCP三次握手
- 握手成功后如果有TLS/SSL,則進行SSL握手
- 握手成功后發送HTTP請求
- 返回HTTP響應
- 瀏覽器解碼響應,如果響應可以緩存,則存入緩存
- 瀏覽器發送請求獲取HTML中的資源(html、css、圖片、音樂等)
- 瀏覽器發送一異步請求
- 頁面渲染結束
DNS解析:
DNS是將域名轉換為IP地址。而我們DNS的服務器IP地址與我們域名對應的IP地址可能不是一個。通過nslookup我們可以查詢對應的DNS服務器的IP地址是多少(每個機器使用的DNS服務器可能不一樣)
這個時候,也就是我們是通過114.114.114.114這個dns resolver服務器去進行域名解析的。而域名解析的過程又是遞歸查詢的(通過root根域名查詢是generic domains【.com;.edu;.net等】還是country domains【.de;.fr;.ch等】;再根據二級域名再進行查詢)
如圖:通過wireshark抓包顯示DNS數據,我們也可以看到dns是通過114.114.114.114這個地址進行解析的,而110.242.68.3/110.242.68.4才是百度對應的服務器
DNS是基於UDP報文進行傳輸的
TCP建連
使用TCP前,必須建立連接。三次握手的目的是同步Sequence序列號(ISN)、交換TCP通訊參數
SYN是同步幀、ACK是確認幀
第一次握手:SYN為1,ACK為0
第二次握手:SYN為1,ACK為1
第三次握手:SYN為0,ACK為1
三次握手中的狀態包含CLOSED、LISTEN、SYN-SENT、SYN-RECEIVED、ESTABLISHED(狀態可以通過netstat命令查看)
最開始TCP的狀態都是CLOSED,由於server要進行監聽所以會有一個LISEN狀態,三次握手完成后會進入ESTABLISHED狀態
TLS/SSL握手
tcl和ssl的作用都有認證、數據加密、安全等功能。https就相當於是http協議與tls/ssl協議的組合
一般來說tls/ssl握手主要client hello、server hello,server發送公鑰證書、server秘鑰交換
SSL是一個介於HTTP協議與TCP之間的一個可選層
HTTP
HTTP主要分為請求和響應兩個部分,在wireshark中我們可以查看請求對應的響應信息。
TCP拆連(四次揮手)
TCP四次揮手是為了防止數據丟失、與應用層進行交互
FIN:結束、ACK:確認
參考資料:
https://time.geekbang.org/course/intro/100026801
https://zhuanlan.zhihu.com/p/102392474?utm_source=wechat_session&utm_medium=social&s_r=0
https://blog.csdn.net/sarafina527/article/details/89333536
https://segmentfault.com/a/1190000002554673
https://www.cnblogs.com/mq0036/p/11187138.html
https://blog.csdn.net/daaikuaichuan/article/details/83475809?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0.no_search_link&spm=1001.2101.3001.4242.1