第2講 | 網(wǎng)絡(luò)分層的真實含義是什么艾蓝?

不僅需要背誦,而且特別需要將原理爛熟于胸的學科斗塘。很多問題看起來懂了赢织,但是就怕往細里問,一問就發(fā)現(xiàn)你懂得沒有那么透徹馍盟。

為什么網(wǎng)絡(luò)要分層呀于置?二層設(shè)備、三層設(shè)備朽合、四層 LB 和七層 LB 中層俱两,不同的層次之間有不同的溝通方式饱狂,這個叫作協(xié)議

第一個問題:請問經(jīng)理握手時宪彩,員工在干什么休讳? TCP 建立連接的三次握手協(xié)議時,IP和 MAC 層對應(yīng)都有什么操作尿孔?

除了上面這個不恰當?shù)谋扔骺∪幔炭茣€會列出每個層次所包含的協(xié)議,然后開始逐層地去講這些協(xié)議活合。但是這些協(xié)議之間的關(guān)系呢雏婶?卻很少有教科書會講。

第三層:IP 協(xié)議里面包含目標地址源地址白指。第三層里路由協(xié)議留晚,?A原始地址)->B->C(中轉(zhuǎn)站)->D(目標地址)通過路由轉(zhuǎn)發(fā)的。

第二個問題:A 知道自己的下一個中轉(zhuǎn)站是 B告嘲,那從 A 發(fā)出來的包错维,應(yīng)該把 B 的 IP 地址放在哪里呢?如果放在 IP 協(xié)議中的目標地址橄唬,那包到了中轉(zhuǎn)站赋焕,怎么知道最終的目的地址是 D 呢?

二層設(shè)備處理的通常是 MAC 層的東西仰楚。發(fā)送一個 HTTP 的包隆判,在第七層工作,那是不是不需要經(jīng)過二層設(shè)備僧界?或者即便經(jīng)過了侨嘀,二層設(shè)備也不處理呢?或者換一種問法捎泻,二層設(shè)備處理的包里飒炎,有沒有 HTTP 層的內(nèi)容呢?

綜合的問題笆豁。電腦通過 SSH 登錄到公有云主機里面,都需要經(jīng)歷哪些過程赤赊?或者說你打開一個電商網(wǎng)站闯狱,都需要經(jīng)歷哪些過程?說得越詳細越好抛计。

網(wǎng)絡(luò)為什么要分層哄孤?

復(fù)雜的程序都要分層。想象網(wǎng)絡(luò)包就是一段 Buffer吹截,或者一塊內(nèi)存瘦陈,是有格式的凝危。同時,想象自己是一個處理網(wǎng)絡(luò)包的程序晨逝,而且這個程序可以跑在電腦上蛾默,可以跑在服務(wù)器上,可以跑在交換機上捉貌,也可以跑在路由器上支鸡。你想象自己有很多的網(wǎng)口,從某個口拿進一個網(wǎng)絡(luò)包來趁窃,用自己的程序處理一下牧挣,再從另一個網(wǎng)口發(fā)送出去。

復(fù)雜的程序都要分層醒陆,這是程序設(shè)計的要求瀑构。比如,復(fù)雜的電商還會分數(shù)據(jù)庫層刨摩、緩存層检碗、Compose 層、Controller 層和接入層码邻,每一層專注做本層的事情折剃。

當一個網(wǎng)絡(luò)包從一個網(wǎng)口經(jīng)過的時候,你看到了像屋,首先先看看要不要請進來怕犁,處理一把。有的網(wǎng)口配置了混雜模式己莺,經(jīng)過的全部拿進來奏甫。

process_layer2(buffer):從 Buffer 中,摘掉二層的頭凌受,假設(shè)這個包的 MAC 地址和你的相符阵子,那說明就是發(fā)給你的,調(diào)用process_layer3(buffer):摘掉三層的頭胜蛉,(如不是挠进,轉(zhuǎn)發(fā)出去)如果 IP 地址是自己的,那就是發(fā)給自己的誊册。根據(jù) IP 頭里面的標示领突,拿掉三層的頭,到底是調(diào)用process_tcp(buffer) 還是process_udp(buffer) 呢案怯?

假設(shè)是 TCP 的君旦,調(diào)用process_tcp(buffer)。查看四層的頭,如果是發(fā)起或應(yīng)答金砍,發(fā)送回復(fù)包局蚀;正常數(shù)據(jù)包交給上層了恕稠。在四層的頭里面有端口號琅绅,不同的應(yīng)用監(jiān)聽不同的端口號。如果發(fā)現(xiàn)瀏覽器應(yīng)用在監(jiān)聽這個端口谱俭,發(fā)給瀏覽器

瀏覽器解析 HTML奉件,顯示出頁面來。電腦的主人看到頁面很開心昆著,就點了鼠標县貌。點擊鼠標的動作被瀏覽器捕獲。瀏覽器知道凑懂,又要發(fā)起另一個 HTTP 請求了煤痕,于是使用端口號,將請求發(fā)給了你接谨。

send_tcp(buffer)摆碉。Buffer 里面就是 HTTP 請求的內(nèi)容。加 TCP 的頭脓豪,記錄源端口號巷帝。瀏覽器會給你目的端口號,一般為 80 端口扫夜。

send_layer3(buffer)楞泼。Buffer 里面已經(jīng)有了 HTTP 的頭和內(nèi)容,以及 TCP 的頭笤闯。加IP 的頭堕阔,記錄下源 IP 的地址和目標 IP 的地址。

send_layer2(buffer)颗味。Buffer 里面已經(jīng)有了 HTTP 的頭和內(nèi)容超陆、TCP 的頭,以及 IP 的頭浦马。這個函數(shù)里面要加一下 MAC 的頭时呀,記錄下源 MAC 地址,得到的就是本機器的 MAC 地址和目標的 MAC 地址捐韩。知道就直接加上退唠;不知道就要通過一定的協(xié)議處理過程,找到 MAC 地址荤胁。反正要填一個,不能空著屎债。

只要 Buffer內(nèi)容完整仅政,從網(wǎng)口發(fā)出去了垢油。

所有不能表示出層層封裝含義的比喻,都是不恰當?shù)摹?/b>網(wǎng)絡(luò)世界不是這樣的圆丹。正確的應(yīng)該是滩愁,總經(jīng)理之間溝通的時候,經(jīng)理將總經(jīng)理放在自己兜里辫封,然后組長把經(jīng)理放自己兜里硝枉,員工把組長放自己兜里,像套娃娃一樣倦微。那員工直接溝通妻味,不帶上總經(jīng)理,就不恰當了欣福。

網(wǎng)絡(luò)世界责球,應(yīng)該是總經(jīng)理說話,經(jīng)理補充兩句拓劝,組長補充兩句雏逾,員工再補充兩句。

當然是 TCP 發(fā)送每一個消息郑临,都會帶著 IP 層和 MAC 層了栖博。因為,TCP 每發(fā)送一個消息厢洞,IP 層和 MAC 層的所有機制都要運行一遍仇让。 TCP 三次握手了,其實IP 層和 MAC 層為此也忙活好久了犀变。

只要是在網(wǎng)絡(luò)上跑的包妹孙,都是完整的』裰Γ可以有下層沒上層蠢正,絕對不可能有上層沒下層。

TCP 協(xié)議來說省店,三次握手也好嚣崭,重試也好,只要想發(fā)出去包懦傍,就要有 IP 層和 MAC 層雹舀,不然是發(fā)不出去的。

所謂的二層設(shè)備粗俱、三層設(shè)備说榆,都是這些設(shè)備上跑的程序不同而已。一個 HTTP 協(xié)議的包經(jīng)過一個二層設(shè)備,二層設(shè)備收進去的是整個網(wǎng)絡(luò)包签财。這里面 HTTP串慰、TCP、 IP唱蒸、 MAC 都有邦鲫。什么叫二層設(shè)備呀,就是只把 MAC 頭摘下來神汹,看看到底是丟棄庆捺、轉(zhuǎn)發(fā),還是自己留著屁魏。那什么叫三層設(shè)備呢滔以?就是把 MAC 頭摘下來之后,再把 IP 頭摘下來蚁堤,看看到底是丟棄醉者、轉(zhuǎn)發(fā),還是自己留著披诗。

記住秘訣:始終想象自己是一個處理網(wǎng)絡(luò)包的程序:如何拿到網(wǎng)絡(luò)包撬即,根據(jù)規(guī)則如何發(fā)出去;

評論1

很像發(fā)快遞的過程(http呈队,應(yīng)用層)剥槐,你向順豐下單(第一次請求),順豐接單(應(yīng)答),你向手機小伙聯(lián)系(回應(yīng)應(yīng)答),

你將消息放進盒子里(開始封裝請求宪摧,會話層)粒竖,

快遞員封裝一層盒子貼上快遞單帶回網(wǎng)店(傳輸層),

到快遞點檢查是否區(qū)域快件(網(wǎng)絡(luò)層)几于,

將快件交給運輸車(鏈路層)蕊苗,

各個快遞轉(zhuǎn)運中心(物理層),

轉(zhuǎn)運輸車(鏈路層)沿彭,

到達區(qū)域分發(fā)(網(wǎng)絡(luò)層)朽砰,

網(wǎng)點派送(傳輸層),

快遞員方面簽收(會話層)喉刘,

拆開檢查(表示層)瞧柔,

收到快遞(應(yīng)用層)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末睦裳,一起剝皮案震驚了整個濱河市造锅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌廉邑,老刑警劉巖哥蔚,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倒谷,死亡現(xiàn)場離奇詭異,居然都是意外死亡肺素,警方通過查閱死者的電腦和手機恨锚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門宇驾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來倍靡,“玉大人,你說我怎么就攤上這事课舍∷鳎” “怎么了?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵筝尾,是天一觀的道長捡需。 經(jīng)常有香客問我,道長筹淫,這世上最難降的妖魔是什么站辉? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮损姜,結(jié)果婚禮上饰剥,老公的妹妹穿的比我還像新娘。我一直安慰自己摧阅,他們只是感情好汰蓉,可當我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著棒卷,像睡著了一般顾孽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上比规,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天若厚,我揣著相機與錄音,去河邊找鬼蜒什。 笑死测秸,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的吃谣。 我是一名探鬼主播乞封,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼岗憋!你這毒婦竟也來了肃晚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤仔戈,失蹤者是張志新(化名)和其女友劉穎关串,沒想到半個月后拧廊,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡晋修,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年吧碾,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片墓卦。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡倦春,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出落剪,到底是詐尸還是另有隱情睁本,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布忠怖,位于F島的核電站呢堰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏凡泣。R本人自食惡果不足惜枉疼,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鞋拟。 院中可真熱鬧骂维,春花似錦、人聲如沸严卖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哮笆。三九已至来颤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間稠肘,已是汗流浹背福铅。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留项阴,地道東北人滑黔。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像环揽,于是被迫代替她去往敵國和親略荡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內(nèi)容