第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

首頁(yè) 慕課教程 后端通用面試教程 后端通用面試教程 計(jì)算機(jī)網(wǎng)絡(luò)綜合題目

1. 前言

雖然計(jì)算機(jī)網(wǎng)絡(luò)是后端開發(fā)過程中必須要接觸的模塊,但是計(jì)算機(jī)網(wǎng)絡(luò)相關(guān)的面試題大多都偏向理論,為了更好的理解在開發(fā)過程中計(jì)算機(jī)網(wǎng)絡(luò)交互的作用,本小節(jié)會(huì)介紹一道網(wǎng)絡(luò)相關(guān)的高頻整合題目。

2. 在瀏覽器輸入了一個(gè) URL 后發(fā)生了什么

面試官提問: 當(dāng)你在瀏覽器中輸入了一個(gè)網(wǎng)址URL,例如http://idcbgp.cn并且按下回車到頁(yè)面展示內(nèi)容的這個(gè)過程,發(fā)生了什么?可以從瀏覽器、服務(wù)器、計(jì)算機(jī)網(wǎng)絡(luò)相關(guān)嘗試分析。

圖片描述

2.1 DNS域名解析

題目解析:輸入 URL 之后,瀏覽器做的第一件事情就是 DNS 域名解析。

在之前的小節(jié),我們分析五層網(wǎng)絡(luò)模型時(shí)就知道了數(shù)據(jù)鏈路層傳輸?shù)膸?,并不是通過字符串 “http://imooc.com” 尋找到目標(biāo)主機(jī),而是通過 MAC 地址找到目標(biāo)主機(jī)的硬件地址,要通過 ARP 協(xié)議解析獲取 MAC 地址,我們需要目標(biāo)主機(jī)的 IP 地址,所以問題是如何通過域名獲取對(duì)應(yīng) IP 地址。

所以第一個(gè)步驟,我們需要獲取域名對(duì)應(yīng)的IP地址,會(huì)經(jīng)過以下幾個(gè)步驟:

(1)訪問 Hosts 文件
瀏覽器會(huì)首先查看本機(jī)的 Hosts 文件,是否已經(jīng)存在映射關(guān)系。
Hosts文件是用來存儲(chǔ)常用的域名和對(duì)應(yīng)IP地址關(guān)系的關(guān)聯(lián)文件,例如在Hosts文件中存儲(chǔ)了"idcbgp.cn" -> "204.1.17.89",那么我們不需要訪問DNS服務(wù)器即可獲取百度域名對(duì)應(yīng)的IP地址。

(2)訪問本地緩存
如果 Hosts 文件中不存在映射關(guān)系,瀏覽器(例如Chrome)會(huì)再查看瀏覽器本地的緩存,是否存在映射關(guān)系。

(3)訪問 DNS 服務(wù)器

圖片描述

?

(圖1:域名到IP的解析模型)

DNS 解析的過程簡(jiǎn)單來看,是從"我的電腦"傳輸域名"idcbgp.cn"到 DNS 服務(wù)器,解析生成IP后返回給"我的電腦"。但是面試官一般會(huì)接著詢問 DNS 解析的詳細(xì)過程,依次考察候選人的知識(shí)深度。

圖片描述

(圖2:DNS 迭代查詢的具體過程)

步驟(1):瀏覽器會(huì)向本地 DNS 服務(wù)器發(fā)送域名報(bào)文。

步驟(2):本地 DNS 接收?qǐng)?bào)文之后,會(huì)將請(qǐng)求轉(zhuǎn)發(fā)到根 DNS 服務(wù)器。

步驟(3):根 DNS 服務(wù)器通過".com"后綴返回 com 頂級(jí)域名服務(wù)器的IP地址205.0.1.2。

步驟(4):本地 DNS 服務(wù)器帶著域名訪問IP:205.0.1.2頂級(jí)域名服務(wù)器。

步驟(5):com 頂級(jí)域名服務(wù)器根據(jù)后綴"imooc.com",返回 IP 地址206.0.1.3

步驟(6):本地 DNS 服務(wù)器帶著域名訪問IP206.0.1.3二級(jí)域名服務(wù)器。

步驟(7):二級(jí)域名服務(wù)器通過idcbgp.cn查詢到了域名對(duì)應(yīng)的實(shí)際IP地址210.1.17.89,返回給本地 DNS 服務(wù)器。

步驟(8):本地 DNS 服務(wù)器透?jìng)鱅P210.1.17.89返回給"我的電腦"。

2.2 建立 TCP 連接

在經(jīng)過 DNS 解析之后,瀏覽器已經(jīng)獲取了對(duì)應(yīng)網(wǎng)站的 IP 地址,通過三次握手連接到網(wǎng)站服務(wù)器,這個(gè)步驟中,我們可以給面試官畫出簡(jiǎn)化后的三次握手過程:

圖片描述

TCP三次握手

(1)客戶端發(fā)送一個(gè)帶有 SYN 標(biāo)記位的數(shù)據(jù)包(syn=J)到服務(wù)器,然后進(jìn)入 SYN_SENT 狀態(tài);

(2)服務(wù)器收到 SYN 包,需要確認(rèn)客戶端的 SYN(賦值ack=J+1),然后自己也發(fā)送一個(gè) SYN 包(syn=K),服務(wù)器進(jìn)入 SYN_RCVD 狀態(tài);

(3)客戶端收到服務(wù)器的 SYN+ACK 包,向服務(wù)器端發(fā)送確認(rèn)包,即ack=K+1,發(fā)送完成之后,兩邊都進(jìn)入 ESTABLISHED 建立連接狀態(tài)。

2.3 發(fā)送 HTTP 請(qǐng)求

TCP 三次握手之后,客戶端和服務(wù)器端成功建立了連接,之后瀏覽器會(huì)向服務(wù)器特定端口發(fā)送HTTP請(qǐng)求。

圖片描述

(https://imooc.com URL的請(qǐng)求報(bào)文)

以 Chrome 瀏覽器為例,按下 F12 即可進(jìn)入開發(fā)者模式,Network 一欄查看HTTP請(qǐng)求的具體報(bào)文。

一個(gè) HTTP 報(bào)文由請(qǐng)求行(Request Line)、請(qǐng)求頭部(Request Headers)、空行(Blank Line)以及請(qǐng)求體(Request Body)構(gòu)成,請(qǐng)求行中規(guī)定了請(qǐng)求方法、URI 以及 HTTP 的版本,關(guān)于每個(gè)字段的詳細(xì)解釋,之前的小節(jié)已經(jīng)進(jìn)行了闡述。

2.4 服務(wù)器端解析請(qǐng)求

當(dāng)一個(gè) HTTP 請(qǐng)求打進(jìn)服務(wù)器之后,一般的流程是:網(wǎng)關(guān)層(例如Ngnix)最先獲取請(qǐng)求,然后路由轉(zhuǎn)發(fā)到具體的Web服務(wù),經(jīng)過一段業(yè)務(wù)邏輯之后,可能還會(huì)查詢數(shù)據(jù)庫(kù),最后將處理的結(jié)果返回給瀏覽器客戶端。

對(duì)于后端開發(fā)程序員來說,日常的工作就集中在服務(wù)器端,特別是流程圖中的"Web業(yè)務(wù)服務(wù)"這塊,例如基于 Spring 框架、Django 框架或者ThinkPHP 框架進(jìn)行業(yè)務(wù)邏輯開發(fā)和上線。

圖片描述

(HTTP 請(qǐng)求進(jìn)入服務(wù)器端后的解析流程圖)

2.5 返回 HTTP 響應(yīng)

服務(wù)器端處理業(yè)務(wù)結(jié)果之后,也要返回 HTTP 響應(yīng),HTTP 響應(yīng)由狀態(tài)行(Status Line)、響應(yīng)頭部(Response Headers)、空行(Blank Line)以及響應(yīng)體(Response Body)構(gòu)成,關(guān)于每個(gè)部分的細(xì)節(jié)也不再贅述。需要特別注意的是,響應(yīng)體中的各種錯(cuò)誤碼定義:

狀態(tài)類型 代表狀態(tài)碼和含義 說明
1xx 100 Continue 服務(wù)器收到了客戶端的請(qǐng)求行和頭部信息,告訴
客戶端繼續(xù)發(fā)送數(shù)據(jù)部分。
2xx 200 OK 請(qǐng)求成功
3xx 301 Moved Permanently 資源被轉(zhuǎn)移了,請(qǐng)求將被重定向
4xx 404 Not Found 資源沒找到
5xx 500 Internal Server Error 服務(wù)器內(nèi)部錯(cuò)誤

2.6 TCP四次揮手

當(dāng)瀏覽器獲取了域名對(duì)應(yīng)的頁(yè)面信息,為了避免服務(wù)器和客戶端雙方的資源損耗,客戶端會(huì)請(qǐng)求斷開 TCP 連接,和三次握手的過程相似,TCP 四次揮手的過程可以總結(jié)為:

(1)第一次請(qǐng)求:客戶端請(qǐng)求斷開FIN,攜帶信息seq=u;

(2)第二次請(qǐng)求:服務(wù)器確認(rèn)客戶端的斷開請(qǐng)求 ACK ,攜帶信息ack=u+1,seq=v;

(3)第三次請(qǐng)求:服務(wù)器請(qǐng)求斷開 FIN ,攜帶信息seq=w,ACK,ack=u+1;

(4)第四次請(qǐng)求:客戶端確認(rèn)服務(wù)器的斷開 ACK ,攜帶信息ack=w+1,seq=u+1。

圖片描述

?

(TCP四次揮手示意圖)

2.7 瀏覽器解析 HTML

服務(wù)器返回給客戶端的是 HTML 以及 CSS、Javascript 代碼,要展示為靜態(tài)頁(yè)面,還需要經(jīng)過瀏覽器的解析行為。

瀏覽器內(nèi)核引擎解析 HTML 文檔并且將標(biāo)簽轉(zhuǎn)換為 DOM(Document Object Model,文檔對(duì)象模型)樹的 DOM 節(jié)點(diǎn),不同瀏覽器的渲染解析流程大同小異。

同時(shí),瀏覽器內(nèi)核引擎還會(huì)解析 CSS 生成 CSS 規(guī)則樹,按照從右到左的順序讀取選擇器。

另外,在瀏覽器中還有個(gè)"JS腳本解析器",解析 HTML 和 CSS 是多線程同時(shí)執(zhí)行的,CSS 解析失敗不會(huì)影響 HTML 內(nèi)容的解析,但是如果 JS 腳本解析過程中觸發(fā)了異常,會(huì)直接終止 HTML 內(nèi)容的解析。關(guān)于更詳細(xì)的解析動(dòng)作,作為后端開發(fā),我們不需要了解太多,這塊也不會(huì)作為面試考察的內(nèi)容。

3.小結(jié)

本節(jié)中和大家講解了"我們?cè)跒g覽器中輸入一個(gè)URL,具體發(fā)生了什么",整個(gè)過程中分析了應(yīng)用層(HTTP、DNS)、傳輸層(TCP)、網(wǎng)絡(luò)層(IP)等網(wǎng)絡(luò)分層的各個(gè)協(xié)議的作用,也對(duì)服務(wù)器解析HTTP的基本流程進(jìn)行了闡述,本小節(jié)需要大家掌握訪問 URL 時(shí)每個(gè)步驟的基本功能,能夠通過對(duì)調(diào)用鏈路的分析,向面試官展示自己的計(jì)算機(jī)網(wǎng)絡(luò)功底。