1. 前言
互聯(lián)網(wǎng)行業(yè)因為廣為人知的高薪以及相對于傳統(tǒng)工科行業(yè)更多的發(fā)展機會,最近幾年涌入了越來越多的非計算機專業(yè)畢業(yè)的從業(yè)人員,校招 / 社招面試的時候,候選人往往也會被分為兩種:科班和非科班,互聯(lián)網(wǎng)科班一般特指大學(xué)就讀計算機科學(xué)與技術(shù)或者軟件專業(yè),非科班則包含其他各大傳統(tǒng)工科甚至是文科專業(yè)。
某些大廠在招聘后端開發(fā)工程師時會嚴(yán)格要求科班背景,因為對于非科班的同學(xué),一般都能勝任計算機網(wǎng)絡(luò)應(yīng)用層以上的工作(例如編寫一個低并發(fā)的后臺管理系統(tǒng)),但是對于計算機底層的知識往往是一片盲區(qū)。當(dāng)對計算機網(wǎng)絡(luò)了解甚少的非科班同學(xué)遇到線上問題時,或者網(wǎng)絡(luò)通信相關(guān)的運維故障,往往會束手無策。
所以了解計算機底層如何運作是非常有必要的,我們這里談到的計算機底層知識,包括但不限于:
計算機組成:CPU 運行的原理,內(nèi)存、硬盤等各種硬件如何協(xié)調(diào)合作;
操作系統(tǒng):支撐后端框架的系統(tǒng),具體做了哪些操作;
編譯原理:對于 Java 、C++ 這類高級語言,如何經(jīng)過編譯,轉(zhuǎn)換為匯編語言以及二進(jìn)制文件;
計算機網(wǎng)絡(luò):計算機與計算機之間如何進(jìn)行通信。
從本小節(jié)開始,我們會開始學(xué)習(xí)計算機網(wǎng)絡(luò)相關(guān)的面試題目,并且在熟悉題目的同時,掌握計算機網(wǎng)絡(luò)的基本知識框架。
2. 計算機網(wǎng)絡(luò)如何分層
面試官提問: 你了解計算機網(wǎng)絡(luò)的分層模型嗎?其中每一層有哪些常見的協(xié)議?
題目解析: 這個題目需要拆分為兩個關(guān)鍵點分析:
(1)計算機網(wǎng)絡(luò)是如何分層的?闡述 OSI 七層協(xié)議和通用五層協(xié)議的區(qū)別。(2)分層后的每一層支持哪些協(xié)議?主要會涉及到后端開發(fā)過程中常用的協(xié)議。
2.1 分層模型總覽
首先,我們都知道最基礎(chǔ)的分層協(xié)議是計算機網(wǎng)絡(luò) OSI(Open System Interconnection)體系。OSI 模型如上圖(a)所示,網(wǎng)絡(luò)結(jié)構(gòu)被拆分為 7 層,自頂向下分別是應(yīng)用層、表示層、會話層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層以及物理層。但是 OSI 模型是一種概念模型,雖然理論比較完整,并不實用。
TCP/IP 體系如上圖(c)所示,包含了應(yīng)用層、傳輸層、網(wǎng)絡(luò)層以及網(wǎng)絡(luò)接口層,不過我們一般關(guān)注上面三層的內(nèi)容,最下層及網(wǎng)絡(luò)接口層沒有實質(zhì)性的協(xié)議。TCP/IP 體系分層就是我們實際應(yīng)用中的網(wǎng)絡(luò)協(xié)議。
作為 OSI 七層協(xié)議和 TCP/IP 四層協(xié)議的折中,還有一種是五層協(xié)議的體系,往往是面試中考察的重點。
五層協(xié)議,如上圖中(b)所示,自頂向下分為應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層以及物理層,下面我們將詳細(xì)闡述每層的作用以及代表協(xié)議。
2.2 分層定義以及常見協(xié)議
在畫出了計算機網(wǎng)絡(luò)的分層模型之后,我們還需要向面試官解釋每一層的定義以及介紹常見的協(xié)議。
2.2.1 應(yīng)用層
應(yīng)用層(Application Layer)是 5 層協(xié)議的頂層,顧名思義,應(yīng)用層的作用是通過操作系統(tǒng)中應(yīng)用進(jìn)程(例如電子郵件、瀏覽器文件傳輸)提供網(wǎng)絡(luò)交互。
應(yīng)用層最常被問到的是 HTTP 協(xié)議和 DNS 域名解析協(xié)議(在之后的小節(jié)我們會詳細(xì)講解相關(guān)題目),其次還有一些后端開發(fā)過程中可能會接觸的協(xié)議,例如支持文件傳輸?shù)?FTP 協(xié)議(例如需要從 Windows 開發(fā)機傳輸文件到 Linux 服務(wù)器時使用),以及支持電子郵件的 SMTP 協(xié)議(例如需要開發(fā)電子郵件讀寫的相關(guān)爬蟲時需要開放郵箱的 SMTP 協(xié)議)。
2.2.2 傳輸層
傳輸層(Transport Layer)主要是為了實現(xiàn)端口到端口(port to port)的通信,計算機的不同進(jìn)程都會被分配不同的端口,例如域名默認(rèn)的 80 端口。從接收和發(fā)送信息的角度可以分為兩大功能:
復(fù)用:把操作系統(tǒng)的多個進(jìn)程利用一個傳輸層接口發(fā)送信息;
分用:把收到的信息利用傳輸層接口分發(fā)到操作系統(tǒng)的不同進(jìn)程。
傳輸層涉及到兩個常見的協(xié)議,幾乎是面試必考協(xié)議:
傳輸控制協(xié)議(TCP,Transmission Control Protocol):特點是面向連接,基于報文段傳輸,能夠保證消息可靠交付的協(xié)議;
用戶數(shù)據(jù)包協(xié)議(UDP,User Datagram Protocol):特點是無連接,基于用戶數(shù)據(jù)報傳輸,不保證消息可靠交付,只盡 "最大努力交付"。
2.2.3 網(wǎng)絡(luò)層
計算機之間的通信可以分為位于同一個子網(wǎng)絡(luò)(也就是局域網(wǎng),Local Area Network)和位于不同的子網(wǎng)絡(luò)(廣域網(wǎng),Wide Area Network),網(wǎng)絡(luò)層協(xié)議解決的問題就是如何判斷兩臺計算機是否屬于同一個子網(wǎng)絡(luò)中。
網(wǎng)絡(luò)層最常涉及的協(xié)議是 IP 協(xié)議 ,就是 TCP/IP 協(xié)議族中的 IP 網(wǎng)絡(luò)協(xié)議,可見其重要性。
此外,還有和 IP 協(xié)議相關(guān)的 ARP(Address Resolution Protocol,地址解析協(xié)議),以太網(wǎng)的數(shù)據(jù)傳輸最直接依賴的是 MAC 地址,ARP 協(xié)議的作用就是將 IP 地址轉(zhuǎn)換為 MAC 地址。
2.2.4 數(shù)據(jù)鏈路層
數(shù)據(jù)鏈路層(Data-Link Layer)位于物理層和網(wǎng)絡(luò)層之間,對于兩個不同主機之間的數(shù)據(jù)傳輸,可能會經(jīng)過多個路由器中轉(zhuǎn),中間的這條鏈路就是我們關(guān)注的重點,我們把兩個主機抽象為兩個點,鏈路層協(xié)議解決的問題就是 "點對點" 的數(shù)據(jù)傳輸。
數(shù)據(jù)鏈路層將網(wǎng)絡(luò)層交付的 IP 數(shù)據(jù)包封裝成幀(Frame),其中每一幀包括了數(shù)據(jù)以及必要的控制信息(比如同步信息、尋址信息、差錯控制信息),這種設(shè)計方案非常類似 TCP 協(xié)議中的控制位(由此也能看出計算機網(wǎng)絡(luò)設(shè)計的互通性)。如果通過差錯控制信息校驗出了錯誤,那么就會在本層丟棄這個幀,糾正錯誤是通過網(wǎng)絡(luò)層的 TCP 協(xié)議完成。
PPP 協(xié)議(Point to Point Protocol):在兩個點之間傳輸數(shù)據(jù)包的協(xié)議,因為本層涉及的協(xié)議在面試中考察甚少,基本可以只做簡單了解。
2.2.5 物理層
物理層(Physical Layer)是 5 層協(xié)議模型中最底層的協(xié)議,就是通過物理手段(例如網(wǎng)線,電纜)將計算機連接起來,提供信息傳輸?shù)奈锢砻浇椋瑪?shù)據(jù)由 0 和 1 二進(jìn)制信號構(gòu)成,傳輸單元是比特位。因為關(guān)于物理層的研究更偏向于通信相關(guān)的原理,我們只需要了解本層的定義即可。
3. 小結(jié)
本節(jié)給大家講解了掌握計算機底層知識的重要性,以及對計算機網(wǎng)絡(luò) OSI 協(xié)議模型和五層協(xié)議模型進(jìn)行了拆分講解,主要關(guān)注點在于應(yīng)用層以及傳輸層的相關(guān)協(xié)議。
1. 前言
無論是作為后端開發(fā)、前端開發(fā)、測試開發(fā)程序員或者是運維人員,在面試過程中,大概率都會被問到 HTTP 協(xié)議相關(guān)題目。
因為伴隨著 2010 年之后移動互聯(lián)網(wǎng)在全世界的高速發(fā)展,各種各樣的瀏覽器(Chrome、FireFox、Safari 等)層出不窮,也誕生了諸多服務(wù)端開發(fā)的語言(例如 Golang 語言),瀏覽器和服務(wù)端之間的交互是不可避免的,我們對于不同的瀏覽器和不同的服務(wù)端,總不能每次都創(chuàng)建一種新的交互協(xié)議,所以需要確定統(tǒng)一的協(xié)議規(guī)范,也就是本文的 HTTP 協(xié)議。
2.1 HTTP 協(xié)議定義
面試官提問: 什么是 HTTP 報文?什么是 HTTP 報文?
題目解析: 首先,我們給出 HTTP 的定義:HTTP(HyperText Transfer Protocol,超文本傳輸協(xié)議)是一個請求 - 響應(yīng)(Request to Response)協(xié)議,位于網(wǎng)絡(luò)模型的應(yīng)用層,基于傳輸層的 TCP 協(xié)議。
(HTTP 請求 - 響應(yīng)模型)(HTTP 請求 - 響應(yīng)模型)
其次,HTTP 報文是在客戶端和服務(wù)器端傳輸?shù)臄?shù)據(jù)報文,由起始行(Start Line)、請求頭部(Request Header)和請求主體(Request Body)構(gòu)成,從類型上分為請求報文(Request Message)和響應(yīng)報文(Response Message)。
(HTTP 報文格式)2.2 HTTP 請求方法
面試官提問: HTTP 協(xié)議的請求方法有哪些,有啥區(qū)別?
題目解析:
序號方法說明
1GET請求服務(wù)器上的資源,請求體不會包含請求數(shù)據(jù),參數(shù)可以通過 URL 傳輸。
2POST用戶傳輸信息到服務(wù)器,請求方式類似 GET 請求,比如提交表單。
3PUT用戶傳輸信息到服務(wù)器,請求方式類似 POST 請求,比如提交文件。
4DELETE請求服務(wù)器刪除某個資源,和 POST 請求作用相反。
5OPTIONS查詢 URL 支持的 HTTP 方法。
6HEAD請求方式類似 GET 請求,但是服務(wù)器不會返回消息體,一般用于檢查網(wǎng)頁是否被修改、檢查 URL 是否有效。
除此之外,HTTP 協(xié)議還有 TRACE、CONNECT 等方法,但是在日常開發(fā)中基本不會用到,所以不用關(guān)注。
面試官常常會將 POST 和 GET 方法進(jìn)行對比,我們需要注意以下幾個不同:
(1)GET 請求主要是為了從服務(wù)器獲取資源,POST 請求主要是為了向服務(wù)器發(fā)送資源。
(2)GET 請求是通過 URL 傳參,形式是 field = value,多個參數(shù)使用 & 進(jìn)行分割,例如 http://127.0.0.1/login?username=xiaoming&password=123456。POST 請求是通過請求體傳參,即信息存放到 Request Body 中。
(3)GET 請求傳輸?shù)男畔⒘可?,POST 請求能夠傳輸?shù)男畔⒘慷唷?div style="height:15px;">
(4)GET 請求參數(shù)在 URL 明文,容易被爬蟲直接獲取,POST 請求參數(shù)不直接可見,安全性更高,例如在表單提交密碼時,必須使用 POST 請求。
2.3 HTTP 狀態(tài)碼
面試官提問: 請枚舉一些常見的 HTTP 狀態(tài)碼,并且說明作用。
題目解析:
首先我們從性質(zhì)上分類,HTTP 的響應(yīng)狀態(tài)碼總共有 1XX 到 5XX 五種類型,關(guān)于每種狀態(tài)碼的定義:
狀態(tài)碼開頭性質(zhì)
1XX服務(wù)器收到請求,需要請求者繼續(xù)執(zhí)行操作。
2XX客戶端請求成功,并且服務(wù)端成功處理。
3XX重定向,需要進(jìn)一步的操作以完成請求。
4XX客戶端錯誤,請求包含語法錯誤或者無法完成請求。
5XX服務(wù)器錯誤,服務(wù)器在處理請求的過程中發(fā)生了錯誤。
對于 4XX 開頭的錯誤碼,都是因為客戶端自身的原因產(chǎn)生,例如我們輸入 URL:http://www.imooc.com/home,因為不存在這個 URL 對應(yīng)的資源,所以返回 404 Not Found,找不到頁面。
對于 5XX 開頭的錯誤碼,都是因為服務(wù)器處理過程中遇到異常產(chǎn)生,例如后端開發(fā)程序員在處理 HTTP 請求的過程觸發(fā)了 Exception,導(dǎo)致響應(yīng)失敗。
在定性之后,面試官大概率還要抽出幾個常見的狀態(tài)碼,考察其具體的含義,我們對常見的狀態(tài)碼也需要進(jìn)行總結(jié):
狀態(tài)碼狀態(tài)碼對應(yīng)英文說明
100Continue服務(wù)器收到了客戶端的請求行和頭部信息,告訴 客戶端繼續(xù)發(fā)送數(shù)據(jù)部分。
200OK請求成功。
301Permanently Moved資源被永久轉(zhuǎn)移了,請求將被重定向。
302Temporarily Moved資源被臨時轉(zhuǎn)移了,請求將被重定向。
404Not Found資源沒找到。
500Internal Server Error服務(wù)器內(nèi)部錯誤。
這里需要分區(qū)開 301 和 302 錯誤碼(也是常見考點),從字面意思上看,301 和 302 都代表某個 URL 被轉(zhuǎn)移了,區(qū)別在于:
(1)301 表示資源被永久轉(zhuǎn)移了,搜索引擎(例如百度的爬蟲)在爬取網(wǎng)站的時候會抓取新網(wǎng)站的內(nèi)容并且保留新網(wǎng)站的 URL。
(2)302 表示資源被臨時轉(zhuǎn)移了,也就是臨時重定向,搜索引擎在爬取網(wǎng)站的時候會抓取新的內(nèi)容,但是保留舊網(wǎng)站作為 URL。
3. 小結(jié)
HTTP 協(xié)議應(yīng)該是前端、后端、測試開發(fā)人員最常接觸的網(wǎng)絡(luò)協(xié)議了,因為這是網(wǎng)站和用戶之間傳輸信息的直接渠道。面試官考察 HTTP 相關(guān)的問題,也是為了了解候選人的開發(fā)基本功,為了熟悉本小結(jié)的知識,大家也可以了解下發(fā)送 HTTP 的 Postman 開發(fā)工具,以及 HTTP 網(wǎng)絡(luò)抓包的 Wireshark 工具。
1. 前言
TCP 和 UDP 協(xié)議是計算機網(wǎng)絡(luò)的重要組成協(xié)議,兩者經(jīng)常被拿來比較,其中 TCP 協(xié)議往往會被面試官深入考察。
本節(jié)課程將和大家一起學(xué)習(xí)傳輸層的 TCP 和 UDP 協(xié)議。通過本節(jié)課程,你會了解到 TCP 和 UDP 協(xié)議的區(qū)別,重點是要掌握 TCP 協(xié)議的三次握手過程以及三次握手的必要性。
2.1 TCP 和 UDP
面試官提問: TCP 協(xié)議和 UDP 協(xié)議有什么區(qū)別?有什么共同點?
題目解析:
相同點:兩個協(xié)議最大的共同點是都位于 TCP/IP 網(wǎng)絡(luò)模型的傳輸層。
不同點:我們通過表格的形式對比不同。
TCP(Transmission Control Protocol,傳輸控制協(xié)議)UDP(User Datagram Protocol,用戶數(shù)據(jù)報協(xié)議)
是否連接面向連接無連接
傳輸方式面向字節(jié)流:直接以字節(jié)流形式傳輸面向報文:對于應(yīng)用程序交付的數(shù)據(jù),添加首部之后就交付給 IP 層
首部格式20 個字節(jié)的固定首部只有 8 個字節(jié)
是否可靠可靠傳輸,依靠流量控制和擁塞控制不可靠傳輸
連接對象個數(shù)一對一連接支持一對一(點到點),一對多以及多對多傳輸
適用場景要求可靠傳輸?shù)膱鼍?,例如發(fā)送郵件和傳輸文件對可靠性要求低,效率要求高的場景,例如 QQ 的視頻通話
根據(jù)表格中的特點對比我們可以總結(jié)得到:
面試官提問: 上述你提到了 UDP 和 TCP 報文,它們的具體結(jié)構(gòu)是怎樣的?
題目解析:
在上個題目中我們總結(jié)了 TCP 協(xié)議和 UDP 協(xié)議的不同點,其中談到了 TCP 和 UDP 協(xié)議首部格式不同,接下來分別畫圖分析。
(UDP 報文首部)
如上圖可見,UDP 首部只有 8 個字節(jié)的數(shù)據(jù),包括源端口號、目標(biāo)端口號、長度以及校驗和。
源端口號:發(fā)送計算機的應(yīng)用端口;
目標(biāo)端口號:接收端計算機的接收端口,也是占用 16 位 Bit;
長度:表示 UDP 報文首部以及攜帶數(shù)據(jù)的長度;
校驗和:校驗數(shù)據(jù)在傳輸過程中是否損壞。
(TCP 報文首部)在畫完了示意圖之后,關(guān)于 TCP 報文首部,我們需要解釋的字段:
序號:對字節(jié)流編號,例如本次傳輸?shù)男蛱柺?100,攜帶的數(shù)據(jù)長度是 100 字節(jié),那么下次傳輸?shù)男蛱柧褪?200;
確認(rèn)號:客戶端 A 往服務(wù)器端 B 發(fā)送了一個報文,序號是 100,攜帶的數(shù)據(jù)長度是 100 字節(jié),那么 B 往 A 發(fā)送的報文中確認(rèn)號就是 200,表示期望收到的下一個報文的序號。
標(biāo)志位 CWR(Congestion Window Reduce):擁塞窗口減少標(biāo)志;
標(biāo)志位 ECE(ECN Echo):ECE 標(biāo)志等于 1 時,通知接收方,表示接收方到這邊的網(wǎng)絡(luò)存在擁塞;
標(biāo)志位 URG(Urgent):本報文是否包含緊急數(shù)據(jù),只有當(dāng) URG=1 時,"校驗和" 后面的 "緊急指針" 字段才有效;
標(biāo)志位 ACK(Acknowledgement):ACK=1 則表示前面發(fā)送的確認(rèn)號是否有效,TCP 連接建立之后,ACK 必須設(shè)置為 1;
標(biāo)志位 PSH(Push):PSH 設(shè)置為 1 則表示需要將收到的數(shù)據(jù)立即傳輸給上層應(yīng)用,否則先放緩存;
標(biāo)志位 RST(Reset):RST 設(shè)置為 1 則表示 TCP 連接出現(xiàn)異常,需要強制斷開;
標(biāo)志位 SYN(Synchronize):SYN 設(shè)置為 1 則表示希望建立連接;
標(biāo)志位 FIN(Finsish):FIN 設(shè)置為 1 則表示數(shù)據(jù)已經(jīng)發(fā)送完成,可以斷開 TCP 連接。
上述定義中,序號、確認(rèn)號以及 ACK、SYN 和 FIN 標(biāo)志位是我們需要重點關(guān)注的部分,因為在 TCP 建立連接和斷開連接時會涉及到。
2.3 TCP 三次握手
面試官提問: TCP 是如何建立連接的?分析下每個步驟傳輸了什么樣的數(shù)據(jù)?
題目解析:
(TCP 三次握手過程)(TCP 三次握手過程)
首先從行為上分析,TCP 建立連接需要發(fā)送三次報文,也就是 "三次握手" 的過程。
我們定義發(fā)送報文的一方是客戶端,接收報文的一方是服務(wù)器端。
首先服務(wù)器端處于監(jiān)聽(LISTEN)的狀態(tài),否則不會收到客戶端發(fā)來的請求。
(1)第一次握手:客戶端往服務(wù)器端發(fā)送一個請求建立連接報文,報文首部 SYN 標(biāo)志位 = 1,給定一個初始的 Seq 序號 x。之后客戶端進(jìn)入 SYN_SEN(同步發(fā)送)狀態(tài);
(2)第二次握手:服務(wù)器端收到請求報文,如果同意建立連接,則向客戶端發(fā)送確認(rèn)報文。確認(rèn)報文中 SYN 標(biāo)志位 = 1,ACK 標(biāo)志位 = 1,同時給定一個 Seq 序號 y,Ack 確認(rèn)號 x+1,之后服務(wù)器端進(jìn)入 SYN_RCVD(同步已發(fā)送)狀態(tài);
(3)第三次握手:客戶端收到來自服務(wù)器端的確認(rèn)報文之后,還需要向服務(wù)器端發(fā)送確認(rèn)報文,報文首部 ACK 標(biāo)志位 = 1,Ack 確認(rèn)號為 y+1,發(fā)送之后客戶端進(jìn)入 ESTABLISHED(已建立連接)的狀態(tài)。服務(wù)器端收到確認(rèn)報文后,也會進(jìn)入 ESTABLISHED 狀態(tài),在此之后,客戶端和服務(wù)器端可以開始 TCP 通信了。
2.4 TCP 三次握手的必要性
2.4.1 三次握手的意義
面試官提問: TCP 建立連接為什么需要三次握手?可以只有兩次握手嗎?第三次握手有什么意義?
題目解析:
緊接上面一個問題,如果我們能夠成功畫出 TCP 三次握手的過程,以及分析每個過程傳輸報文的首部內(nèi)容,那么面試官大概率會拋出這樣一個問題,考察我們對 TCP 三次握手的理解。
首先從定性角度來看,分析三次握手每個步驟的意義:
(1)第一次握手:客戶端發(fā)送報文,服務(wù)器端接收報文,如果成功接收,說明客戶端的發(fā)送能力、服務(wù)器端的接收能力符合預(yù)期;
(2)第二次握手:服務(wù)器端發(fā)送報文,客戶端接收報文,如果成功接收。從客戶端的角度來看:客戶端的發(fā)送和接收能力符合預(yù)期,服務(wù)器端的發(fā)送和接收能力符合預(yù)期,可以建立連接。但是從服務(wù)器端的角度來看:客戶端的發(fā)送能力符合預(yù)期(第一次握手),服務(wù)器端的接收能力符合預(yù)期(第二次握手),但是因為收不到客戶端的反饋(無法獲知第二次握手的報文是否成功抵達(dá)客戶端),那么只能得出服務(wù)器端的發(fā)送能力和客戶端的接收能力不一定符合預(yù)期的結(jié)論;
(3)第三次握手:客戶端發(fā)送報文,服務(wù)器端接收報文,如果接收成功,從服務(wù)器端的角度來看:客戶端的報文接收能力以及服務(wù)器端的報文發(fā)送能力都符合預(yù)期。
經(jīng)過三次握手的過程,客戶端和服務(wù)器端都明確對方以及自己能成功接收和發(fā)送信息,所以就可以開始正常通信。
2.4.2 假設(shè)如果只有兩次握手過程,是否能順利建立 TCP 連接?
《計算機網(wǎng)絡(luò)》 一書中對此進(jìn)行了解釋,三次握手的目的是 "為了防止已失效的連接請求報文段突然又傳送到了服務(wù)端,因而產(chǎn)生錯誤"。
如果 TCP 只有兩次握手,如果服務(wù)器端發(fā)送的第一個請求建立連接的報文在某個網(wǎng)絡(luò)節(jié)點長時間阻塞,等到連接釋放之后才抵達(dá)服務(wù)器端。本來這是一個早就失效的報文,但是服務(wù)器端收到這個失效的請求建立連接報文之后,會誤以為是客戶端需要建立一個新的連接請求,于是向客戶端發(fā)送 ACK 確認(rèn)報文,同意建立連接,這時候因為已經(jīng)完成了兩次握手,所以新的連接就會建立成功,這種情況顯然不符合預(yù)期。
如果是三次握手,客戶端不會向服務(wù)器端發(fā)送 ACK 確認(rèn)報文,所以服務(wù)器端超過最長等待時間后,會認(rèn)為客戶端沒有要求建立請求,這個無效報文最終會失效。
3. 小結(jié)
本章節(jié)給大家介紹了 TCP 和 UDP 協(xié)議的報文格式以及區(qū)別,分析了 TCP 建立連接的握手過程,需要大家能夠準(zhǔn)確畫出 TCP 握手每個過程的標(biāo)志位以及序號、確認(rèn)號,并且從原理上理解三次握手的必要性,下一章節(jié)會繼續(xù)給大家分析 TCP 四次揮手過程。
1. 前言
上一章節(jié)分析了 TCP 建立連接的過程,既然有建立連接,對應(yīng)的也有斷開連接。數(shù)據(jù)傳輸完成之后,客戶端和服務(wù)器端保持通信狀態(tài)會占用資源開銷,所以需要斷開連接,TCP 協(xié)議中斷開連接也被稱為 TCP 四次揮手。
2.1 TCP 四次揮手
面試官提問: 說明一下 TCP 斷開連接的過程,涉及到了幾個步驟?
題目解析:
(TCP 四次揮手過程)(TCP 四次揮手過程)
首先從行為上分析,TCP 斷開連接總共需要發(fā)送四次報文,也就是 "四次揮手" 的過程。
我們定義發(fā)送報文的一方是客戶端,接收報文的一方是服務(wù)器端。
上一章節(jié)中已經(jīng)對三次握手過程做出了分析,在建立連接后到傳輸數(shù)據(jù)的整個過程,客戶端和服務(wù)器端均處于 ESTABLISHED(監(jiān)聽)狀態(tài),之后四次揮手的過程如下:(1)第一次揮手:客戶端發(fā)送一個請求結(jié)束報文,其中 FIN 標(biāo)志位設(shè)置為 1,報文中給定一個序列號 u,報文內(nèi)容是 FINbit=1 seq=u,發(fā)送之后主動進(jìn)入 FIN_WAIT 狀態(tài),等待服務(wù)器端的確認(rèn)報文;
(2)第二次揮手:服務(wù)器端收到 FIN 報文,會發(fā)送 ACK 確認(rèn)報文,并且把客戶端發(fā)送的序列號加一作為確認(rèn)報文的確認(rèn)號,表示已經(jīng)收到了客戶端的報文,所以報文內(nèi)容是 ACKbit=1 seq=v ack=u+1,之后進(jìn)入 CLOSE_WAIT(關(guān)閉等待)狀態(tài)。此時會通知應(yīng)用層的進(jìn)程,客戶端已經(jīng)不會再發(fā)送數(shù)據(jù)了。此時連接處于半關(guān)閉狀態(tài),如果服務(wù)器端發(fā)送數(shù)據(jù),客戶端還是需要接收。
客戶端收到第二次揮手的報文后,會進(jìn)入 FIN_WAIT_2(等待結(jié)束)狀態(tài),等待服務(wù)器發(fā)送最后的終止連接報文;
(3)第三次揮手:服務(wù)器端把最后的數(shù)據(jù)發(fā)送之后,就開始向客戶端發(fā)送請求結(jié)束報文,F(xiàn)IN 標(biāo)志位設(shè)置為 1,確認(rèn)號設(shè)置為 u+1,比較特殊的一點是報文中 ACK 標(biāo)志位也是 1,報文內(nèi)容是 FINbit=1 ACKbit=1 seq=w ack=u+1,發(fā)送之后服務(wù)器端進(jìn)入 LAST_ACK(最終確認(rèn))狀態(tài),等待客戶端的確認(rèn)報文。
(4)第四次揮手:客戶端收到服務(wù)器的請求斷開連接報文后,必須還要發(fā)出一個確認(rèn)報文,ACK 標(biāo)志位設(shè)置為 1,并且序列號同上一報文的確認(rèn)號,確認(rèn)號同上一報文的序列號加一,報文內(nèi)容是 ACKbit=1 seq=u+1 ack=w+1,之后客戶端進(jìn)入 TIME_WAIT(時間等待)狀態(tài)。因為不會再收到服務(wù)器端的報文,所以等待 2*MSL(最大報文段生存時間)之后,自動進(jìn)入 CLOSED(關(guān)閉)狀態(tài)。
服務(wù)器端在收到客戶端的第四次揮手報文后,立即進(jìn)入 CLOSED(關(guān)閉)狀態(tài),表示結(jié)束本次 TCP 連接。
在向面試官分析整個流程的時候,我們可以將四次報文中的第一次和第二次看作一個整體,即是客戶端發(fā)送請求結(jié)束報文以及收到對應(yīng)響應(yīng)。第三次和第四次又是一個整體,即服務(wù)器端發(fā)送請求結(jié)束報文并且收到客戶端的響應(yīng)。
2.2 為什么建立連接是三次握手,斷開連接需要四次揮手
面試官提問: 為什么 TCP 建立連接只需要三次握手,而 TCP 斷開連接需要四次握手?
題目解析:
關(guān)于 TCP 建立連接三次握手的必要性,我們已經(jīng)在上一章節(jié)進(jìn)行了分析,這里不再贅述,這里分析下四次握手的必要性。
前置說明:TCP 是雙向通信的協(xié)議,客戶端可以發(fā)送和接收數(shù)據(jù),服務(wù)器端也可以發(fā)送和接收數(shù)據(jù),也就是全雙工通信模式。
第一次揮手時,服務(wù)器端收到了客戶端的 FIN 請求結(jié)束報文,但是因為應(yīng)用層的進(jìn)程可能還需要傳輸一些數(shù)據(jù),不能立即關(guān)閉 SOCKET,所以只能先給客戶端發(fā)送一個 ACK 確認(rèn)報文,讓客戶端有 "心理準(zhǔn)備"。之后服務(wù)器端進(jìn)入 CLOSE_WAIT 狀態(tài),這個狀態(tài)是為了處理最后的一些數(shù)據(jù),等待這些數(shù)據(jù)也傳輸完畢之后,服務(wù)器端再發(fā)送 FIN 請求結(jié)束報文,到這里就已經(jīng)有三次揮手的步驟了。最后,因為服務(wù)器端也需要感知第三次揮手的報文是否成功傳輸?shù)娇蛻舳耍钥蛻舳诉€需要第四次揮手的報文,來作為確認(rèn)。
2.3 TIME_WAIT 狀態(tài)
面試官提問: 第四次揮手之后,客戶端進(jìn)入的 TIME_WAIT 狀態(tài)是什么含義?有什么限制?
題目解析:
在候選人成功向面試官闡述了四次揮手的過程細(xì)節(jié)以及四次的必要性之后,面試官大概率會針對 TIME_WAIT 這個狀態(tài)發(fā)出提問。
我們將這個問題拆解開來,分步分析:
(1)TIME_WAIT 狀態(tài)的開始時間:TCP 連接中主動關(guān)閉連接的一方(一般看作客戶端)發(fā)送完最后一次揮手,主動關(guān)閉方就進(jìn)入 TIME_WAIT 狀態(tài)。
(2)TIME_WAIT 的持續(xù)時間:TIME_WAIT 的時間是 2*MSL(Maximum Segment Lifetime),即兩個最大數(shù)據(jù)段生命周期。
(3)TIME_WAIT 為什么要持續(xù) 2*MSL 這么長的時間:
① 防止丟失報文導(dǎo)致異常:客戶端發(fā)送的最后一個 ACK 報文可能丟失,服務(wù)器端收不到響應(yīng)則會發(fā)送第三次揮手的超時重傳報文,我們假設(shè)客戶端沒有 TIME_WAIT 狀態(tài),而是直接進(jìn)入 CLOSED 狀態(tài),則會收到非法的報文段,返回一個 RST(拒絕連接)的報文,產(chǎn)生異常。
② 防止報文在網(wǎng)絡(luò)中停止影響下次建立連接:MSL 表示報文在網(wǎng)絡(luò)中的最大傳輸時間,等待 2*MSL 可以讓網(wǎng)絡(luò)中的所有舊報文段都失效,下一次重新三次握手時就不會收到無效的報文段。
3. 小結(jié)
本章節(jié)給大家分析了 TCP 關(guān)閉連接的過程以及常見提問,需要大家能夠在白紙上畫出 TCP 四次揮手的每個流程,并且重點關(guān)注 TIME_WAIT 這個狀態(tài)。
1. 前言
在上一章節(jié)中我們介紹了 HTTP 協(xié)議相關(guān)的面試題目,作為 HTTP 協(xié)議的擴展,HTTPS 協(xié)議也經(jīng)常被面試官提起。
因為對于大部分的前端、后端開發(fā)者,都接觸不到 HTTPS 協(xié)議的開發(fā)場景,因為我們往往只關(guān)注請求路徑后綴,例如關(guān)注 URL: /get/username,而非路徑全稱 https://coding.imooc.com/get/username ,所以考察 HTTPS 協(xié)議也是對候選人的知識深度的考驗。
2.1 HTTP 和 HTTPS 協(xié)議
** 面試官提問:** 為什么有了 HTTP 協(xié)議后還出現(xiàn)了 HTTPS 協(xié)議?HTTPS 協(xié)議解決了什么問題?
題目解析:
在研究 HTTPS 協(xié)議之前,我們先總結(jié)下 HTTP 協(xié)議的優(yōu)點和缺點:
優(yōu)點缺點
通信方式簡單:基于請求和響應(yīng),客戶端發(fā)起請求,服務(wù)器端返回響應(yīng)明文通信:信息明文傳輸,安全性低。
無需維護狀態(tài):HTTP 是無狀態(tài)協(xié)議,不識別客戶端。沒有狀態(tài):例如對于需要保持登錄狀態(tài)的網(wǎng)站,需要依靠其他外部方式(Cookie、Session)維護狀態(tài)。
速度快,效率高。
如上表所示,HTTP 協(xié)議犧牲了安全性,換來了效率,但是在某些安全性要求高的場景,使用 HTTP 協(xié)議是不合適的。
HTTP 協(xié)議的全稱是 Hypertext Transfer Protocol,HTTPS 協(xié)議的全程是 Hypertext Transfer Protocol Secure,多了一個 Secure(安全)的限制詞。從協(xié)議上看,HTTPS 協(xié)議基于 HTTP 協(xié)議,使用 SSL/TLS 協(xié)議對傳輸內(nèi)容進(jìn)行加密,從公式上定義:HTTP + SSL(TLS) = HTTPS。
HTTPS 協(xié)議將 HTTP 協(xié)議的通信部分由 SSL 或者 TLS 協(xié)議替代,網(wǎng)絡(luò)模型劃分如下:
(HTTP 和 HTTPS 模型圖)
除了 SSL 協(xié)議以外,HTTPS 協(xié)議還涉及幾個重要的概念:CA 證書、混淆加密方式,以及 HTTPS 協(xié)議具體的工作流程,下面我們拆分解釋。
2.2 對稱加密和非對稱加密算法
** 面試官提問:** 既然 HTTPS 協(xié)議對通信內(nèi)容進(jìn)行了加密,那么涉及到了什么加密算法?
題目解析:
HTTPS 協(xié)議的核心是加密流程,首先我們需要區(qū)分三種加密方式:對稱加密、非對稱加密以及混淆加密。
(1)對稱加密:加密方和解密方都使用了相同的密鑰,只要保證密鑰不會泄露給第三方, 整個通信過程就是安全的。
(對稱加密算法流程)
因為對稱加密算法整個過程共享同一個密鑰,所以使用特點也比較明顯。
優(yōu)點:算法簡單,加密速度快;
缺點:安全性低,如果密鑰泄露,密文也被中間人攔截,那么信息很容易就會被破解。
在企業(yè)生產(chǎn)環(huán)境下,常用的對稱加密算法有 AES 算法。
(2)非對稱加密:在安全性要求更高的場景下,我們需要使用非對稱加密,關(guān)于非對稱加密算法的流程如下:
(非對稱加密算法流程)首先定義兩種密鑰:一種是公鑰(Public Key),給任何需要和接收方通信的客戶端保存;另一種是私鑰(Private Key),只給接收方自己保存。
對于要發(fā)送的原文文本,發(fā)送方通過接收方的公鑰對內(nèi)容加密,加密后的內(nèi)容只有接收方的私鑰可以解密。在整個傳輸過程中,如果發(fā)送方的公鑰泄露,加密內(nèi)容也被竊取,也不會導(dǎo)致傳輸內(nèi)容被破解(只要接收方的私鑰沒有泄露)。
常見的非對稱加密算法有 RSA 算法(即一種支持變長密鑰的公共密鑰算法)。
另外,面試官可能會提出 MD5 算法的劃分,MD5 是非常常見的加密算法,例如在保存用戶密碼時經(jīng)常被使用。但是要區(qū)分的是,MD5 算法不是對稱和非對稱算法,MD5 算法不可逆,主要目的是為了文件校驗(例如判斷文件是否在傳輸過程中損壞),或者數(shù)字簽名等途徑。
3. 小結(jié)
本小節(jié)主要給大家簡單說明了 HTTPS 協(xié)議和傳統(tǒng) HTTP 協(xié)議的區(qū)別,另外給出了對稱加密和非對稱加密算法的流程,我們需要掌握不同加密算法的特點,在下一章節(jié)中會給大家介紹 HTTPS 協(xié)議的具體流程。
1. 前言
上一章節(jié)中我們主要就 HTTPS 協(xié)議的前置知識進(jìn)行介紹,下面會繼續(xù)介紹 HTTPS 的通信過程以及拋出一些常見問題的探討。因為候選人準(zhǔn)備面試的時間和精力是比較有限的,我們在學(xué)習(xí)的過程要抓住重點,如果感覺對于細(xì)節(jié)缺乏了解,可以通過維基百科和查閱 StackOverflow 等方式進(jìn)行自行補充。
2. HTTPS 協(xié)議
2.1 HTTPS 請求流程
面試官提問: HTTPS 的請求流程和 HTTP 協(xié)議的請求流程有什么區(qū)別?
題目解析:
參考 HTTPS 的官方文檔,我們將整個請求的流程簡單抽象為以下幾個步驟,抓住其中的核心步驟:
(HTTPS 簡化通信模型)1. 前言
雖然計算機網(wǎng)絡(luò)是后端開發(fā)過程中必須要接觸的模塊,但是計算機網(wǎng)絡(luò)相關(guān)的面試題大多都偏向理論,為了更好的理解在開發(fā)過程中計算機網(wǎng)絡(luò)交互的作用,本小節(jié)會介紹一道網(wǎng)絡(luò)相關(guān)的高頻整合題目。
2. 在瀏覽器輸入了一個 URL 后發(fā)生了什么
面試官提問: 當(dāng)你在瀏覽器中輸入了一個網(wǎng)址URL,例如http://www.imooc.com并且按下回車到頁面展示內(nèi)容的這個過程,發(fā)生了什么?可以從瀏覽器、服務(wù)器、計算機網(wǎng)絡(luò)相關(guān)嘗試分析。
1. 前言
雖然計算機網(wǎng)絡(luò)是后端開發(fā)過程中必須要接觸的模塊,但是計算機網(wǎng)絡(luò)相關(guān)的面試題大多都偏向理論,為了更好的理解在開發(fā)過程中計算機網(wǎng)絡(luò)交互的作用,本小節(jié)會介紹一道網(wǎng)絡(luò)相關(guān)的高頻整合題目。
2. 在瀏覽器輸入了一個 URL 后發(fā)生了什么
面試官提問: 當(dāng)你在瀏覽器中輸入了一個網(wǎng)址URL,例如http://www.yemao.com并且按下回車到頁面展示內(nèi)容的這個過程,發(fā)生了什么?可以從瀏覽器、服務(wù)器、計算機網(wǎng)絡(luò)相關(guān)嘗試分析。
2.1 DNS域名解析
題目解析:輸入 URL 之后,瀏覽器做的第一件事情就是 DNS 域名解析。
在之前的小節(jié),我們分析五層網(wǎng)絡(luò)模型時就知道了數(shù)據(jù)鏈路層傳輸?shù)膸?,并不是通過字符串 “http://imooc.com” 尋找到目標(biāo)主機,而是通過 MAC 地址找到目標(biāo)主機的硬件地址,要通過 ARP 協(xié)議解析獲取 MAC 地址,我們需要目標(biāo)主機的 IP 地址,所以問題是如何通過域名獲取對應(yīng) IP 地址。
所以第一個步驟,我們需要獲取域名對應(yīng)的IP地址,會經(jīng)過以下幾個步驟:
2.1 DNS域名解析
題目解析:輸入 URL 之后,瀏覽器做的第一件事情就是 DNS 域名解析。
在之前的小節(jié),我們分析五層網(wǎng)絡(luò)模型時就知道了數(shù)據(jù)鏈路層傳輸?shù)膸?,并不是通過字符串 “http://yemao.com” 尋找到目標(biāo)主機,而是通過 MAC 地址找到目標(biāo)主機的硬件地址,要通過 ARP 協(xié)議解析獲取 MAC 地址,我們需要目標(biāo)主機的 IP 地址,所以問題是如何通過域名獲取對應(yīng) IP 地址。
所以第一個步驟,我們需要獲取域名對應(yīng)的IP地址,會經(jīng)過以下幾個步驟:
(1)訪問 Hosts 文件瀏覽器會首先查看本機的 Hosts 文件,是否已經(jīng)存在映射關(guān)系。Hosts文件是用來存儲常用的域名和對應(yīng)IP地址關(guān)系的關(guān)聯(lián)文件,例如在Hosts文件中存儲了"www.imooc.com" -> "204.1.17.89",那么我們不需要訪問DNS服務(wù)器即可獲取百度域名對應(yīng)的IP地址。
(2)訪問本地緩存如果 Hosts 文件中不存在映射關(guān)系,瀏覽器(例如Chrome)會再查看瀏覽器本地的緩存,是否存在映射關(guān)系。
(3)訪問 DNS 服務(wù)器
(圖1:域名到IP的解析模型)
DNS 解析的過程簡單來看,是從"我的電腦"傳輸域名"www.yemao.com"到 DNS 服務(wù)器,解析生成IP后返回給"我的電腦"。但是面試官一般會接著詢問 DNS 解析的詳細(xì)過程,依次考察候選人的知識深度。
(圖2:DNS 迭代查詢的具體過程)步驟(1):瀏覽器會向本地 DNS 服務(wù)器發(fā)送域名報文。
步驟(2):本地 DNS 接收報文之后,會將請求轉(zhuǎn)發(fā)到根 DNS 服務(wù)器。
步驟(3):根 DNS 服務(wù)器通過".com"后綴返回 com 頂級域名服務(wù)器的IP地址205.0.1.2。
步驟(4):本地 DNS 服務(wù)器帶著域名訪問IP:205.0.1.2頂級域名服務(wù)器。
步驟(5):com 頂級域名服務(wù)器根據(jù)后綴"imooc.com",返回 IP 地址206.0.1.3。
步驟(6):本地 DNS 服務(wù)器帶著域名訪問IP206.0.1.3二級域名服務(wù)器。
步驟(7):二級域名服務(wù)器通過www.imooc.com查詢到了域名對應(yīng)的實際IP地址210.1.17.89,返回給本地 DNS 服務(wù)器。
步驟(8):本地 DNS 服務(wù)器透傳IP210.1.17.89返回給"我的電腦"。
2.2 建立 TCP 連接
在經(jīng)過 DNS 解析之后,瀏覽器已經(jīng)獲取了對應(yīng)網(wǎng)站的 IP 地址,通過三次握手連接到網(wǎng)站服務(wù)器,這個步驟中,我們可以給面試官畫出簡化后的三次握手過程:
TCP三次握手TCP三次握手
(1)客戶端發(fā)送一個帶有 SYN 標(biāo)記位的數(shù)據(jù)包(syn=J)到服務(wù)器,然后進(jìn)入 SYN_SENT 狀態(tài);
(2)服務(wù)器收到 SYN 包,需要確認(rèn)客戶端的 SYN(賦值ack=J+1),然后自己也發(fā)送一個 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 請求
TCP 三次握手之后,客戶端和服務(wù)器端成功建立了連接,之后瀏覽器會向服務(wù)器特定端口發(fā)送HTTP請求。
(https://yemao.com URL的請求報文)以 Chrome 瀏覽器為例,按下 F12 即可進(jìn)入開發(fā)者模式,Network 一欄查看HTTP請求的具體報文。
一個 HTTP 報文由請求行(Request Line)、請求頭部(Request Headers)、空行(Blank Line)以及請求體(Request Body)構(gòu)成,請求行中規(guī)定了請求方法、URI 以及 HTTP 的版本,關(guān)于每個字段的詳細(xì)解釋,之前的小節(jié)已經(jīng)進(jìn)行了闡述。
2.4 服務(wù)器端解析請求
當(dāng)一個 HTTP 請求打進(jìn)服務(wù)器之后,一般的流程是:網(wǎng)關(guān)層(例如Ngnix)最先獲取請求,然后路由轉(zhuǎn)發(fā)到具體的Web服務(wù),經(jīng)過一段業(yè)務(wù)邏輯之后,可能還會查詢數(shù)據(jù)庫,最后將處理的結(jié)果返回給瀏覽器客戶端。
對于后端開發(fā)程序員來說,日常的工作就集中在服務(wù)器端,特別是流程圖中的"Web業(yè)務(wù)服務(wù)"這塊,例如基于 Spring 框架、Django 框架或者ThinkPHP 框架進(jìn)行業(yè)務(wù)邏輯開發(fā)和上線。
(HTTP 請求進(jìn)入服務(wù)器端后的解析流程圖)
(HTTP 請求進(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)于每個部分的細(xì)節(jié)也不再贅述。需要特別注意的是,響應(yīng)體中的各種錯誤碼定義:
狀態(tài)類型代表狀態(tài)碼和含義說明
1xx100 Continue服務(wù)器收到了客戶端的請求行和頭部信息,告訴 客戶端繼續(xù)發(fā)送數(shù)據(jù)部分。
2xx200 OK請求成功
3xx301 Moved Permanently資源被轉(zhuǎn)移了,請求將被重定向
4xx404 Not Found資源沒找到
5xx500 Internal Server Error服務(wù)器內(nèi)部錯誤
2.6 TCP四次揮手
當(dāng)瀏覽器獲取了域名對應(yīng)的頁面信息,為了避免服務(wù)器和客戶端雙方的資源損耗,客戶端會請求斷開 TCP 連接,和三次握手的過程相似,TCP 四次揮手的過程可以總結(jié)為:
(1)第一次請求:客戶端請求斷開FIN,攜帶信息seq=u;
(2)第二次請求:服務(wù)器確認(rèn)客戶端的斷開請求 ACK ,攜帶信息ack=u+1,seq=v;
(3)第三次請求:服務(wù)器請求斷開 FIN ,攜帶信息seq=w,ACK,ack=u+1;
(4)第四次請求:客戶端確認(rèn)服務(wù)器的斷開 ACK ,攜帶信息ack=w+1,seq=u+1。
(TCP四次揮手示意圖)
2.7 瀏覽器解析 HTML
服務(wù)器返回給客戶端的是 HTML 以及 CSS、Javascript 代碼,要展示為靜態(tài)頁面,還需要經(jīng)過瀏覽器的解析行為。
瀏覽器內(nèi)核引擎解析 HTML 文檔并且將標(biāo)簽轉(zhuǎn)換為 DOM(Document Object Model,文檔對象模型)樹的 DOM 節(jié)點,不同瀏覽器的渲染解析流程大同小異。
同時,瀏覽器內(nèi)核引擎還會解析 CSS 生成 CSS 規(guī)則樹,按照從右到左的順序讀取選擇器。
另外,在瀏覽器中還有個"JS腳本解析器",解析 HTML 和 CSS 是多線程同時執(zhí)行的,CSS 解析失敗不會影響 HTML 內(nèi)容的解析,但是如果 JS 腳本解析過程中觸發(fā)了異常,會直接終止 HTML 內(nèi)容的解析。關(guān)于更詳細(xì)的解析動作,作為后端開發(fā),我們不需要了解太多,這塊也不會作為面試考察的內(nèi)容。
3.小結(jié)
本節(jié)中和大家講解了"我們在瀏覽器中輸入一個URL,具體發(fā)生了什么",整個過程中分析了應(yīng)用層(HTTP、DNS)、傳輸層(TCP)、網(wǎng)絡(luò)層(IP)等網(wǎng)絡(luò)分層的各個協(xié)議的作用,也對服務(wù)器解析HTTP的基本流程進(jìn)行了闡述,本小節(jié)需要大家掌握訪問 URL 時每個步驟的基本功能,能夠通過對調(diào)用鏈路的分析,向面試官展示自己的計算機網(wǎng)絡(luò)功底。