- DNS域名解析
- 建立socket連接TCP3次握手
- 發起請求 : 向IP對應的服務器發送http請求
- 響應請求並傳輸數據 : 服務器響應http請求,發回網頁內容
- 瀏覽器解析網頁內容 : 瀏覽器解析並渲染呈現給用戶
- 連接結束TCP4次揮手
標題域名解析
- 目的是爲了將網址轉爲便於機器識別的IP地址。
- 本地機器上配置網絡時都有DNS
- 會把URL發送給這個配置的DNS服務器;如果能夠找到相應的URL則返回其IP,否則該DNS將繼續將該解析請求發送給上級DNS,整個DNS可以看成一個樹狀結果,該請求將一直髮送到根直到得到結果。
建立socket連接TCP3次握手
- 三次握手的目的是同步連接雙方的序列號和確認號並交換 TCP窗口大小信息。
- 防止已失效的連接請求報文段突然又傳送到了服務端,因而產生錯誤。
- 第一次握手: 建立連接。客戶端發送連接請求報文段,將SYN位置爲1,Sequence Number爲x;然後,客戶端進入SYN_SEND狀態,等待服務器的確認;
第二次握手: 服務器收到SYN報文段。服務器收到客戶端的SYN報文段,需要對這個SYN報文段進行確認,設置Acknowledgment Number爲x+1(Sequence Number+1);同時,自己自己還要發送SYN請求信息,將SYN位置爲1,Sequence Number爲y;服務器端將上述所有信息放到一個報文段(即SYN+ACK報文段)中,一併發送給客戶端,此時服務器進入SYN_RECV狀態;
第三次握手: 客戶端收到服務器的SYN+ACK報文段。然後將Acknowledgment Number設置爲y+1,向服務器發送ACK報文段,這個報文段發送完畢以後,客戶端和服務器端都進入ESTABLISHED狀態,完成TCP三次握手。
發起請求 : 向IP對應的服務器發送http請求
- HTTP請求報文是由三部分組成: 請求行, 請求報頭和請求正文。
- 常用的方法有: GET, POST, PUT, DELETE, OPTIONS, HEAD。
響應請求並傳輸數據 : 服務器響應http請求,發回網頁內容
- HTTP響應報文是由三部分組成: 狀態碼, 響應報頭和響應報文。
- 狀態碼是由3位數組成,第一個數字定義了響應的類別
- 常見的響應報頭字段有: Server, Connection
- 服務器返回給瀏覽器的文本信息,通常HTML, CSS, JS, 圖片等文件就放在響應報文
瀏覽器解析網頁內容 : 瀏覽器解析並渲染呈現給用戶
- 解析頁面生成DOM樹,遇到css標籤或JS腳本標籤就新起線程去下載他們,並繼續構建DOM。
- 下載完後解析CSS爲CSS規則樹,瀏覽器結合CSS規則樹和DOM樹生成Render Tree。
- 構建CSS Object Model(CSSOM)會阻塞JavaScript的執行。JavaScript的執行也會阻塞DOM的構建。
- JavaScript下載後可以通過DOM API修改DOM,通過CSSOM API修改樣式作用域Render Tree。
每次修改會造成Render Tree的重新佈局和重繪。只要修改DOM或修改了元素的形狀或大小,就會觸發Reflow
連接結束TCP4次揮手
- TCP協議是一種面向連接的、可靠的、基於字節流的運輸層通信協議,TCP是全雙工模式
- 第一次分手: 主機1(可以使客戶端,也可以是服務器端),設置Sequence Number,向主機2發送一個FIN報文段;此時,主機1進入FIN_WAIT_1狀態;這表示主機1沒有數據要發送給主機2了;
第二次分手: 主機2收到了主機1發送的FIN報文段,向主機1回一個ACK報文段,Acknowledgment Number爲Sequence Number加1;主機1進入FIN_WAIT_2狀態;主機2告訴主機1,我“同意”你的關閉請求;
第三次分手: 主機2向主機1發送FIN報文段,請求關閉連接,同時主機2進入LAST_ACK狀態;
第四次分手: 主機1收到主機2發送的FIN報文段,向主機2發送ACK報文段,然後主機1進入TIME_WAIT狀態;主機2收到主機1的ACK報文段以後,就關閉連接;此時,主機1等待2MSL後依然沒有收到回覆,則證明Server端已正常關閉,那好,主機1也可以關閉連接了。 - MSL:報文段最大生存時間,它是任何報文段被丟棄前在網絡內的最長時間。
- TCP連接還要在TIME_WAIT狀態等待2倍MSL,這樣可以保證本次連接的所有數據都從網絡中消失。