1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 3329字,需瀏覽 7分鐘

         ·

        2021-08-21 08:05

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

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

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

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

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

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

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

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

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

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

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

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

        IP頭部格式

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

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

        這是多么大的悲傷呀!

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

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

        最簡單的,我們可以直接將兩臺主機通過網(wǎng)線連接:

        點對點直連

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

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

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

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

        先談遇到了什么問題,再說如何去解決,最終才是搬出前輩們的 RFC 文檔,這樣就會順暢很多。

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

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

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

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

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

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

        只用 IP 地址行不行呢?

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

        大家有過這些問題么?

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

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

        • 自頂向下
        • 自底向上

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

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

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

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

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

        我個人其實也是很喜歡這種方式的,自底向上也有其獨特的魅力。

        獨特在哪?

        因為自頂向下是一層層的從外向內(nèi)打開,然而最初設(shè)計網(wǎng)絡(luò)的時候肯定不可能是自頂向下的吧。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        書籍:

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

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

                官方:RFC 文檔(這是計算機網(wǎng)絡(luò)的協(xié)議標準文檔)

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

                源碼:之前看了一個pdf《tcp源碼分析》:

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

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

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

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

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

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


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

        神秘禮包獲取方式

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

        瀏覽 38
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            亚欧日韩 | 暗夜免费观看策驰影院 | 草逼的网站| 护士被老头添一夜视频播放 | 成人无码欧美大片免费看 | 亚洲AV无码导航 | 青娱乐亚洲精选自拍视频盛宴 | 日韩操逼大片 | 清冷受被强制侵犯高hnp漫画 | 伊人高清在线 |