瀏覽器從輸入U(xiǎn)RL到展示頁(yè)面,經(jīng)歷了哪些過(guò)程?
瀏覽器根據(jù)輸入的URL通過(guò)HTTP或者HTTPS協(xié)議發(fā)起對(duì)遠(yuǎn)端Web服務(wù)器的請(qǐng)求,Web服務(wù)器返回對(duì)應(yīng)請(qǐng)求的數(shù)據(jù)給瀏覽器,然后瀏覽器將數(shù)據(jù)解釋渲染并最終展示給用戶(hù)。整個(gè)過(guò)程涉及到網(wǎng)絡(luò)中各種協(xié)議的交互以及各種設(shè)備對(duì)報(bào)文的轉(zhuǎn)發(fā),主要流程有:
圖片
1、瀏覽器進(jìn)行URL解析和生成HTTP請(qǐng)求
瀏覽器首先對(duì)URL進(jìn)行解析,確定要訪(fǎng)問(wèn)的Web服務(wù)器和文件名,然后生成要發(fā)送給Web服務(wù)器的請(qǐng)求信息。當(dāng)然,在生成HTTP請(qǐng)求之前,瀏覽器還會(huì)查看本地緩存是否已經(jīng)緩存有要請(qǐng)求的資源,如果有,就直接返回緩存資源顯示出來(lái)。如果沒(méi)有,才會(huì)繼續(xù)進(jìn)行后面的請(qǐng)求流程。
圖片
圖片
圖片
圖片
圖片
2、生成TCP報(bào)文段,準(zhǔn)備發(fā)起TCP連接
HTTP是基于TCP 協(xié)議傳輸?shù)模谧鐾陸?yīng)用層HTTP請(qǐng)求的準(zhǔn)備后,客戶(hù)端主機(jī)開(kāi)始進(jìn)行TCP報(bào)文段頭部的封裝。
圖片
圖片
3、DNS解析域名得到服務(wù)器的IP地址
傳輸層TCP報(bào)文段組裝好后,開(kāi)始進(jìn)入網(wǎng)絡(luò)層進(jìn)行IP數(shù)據(jù)報(bào)的組裝,但是URL中請(qǐng)求服務(wù)器資源使用的是域名,而網(wǎng)絡(luò)中標(biāo)識(shí)服務(wù)器位置使用的是IP地址,所以先要通過(guò)DNS域名解析協(xié)議進(jìn)行域名解析,先獲取到服務(wù)器域名對(duì)應(yīng)的IP地址。
圖片
DNS進(jìn)行域名解析的過(guò)程是,先查瀏覽器DNS緩存,再查hosts主機(jī)文件,最后查DNS服務(wù)器,由于DNS服務(wù)器采用的是層級(jí)結(jié)構(gòu),所以DNS查詢(xún)采用的是遞歸迭代查詢(xún)。
圖片
圖片
圖片
4、IP路由尋址和生成IP數(shù)據(jù)報(bào)
傳輸層TCP處理完后,開(kāi)始進(jìn)行網(wǎng)絡(luò)層IP數(shù)據(jù)報(bào)的處理。特別是對(duì)于多網(wǎng)卡客戶(hù)端主機(jī),訪(fǎng)問(wèn)服務(wù)器的IP數(shù)據(jù)報(bào)需要確定從哪個(gè)網(wǎng)卡發(fā)出去,所以需要進(jìn)行路由尋址查找路由表確定報(bào)文發(fā)出去的網(wǎng)口,從而確定IP數(shù)據(jù)報(bào)的源IP地址。
圖片
圖片
圖片
5、ARP請(qǐng)求下一跳網(wǎng)關(guān)MAC地址
IP數(shù)據(jù)報(bào)組裝完成之后,需要進(jìn)行以太網(wǎng)幀的封裝,以太網(wǎng)幀頭的源MAC就是報(bào)文發(fā)出網(wǎng)卡的MAC,而目的MAC就是路由表中指定的下一跳網(wǎng)關(guān)IP對(duì)應(yīng)的MAC,這時(shí)候需要通過(guò)ARP地址解析協(xié)議來(lái)請(qǐng)求獲取下一跳網(wǎng)關(guān)的MAC的地址,從而確定以太網(wǎng)幀頭的目的MAC。
圖片
圖片
圖片
6、報(bào)文經(jīng)過(guò)網(wǎng)絡(luò)發(fā)往WEB服務(wù)器
經(jīng)過(guò)前面的各種處理,請(qǐng)求報(bào)文已經(jīng)組裝完成,現(xiàn)在可以從客戶(hù)端主機(jī)網(wǎng)卡發(fā)送出去了,整個(gè)網(wǎng)絡(luò)是經(jīng)過(guò)大量的交換機(jī)和路由器互聯(lián)的,報(bào)文會(huì)經(jīng)過(guò)這些設(shè)備的轉(zhuǎn)發(fā)最終到達(dá)Web服務(wù)器。
圖片
圖片
圖片
7、服務(wù)器返回響應(yīng)報(bào)文
服務(wù)器收到請(qǐng)求報(bào)文后,首先檢查報(bào)文的目的MAC是否是自己網(wǎng)卡的MAC,目的IP是否是自己網(wǎng)卡的IP,然后查看傳輸層TCP協(xié)議的端口,確認(rèn)是Web服務(wù)進(jìn)程監(jiān)聽(tīng)的端口,所以將請(qǐng)求報(bào)文交給Web服務(wù)進(jìn)程進(jìn)行處理。Web服務(wù)進(jìn)程將請(qǐng)求的網(wǎng)頁(yè)內(nèi)容封裝成響應(yīng)報(bào)文,然后通過(guò)網(wǎng)卡發(fā)出去,響應(yīng)報(bào)文經(jīng)過(guò)網(wǎng)絡(luò)中的交換機(jī)和路由器轉(zhuǎn)發(fā)到達(dá)客戶(hù)端主機(jī),并最終通過(guò)客戶(hù)端主機(jī)的瀏覽器將響應(yīng)報(bào)文中的網(wǎng)頁(yè)內(nèi)容渲染展示出來(lái)。
圖片
圖片
整體上看,瀏覽器輸入U(xiǎn)RL到展示網(wǎng)頁(yè)內(nèi)容,需要經(jīng)過(guò)瀏覽器解析URL、DNS解析域名IP地址、查找路由表確定出口網(wǎng)卡和源IP地址、ARP地址解析獲取主機(jī)網(wǎng)關(guān)下一跳的MAC地址、TCP連接建立以及交換機(jī)路由器等網(wǎng)絡(luò)中間設(shè)備對(duì)報(bào)文的轉(zhuǎn)發(fā)這些過(guò)程。
圖片
圖片
編程十萬(wàn)問(wèn),每天一問(wèn)。關(guān)注我,每天學(xué)習(xí)一個(gè)編程小知識(shí)。