字節(jié)一面:大白你了解網(wǎng)絡(luò)分層么?
大家好,我是大白。
這是 「面試現(xiàn)場(chǎng)」操作系統(tǒng) 的姊妹篇計(jì)算機(jī)網(wǎng)絡(luò),這個(gè)系列我會(huì)通過(guò)真實(shí)面試的形式向你講解某個(gè)具體的知識(shí)點(diǎn)。希望對(duì)你能夠有幫助!
--------------當(dāng)日上午,大白正在找借口請(qǐng)假面試-----------
一個(gè)陽(yáng)光明媚的中午,大白在領(lǐng)導(dǎo)辦公室
大白:領(lǐng)導(dǎo)我這頭有點(diǎn)疼啊。。。想請(qǐng)半天假去醫(yī)院看看。
領(lǐng)導(dǎo):不是前段時(shí)間才牙疼嘛???
大白:不好意思,領(lǐng)導(dǎo),頭太疼了,我要走了。。。
領(lǐng)導(dǎo):。。。。。。
--------------------當(dāng)日下午,字節(jié)跳動(dòng)大廈--------------------
面試官:上一輪的面試官反映說(shuō)你網(wǎng)絡(luò)這塊掌握的不夠好,我們繼續(xù)來(lái)聊聊吧!
大白:好的好的!
----------------------面試正式開始------------------------
1為什么網(wǎng)絡(luò)要分層?
面試官:可以結(jié)合咱們?nèi)粘5能浖到y(tǒng)開發(fā)來(lái)談?wù)?“為什么網(wǎng)絡(luò)要分層”? 嗎?
大白:說(shuō)到分層,我們先從我們平時(shí)使用框架開發(fā)一個(gè)后臺(tái)程序來(lái)說(shuō),我們往往會(huì)按照每一層做不同的事情的原則將系統(tǒng)分為三層(復(fù)雜的系統(tǒng)分層會(huì)更多):
- Repository(數(shù)據(jù)庫(kù)操作)
- Service(業(yè)務(wù)操作)
- Controller(前后端數(shù)據(jù)交互)
復(fù)雜的系統(tǒng)需要分層,因?yàn)槊恳粚佣夹枰獙W⒂谝活愂虑椤>W(wǎng)絡(luò)分層的原因也是一樣,每一層只專注于做一類事情。
為什么計(jì)算機(jī)網(wǎng)絡(luò)要分層呢? 我再來(lái)較為系統(tǒng)的說(shuō)一說(shuō):
- 各層之間相互獨(dú)立:各層之間相互獨(dú)立,各層之間不需要關(guān)心其他層是如何實(shí)現(xiàn)的,只需要知道自己如何調(diào)用下層提供好的功能就可以了(可以簡(jiǎn)單理解為接口調(diào)用)。這個(gè)和我們對(duì)開發(fā)時(shí)系統(tǒng)進(jìn)行分層是一個(gè)道理。
- 提高了整體靈活性 :每一層都可以使用最適合的技術(shù)來(lái)實(shí)現(xiàn),你只需要保證你提供的功能以及暴露的接口的規(guī)則沒(méi)有改變就行了。這個(gè)和我們平時(shí)開發(fā)系統(tǒng)的時(shí)候要求的高內(nèi)聚、低耦合的原則也是可以對(duì)應(yīng)上的。
- 大問(wèn)題化小 :分層可以將復(fù)雜的網(wǎng)絡(luò)間題分解為許多比較小的、界線比較清晰簡(jiǎn)單的小問(wèn)題來(lái)處理和解決。這樣使得復(fù)雜的計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)變得易于設(shè)計(jì),實(shí)現(xiàn)和標(biāo)準(zhǔn)化。 這個(gè)和我們平時(shí)開發(fā)的時(shí)候,一般會(huì)將系統(tǒng)功能分解,然后將復(fù)雜的問(wèn)題分解為容易理解的更小的問(wèn)題是相對(duì)應(yīng)的,這些較小的問(wèn)題具有更好的邊界(目標(biāo)和接口)定義。
說(shuō)到計(jì)算機(jī)網(wǎng)絡(luò)分層,我想到了計(jì)算機(jī)世界非常非常有名的一句話,這里分享一下:
計(jì)算機(jī)科學(xué)領(lǐng)域的任何問(wèn)題都可以通過(guò)增加一個(gè)間接的中間層來(lái)解決,計(jì)算機(jī)整個(gè)體系從上到下都是按照嚴(yán)格的層次結(jié)構(gòu)設(shè)計(jì)的。
大白:如果一層不夠那就加兩層吧!
2OSI 七層模型
面試官:嗯嗯,不錯(cuò)不錯(cuò)!OSI七層模型了解嗎?每一層都提供了什么功能?
大白內(nèi)心 OS:這個(gè)面試官有點(diǎn)東西啊!OSI七層模型雖然失敗了,但是卻提供了很多不錯(cuò)的理論基礎(chǔ)。為了更好地去了解網(wǎng)絡(luò)分層,OSI七層模型還是非常有必要學(xué)習(xí)的。
大白:OSI七層模型是國(guó)際標(biāo)準(zhǔn)化組織提出一個(gè)網(wǎng)絡(luò)分層模型。OSI七層模型的大體結(jié)構(gòu)以及每一層提供的功能如下圖所示:
OSI七層模型
每一層都專注做一件事情,并且每一層都需要使用下一層提供的功能比如傳輸層需要使用網(wǎng)絡(luò)層提供的路有和尋址功能,這樣傳輸層才知道把數(shù)據(jù)傳輸?shù)侥睦锶ァ?/p>
OSI的七層體系結(jié)構(gòu)概念清楚,理論也很完整,但是它比較復(fù)雜而且不實(shí)用,而且有些功能在多個(gè)層中重復(fù)出現(xiàn)。
上面這種圖可能比較抽象,再來(lái)一個(gè)比較生動(dòng)的圖片。下面這個(gè)圖片是我在國(guó)外的一個(gè)網(wǎng)站上看到的,非常贊!
面試官:既然OSI七層模型這么厲害,為什么干不過(guò)TCP/IP 4層模型呢?
大白:的確,OSI七層模型當(dāng)時(shí)一直被一些大公司甚至一些國(guó)家政府支持。這樣的背景下,為什么會(huì)失敗呢?我覺(jué)得主要有下面幾方面原因:
- OSI的專家缺乏實(shí)際經(jīng)驗(yàn),他們?cè)谕瓿蒓SI標(biāo)準(zhǔn)時(shí)缺乏商業(yè)驅(qū)動(dòng)力
- OSI的協(xié)議實(shí)現(xiàn)起來(lái)過(guò)分復(fù)雜,而且運(yùn)行效率很低
- OSI制定標(biāo)準(zhǔn)的周期太長(zhǎng),因而使得按OSI標(biāo)準(zhǔn)生產(chǎn)的設(shè)備無(wú)法及時(shí)進(jìn)入市場(chǎng)(20世紀(jì)90年代初期,雖然整套的OSI國(guó)際標(biāo)準(zhǔn)都已經(jīng)制定出來(lái),但基于TCP/IP的互聯(lián)網(wǎng)已經(jīng)搶先在全球相當(dāng)大的范圍成功運(yùn)行了)
- OSI的層次劃分不太合理,有些功能在多個(gè)層次中重復(fù)出現(xiàn)。
3TCP/IP 4層模型
面試官:聊完了OSI七層模型,我們?cè)賮?lái)聊聊TCP/IP 4層模型吧!
大白:好的,這個(gè)我熟!這是目前被廣泛采用的一種模型,我們可以將 TCP / IP 模型看作是 OSI 7層模型的精簡(jiǎn)版本,由以下4層組成:
- 應(yīng)用層
- 傳輸層
- 網(wǎng)絡(luò)層
- 網(wǎng)絡(luò)接口層
需要注意的是,我們并不能將 TCP/IP4層模型 和OSI7層模型完全精確地匹配起來(lái),不過(guò)可以簡(jiǎn)單將兩者對(duì)應(yīng)起來(lái),如下圖所示:
TCP-IP-4-model
面試官:不錯(cuò)不錯(cuò)!看來(lái)是有備而來(lái)啊!
大白:嘿嘿。。。
面試官:稍等一下,我去喝點(diǎn)水,有點(diǎn)口干舌燥了,我們等下來(lái)具體聊聊 TCP/IP 4層模型。
大白:好的好的!
參考資料:
https://medium.com/@james_aka_yale/the-4-layer-internet-model-network-engineers-need-to-know-e78432614a4f
https://www.guru99.com/tcp-ip-model.html
https://www.freeccnastudyguide.com/study-guides/ccna/ch1/1-4-tcpip-model/
OSI 七層模型與 TCP/IP 四層模型— https://wsgzao.github.io/post/osi/