解析URL: 首先會對 URL 進行解析劫瞳,分析所需要使用的傳輸協(xié)議和請求的資源的路徑倘潜。會對非法字符進行轉(zhuǎn)義
緩存判斷: 如果存在有效的緩存, 就直接使用緩存,否則向服務器發(fā)起新的請求志于。
DNS解析: 此步驟主要是獲取IP地址, 具體步驟:本地是否有緩存->否->本地 DNS 服務器是否有緩存->否->向根域名服務器發(fā)起請求->得到IP地址
獲取MAC地址: 獲取目標網(wǎng)址的 MAC 地址, 主要是需要判斷目標地址與當前機器是否在同一個子網(wǎng), 不在就需要網(wǎng)關(guān)轉(zhuǎn)發(fā)涮因。
TCP三次握手: 建立 TCP 連接。
HTTPS握手: 如果使用的是 HTTPS 協(xié)議恨憎,在通信前還存在 TLS 的一個四次握手的過程蕊退。首先由客戶端向服務器端發(fā)送使用的協(xié)議的版本號郊楣、一個隨機數(shù)和可以使用的加密方法。服務器端收到后瓤荔,確認加密的方法净蚤,也向客戶端發(fā)送一個隨機數(shù)和自己的數(shù)字證書∈湎酰客戶端收到后今瀑,首先檢查數(shù)字證書是否有效,如果有效点把,則再生成一個隨機數(shù)橘荠,并使用證書中的公鑰對隨機數(shù)加密,然后發(fā)送給服務器端郎逃,并且還會提供一個前面所有內(nèi)容的 hash 值供服務器端檢驗哥童。服務器端接收后,使用自己的私鑰對數(shù)據(jù)解密褒翰,同時向客戶端發(fā)送一個前面所有內(nèi)容的 hash 值供客戶端檢驗贮懈。這個時候雙方都有了三個隨機數(shù),按照之前所約定的加密方法优训,使用這三個隨機數(shù)生成一把秘鑰朵你,以后雙方通信前,就使用這個秘鑰對數(shù)據(jù)進行加密后再傳輸揣非。
返回數(shù)據(jù): 當頁面請求發(fā)送到服務器端后抡医,服務器端會返回一個 html 文件作為響應,瀏覽器接收到響應后早敬,開始對 html 文件進行解析忌傻,開始頁面的渲染過程。
頁面渲染: 瀏覽器首先會根據(jù) html 文件構(gòu)建 DOM 樹搁嗓,根據(jù)解析到的 css 文件構(gòu)建 CSSOM 樹芯勘,如果遇到 script 標簽,則判端是否含有 defer 或者 async 屬性腺逛,要不然 script 的加載和執(zhí)行會造成頁面的渲染的阻塞荷愕。當 DOM 樹和 CSSOM 樹建立好后,根據(jù)它們來構(gòu)建渲染樹棍矛。渲染樹構(gòu)建好后安疗,會根據(jù)渲染樹來進行布局。布局完成后够委,最后使用瀏覽器的 UI 接口對頁面進行繪制荐类。這個時候整個頁面就顯示出來了。
TCP四次揮手: 最后一步是 TCP 斷開連接的四次揮手過程茁帽。若客戶端認為數(shù)據(jù)發(fā)送完成玉罐,則它需要向服務端發(fā)送連接釋放請求屈嗤。服務端收到連接釋放請求后,會告訴應用層要釋放 TCP 鏈接吊输。然后會發(fā)送 ACK 包饶号,并進入 CLOSE_WAIT 狀態(tài),此時表明客戶端到服務端的連接已經(jīng)釋放季蚂,不再接收客戶端發(fā)的數(shù)據(jù)了茫船。但是因為 TCP 連接是雙向的,所以服務端仍舊可以發(fā)送數(shù)據(jù)給客戶端扭屁。服務端如果此時還有沒發(fā)完的數(shù)據(jù)會繼續(xù)發(fā)送算谈,完畢后會向客戶端發(fā)送連接釋放請求,然后服務端便進入 LAST-ACK 狀態(tài)料滥∪谎郏客戶端收到釋放請求后,向服務端發(fā)送確認應答葵腹,此時客戶端進入 TIME-WAIT 狀態(tài)罪治。該狀態(tài)會持續(xù) 2MSL(最大段生存期,指報文段在網(wǎng)絡中生存的時間礁蔗,超時會被拋棄) 時間,若該時間段內(nèi)沒有服務端的重發(fā)請求的話雁社,就進入 CLOSED 狀態(tài)浴井。當服務端收到確認應答后,也便進入 CLOSED 狀態(tài)霉撵。
作者:教主鴿鴿
鏈接:https://juejin.cn/post/7085622765113311269
來源:稀土掘金
著作權(quán)歸作者所有磺浙。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處徒坡。