
「面試專欄」前端面試之計算機網路篇
- ?序言
- 🏐一、基礎知識環節
- 1、專欄學習
- 2、書籍學習
- ?二、思維導圖環節
- 🎳三、OSI七層模型
- 1、OSI模型是什么?
- 2、OSI七層模型遵循原則
- 🏏四、TCP與UDP
- 1、TCP與UDP的區別
- 2、TCP/UDP的優缺點
- (1)TCP的優點
- (2)TCP的缺點
- (3)UDP的優點
- (4)UDP的缺點
- 3、DDOS攻擊(由TCP和UDP的缺點引出DDOS攻擊問題)
- (1)什么是DDOS攻擊?
- (2)DDOS攻擊方式?
- (3)如何應對DDOS攻擊?
- 4、TCP為什么可靠?
- 5、TCP的三次握手和四次揮手
- (1)TCP的三次握手
- (2)TCP為什么要三次握手?
- (3)TCP的四次揮手
- (4)TCP為什么要四次揮手?
- (5)什么是面向連接協議?什么是面向無連接協議?
- (6)為什么建立連接是三次握手,關閉連接是四次揮手呢?
- (7)如果已經建立了連接,但是客戶端突然出現故障了該怎么辦?
- 🏒五、TCP的通信機制
- 1、TCP的重發控制
- 2、TCP的滑動視窗控制
- 3、滑動視窗的重發控制
- 4、TCP的流量控制機制
- 5、TCP的擁塞控制
- 🏸六、結束語
- 🐣彩蛋 One More Thing
- 🏷?pdf內容獲取
- 🏷?更新地址
- 🏷?番外篇
?序言
大家都知道,計算機網路是前端面試中非常愛考的面試題了,不得不說是八股文的經典,在周一剛開始接觸計網時,也是一直看到類似于三次握手四次握手之類的問題,剛開始我是知識比較浮于表面,對計網知識的了解就一直停留在知道有那么一些內容,但隨著學習的深入,慢慢地我覺得,在了解一個東西之前,不僅僅要知道它是什么?還要知道它為什么出現?它的出現又解決了什么問題?這樣的學習會更加有利于將其運用到我們的日常開發中,
在下面這篇文章中,將分享在秋招備試的程序中我學習計網的一個程序,以及自己整理的關于計網常考的一些面經題,
下面開始進入今天文章的講解~😜
🏐一、基礎知識環節
1、專欄學習
剛開始面對的是學校發的一本非常厚重的書,u1s1,面對那接近1000頁的書,我的心里其實蠻奔潰的,后面在機緣巧合下,在一個公眾號上看到了一位前端博主的文章,零一,緊接著在 csdn 上看到他寫的很多精選專欄,看完他的博客之后,才下意識地感覺……原來還有寫的這么好的文章,這一段廢話有點多……以后有機會再談,
我當時先學的是零一博主的 TCP 專欄,博主的每一篇文章對小白都是極其友好型別,非常地通俗易懂,下面附上 TCP 專欄相關的文章鏈接👇
| 序號 | 文章 | 鏈接 |
|---|---|---|
| 1 | 【TCP/IP】概述網路分層以及協議介紹 | https://lpyexplore.blog.csdn.net/article/details/108925528 |
| 2 | 【TCP/IP】IP地址的劃分及其分類 | https://lpyexplore.blog.csdn.net/article/details/108935757 |
| 3 | 【TCP/IP】鏈路層的簡單認識 | https://lpyexplore.blog.csdn.net/article/details/109248705 |
| 4 | 【TCP/IP】詳解DNS具體作用程序 | https://lpyexplore.blog.csdn.net/article/details/109128967 |
| 5 | 【TCP/IP】圖解TCP的通信機制 | https://lpyexplore.blog.csdn.net/article/details/109133096 |
| 6 | 專欄傳送門 | https://blog.csdn.net/l_ppp/category_10448348.html |
以上文章可以按順序學哦~
2、書籍學習
學習完上面的5篇博客之后,前后大概花了15-20h左右的時間,看完之后,算是稍微入了個門,但是計網的內容遠遠不止這些,所以,在學習了博客文章之后,我繼續用書籍來深挖知識點,
搜尋了知乎和豆瓣,還有身邊的小伙伴的推薦,大家都說對前端比較友好的書籍是: 《圖解TCP/IP》 這一本書,看下圖👇

這本書以圖解的形式,講解了計算機網路的大部分知識,可以說對入門選手和對看書就容易犯困的小伙伴來說實在是太太太友好了……強烈安利!
看完這本書之后,應對面試基本上算是足夠了,如果還有想要深挖的小伙伴,可以去看深色封面的那本書……只是聽過,但是我沒有看過,所以這里只簡單概括一下~
有了基礎知識預備之后,就可以看一下一些面經題目,嘗試著回顧和用自己的話語來回答,同時在文章下面的內容中,我也將對我遇到的系列題目進行歸納總結~
?二、思維導圖環節
我們先用一張思維導圖來了解該系列面經題的知識體系,具體如下圖👇

思維導圖收入囊中,下面開始分享面經題的解答流程~
🎳三、OSI七層模型
1、OSI模型是什么?
OSI 七層模型,即網路通信的七個層次,之所以將其分為七個層次,是為了讓開發人員可以在不同領域分別實作整個系統的不同部分,就像一個非常龐大的工程,每個員工都有自己擅長的崗位和專門負責的作業,
那么七個層次主要包括:物理層、資料鏈路層、網路層、傳輸層、會話層、表示層以及應用層,
接下來談論各個層次的作用,
第一個,應用層,應用層是為應用程式提供服務并規定應用程式中通信相關的細節,包括檔案傳輸、電子郵件、遠程登錄(虛擬終端)等協議,
第二個,表示層,表示層是將應用處理的資訊轉換為適合網路傳輸的格式,或將來自下一層的資料轉換為上一層能夠處理的格式,因此它主要負責資料格式的轉換,
第三個,會話層,會話層是負責建立和斷開通信連接,以及資料的分割等資料傳輸相關的管理,
第四個,傳輸層,傳輸層起著可靠傳輸的作用,它只在通信雙方的節點上進行處理,而無需在路由器上處理,
第五個,網路層,網路層將資料傳輸到目標地址上,目標地址可以是多個網路通過路由器連接而成的某一個地址,因此這一層主要負責尋址和路由選擇,
第六個,資料鏈路層,資料鏈路層負責物理層面上互聯的、結點之間的通信傳輸,
第七個,物理層,負責0、1位元流(0、1序列)與電壓的高低、光的閃滅之間的互換,
2、OSI七層模型遵循原則
OSI參考模型遵循五個原則:
-
各個層級之間有清晰的邊界,便于理解各個層級的功能;
-
每個層實作的功能不一樣,并且不會互相影響;
-
層與層之間是服務與被服務關系;
-
層次劃分有利于國際標準協議的制定;
-
層次數目越多,就越能避免各個層之間的功能重復,
🏏四、TCP與UDP
1、TCP與UDP的區別
| TCP | UDP |
|---|---|
| TCP在傳輸層上 | UDP在傳輸層上 |
| 面向連接 | 面向無連接 |
| 面向位元組流 | 面向報文 |
| 一對一通信 | 一對一、一對多、多對一、多對多通信 |
| 需要建立可靠的連接 | 不需要建立可靠的連接 |
| 適用于可靠傳輸的應用:web browsing、email、檔案傳輸等 | 適用于實時應用:線上游戲、直播、IP電話、語音會議等 |
白話文回答:
TCP是面向連接的,UDP是面向無連接的,即發送資料前不需要建立連接,TCP提供可靠的傳輸服務,通過TCP連接傳送的資料,無差錯,不丟失,不重復,且按序到達,而UDP則是盡最大努力交付,不保證可靠傳輸,- 因此,因為
TCP可靠,面向連接且不會丟失資料,所以TCP適合大資料量的交換, TCP面向位元組流,實際是TCP把資料看成是一連串無結構的位元組流;UDP則是面向報文的,且沒有擁塞控制,因此,網路出現擁堵的情況下不會使原主機的發送速率降低,但是這個程序會出現丟包,所以它對實時的應用很有用,比如IP電話、視頻會議和直播等等,- 每一條
TCP連接,只能是一對一的,UDP則支持一對一、一對多、多對一和多對多的互動通信, TCP的首部開銷為20位元組,而UDP的只有8位元組,- 綜上所述,
TCP是面向連接的可靠性傳輸,而UDP則是不可靠的,
注: TCP 需建立三次連接、且 TCP 的包可以進行分組發送,會產生建立連接開銷和分組開銷,
2、TCP/UDP的優缺點
(1)TCP的優點
-
可靠、穩定,
-
TCP的可靠體現在TCP在傳遞資料之前,會有三次握手來建立連接; -
且在資料傳遞時,有確認、視窗、重傳、擁塞控制等機制;
-
在資料完成傳送以后,還會通過斷開連接來節約資源,
(2)TCP的缺點
- 慢、效率低、占用系統資源高,易被攻擊,
TCP在傳遞資料前,要先建立連接,這會消耗時間;- 且在傳遞資料時,確認機制、重傳機制、擁塞控制機制等都會消耗大量的時間;
- 同時要在每臺設備上維護所有的傳輸連接,事實上,每個連接都會占用系統的
CPU、記憶體等硬體資源; - 而且,因為
TCP有三次握手機制,這些也會導致TCP容易被人利用,實作DOS、DDOS等攻擊,
(3)UDP的優點
- 快、比TCP稍安全,
UDP是一個無狀態的傳輸協議,且UDP沒有TCP的握手、確認、視窗、重傳、擁塞控制等機制,所以它在傳遞資料時非常快,沒有TCP的這些機制,UDP較TCP能被攻擊者利用的漏洞就要少一些,- 但
UDP也是無法避免攻擊的,比如:UDP flood攻擊,
(4)UDP的缺點
- 不可靠、不穩定,
- 因為
UDP沒有TCP那些可靠的機制,所以在資料傳遞時,如果網路質量不好,就會很容易丟包,
3、DDOS攻擊(由TCP和UDP的缺點引出DDOS攻擊問題)
(1)什么是DDOS攻擊?
- 分布式拒絕服務攻擊(Distributed denial of sevice attack);
- 即向目標系統同時提出數量龐大的服務請求,
(2)DDOS攻擊方式?
攻擊者如何攻擊目標主機呢?
- 通過使網路過載來干擾甚至阻斷正常的網路通訊,
- 通過向服務器提出大量的服務請求、使服務器超負荷,
- 阻斷某一用戶訪問服務器,
- 阻斷某服務與特定系統或個人的通訊,
(3)如何應對DDOS攻擊?
- 黑名單,
DDOS清洗:對用戶請求的資料進行實時監控,及時發現DOS攻擊等例外流量,在不影響正常業務開展的情況下清洗掉這些例外流量,CDN加速,- 高仿服務器:高仿服務器主要是指能獨立防御50Gbps以上 (
1Gbps=1024Mbps,即每秒1000M) 的服務器,能夠幫助網站拒絕服務攻擊,定期掃描網路主節點,
4、TCP為什么可靠?
TCP會通過檢驗和、序列號、確認應答、重發控制、連接管理及視窗控制等機制實作可靠性傳輸,- 那如何通過以上機制來實作可靠性傳輸呢?
- 在
TCP中,當發送端的資料到達接收主機時,接收端主機會回傳一個已收到訊息的通知,這個訊息叫做確認應答(ACK),(確認應答) - 相反,當發送端發送資料出去之后,且在一段時間內,沒有等到確認應答,則資料極有可能出現丟失的情況,
- 如果在一定時間內沒有等到確認應答,那么發送方就可以認為資料已經丟失,并進行重發,由此,即使產生了丟包,仍然能夠保證資料能夠到達對端,實作可靠傳輸,(丟包重發)
- 此外,也有可能因為一些其他原因導致確認應答延遲到達,此時,發送主機同樣會按斬訓制重發資料,(延遲重發)
- 但是這對于目標主機來說,簡直是一個巨大的災難,因為目標主機會反復收到相同的資料,
- 為此,需要引入一種新的機制,序列號,序列號能夠識別是否已經接收資料,及是否需要接收資料,(序列號)
- 序列號是按照順序給發送資料的每一個位元組都標上號碼的編號,接收端會查詢所接收資料中
TCP首部的序列號和資料的長度,將自己下一步應該接收的序號作為確認應答返送回去,(序列號) - 就這樣,通過序列號、確認應答等機制,實作
TCP的可靠傳輸,
注: 序列號主要是讓接收端可以丟棄資料并回傳下一個應答號,這樣就不會頻繁地收到同一個資料,
5、TCP的三次握手和四次揮手
(1)TCP的三次握手
場景模擬:
- 如通話一樣,比如我現在跟面試官您打電話,那我會先問,喂,您好,聽得到嗎?
- 你會回我說,聽到啦!那你能聽到我的話嗎?
- 我會再回你說,聽到了,我們可以開始聊天了,
三次握手:
- 首先,客戶端會發送一個帶有
SYN標志的資料包給對方; - 接收方收到以后,會回傳一個帶有
SYN/ACK標志的資料包回傳給發送端,代表成功傳達訊息; - 之后發送端再回傳一個帶有
ACK標志的資料包,代表握手結束,
(2)TCP為什么要三次握手?
- 驗證服務端和客戶端是否遵循
TCP/IP協議; - 為了防止已失效的連接請求報文段突然又傳送到服務端,避免錯誤產生,
(3)TCP的四次揮手
第一次揮手:
- 客戶端行程發出連接釋放報文,并且停止發送資料,
第二次揮手:
- 服務器收到連接釋放報文,發出確認報文,此時,服務端就進行了
close-wait(關閉等待)狀態,(客戶端向服務器方向釋放了,但是服務器發送資料,客戶端依然要接收) - 客戶端收到服務器的確認請求后,客戶端就進入了
Fin-wait-2(終止等待2)狀態,等待服務器發送連接釋放報文(在這之前還需要接收服務器發送的最后資料),
第三次揮手:
- 服務器將最后的資料發送完畢后,就向客戶端發送連接釋放報文,服務器就進入了
Last-ack(最后確認),
第四次揮手:
- 客戶端收到服務器的連接釋放報文后,必須發出確認,客戶端就進入了
time-wait(時間等待)狀態, - 服務端只要收到了客戶端發出的確認,立即進入
closed狀態, - 至此,就結束了這次的
TCP連接,(服務器結束TCP連接的時間要比客戶端早一些)
(4)TCP為什么要四次揮手?
-
之所以要四次揮手,其實是確保雙方資料都已發送完畢,
-
TCP是全雙工模式,這就意味著,當主機1發送FIN報文段時,只是表示主機1已經沒有資料要發送了,主機1告訴主機2,它的資料已經全部發送完畢了, -
當
主機2回傳ACK報文段時,表示它已經知道主機1沒有資料發送了,但是主機2還是可以發送資料到主機1的, -
當
主機2也發送了FIN報文段時,這個時候就表示主機2也沒有資料要發送了,就會告訴主機1,我也沒有資料要發送了, -
最后,
主機1再發送ACK報文段來確認握手結束,之后彼此就會愉快的斷開此次的TCP連接,
(5)什么是面向連接協議?什么是面向無連接協議?
面向連接協議:
- 通信雙方在通信時,需要事先建立好一條虛擬的通信線路,
- 通信程序有“建立連接、維護連接、斷開連接“三個階段,
面向無連接協議:
- 與面向連接相對,通信雙方不需要事先建立通信線路,而是把每個帶有目的地址的報文分組送到通信線路上,由系統自主選定線路進行傳輸,
- 面向無連接只有“傳送資料”的程序,
(6)為什么建立連接是三次握手,關閉連接是四次揮手呢?
- 建立連接的時候,服務器在
listen狀態下,收到建立連接請求的SYN報文后,服務器把ACK和SYN放在一個報文里發送給客戶端, - 而關閉連接時,服務器收到對方的
FIN報文時,僅僅表示①對方不再發送資料了但是還能接收資料,而②自己也未必所有資料都已經發送給對方了,所以己方可以立即關閉,也可以發送一些資料給對方,之后③己方再發送FIN報文給對方來表示同意現在關閉連接,因此,己方ACK和FIN一般都會分開發送,從而導致多了一次,
注: ①②③表示第一二三次揮手
(7)如果已經建立了連接,但是客戶端突然出現故障了該怎么辦?
TCP還有一個保活計時器,- 當客戶端出現故障時,服務器肯定是不會一直等待下去,白白浪費資源的,
- 服務器每收到一次客戶端的請求后都會重新復位這個計時器,時間通常設定為
2h,若2h還沒有收到客戶端的任何資料,服務器就會發送一個 探測報文段 給客戶端,以后每隔75s發送一次, - 若一連發送 10個探測報文段 仍沒有反應,服務器就認為客戶端出了故障,緊接著就會關閉連接,
注: 10x75=750s=12.5min
🏒五、TCP的通信機制
1、TCP的重發控制
- 我們都知道,在資料傳輸程序中可能會因為各種原因出現丟包現象,而當出現丟包現象時,即發送端在發完資料并等待一段時間以后,未接收到接收方應答,則視為丟包,于是就會進行重發,
- 其中,丟包現象分為兩種:①發送程序丟包;②接收程序丟包,
- 那么,發送端發送完資料以后多久沒有收到確認應答才判定資料丟包了呢?
- 這個一般都是隨著網路環境的變化而變化的,
TCP會在每次發包時計算往返時間以及偏差來決定等待時間, - 若重發后又出現了丟包,則下一次等待的時間會以2倍、4倍的指數函式增長,
- 但它肯定是不會無限進行重發的,當重發次數達到一定程度后[1],會判定為網路例外,兩端通信就會被強制關閉,
[1]:TCP 有一個保活計時器,如果在 2h 后還沒有收到客戶端的資料,那么就會重新復位這個計時器,之后每隔 75s 會發送一次,如果一連發送10個還是沒有收到,那么就會斷開連接,
2、TCP的滑動視窗控制
解題:
- 什么原因導致需要有滑動視窗?
- 有了滑動視窗后可以解決什么問題?
白話文回答:
- 我們都知道,資料不應該一次性發送,不然丟失了都不知道往哪里找,因此應該采取 分段發送 的措施,
- 但是呢,
TCP將資料分段發送,雖然提高了傳輸的可靠性,但是存在著一個致命的缺點,那就是 效率非常低 , - 因為每發送一段資料,都要等待接收端的確認應答后才能繼續發送,若整個資料的分段較多,那么通信的性能就會很低了,因此
TCP引入了 視窗 這個概念, - 所謂視窗,表示的是無需等待接收方的確認應答而可以連續發送多段資料,
- 舉個例子:假設要發送
4段資料,如果每次都要發送后接收完才能再重新發送,那來回就得8次,但如果用滑動視窗的話,四段資料可以同時發出去,接收端再回傳相應的確認應答給發送方, - 這個時候發送方會根據相應的確認應答繼續發送比該確認序列中序列號大的資料即可,
3、滑動視窗的重發控制
- 若使用滑動視窗這一技術后,即使某段資料出現丟包現象,也不會造成很大的影響,
- 因為接收端會一邊接收發送端傳過來的資料,一邊用某種方式告知發送端前面丟失了哪一段資料,
4、TCP的流量控制機制
為什么需要流量控制機制?
- 有時,發送端發送給接收端的資料超過了接收端的最大承載能力,就會造成資料無法接收的情況,從而導致之后會進行資料重發,這樣子會非常浪費性能,
如何解決這種問題呢?引出流量控制機制
- 為了防止上述情況發生,
TCP提供了一種機制(即流量控制機制)來使得發送端每次發送的資料盡可能的在接收端的承載范圍之內, - 而實作方式就是,
接收端向發送端告知自己能夠接收的資料大小,如此一來,發送端每次發送的資料就都不會超過該值,我們成該值為視窗大小, - 一旦接收端暫時無法接收任何資料,它會告知發送端,因此發送端會暫停資料的發送,
- 但為了后續資料的正常發送,發送端會不時地向接收端發送一個 視窗探測 ,試探性地看一下接收端能否繼續接收資料,
5、TCP的擁塞控制
- 因為出現了視窗控制,資料不再是一段一段發送,而是連續發送多段資料包,因此有時候如果出現網路擁堵的情況下,而我們又同時發送了大量的資料包,這很有可能會導致網路癱瘓,
- TCP運用了一種叫做 慢啟動 的技巧緩解上述問題,那何為 慢啟動 呢?
- 就是不要在一開始就瞬間發送大量資料包,而是先發送一部分,然后再根據收發情況再發送更多的資料包,
- 總結就是每次發送的資料包會以
1,2,4的指數型增長,但視窗大小也不會無限指數型增大,而是會達到某個值時進行一些調整,該值稱為 慢啟動閾值 ,
流量控制機制和擁塞控制機制的區別:
- 流量控制是以接收端為主導,接收端明確自己想要的視窗大小,然后發送端再把資料發送給接收端;
- 而擁塞控制機制則是以發送端為主導,發送端試探性的以1,2,4的指數型增長給接收端發送資料,探測接收端的承載能力,等到接收端不能再接收資料時,發送端就會知道接收端沒法承載這么多資料,于是就會進行向下調整,
🏸六、結束語
在上面的這篇文章中,介紹了兩種關于計算機網路知識的學習方式,同時,也用了24道題目來幫助大家更好地理解計網在前端面試中考察的內容,
對于前端來說,計網考察的內容相對會比較淺層,所以周一也用比較通俗易懂的方式去梳理一些經典的題目,如果有想要再繼續深入學習的小伙伴,也可以看書籍繼續補充自己的知識深度~
最后,預祝看到這篇文章的小伙伴們,都能夠斬獲到自己心儀的 offer ~
🐣彩蛋 One More Thing
🏷?pdf內容獲取
👉 微信關注公眾號 星期一研究室 ,回復關鍵字 計網面試pdf 即可獲取相關 pdf 內容~
👉 回復 面試大全pdf 可獲取全專欄內容!
🏷?更新地址
👉 offer來了面試專欄
🏷?番外篇
- 如果您覺得這篇文章有幫助到您的的話不妨點贊支持一下喲~~😉
- 以上就是本文的全部內容!我們下期見!👋👋👋
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/347121.html
標籤:其他
上一篇:Postman的代理功能
