當前位置:首頁 > 公眾號精選 > CPP開發(fā)者
[導讀]你是一臺電腦,你的名字叫A很久很久之前,你不與任何其他電腦相連接,孤苦伶仃。直到有一天,你希望與另一臺電腦B建立通信,于是你們各開了一個網(wǎng)口,用一根網(wǎng)線連接了起來。用一根網(wǎng)線連接起來怎么就能"通信"了呢?我可以給你講IO、講中斷、講緩沖區(qū),但這不是研究網(wǎng)絡時該關心的問題。如果你糾...

你是一臺電腦,你的名字叫 A


很久很久之前,你不與任何其他電腦相連接,孤苦伶仃。



直到有一天,你希望與另一臺電腦 B 建立通信,于是你們各開了一個網(wǎng)口,用一根網(wǎng)線連接了起來。



用一根網(wǎng)線連接起來怎么就能"通信"了呢?我可以給你講 IO、講中斷、講緩沖區(qū),但這不是研究網(wǎng)絡時該關心的問題。


如果你糾結,要么去研究一下操作系統(tǒng)是如何處理網(wǎng)絡 IO 的,要么去研究一下包是如何被網(wǎng)卡轉換成電信號發(fā)送出去的,要么就僅僅把它當做電腦里有個小人在開槍吧~



反正,你們就是連起來了,并且可以通信。






第一層





有一天,一個新伙伴 C 加入了,但聰明的你們很快發(fā)現(xiàn),可以每個人開兩個網(wǎng)口,用一共三根網(wǎng)線,彼此相連。


隨著越來越多的人加入,你發(fā)現(xiàn)身上開的網(wǎng)口實在太多了,而且網(wǎng)線密密麻麻,混亂不堪。(而實際上一臺電腦根本開不了這么多網(wǎng)口,所以這種連線只在理論上可行,所以連不上的我就用紅色虛線表示了,就是這么嚴謹哈哈~)



于是你們發(fā)明了一個中間設備,你們將網(wǎng)線都插到這個設備上,由這個設備做轉發(fā),就可以彼此之間通信了,本質上和原來一樣,只不過網(wǎng)口的數(shù)量和網(wǎng)線的數(shù)量減少了,不再那么混亂。



你給它取名叫集線器,它僅僅是無腦將電信號轉發(fā)到所有出口(廣播),不做任何處理,你覺得它是沒有智商的,因此把人家定性在了物理層。



由于轉發(fā)到了所有出口,那 BCDE 四臺機器怎么知道數(shù)據(jù)包是不是發(fā)給自己的呢?


首先,你要給所有的連接到集線器的設備,都起個名字。原來你們叫 ABCD,但現(xiàn)在需要一個更專業(yè)的,全局唯一的名字作為標識,你把這個更高端的名字稱為 MAC 地址。


你的 MAC 地址是 aa-aa-aa-aa-aa-aa,你的伙伴 b 的 MAC 地址是 bb-bb-bb-bb-bb-bb,以此類推,不重復就好。


這樣,A 在發(fā)送數(shù)據(jù)包給 B 時,只要在頭部拼接一個這樣結構的數(shù)據(jù),就可以了。



B 在收到數(shù)據(jù)包后,根據(jù)頭部的目標 MAC 地址信息,判斷這個數(shù)據(jù)包的確是發(fā)給自己的,于是便收下。


其他的 CDE 收到數(shù)據(jù)包后,根據(jù)頭部的目標 MAC 地址信息,判斷這個數(shù)據(jù)包并不是發(fā)給自己的,于是便丟棄。



雖然集線器使整個布局干凈不少,但原來我只要發(fā)給電腦 B 的消息,現(xiàn)在卻要發(fā)給連接到集線器中的所有電腦,這樣既不安全,又不節(jié)省網(wǎng)絡資源。






第二層


如果把這個集線器弄得更智能一些,只發(fā)給目標 MAC 地址指向的那臺電腦,就好了。


雖然只比集線器多了這一點點區(qū)別,但看起來似乎有智能了,你把這東西叫做交換機。也正因為這一點點智能,你把它放在了另一個層級,數(shù)據(jù)鏈路層。


如上圖所示,你是這樣設計的。


交換機內(nèi)部維護一張 MAC 地址表,記錄著每一個 MAC 地址的設備,連接在其哪一個端口上。


MAC 地址 端口
bb-bb-bb-bb-bb-bb 1
cc-cc-cc-cc-cc-cc 3
aa-aa-aa-aa-aa-aa 4
dd-dd-dd-dd-dd-dd 5
假如你仍然要發(fā)給 B 一個數(shù)據(jù)包,構造了如下的數(shù)據(jù)結構從網(wǎng)口出去。


到達交換機時,交換機內(nèi)部通過自己維護的 MAC 地址表,發(fā)現(xiàn)目標機器 B 的 MAC 地址 bb-bb-bb-bb-bb-bb 映射到了端口 1 上,于是把數(shù)據(jù)從 1 號端口發(fā)給了 B,完事~


你給這個通過這樣傳輸方式而組成的小范圍的網(wǎng)絡,叫做以太網(wǎng)。


當然最開始的時候,MAC 地址表是空的,是怎么逐步建立起來的呢?


假如在 MAC 地址表為空是,你給 B 發(fā)送了如下數(shù)據(jù):


由于這個包從端口 4 進入的交換機,所以此時交換機就可以在 MAC地址表記錄第一條數(shù)據(jù):


MAC:aa-aa-aa-aa-aa-aa-aa
端口:4


交換機看目標 MAC 地址(bb-bb-bb-bb-bb-bb)在地址表中并沒有映射關系,于是將此包發(fā)給了所有端口,也即發(fā)給了所有機器。


之后,只有機器 B 收到了確實是發(fā)給自己的包,于是做出了響應,響應數(shù)據(jù)從端口 1 進入交換機,于是交換機此時在地址表中更新了第二條數(shù)據(jù):


MAC:bb-bb-bb-bb-bb-bb
端口:1


過程如下:


經(jīng)過該網(wǎng)絡中的機器不斷地通信,交換機最終將 MAC 地址表建立完畢~


隨著機器數(shù)量越多,交換機的端口也不夠了,但聰明的你發(fā)現(xiàn),只要將多個交換機連接起來,這個問題就輕而易舉搞定~


你完全不需要設計額外的東西,只需要按照之前的設計和規(guī)矩來,按照上述的接線方式即可完成所有電腦的互聯(lián),所以交換機設計的這種規(guī)則,真的很巧妙。你想想看為什么(比如 A 要發(fā)數(shù)據(jù)給 F)。


但是你要注意,上面那根紅色的線,最終在 MAC 地址表中可不是一條記錄呀,而是要把 EFGH 這四臺機器與該端口(端口6)的映射全部記錄在表中。


最終,兩個交換機將分別記錄 A ~ H 所有機器的映射記錄。


左邊的交換機


MAC 地址 端口
bb-bb-bb-bb-bb-bb 1
cc-cc-cc-cc-cc-cc 3
aa-aa-aa-aa-aa-aa 4
dd-dd-dd-dd-dd-dd 5
ee-ee-ee-ee-ee-ee
6
ff-ff-ff-ff-ff-ff
6
gg-gg-gg-gg-gg-gg
6
hh-hh-hh-hh-hh-hh
6
右邊的交換機


MAC 地址 端口
bb-bb-bb-bb-bb-bb 1
cc-cc-cc-cc-cc-cc 1
aa-aa-aa-aa-aa-aa 1
dd-dd-dd-dd-dd-dd 1
ee-ee-ee-ee-ee-ee
2
ff-ff-ff-ff-ff-ff
3
gg-gg-gg-gg-gg-gg
4
hh-hh-hh-hh-hh-hh
6
這在只有 8 臺電腦的時候還好,甚至在只有幾百臺電腦的時候,都還好,所以這種交換機的設計方式,已經(jīng)足足支撐一陣子了。


但很遺憾,人是貪婪的動物,很快,電腦的數(shù)量就發(fā)展到幾千、幾萬、幾十萬。






第三層





交換機已經(jīng)無法記錄如此龐大的映射關系了。


此時你動了歪腦筋,你發(fā)現(xiàn)了問題的根本在于,連出去的那根紅色的網(wǎng)線,后面不知道有多少個設備不斷地連接進來,從而使得地址表越來越大。


那我可不可以讓那根紅色的網(wǎng)線,接入一個新的設備,這個設備就跟電腦一樣有自己獨立的 MAC 地址,而且同時還能幫我把數(shù)據(jù)包做一次轉發(fā)呢?


這個設備就是路由器,它的功能就是,作為一臺獨立的擁有 MAC 地址的設備,并且可以幫我把數(shù)據(jù)包做一次轉發(fā),你把它定在了網(wǎng)絡層。



注意,路由器的每一個端口,都有獨立的 MAC 地址。


好了,現(xiàn)在交換機的 MAC 地址表中,只需要多出一條 MAC 地址 ABAB 與其端口的映射關系,就可以成功把數(shù)據(jù)包轉交給路由器了,這條搞定。


那如何做到,把發(fā)送給 C 和 D,甚至是把發(fā)送給 DEFGH.... 的數(shù)據(jù)包,統(tǒng)統(tǒng)先發(fā)送給路由器呢?


不難想到這樣一個點子,假如電腦 C 和 D 的 MAC 地址擁有共同的前綴,比如分別是:


C 的 MAC 地址:FFFF-FFFF-CCCC
D 的 MAC 地址:FFFF-FFFF-DDDD那我們就可以說,將目標 MAC 地址為 FFFF-FFFF-?開頭的,統(tǒng)統(tǒng)先發(fā)送給路由器。


這樣是否可行呢?答案是否定的。


我們先從現(xiàn)實中 MAC 地址的結構入手,MAC地址也叫物理地址、硬件地址,長度為 48 位,一般這樣來表示:


00-16-EA-AE-3C-40


它是由網(wǎng)絡設備制造商生產(chǎn)時燒錄在網(wǎng)卡的EPROM(一種閃存芯片,通??梢酝ㄟ^程序擦寫)。其中前 24 位(00-16-EA)代表網(wǎng)絡硬件制造商的編號,后 24 位(AE-3C-40)是該廠家自己分配的,一般表示系列號。只要不更改自己的 MAC 地址,MAC 地址在世界是唯一的。形象地說,MAC地址就如同身份證上的身份證號碼,具有唯一性。


那如果你希望向上面那樣將目標 MAC 地址表示為 FFFF-FFFF-?開頭的,統(tǒng)一從路由器出去發(fā)給某一群設備(后面會提到這其實是子網(wǎng)的概念),那你就需要要求某一子網(wǎng)下統(tǒng)統(tǒng)買一個廠商制造的設備,要么你就需要要求廠商在生產(chǎn)網(wǎng)絡設備燒錄 MAC 地址時,提前按照你規(guī)劃好的子網(wǎng)結構來定 MAC 地址,并且日后這個網(wǎng)絡的結構都不能輕易改變。


這顯然是不現(xiàn)實的。


于是你發(fā)明了一個新的地址,給每一臺機器一個 32 位的編號,如:


11000000101010000000000000000001


你覺得有些不清晰,于是把它分成四個部分,中間用點相連。


11000000.10101000.00000000.00000001


你還覺得不清晰,于是把它轉換成 10 進制。


192.168.0.1


最后你給了這個地址一個響亮的名字,IP 地址。現(xiàn)在每一臺電腦,同時有自己的 MAC 地址,又有自己的 IP 地址,只不過 IP 地址是軟件層面上的,可以隨時修改,MAC 地址一般是無法修改的。


這樣一個可以隨時修改的 IP 地址,就可以根據(jù)你規(guī)劃的網(wǎng)絡拓撲結構,來調整了。


如上圖所示,假如我想要發(fā)送數(shù)據(jù)包給 ABCD 其中一臺設備,不論哪一臺,我都可以這樣描述,"將 IP 地址為 192.168.0 開頭的全部發(fā)送給到路由器,之后再怎么轉發(fā),交給它!",巧妙吧。


那交給路由器之后,路由器又是怎么把數(shù)據(jù)包準確轉發(fā)給指定設備的呢?


別急我們慢慢來。


我們先給上面的組網(wǎng)方式中的每一臺設備,加上自己的 IP 地址。


現(xiàn)在兩個設備之間傳輸,除了加上數(shù)據(jù)鏈路層的頭部之外,還要再增加一個網(wǎng)絡層的頭部。


假如 A 給 B 發(fā)送數(shù)據(jù),由于它們直接連著交換機,所以 A 直接發(fā)出如下數(shù)據(jù)包即可,其實網(wǎng)絡層沒有體現(xiàn)出作用。



但假如 A 給 C 發(fā)送數(shù)據(jù),A 就需要先轉交給路由器,然后再由路由器轉交給 C。由于最底層的傳輸仍然需要依賴以太網(wǎng),所以數(shù)據(jù)包是分成兩段的。


A ~ 路由器這段的包如下:



路由器到 C 這段的包如下:



好了,上面說的兩種情況(A->B,A->C),相信細心的讀者應該會有不少疑問,下面我們一個個來展開。



A 給 C 發(fā)數(shù)據(jù)包,怎么知道是否要通過路由器轉發(fā)呢?


答案:子網(wǎng)


如果源 IP 與目的 IP 處于一個子網(wǎng),直接將包通過交換機發(fā)出去。


如果源 IP 與目的 IP 不處于一個子網(wǎng),就交給路由器去處理。


好,那現(xiàn)在只需要解決,什么叫處于一個子網(wǎng)就好了。


  • 192.168.0.1 和 192.168.0.2 處于同一個子網(wǎng)


  • 192.168.0.1 和 192.168.1.1 處于不同子網(wǎng)


這兩個是我們?nèi)藶橐?guī)定的,即我們想表示,對于 192.168.0.1 來說:


192.168.0.xxx 開頭的,就算是在一個子網(wǎng),否則就是在不同的子網(wǎng)。


那對于計算機來說,怎么表達這個意思呢?于是人們發(fā)明了子網(wǎng)掩碼的概念。


假如某臺機器的子網(wǎng)掩碼定為 255.255.255.0。


這表示,將源 IP 與目的 IP 分別同這個子網(wǎng)掩碼進行與運算,相等則是在一個子網(wǎng),不相等就是在不同子網(wǎng),就這么簡單。


比如:


  • A電腦:192.168.0.1
本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

據(jù)CNMO了解,有韓媒報道稱,韓國將在下個月公布下一代網(wǎng)絡戰(zhàn)略,為6G移動通信的商業(yè)化做準備。據(jù)悉,戰(zhàn)略中除了6G網(wǎng)絡的智能化、融合和空間擴展的技術戰(zhàn)略外,還將提出公私合營的合作方式。

關鍵字: 6G 網(wǎng)絡 戰(zhàn)略

前不久,一位意大利女航天員在網(wǎng)絡上走紅,因為她在海外社交平臺上發(fā)布了一組太空攝影作品,并配上了中國著名書法家王羲之所著《蘭亭集序》中一句描繪宇宙景觀的古文。“仰觀宇宙之大,俯察品類之盛,所以游目騁懷,足以極視...

關鍵字: 衛(wèi)星 航天器 網(wǎng)絡 MIDDOT

這兩年來Wi-Fi 6無線網(wǎng)絡得到了大家的認可,現(xiàn)在的手機及路由器幾乎都支持了這一標準,速度超過家里的千兆帶寬沒問題,在下一代的無線就是Wi-Fi 7了,高通日前首次演示了Wi-Fi 7的實際速度,達到了5Gbps。

關鍵字: 5G 網(wǎng)絡 高通Wi-Fi 7

工廠運用創(chuàng)新的工業(yè)4.0技術和循環(huán)經(jīng)濟能力,加速可持續(xù)的先進制造實踐 上海2022年10月17日 /美通社/ -- 近日,偉創(chuàng)力宣布其位于巴西索羅卡巴(Sorocaba)的工廠已獲準加入世界經(jīng)濟論壇全球燈塔網(wǎng)絡(GLN...

關鍵字: 偉創(chuàng)力 網(wǎng)絡 工業(yè)4.0 可持續(xù)發(fā)展

量子網(wǎng)絡是一類遵循量子力學規(guī)律進行高速數(shù)學和邏輯運算、存儲及處理量子信息的物理裝置。當某個裝置處理和計算的是量子信息,運行的是量子算法時,它就是量子網(wǎng)絡。量子網(wǎng)絡的概念源于對可逆計算機的研究。研究可逆計算機的目的是為了解...

關鍵字: 歐洲 量子計算機 網(wǎng)絡

北京2022年10月14日 /美通社/ -- 近年來,WiFi技術在醫(yī)療場景中得到廣泛應用,無論是無線查房、無線護理、無線輸液,還是醫(yī)護人員定位管理、特殊患者定位看護、嬰兒防盜等醫(yī)療服務,無線網(wǎng)絡都承擔至關重要的角色。近...

關鍵字: 網(wǎng)絡 聯(lián)網(wǎng) 智慧醫(yī)療 智慧醫(yī)院

北京2022年10月14日 /美通社/ -- 2022年10月14日,亞馬遜云科技舉辦一年一度的中國合作伙伴峰會。本屆峰會以"價值成就 探索無限"為主題,面向合作伙伴推出"3+3價值成就體系...

關鍵字: 亞馬遜 網(wǎng)絡 AC MARKET

北京——2022年10月14日,亞馬遜云科技舉辦一年一度的中國合作伙伴峰會。本屆峰會以“價值成就 探索無限”為主題,面向合作伙伴推出“3+3價值成就體系”,將通過核心能力建設、深度行業(yè)賦能和全域覆蓋三大有力舉措,以及技術...

關鍵字: 亞馬遜云科技 網(wǎng)絡

北京2022年10月11日 /美通社/ -- 在四川大涼山深處,有一只"涼山黑鷹"少年籃球隊:隊員平均年齡12歲,平均身高1米3,球隊剛成立時,連個像樣的球場都沒有。然而,憑著一腔熱情和驚人天賦,這只...

關鍵字: 網(wǎng)絡 BSP 內(nèi)核 騰訊

據(jù)中國鐵道建筑報消息,由中鐵十四局承建的上海機場聯(lián)絡線2標單月推進288環(huán),進尺達到576米,平均日進尺19.2米,創(chuàng)造了全預制大直徑泥水盾構國內(nèi)最快紀錄。據(jù)了解,上海機場聯(lián)絡線是上海市首條市域鐵路,正線全長68.6公里...

關鍵字: 鐵路 網(wǎng)絡 控制工程

CPP開發(fā)者

234 篇文章

關注

發(fā)布文章

編輯精選

技術子站

關閉