當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 鮮棗課堂
[導(dǎo)讀]萬(wàn)字長(zhǎng)文,一看就懂!

你是一臺(tái)電腦,你的名字叫 A。

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

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

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

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

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

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

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

反正,你們就是連起來(lái)了,并且可以通信。


第一層


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

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

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

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

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

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

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

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

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

首先,你要給所有的連接到交換機(jī)的設(shè)備,都起個(gè)名字。原來(lái)你們叫 ABCD,但現(xiàn)在需要一個(gè)更專業(yè)的,全局唯一的名字作為標(biāo)識(shí),你把這個(gè)更高端的名字稱為 MAC 地址。

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

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

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

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

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

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

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


第二層


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

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

雖然只比集線器多了這一點(diǎn)點(diǎn)區(qū)別,但看起來(lái)似乎有智能了,你把這東西叫做交換機(jī)。也正因?yàn)檫@一點(diǎn)點(diǎn)智能,你把它放在了另一個(gè)層級(jí),數(shù)據(jù)鏈路層。

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

如上圖所示,你是這樣設(shè)計(jì)的。

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

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 一個(gè)數(shù)據(jù)包,構(gòu)造了如下的數(shù)據(jù)結(jié)構(gòu)從網(wǎng)口出去。

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

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

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

當(dāng)然最開(kāi)始的時(shí)候,MAC 地址表是空的,是怎么逐步建立起來(lái)的呢?

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

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

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

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

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

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

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

過(guò)程如下

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

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

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

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

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

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

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

最終,兩個(gè)交換機(jī)將分別記錄 A ~ H 所有機(jī)器的映射記錄。

左邊的交換機(jī)


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

右邊的交換機(jī)

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 臺(tái)電腦的時(shí)候還好,甚至在只有幾百臺(tái)電腦的時(shí)候,都還好,所以這種交換機(jī)的設(shè)計(jì)方式,已經(jīng)足足支撐一陣子了。

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


第三層


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

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

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

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

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

注意,路由器的每一個(gè)端口,都有獨(dú)立的 MAC 地址

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

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

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

C 的 MAC 地址:FFFF-FFFF-CCCC
D 的 MAC 地址:FFFF-FFFF-DDDD

那我們就可以說(shuō),將目標(biāo) MAC 地址為 FFFF-FFFF-?開(kāi)頭的,統(tǒng)統(tǒng)先發(fā)送給路由器。

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

我們先從現(xiàn)實(shí)中 MAC 地址的結(jié)構(gòu)入手,MAC地址也叫物理地址、硬件地址,長(zhǎng)度為 48 位,一般這樣來(lái)表示

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

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

那如果你希望像上面那樣根據(jù)目標(biāo)MAC地址的特地格式來(lái)轉(zhuǎn)發(fā)(FFFF-FFFF-?開(kāi)頭的),那你就需要要求某一子網(wǎng)下統(tǒng)統(tǒng)買一個(gè)廠商制造的設(shè)備,或者你就需要要求廠商在生產(chǎn)網(wǎng)絡(luò)設(shè)備燒錄 MAC 地址時(shí),提前按照你規(guī)劃好的子網(wǎng)結(jié)構(gòu)來(lái)定 MAC 地址,并且日后這個(gè)網(wǎng)絡(luò)的結(jié)構(gòu)都不能輕易改變。

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

于是你發(fā)明了一個(gè)新的地址,給每一臺(tái)機(jī)器一個(gè) 32 位的編號(hào),如:

11000000101010000000000000000001

你覺(jué)得有些不清晰,于是把它分成四個(gè)部分,中間用點(diǎn)相連。

11000000.10101000.00000000.00000001

你還覺(jué)得不清晰,于是把它轉(zhuǎn)換成 10 進(jìn)制。

192.168.0.1

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

這樣一個(gè)可以隨時(shí)修改的 IP 地址,就可以根據(jù)你規(guī)劃的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),來(lái)調(diào)整了。

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

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

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

別急我們慢慢來(lái)。

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

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

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

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

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

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

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

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

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

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

好了,上面說(shuō)的兩種情況(A->B,A->C),相信細(xì)心的讀者應(yīng)該會(huì)有不少疑問(wèn),下面我們一個(gè)個(gè)來(lái)展開(kāi)。


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

答案:子網(wǎng)

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

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

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

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

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

這兩個(gè)是我們?nèi)藶橐?guī)定的,即我們想表示,對(duì)于 192.168.0.1 來(lái)說(shuō):

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

那對(duì)于計(jì)算機(jī)來(lái)說(shuō),怎么表達(dá)這個(gè)意思呢?于是人們發(fā)明了子網(wǎng)掩碼的概念

假如某臺(tái)機(jī)器的子網(wǎng)掩碼定為 255.255.255.0

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

比如

  • A電腦:192.168.0.1 & 255.255.255.0 = 192.168.0.0

  • B電腦:192.168.0.2 & 255.255.255.0 = 192.168.0.0

  • C電腦:192.168.1.1 & 255.255.255.0 = 192.168.1.0

  • D電腦:192.168.1.2 & 255.255.255.0 = 192.168.1.0

那么 A 與 B 在同一個(gè)子網(wǎng),C 與 D 在同一個(gè)子網(wǎng),但是 A 與 C 就不在同一個(gè)子網(wǎng),與 D 也不在同一個(gè)子網(wǎng),以此類推。

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

所以如果 A 給 C 發(fā)消息,A 和 C 的 IP 地址分別 & A 機(jī)器配置的子網(wǎng)掩碼,發(fā)現(xiàn)不相等,則 A 認(rèn)為 C 和自己不在同一個(gè)子網(wǎng),于是把包發(fā)給路由器,就不管了,之后怎么轉(zhuǎn)發(fā),A 不關(guān)心。

A 如何知道,哪個(gè)設(shè)備是路由器?

答案:在 A 上要設(shè)置默認(rèn)網(wǎng)關(guān)

上一步 A 通過(guò)是否與 C 在同一個(gè)子網(wǎng)內(nèi),判斷出自己應(yīng)該把包發(fā)給路由器,那路由器的 IP 是多少呢?

其實(shí)說(shuō)發(fā)給路由器不準(zhǔn)確,應(yīng)該說(shuō) A 會(huì)把包發(fā)給默認(rèn)網(wǎng)關(guān)。

對(duì) A 來(lái)說(shuō),A 只能直接把包發(fā)給同處于一個(gè)子網(wǎng)下的某個(gè) IP 上,所以發(fā)給路由器還是發(fā)給某個(gè)電腦,對(duì) A 來(lái)說(shuō)也不關(guān)心,只要這個(gè)設(shè)備有個(gè) IP 地址就行。

所以默認(rèn)網(wǎng)關(guān),就是 A 在自己電腦里配置的一個(gè) IP 地址,以便在發(fā)給不同子網(wǎng)的機(jī)器時(shí),發(fā)給這個(gè) IP 地址。

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

僅此而已!

路由器如何知道C在哪里?

答案:路由表

現(xiàn)在 A 要給 C 發(fā)數(shù)據(jù)包,已經(jīng)可以成功發(fā)到路由器這里了,最后一個(gè)問(wèn)題就是,路由器怎么知道,收到的這個(gè)數(shù)據(jù)包,該從自己的哪個(gè)端口出去,才能直接(或間接)地最終到達(dá)目的地 C 呢。

路由器收到的數(shù)據(jù)包有目的 IP 也就是 C 的 IP 地址,需要轉(zhuǎn)化成從自己的哪個(gè)端口出去,很容易想到,應(yīng)該有個(gè)表,就像 MAC 地址表一樣。

這個(gè)表就叫路由表。

至于這個(gè)路由表是怎么出來(lái)的,有很多路由算法,本文不展開(kāi),因?yàn)槲乙膊粫?huì)哈哈~

不同于 MAC 地址表的是,路由表并不是一對(duì)一這種明確關(guān)系,我們下面看一個(gè)路由表的結(jié)構(gòu)。

目的地址 子網(wǎng)掩碼 下一跳 端口
192.168.0.0 255.255.255.0
0
192.168.0.254 255.255.255.255
0
192.168.1.0 255.255.255.0
1
192.168.1.254 255.255.255.255
1

我們學(xué)習(xí)一種新的表示方法,由于子網(wǎng)掩碼其實(shí)就表示前多少位表示子網(wǎng)的網(wǎng)段,所以如 192.168.0.0(255.255.255.0) 也可以簡(jiǎn)寫為 192.168.0.0/24

目的地址 下一跳 端口
192.168.0.0/24
0
192.168.0.254/32
0
192.168.1.0/24
1
192.168.1.254/32
1

這就很好理解了,路由表就表示,192.168.0.xxx 這個(gè)子網(wǎng)下的,都轉(zhuǎn)發(fā)到 0 號(hào)端口,192.168.1.xxx 這個(gè)子網(wǎng)下的,都轉(zhuǎn)發(fā)到 1 號(hào)端口。下一跳列還沒(méi)有值,我們先不管

配合著結(jié)構(gòu)圖來(lái)看(這里把子網(wǎng)掩碼和默認(rèn)網(wǎng)關(guān)都補(bǔ)齊了)


小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門


剛才說(shuō)的都是 IP 層,但發(fā)送數(shù)據(jù)包的數(shù)據(jù)鏈路層需要知道 MAC 地址,可是我只知道 IP 地址該怎么辦呢?

答案:arp

假如你(A)此時(shí)不知道你同伴 B 的 MAC 地址(現(xiàn)實(shí)中就是不知道的,剛剛我們只是假設(shè)已知),你只知道它的 IP 地址,你該怎么把數(shù)據(jù)包準(zhǔn)確傳給 B 呢?

答案很簡(jiǎn)單,在網(wǎng)絡(luò)層,我需要把 IP 地址對(duì)應(yīng)的 MAC 地址找到,也就是通過(guò)某種方式,找到 192.168.0.2 對(duì)應(yīng)的 MAC 地址 BBBB。

這種方式就是 arp 協(xié)議,同時(shí)電腦 A 和 B 里面也會(huì)有一張 arp 緩存表,表中記錄著 IP 與 MAC 地址對(duì)應(yīng)關(guān)系。

IP 地址 MAC 地址
192.168.0.2 BBBB

一開(kāi)始的時(shí)候這個(gè)表是空的,電腦 A 為了知道電腦 B(192.168.0.2)的 MAC 地址,將會(huì)廣播一條 arp 請(qǐng)求,B 收到請(qǐng)求后,帶上自己的 MAC 地址給 A 一個(gè)響應(yīng)。此時(shí) A 便更新了自己的 arp 表。

這樣通過(guò)大家不斷廣播 arp 請(qǐng)求,最終所有電腦里面都將 arp 緩存表更新完整。


總結(jié)一下


好了,總結(jié)一下,到目前為止就幾條規(guī)則

從各個(gè)節(jié)點(diǎn)的視角來(lái)看

電腦視角

  • 首先我要知道我的 IP 以及對(duì)方的 IP

  • 通過(guò)子網(wǎng)掩碼判斷我們是否在同一個(gè)子網(wǎng)

  • 在同一個(gè)子網(wǎng)就通過(guò) arp 獲取對(duì)方 mac 地址直接扔出去

  • 不在同一個(gè)子網(wǎng)就通過(guò) arp 獲取默認(rèn)網(wǎng)關(guān)的 mac 地址直接扔出去

交換機(jī)視角:

  • 我收到的數(shù)據(jù)包必須有目標(biāo) MAC 地址

  • 通過(guò) MAC 地址表查映射關(guān)系

  • 查到了就按照映射關(guān)系從我的指定端口發(fā)出去

  • 查不到就所有端口都發(fā)出去

路由器視角:

  • 我收到的數(shù)據(jù)包必須有目標(biāo) IP 地址

  • 通過(guò)路由表查映射關(guān)系

  • 查到了就按照映射關(guān)系從我的指定端口發(fā)出去(不在任何一個(gè)子網(wǎng)范圍,走其路由器的默認(rèn)網(wǎng)關(guān)也是查到了)

  • 查不到則返回一個(gè)路由不可達(dá)的數(shù)據(jù)包

如果你嗅覺(jué)足夠敏銳,你應(yīng)該可以感受到下面這句話:

網(wǎng)絡(luò)層(IP協(xié)議)本身沒(méi)有傳輸包的功能,包的實(shí)際傳輸是委托給數(shù)據(jù)鏈路層(以太網(wǎng)中的交換機(jī))來(lái)實(shí)現(xiàn)的。

涉及到的三張表分別是

  • 交換機(jī)中有 MAC 地址表用于映射 MAC 地址和它的端口

  • 路由器中有路由表用于映射 IP 地址(段)和它的端口

  • 電腦和路由器中都有 arp 緩存表用于緩存 IP 和 MAC 地址的映射關(guān)系

這三張表是怎么來(lái)的

  • MAC 地址表是通過(guò)以太網(wǎng)內(nèi)各節(jié)點(diǎn)之間不斷通過(guò)交換機(jī)通信,不斷完善起來(lái)的。

  • 路由表是各種路由算法 + 人工配置逐步完善起來(lái)的。

  • arp 緩存表是不斷通過(guò) arp 協(xié)議的請(qǐng)求逐步完善起來(lái)的。

知道了以上這些,目前網(wǎng)絡(luò)上兩個(gè)節(jié)點(diǎn)是如何發(fā)送數(shù)據(jù)包的這個(gè)過(guò)程,就完全可以解釋通了!

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門


那接下來(lái)我們就放上本章 最后一個(gè) 網(wǎng)絡(luò)拓?fù)鋱D吧,請(qǐng)做好 戰(zhàn)斗 準(zhǔn)備!

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

這時(shí)路由器 1 連接了路由器 2,所以其路由表有了下一條地址這一個(gè)概念,所以它的路由表就變成了這個(gè)樣子。如果匹配到了有下一跳地址的一項(xiàng),則需要再次匹配,找到其端口,并找到下一跳 IP 的 MAC 地址。

也就是說(shuō)找來(lái)找去,最終必須能映射到一個(gè)端口號(hào),然后從這個(gè)端口號(hào)把數(shù)據(jù)包發(fā)出去。

目的地址 下一跳 端口
192.168.0.0/24
0
192.168.0.254/32
0
192.168.1.0/24
1
192.168.1.254/32
1
192.168.2.0/24 192.168.100.5
192.168.100.0/24
2
192.168.100.4/32
2

這時(shí)如果 A 給 F 發(fā)送一個(gè)數(shù)據(jù)包,能不能通呢?如果通的話整個(gè)過(guò)程是怎樣的呢?

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門


思考一分鐘...


詳細(xì)過(guò)程動(dòng)畫描述:

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

詳細(xì)過(guò)程文字描述:

1. 首先 A(192.168.0.1)通過(guò)子網(wǎng)掩碼(255.255.255.0)計(jì)算出自己與 F(192.168.2.2)并不在同一個(gè)子網(wǎng)內(nèi),于是決定發(fā)送給默認(rèn)網(wǎng)關(guān)(192.168.0.254)
2. A 通過(guò) ARP 找到 默認(rèn)網(wǎng)關(guān) 192.168.0.254 的 MAC 地址。
3. A 將源 MAC 地址(AAAA)與網(wǎng)關(guān) MAC 地址(ABAB)封裝在數(shù)據(jù)鏈路層頭部,又將源 IP 地址(192.168.0.1)和目的 IP 地址(192.168.2.2)(注意這里千萬(wàn)不要以為填寫的是默認(rèn)網(wǎng)關(guān)的 IP 地址,從始至終這個(gè)數(shù)據(jù)包的兩個(gè) IP 地址都是不變的,只有 MAC 地址在不斷變化)封裝在網(wǎng)絡(luò)層頭部,然后發(fā)包

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

4. 交換機(jī) 1 收到數(shù)據(jù)包后,發(fā)現(xiàn)目標(biāo) MAC 地址是 ABAB,轉(zhuǎn)發(fā)給路由器1
5. 數(shù)據(jù)包來(lái)到了路由器 1,發(fā)現(xiàn)其目標(biāo) IP 地址是 192.168.2.2,查看其路由表,發(fā)現(xiàn)了下一跳的地址是 192.168.100.5
6. 所以此時(shí)路由器 1 需要做兩件事,第一件是再次匹配路由表,發(fā)現(xiàn)匹配到了端口為 2,于是將其封裝到數(shù)據(jù)鏈路層,最后把包從 2 號(hào)口發(fā)出去。
7. 此時(shí)路由器 2 收到了數(shù)據(jù)包,看到其目的地址是 192.168.2.2,查詢其路由表,匹配到端口號(hào)為 1,準(zhǔn)備從 1 號(hào)口把數(shù)據(jù)包送出去。
8. 但此時(shí)路由器 2 需要知道 192.168.2.2 的 MAC 地址了,于是查看其 arp 緩存,找到其 MAC 地址為 FFFF,將其封裝在數(shù)據(jù)鏈路層頭部,并從 1 號(hào)端口把包發(fā)出去。
9. 交換機(jī) 3 收到了數(shù)據(jù)包,發(fā)現(xiàn)目的 MAC 地址為 FFFF,查詢其 MAC 地址表,發(fā)現(xiàn)應(yīng)該從其 6 號(hào)端口出去,于是從 6 號(hào)端口把數(shù)據(jù)包發(fā)出去。
10. F 最終收到了數(shù)據(jù)包!并且發(fā)現(xiàn)目的 MAC 地址就是自己,于是收下了這個(gè)包
更詳細(xì)且精準(zhǔn)的過(guò)程:

讀到這相信大家已經(jīng)很累了,理解上述過(guò)程基本上網(wǎng)絡(luò)層以下的部分主流程就基本疏通了,如果你想要本過(guò)程更為專業(yè)的過(guò)程描述,可以在公眾號(hào)"低并發(fā)編程"后臺(tái)回復(fù)"網(wǎng)絡(luò)",獲得我模擬這個(gè)過(guò)程的 Cisco Packet Tracer 源文件。

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

每一步包的傳輸都會(huì)有各層的原始數(shù)據(jù),以及專業(yè)的過(guò)程描述

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

同時(shí)在此基礎(chǔ)之上你也可以設(shè)計(jì)自己的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),進(jìn)行各種實(shí)驗(yàn),來(lái)加深網(wǎng)絡(luò)傳輸過(guò)程的理解。


后記


至此,經(jīng)過(guò)物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層這前三層的協(xié)議,以及根據(jù)這些協(xié)議設(shè)計(jì)的各種網(wǎng)絡(luò)設(shè)備(網(wǎng)線、集線器、交換機(jī)、路由器),理論上只要擁有對(duì)方的 IP 地址,就已經(jīng)將地球上任意位置的兩個(gè)節(jié)點(diǎn)連通了。

小白必讀:計(jì)算機(jī)網(wǎng)絡(luò)入門

—— 全文完 —


免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

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

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉