<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          再也不怕被問網(wǎng)絡(luò)面試題了

          共 3329字,需瀏覽 7分鐘

           ·

          2021-08-21 08:05

          大家好,今天是在學(xué)習(xí)攝影的小北。

          攝影嘛,等我有點(diǎn)經(jīng)驗(yàn)再來分享分享,先給大家聊聊關(guān)于計(jì)算機(jī)網(wǎng)絡(luò)的一些學(xué)習(xí)體會(huì)。

          首先從一道經(jīng)典面試題開始:

          在瀏覽器輸入一個(gè) URL,到網(wǎng)頁顯示出來,中間發(fā)生了什么 ?

          不知道小伙伴們面試被問過這個(gè)問題么?

          這個(gè)問題其實(shí)在《Computer Networking: A Top-Down Approach》這本書的末尾花了十幾頁的篇幅完整的描述過。

          如果你還是無法很清晰的說出其中過程,那就說明還需要去補(bǔ)課哈。

          當(dāng)然了,不同崗位的同學(xué)可能關(guān)注的重點(diǎn)會(huì)不一樣,前端同學(xué)可能更關(guān)注 HTTP、瀏覽器網(wǎng)絡(luò)請(qǐng)求、渲染過程,后臺(tái)同學(xué)則更關(guān)注網(wǎng)絡(luò)層和傳輸層。

          我們暫時(shí)不寫這個(gè)問題的具體答案是什么,先聊聊如何學(xué)習(xí)計(jì)算機(jī)網(wǎng)絡(luò)。

          不少初學(xué)的小伙伴,在學(xué)習(xí)計(jì)網(wǎng)過程中,特別容易陷入一個(gè)誤區(qū):

          挨個(gè)的背下每一個(gè)網(wǎng)絡(luò)協(xié)議的作用,頭部字段以及通信雙方的交互過程。

          比如這個(gè) IP 數(shù)據(jù)包的頭部:

          IP頭部格式

          花了好大的力氣,終于背完了 HTTP、TCP、IP、ARP、DHCP 等一堆協(xié)議。

          最后還是說不清數(shù)據(jù)包是如何在網(wǎng)絡(luò)世界傳輸?shù)摹?/p>

          這是多么大的悲傷呀!

          所以學(xué)習(xí)計(jì)網(wǎng)一定不要完全去死記硬背,不然就會(huì)今天記、明天忘。

          我們要明白,網(wǎng)絡(luò)存在的目的就是解決主機(jī)之間的通信問題。

          最簡(jiǎn)單的,我們可以直接將兩臺(tái)主機(jī)通過網(wǎng)線連接:

          點(diǎn)對(duì)點(diǎn)直連

          這個(gè)時(shí)候是不需要什么 IP 協(xié)議、ARP 之類的東西,

          但是隨著越來的越多的主機(jī)加入,會(huì)遇到如何尋址、數(shù)據(jù)包發(fā)送沖突等問題。

          為了解決這些問題,我們引入了 MAC 地址、ARP、IP 這些協(xié)議。

          從問題出發(fā),按照 Why -> How -> What  這樣的順序。

          先談?dòng)龅搅耸裁磫栴},再說如何去解決,最終才是搬出前輩們的 RFC 文檔,這樣就會(huì)順暢很多。

          而且這是在引導(dǎo)我們?nèi)ニ伎既绾谓鉀Q問題,從點(diǎn)對(duì)點(diǎn)連接開始如何構(gòu)造一個(gè)網(wǎng)絡(luò)。

          如果一上來就搬出原理,比如 TCP 連接管理、狀態(tài)轉(zhuǎn)換、超時(shí)重傳、IP 包如何分段與重組這樣的東西,我覺得是比較懵逼的。

          作為初學(xué)者我們并不太清楚為什么需要這樣做,不這樣做行不行?

          以前學(xué)計(jì)網(wǎng)的時(shí)候,我也有一堆的困惑:

          比如路由器和交換機(jī)有什么區(qū)別?

          為什么有了 MAC 地址還要 IP 地址呢?

          只用 IP 地址行不行呢?

          如何理解廣播域和沖突域?

          大家有過這些問題么?

          如果你腦海里對(duì)這些問題的答案非常的清晰,那么恭喜你,你對(duì)網(wǎng)絡(luò)掌握得還不錯(cuò)!

          網(wǎng)絡(luò)世界分層極其明顯,所以教材包括教學(xué)方式一般分為兩類:

          • 自頂向下
          • 自底向上

          當(dāng)然了,學(xué)習(xí)其它東西也是同理,只不過分層的感覺可能沒有計(jì)網(wǎng)這么強(qiáng)烈。

          我們大學(xué)老師就是從應(yīng)用層開始往下講的,自頂向下的好處是直觀,上層的直觀感受會(huì)讓你有探索下層實(shí)現(xiàn)的欲望。

          我們教材也恰好使用的是《計(jì)算機(jī)網(wǎng)絡(luò)-自頂向下》這本經(jīng)典的計(jì)算機(jī)網(wǎng)絡(luò)書籍,這本書也是采取自頂向下這樣的講述方式。

          按照網(wǎng)絡(luò)的五層模型,從我們?nèi)粘=佑|的應(yīng)用層往下依次把網(wǎng)絡(luò)的面紗解開。

          當(dāng)然了,國內(nèi)也有不少高校是以自底向上的方式上課的,一上來就是一堆的物理層、鏈路層協(xié)議,典型教材如《Computer Networks, Fourth Edition》。

          我個(gè)人其實(shí)也是很喜歡這種方式的,自底向上也有其獨(dú)特的魅力。

          獨(dú)特在哪?

          因?yàn)樽皂斚蛳率且粚訉拥膹耐庀騼?nèi)打開,然而最初設(shè)計(jì)網(wǎng)絡(luò)的時(shí)候肯定不可能是自頂向下的吧。

          真實(shí)的世界一定是自底向上演變的,不可能先定義了 HTTP 協(xié)議再去考慮如何設(shè)計(jì)傳輸層,這顯然不合理嘛。

          網(wǎng)絡(luò)的演變一定是最初有兩臺(tái)電腦互相通信的需求,然后是多臺(tái)電腦,他們之間構(gòu)成了局域網(wǎng),再往后局域網(wǎng)之間組成了廣域網(wǎng)。

          最關(guān)鍵的是,自底向上是解決問題導(dǎo)向,比如有了 IP層 為什么還需要傳輸層呢?

          我們都知道一臺(tái)電腦可能有多個(gè)進(jìn)程在使用網(wǎng)絡(luò)連接,那么當(dāng) IP 包到達(dá)主機(jī)時(shí),怎么區(qū)分這是發(fā)給哪個(gè)進(jìn)程的呢?

          操作系統(tǒng)為了能夠區(qū)分?jǐn)?shù)據(jù)是傳給上層哪個(gè)應(yīng)用的,才引入了傳輸層。

          這是自底向上解決問題的過程。

          但是自頂向下可能就是學(xué)完應(yīng)用層,直接告訴你,下一層是傳輸層,然后接著講 TCP 和 UDP 是什么。

          比如在《自頂向下》第三章講傳輸層的時(shí)候,是這樣開篇的:

          運(yùn)輸層位于應(yīng)用層和網(wǎng)絡(luò)層之間,是分層的網(wǎng)絡(luò)體系結(jié)構(gòu)的重要部分。該層為運(yùn)行在不同主機(jī)上的應(yīng)用進(jìn)程提供直接的通信服務(wù)起著至關(guān)重要的作用。我們?cè)诒菊虏捎玫慕虒W(xué)方法是,交替地討論運(yùn)輸層的原理和這些原理在現(xiàn)有的協(xié)議中是如何實(shí)現(xiàn)的。與往常一 樣,我們將特別關(guān)注因特網(wǎng)協(xié)議,即 TCP 和 UDP 運(yùn)輸層協(xié)議。

          那我可能就會(huì)想,為什么在應(yīng)用層和網(wǎng)絡(luò)層之間需要運(yùn)輸層,直接把應(yīng)用數(shù)據(jù)包打包在網(wǎng)絡(luò)層里發(fā)送出去不行嗎?

          當(dāng)然可以,只要給每個(gè)應(yīng)用分配一個(gè)唯一的ID,一起放在網(wǎng)絡(luò)層的數(shù)據(jù)包發(fā)送出去,接收方使用這個(gè) ID 來定位數(shù)據(jù)是給哪個(gè)應(yīng)用的。

          其實(shí)你也看出來了,這就是把 TCP、UDP 做的事情放在了 IP 層去做。

          所以為了保持 IP 層的靈活性和功能獨(dú)立,這里引入了傳輸層,這就是分層。

          分層這個(gè)思想在計(jì)算機(jī)世界中非常重要,你可以在任何地方看到它的身影。

          計(jì)算機(jī)領(lǐng)域有一句名言:

          計(jì)算機(jī)科學(xué)領(lǐng)域的任何問題都可以通過增加一個(gè)間接的中間層來解決

          學(xué)習(xí)計(jì)網(wǎng)過程中也需要建立結(jié)構(gòu)化的思維,最直觀的結(jié)構(gòu)就是按照計(jì)網(wǎng)的層次來,即:應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層、物理層。

          然后在去學(xué)習(xí)每個(gè)層的功能和其中的每個(gè)協(xié)議,這個(gè)過程既可以自頂而下,也可以自底向上。

          分層學(xué)習(xí)過程中除了要掌握每一層之外,最重要的其實(shí)是要學(xué)習(xí)層與層之間是如何鏈接起來的,比如 IP 層和數(shù)據(jù)鏈路層就是 ARP 協(xié)議。

          最后當(dāng)你學(xué)完所有的協(xié)議后,再回顧一下,一個(gè)數(shù)據(jù)包是如何從 send() 函數(shù)發(fā)送出去的。

          離散的 IP 數(shù)據(jù)包又是如何抽象出“面向連接”的 TCP 層,并且要清晰的認(rèn)識(shí)到這里的連接是一種邏輯狀態(tài),建立、斷開連接則是同步雙方的通信狀態(tài)。

          基于這樣的認(rèn)識(shí),才能輕易的回答出類似:“TCP連接建立后出現(xiàn)服務(wù)器崩潰、斷電、網(wǎng)線被拔...會(huì)發(fā)生什么情況”這樣的問題。

          這里推薦一些網(wǎng)絡(luò)學(xué)習(xí)資源:

          書籍:

                  入門:《網(wǎng)絡(luò)是怎么連接的》、《圖解 TCP/IP 》

                  深入學(xué)習(xí):《計(jì)算機(jī)網(wǎng)絡(luò):自頂向下》、《TCP/IP 卷一》

                  官方:RFC 文檔(這是計(jì)算機(jī)網(wǎng)絡(luò)的協(xié)議標(biāo)準(zhǔn)文檔)

                  抓包:《Wireshark 網(wǎng)絡(luò)分析就這么簡(jiǎn)單》,這本書寫得很幽默風(fēng)趣,可以看看。

                  源碼:之前看了一個(gè)pdf《tcp源碼分析》:

          網(wǎng)課:哈工大的計(jì)算機(jī)網(wǎng)絡(luò),B站自取~

          國外經(jīng)典課程:CS144,這門課的視頻其實(shí)并不突出,一般般吧,但是 Assignment/Lab 挺有意思的,用 C++ 實(shí)現(xiàn)一個(gè) TCP,當(dāng)然了不會(huì)像 linux 中網(wǎng)絡(luò)協(xié)議棧那么復(fù)雜,但是麻雀雖小五臟俱全。

          網(wǎng)絡(luò)編程:做一些網(wǎng)絡(luò)工具:聊天室、p2p

          簡(jiǎn)單網(wǎng)絡(luò)攻擊:比如去玩玩 ARP 攻擊,在寢室或者你們家里搞點(diǎn)“網(wǎng)絡(luò)攻擊”

          我覺得學(xué)習(xí)計(jì)網(wǎng),做點(diǎn)網(wǎng)絡(luò)編程、簡(jiǎn)單網(wǎng)絡(luò)攻擊、抓包,會(huì)讓學(xué)習(xí)更加有趣,我當(dāng)時(shí)是這幾個(gè)都玩了下,你對(duì)這些網(wǎng)絡(luò)協(xié)議的認(rèn)識(shí)就會(huì)更加深刻的。

          PS公號(hào)內(nèi)回復(fù)「Python」即可進(jìn)入Python 新手學(xué)習(xí)交流群,一起 100 天計(jì)劃!


          老規(guī)矩,兄弟們還記得么,右下角的 “在看” 點(diǎn)一下如果感覺文章內(nèi)容不錯(cuò)的話,記得分享朋友圈讓更多的人知道!

          神秘禮包獲取方式

          識(shí)別文末二維碼,回復(fù):1024

          瀏覽 38
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  娇精视频| 日日夜夜天天操 | 欧美一性一乱一交一视爱豆传媒 | 日韩在线视频中文字幕 | 天天看毛片 |