可能有些小伙伴看見物理設(shè)備天生就犯困,反手就準備關(guān)閉文章,且慢!本文只是簡單的介紹這幾個設(shè)備的功能,并不會涉及復(fù)雜的底層硬件原理,不一定嚴謹,并且摒棄了很多細節(jié),但讀起來一定通俗易懂,幫助你迅速搭建起計網(wǎng)的知識框架。
什么是數(shù)據(jù)?
首先我們需要知道,網(wǎng)絡(luò)上傳輸?shù)臇|西是什么?所謂數(shù)據(jù),什么是數(shù)據(jù)
假設(shè)你要傳輸?shù)臄?shù)據(jù)是name="小牛肉",那么經(jīng)過從應(yīng)用層開始經(jīng)過層層封裝,到達物理層進行傳輸?shù)臅r候,你的數(shù)據(jù)已經(jīng)被封裝進了很多東西:

源IP地址
源MAC地址
目標IP地址
目標MAC地址
每一臺計算機都有自己的IP地址和MAC地址。
物理層設(shè)備:集線器
假設(shè)一個網(wǎng)絡(luò)上有ABCDE五臺計算機,A想要給C發(fā)送數(shù)據(jù)包,那么數(shù)據(jù)包被發(fā)送出來后它怎么知道C在哪里?
古老的物理層設(shè)備“集線器”出現(xiàn)了??

A通過集線器給C發(fā)送消息
如上圖所示,集線器上面有若干個端口,每個端口都連著一臺計算機,假設(shè)A計算機對應(yīng)端口1,B計算機對應(yīng)端口3,C計算機對應(yīng)端口7......
那么A想要給C發(fā)送消息,消息要經(jīng)過誰?沒錯,首先要經(jīng)過集線器
集線器不是很聰明,他其實也不知道C到底在哪里,所以他會將A的消息廣播給所有的計算機,由各個計算機自己判斷是不是發(fā)送給自己的消息。
數(shù)據(jù)鏈路層設(shè)備:交換機
雖然集線器確實有用,但也導(dǎo)致了消息爆炸,原來我只要發(fā)給計算機B的消息,現(xiàn)在卻要發(fā)給連接到集線器上的所有計算機,這樣無論是從經(jīng)濟還是效率上來說都不是一個很好的選擇。如果把這個集線器弄得更智能一些,只發(fā)給目標計算機就好了。
既然只發(fā)送給一個計算機,那我們首先需要唯一定位這個計算機。
通過什么來定位?發(fā)送出來的數(shù)據(jù)包中其實已經(jīng)封裝好了,就是通過目標計算機的MAC地址來進行唯一定位。

A通過交換機給C發(fā)送消息
那具體是怎么做到的呢?
事實上,交換機內(nèi)部維護一張【MAC地址表】,記錄著每一個MAC地址的設(shè)備,連接在哪一個端口上。
如果發(fā)來的包首部中包含的目標MAC地址在MAC地址表中沒有映射關(guān)系,交換機就將此包廣播給所有端口,也即發(fā)給了所有機器;
如果地址表有映射,那就只發(fā)給那一個端口
比如A想要給C發(fā)送消息,一開始交換機的MAC地址表是空的,交換機并不知道C的端口號,因此A發(fā)送的消息將會被廣播,同時,A的MAC地址和它對應(yīng)的端口號會被記錄到MAC地址表中。

A通過交換機給C發(fā)送消息,此時MAC地址表為空
這樣,C對A的消息進行響應(yīng)的時候,交換機就不需要進行廣播消息了,因此它已經(jīng)知道A計算機在哪個端口了,并且同樣的,C的MAC地址和它對應(yīng)的端口號會被記錄到交換機的MAC地址表中。

C通過交換機給A發(fā)送消息,此時MAC地址表中含有A的信息
網(wǎng)絡(luò)層設(shè)備:路由器
交換機似乎看起來已經(jīng)是最優(yōu)解了,但事實上,隨著計算機設(shè)備越來越多,交換機的端口都不夠用了,當然你肯定能想到可以用將多個交換機互相連接起來,然后每個交換機之間都互相共享他們的MAC地址表。但隨著計算機數(shù)量的增長,比如10億臺設(shè)備,100萬個交換機,那這100萬個交換機都需要各自維護包含10億條記錄的MAC地址表,無論是從經(jīng)濟還是效率上來說這也都不是一個很好的選擇。
所以將交換機連接在一起這個思路確實沒有錯,但不能粗暴的直接連接在一起,得想個辦法,讓每個交換機仍然只需要維護和自己連接的設(shè)備的MAC地址表,同時還能和其他交換機進行共享
路由器應(yīng)用而生。
路由器同樣有很多端口,每一個端口都擁有一個MAC地址和一個IP地址,每一個端口都連著一個局域網(wǎng)(或者說子網(wǎng)或者說IP地址段也行,本文就不過多區(qū)分子網(wǎng)和局域網(wǎng)的含義了)或者另一個路由器
舉個簡單的例子,有兩個子網(wǎng),每個子網(wǎng)內(nèi)都只有一個交換機,交換機上連接著若干個計算機設(shè)備,用路由器把這兩個交換機連接起來,當兩個子網(wǎng)之間需要進行通信的時候,通過路由器就可以實現(xiàn)了。

那具體是怎么做到的呢?
事實上,路由器內(nèi)部同樣維護著一張表,這張表稱為【路由表】,記錄著每一個局域網(wǎng)(IP地址段)和它對應(yīng)的端口。
比如某個路由器的端口0上連接著192.168.0.x?的IP地址段,端口1上連接著192.168.1.x的IP地址段,那么路由表就是下面這樣:

大伙一定發(fā)現(xiàn)了上面路由表中還有”下一跳“這個字段,很簡單,一個路由器的端口畢竟是有限的,不可能一個路由器連接所有的IP地址段,因此,如果該路由器發(fā)現(xiàn)目標計算機的IP地址不在自己管轄的IP地址段之內(nèi),就會通過下一跳地址轉(zhuǎn)發(fā)給其他的管轄這個IP地址的路由器
路由器具體是怎么工作的呢?比如A給C發(fā)送數(shù)據(jù),A在子網(wǎng)號為192.168.0.x?的子網(wǎng),而C在子網(wǎng)號為192.168.1.x的子網(wǎng),那么A首先需要知道C和自己是不是在同一個子網(wǎng):
如果是同一個子網(wǎng),那么直接把數(shù)據(jù)發(fā)送給交換機就可以了
如果不是同一個子網(wǎng),那么需要經(jīng)過路由器的轉(zhuǎn)發(fā),A需要把數(shù)據(jù)通過交換機發(fā)送給路由器,然后由路由器決定該發(fā)送給哪個子網(wǎng)

A通過路由器給C發(fā)送消息
這里有兩個問題:
1)A如何判斷是否和C在同一個子網(wǎng)?
答案:這個簡單,也不是本文重點,不過多介紹了,就是將源IP與目的IP分別同子網(wǎng)掩碼進行與運算,結(jié)果相等就是在同一個子網(wǎng)
2)A如何知道哪個設(shè)備是路由器?
答案:每個計算機上都要設(shè)置【默認網(wǎng)關(guān)】
其實說發(fā)給路由器不準確,應(yīng)該說A會把數(shù)據(jù)包發(fā)給默認網(wǎng)關(guān)。
對A來說,A只能直接把數(shù)據(jù)包發(fā)給同處于一個子網(wǎng)下的某個IP上,所以其實發(fā)給路由器還是發(fā)給某個計算機設(shè)備,對A來說并沒有什么區(qū)別,反正它只認得IP地址。
所以默認網(wǎng)關(guān),其實就是A在自己電腦里配置的一個IP地址,以便在發(fā)給不同子網(wǎng)的設(shè)備時,發(fā)給這個IP地址。
總結(jié)
如下圖A給F發(fā)送一個數(shù)據(jù)包,我們來梳理下整個通信過程:

A給不同子網(wǎng)的F發(fā)送消息
1)首先A(192.168.0.1?)通過子網(wǎng)掩碼(255.255.255.0?)計算出自己與F(192.168.3.2?)并不在同一個子網(wǎng)內(nèi),于是決定發(fā)送給默認網(wǎng)關(guān)(192.168.0.222)
2)A通過ARP協(xié)議找到默認網(wǎng)關(guān)192.168.0.222的MAC地址(數(shù)據(jù)鏈路層需要知道MAC地址才能傳輸數(shù)據(jù))
3)A將源MAC地址(AA-AA-AA-AA?)與網(wǎng)關(guān)MAC地址(MM-MM-MM-MM?)封裝在數(shù)據(jù)鏈路層頭部,又將源IP地址(192.168.0.1?)和目的IP地址(192.168.3.2)(注意這里千萬不要以為填寫的是默認網(wǎng)關(guān)的IP地址,從始至終這個數(shù)據(jù)包的兩個IP地址都是不變的,只有MAC地址在不斷變化)封裝在網(wǎng)絡(luò)層頭部,然后發(fā)送數(shù)據(jù)包

報文格式
4)第一個交換機收到數(shù)據(jù)包后,發(fā)現(xiàn)目標MAC地址是MM-MM-MM-MM,轉(zhuǎn)發(fā)給第一個路由器
5)數(shù)據(jù)包來到了第一個路由器,發(fā)現(xiàn)其目標IP地址是192.168.3.2?,查看其路由表,發(fā)現(xiàn)了下一跳的地址是192.168.100.21
6)所以此時該路由器需要做兩件事,一是再次匹配路由表,找到下一跳192.168.100.21匹配的端口號,二是從這個端口把數(shù)據(jù)包轉(zhuǎn)發(fā)出去
7)此時第二個路由器收到了數(shù)據(jù)包,看到其目的地址是192.168.3.2,查詢其路由表找到匹配的端口號,并準備從該端口把數(shù)據(jù)包轉(zhuǎn)發(fā)出去
8)但此時路由器需要知道192.168.3.2?的MAC地址才行,于是查看其ARP緩存,找到其MAC地址為FF-FF-FF-FF,并將其封裝在數(shù)據(jù)鏈路層頭部,從上個步驟確定的端口將包轉(zhuǎn)發(fā)出去。
9)如上圖所示,對應(yīng)的交換機收到了數(shù)據(jù)包,發(fā)現(xiàn)目的MAC地址為FF-FF-FF-FF,查詢其MAC地址表,從對應(yīng)的端口把數(shù)據(jù)包發(fā)出去。
10)數(shù)據(jù)包最終成功抵達計算機F,F(xiàn)發(fā)現(xiàn)目的MAC地址就是自己,于是收下了這個數(shù)據(jù)包。