? ? 1網(wǎng)絡(luò)為什么要分層僚纷?
? ? ? ? 因為,是個復(fù)雜的程序都要分層拗盒。
? ? ? ? 我們可以這樣來理解怖竭,想象網(wǎng)絡(luò)包是一塊內(nèi)存,自己是一個處理網(wǎng)絡(luò)包的程序陡蝇,而且這段程序可以跑在電腦上痊臭,可以跑在交換機(jī)上哮肚,也可以跑在路由器上。我們想象自己有很多的網(wǎng)口广匙,從某個網(wǎng)口拿進(jìn)一個包绽左,用自己的程序處理一下,再從另一個網(wǎng)口發(fā)出去艇潭。
? ? ? ? 網(wǎng)絡(luò)包的格式很復(fù)雜,這個程序也很復(fù)雜戏蔑。
? ? ? ? 復(fù)雜的程序都要分層蹋凝,這是程序設(shè)計的要求。
? ? ? ? 比如总棵,復(fù)雜的電商還會分?jǐn)?shù)據(jù)庫層鳍寂、緩存層、Compose層情龄、Controller層和接入層迄汛,每一層專注做本層的事情。
? ? 2程序是如何工作的骤视?
? ? ? ? 當(dāng)一個網(wǎng)絡(luò)包從一個網(wǎng)口經(jīng)過的時候鞍爱,我們(我們此刻的身份是程序,嘻嘻~)看到了专酗,首先要看看是不是要請進(jìn)來然后對它進(jìn)行處理睹逃。有的網(wǎng)口配置了混雜模式,凡事經(jīng)過的包全都會拿進(jìn)來祷肯。
? ? ? ? 拿進(jìn)來之后沉填,就會交給一段程序進(jìn)行處理,過程我就不再贅述啦佑笋,簡而言之翼闹,就是每一層會有對應(yīng)的程序?qū)λM(jìn)行處理,把它這一層封裝的頭部拿下來進(jìn)行檢查蒋纬,看看它的MAC地址/IP地址是否對應(yīng)猎荠,若對應(yīng)則是自己的,否則就要轉(zhuǎn)發(fā)出去颠锉;或者檢查它是TCP還是UDP法牲,然后交給相對應(yīng)的程序去處理;又或者看看它的端口號對應(yīng)哪個應(yīng)用琼掠,然后交給這個應(yīng)用去處理拒垃,etc。
? ? ? ? 發(fā)送請求的過程則是進(jìn)行層層封裝瓷蛙,上節(jié)課有講過悼瓮,這里就不贅述啦戈毒。
? ? 3揭秘層與層之間的關(guān)系
? ? ? ? 之前有聽過一個不恰當(dāng)?shù)谋扔鳎簽槭裁匆謱友剑恳驗椴煌膶哟沃g有不同的溝通方式横堡,這個叫做協(xié)議埋市。例如,一家公司也是分“層次”的命贴,分總經(jīng)理道宅、經(jīng)理、組長和員工胸蛛∥垡穑總經(jīng)理之間有他們的交流方式,經(jīng)理之間也有他們的交流方式葬项,組長和員工也是一樣的泞当。
? ? ? ? 但是,所有不能體現(xiàn)出層層封裝含義的比喻民珍,都是不恰當(dāng)?shù)摹?/b>
? ? ? ? 總經(jīng)理握手的時候其他層次的員工無需在場襟士,但在網(wǎng)絡(luò)世界不是這樣的。正確的應(yīng)該是嚷量,總經(jīng)理之間溝通的時候陋桂,把經(jīng)理裝在自己的包包里,經(jīng)理把組長放在自己的包包里蝶溶,組長把員工放在自己的包包里章喉,像套娃娃一樣。
? ? ? ? 在TCP三次握手的時候身坐,它每發(fā)送一個消息秸脱,都會帶著IP層和MAC層。因為部蛇,TCP每發(fā)送一個消息摊唇,IP層和MAC層的所有機(jī)制都要運(yùn)行一遍。我們只看到了TCP的三次握手涯鲁,其實巷查,IP和MAC層為此也忙活好久了。
? ? ? ? 我們要記住一點:只要是在網(wǎng)絡(luò)上跑的包抹腿,都是完整的岛请,可以有下層無上層,但是絕對不可能有上層無下層警绩。
? ? ? ? (忽然明白我把上下層理解反了崇败,這里的下層指的是IP和MAC在下,而TCP在上,應(yīng)該是這樣的~)
? ? ? ? 所以后室,對TCP協(xié)議來說缩膝,三次握手也好,重試也好岸霹,只要想發(fā)出去包疾层,就要有IP層和MAC層,不然是發(fā)不出去的贡避。
? ? ? ? 我們都聽過二層設(shè)備和三層設(shè)備痛黎,二層設(shè)備通常處理的是MAC層的東西,三層設(shè)備通常處理的是IP層的東西刮吧。所謂的二層設(shè)備舅逸、三層設(shè)備,都是這些設(shè)備上跑的程序不同而已皇筛。一個HTTP協(xié)議經(jīng)過二層設(shè)備、三層設(shè)備坠七,它們收進(jìn)去的都是整個網(wǎng)絡(luò)包水醋,這里面HTTP、TCP彪置、IP拄踪、MAC什么都有~而二層設(shè)備只是把MAC層摘下來看看到底是丟棄、轉(zhuǎn)發(fā)還是自己留著拳魁,三層設(shè)備是先把MAC頭摘下來惶桐,然后再把IP頭摘下來看看是丟棄、轉(zhuǎn)發(fā)還是自己留著潘懊。
????4小結(jié)
? ? ? ? 理解網(wǎng)絡(luò)協(xié)議的工作模式姚糊,有兩個小竅門:
? ? ? ? 1.始終想象自己是一個處理網(wǎng)絡(luò)包的程序:如何拿到網(wǎng)絡(luò)包、如何根據(jù)規(guī)則進(jìn)行處理授舟、如何發(fā)出去救恨。
? ? ? ? 2.始終牢記一個原則:只要是在網(wǎng)絡(luò)上跑的包,都是完整的释树〕Σ郏可以有下層沒上層,絕對不可能有上層沒下層奢啥。(是不是有外層沒內(nèi)層這樣更易理解呢~)
? ? ? ? 通信協(xié)議就像沒有天橋的雙子樓秸仙,要從A座的24層到達(dá)B座的24層就得先下樓梯再上樓梯,其他協(xié)議也是如此桩盲。
? ? ? ? 關(guān)于MAC地址和IP地址的理解寂纪,MAC地址是局域網(wǎng)尋址,IP地址是網(wǎng)絡(luò)尋址:
? ??????