故事就從一個(gè)車轱轆說(shuō)起吧。先來(lái)看一個(gè)車轱轆,。
輻條從車轱轆邊緣,,一直匯聚到 中心的軸,,這個(gè)軸在英文里叫hub。
而我們今天要講到的集線器,,英文里也叫hub,。
都叫hub,多少有點(diǎn)關(guān)系,,看下這面這個(gè)圖大概能明白,,其實(shí)兩者有點(diǎn)像。
hub的由來(lái)
大概想表達(dá)的意思是,,它是匯聚網(wǎng)線的中心,,因此就叫集線器。
所以可以理解,,大家常逛的 Github,Docker Hub, 還有P**hub ,,都是為了表達(dá)它們是某類資源的中心了吧,。
那么集線器是什么呢?那就要從電腦是怎么互聯(lián)的這個(gè)話題說(shuō)起,。
小學(xué)的時(shí)候,,有一種網(wǎng)吧,它其實(shí)是不能上外網(wǎng)的,。也就是不能打開(kāi)度娘,,不能搜索資料。
不能上網(wǎng)的網(wǎng)吧還能叫網(wǎng)吧,?
能,。雖然不能上外網(wǎng),但網(wǎng)吧老板可以把很多臺(tái)機(jī)子連起來(lái),,實(shí)現(xiàn)網(wǎng)吧內(nèi)互聯(lián),,形成一個(gè)局域網(wǎng)(Local Area Network,簡(jiǎn)稱LAN),。
網(wǎng)吧內(nèi)互聯(lián)之后,,就可以放上各種游戲,比如CS,,實(shí)現(xiàn)網(wǎng)吧內(nèi)對(duì)線,。
這種網(wǎng)吧有種好處,沒(méi)有那么多鍵盤俠,。
畢竟你不知道什么時(shí)候鍵著鍵著,,對(duì)方就順著網(wǎng)線找過(guò)來(lái)了。
對(duì)戰(zhàn)直接從線上轉(zhuǎn)移到線下了,。
因此大家打游戲都很和諧,,客氣,場(chǎng)面十分感人就是了。
那么網(wǎng)吧內(nèi)的電腦是怎么互聯(lián)呢,?
一根網(wǎng)線互聯(lián)電腦
從最簡(jiǎn)單的場(chǎng)景說(shuō)起,,假設(shè)網(wǎng)吧內(nèi)只有兩臺(tái)電腦
兩臺(tái)電腦互聯(lián)
隨便連根網(wǎng)線就能實(shí)現(xiàn)互聯(lián)嗎?
當(dāng)然不是,。
還記得網(wǎng)絡(luò)分層嗎?
數(shù)據(jù)如果要進(jìn)行傳輸,,會(huì)從A電腦經(jīng)過(guò)這些網(wǎng)絡(luò)分層把消息組裝好,再到B電腦層層解包,。
網(wǎng)線,,只是代替了上面的灰色部分,實(shí)現(xiàn)物理層上互聯(lián),。
如果想要兩臺(tái)電腦互聯(lián)成功,,還需要確保每一層所需要的步驟都要做到位,這樣數(shù)據(jù)才能確保正確投送并返回,。
我們自頂向下,,從細(xì)節(jié)開(kāi)始說(shuō)一下實(shí)現(xiàn)互聯(lián)需要做什么。
應(yīng)用層
該層的網(wǎng)絡(luò)功能由應(yīng)用本身保證,。
假設(shè)兩臺(tái)電腦是打算用游戲進(jìn)行聯(lián)網(wǎng),,那么該應(yīng)用層的功能由游戲程序保證。
傳輸層
絕大部分游戲用的傳輸層協(xié)議都是TCP,,我們可以看下TCP報(bào)頭,。
這里面我們需要關(guān)注的是源和目的端口,這個(gè)可以定位到這臺(tái)電腦上哪個(gè)進(jìn)程在收發(fā)數(shù)據(jù),。
這兩個(gè)端口信息一般是游戲內(nèi)部已經(jīng)填好,。
AB兩臺(tái)電腦,其中一臺(tái)作為服務(wù)端啟動(dòng),,比如A,,起了個(gè)服務(wù)器進(jìn)程。
服務(wù)器會(huì)開(kāi)放一個(gè)固定的端口,,比如27015,。這就是目的端口。
這時(shí)候A和B都可以搜索到這個(gè)服務(wù)器,。啟動(dòng)一個(gè)客戶端進(jìn)程,,連接進(jìn)入A的服務(wù)器進(jìn)程。
而源端口,,則由A和B自己生成,。
網(wǎng)絡(luò)層
上圖除了端口,我們還看到一個(gè)192.168.0.105,,這個(gè)就是A的IP地址,。
我們看一下IP層的報(bào)文頭,。
這里面需要關(guān)注是源和目的IP地址。
如果兩臺(tái)電腦想通過(guò)一根網(wǎng)線進(jìn)行消息通信,,那么他們需要在一個(gè)局域網(wǎng)內(nèi),。
這意味著,他們的子網(wǎng)掩碼需要一致,。局域網(wǎng)內(nèi),,假設(shè)子網(wǎng)掩碼是 225.225.225.0,會(huì)認(rèn)為 192.168.0.x 這些IP都屬于一個(gè)局域網(wǎng),。所以當(dāng)A的IP地址是192.168.0.105 時(shí),,那么B的IP地址可以配成192.168.0.106 。
關(guān)于IP這一塊是啥,,后面會(huì)細(xì)講,,大家如果沒(méi)明白我說(shuō)的是啥,不要急,。
組裝好網(wǎng)絡(luò)層報(bào)頭后,,數(shù)據(jù)包傳入到數(shù)據(jù)鏈路據(jù)層。
數(shù)據(jù)鏈路層
以上解決了網(wǎng)絡(luò)層的互聯(lián),,而在數(shù)據(jù)鏈路層,數(shù)據(jù)包里需要拼接上MAC報(bào)頭,。先看下MAC報(bào)頭長(zhǎng)什么樣子,。
其中需要關(guān)心的是標(biāo)紅的源和目的MAC地址。MAC地址可以粗略理解是這臺(tái)電腦網(wǎng)卡的唯一標(biāo)識(shí),。大概長(zhǎng)這樣
28:f9:d3:62:7d:31
源和目的地址,,在發(fā)送消息的時(shí)候就會(huì)被填上。
但是A只知道自己的MAC地址,,怎么才能知道B的MAC地址呢,?
這時(shí)候需要ARP協(xié)議。
ARP(Address Resolution Protocal),,即地址解析協(xié)議,。用于將IP地址解析為以太網(wǎng)的MAC地址的協(xié)議。
在局域網(wǎng)中,,當(dāng)主機(jī)A有數(shù)據(jù)要發(fā)送給主機(jī)B時(shí),,A必須知道B的IP地址。
但是僅僅有IP地址還是不夠的,,因?yàn)镮P數(shù)據(jù)報(bào)文還需要在數(shù)據(jù)鏈路層封裝成幀才能通過(guò)物理網(wǎng)絡(luò)發(fā)送,。因?yàn)榘l(fā)送端還必須有接收端的MAC地址,所以需要一個(gè)從IP地址到MAC地址的映射,。ARP就是干這事情的協(xié)議,。
A查本地ARP表發(fā)現(xiàn)B的IP和MAC映射關(guān)系不存在
A通過(guò)ARP廣播的形式向局域網(wǎng)發(fā)出消息,,詢問(wèn)某IP對(duì)應(yīng)的MAC地址是多少。比如A此時(shí)知道B的IP,,但并不知道B的MAC地址是多少,,就會(huì)嘗試在局域網(wǎng)內(nèi)發(fā)起ARP廣播,詢問(wèn)局域網(wǎng)下所有機(jī)器,,哪個(gè)機(jī)器的IP與B的IP一致,。
B收到這個(gè)ARP消息,發(fā)現(xiàn)A要問(wèn)的IP與自己的IP一致,,就會(huì)把自己的MAC地址作為應(yīng)答返回給A,。
此時(shí)A就知道了B的MAC地址,順便把消息記錄到本地ARP表里,,下次直接用表里的關(guān)系就行,,不需要每次都去問(wèn)。
物理層
從數(shù)據(jù)鏈路層到物理層,,數(shù)據(jù)會(huì)被轉(zhuǎn)為01比特流,。
此時(shí)需要把比特流傳到另一臺(tái)電腦。
通過(guò)一根網(wǎng)線,,兩段水晶頭插入網(wǎng)口,,把兩臺(tái)電腦連起來(lái)。
但對(duì)網(wǎng)線有一些要求,。
這根網(wǎng)線兩端的水晶頭需要采用交叉互聯(lián)法,。
水晶頭里有8根線,注意上圖里的顏色,,是有順序的,。第1、2根線起著收信號(hào)的作用,,而第3,、6腳發(fā)信號(hào)的作用。將一端的1號(hào)和3號(hào)線,、2號(hào)和6號(hào)線互換一下位置,,就能夠在物理層實(shí)現(xiàn)一端發(fā)送的信號(hào),另一端能收到,。
當(dāng)然,,現(xiàn)在有些網(wǎng)卡有自適應(yīng)的功能,就算是直連互聯(lián)法的線,,也能有交叉互聯(lián)法的效果,。如果你用的是這種網(wǎng)卡,就當(dāng)我物理層這塊什么都沒(méi)說(shuō)吧,。
互聯(lián)
此時(shí),,在確保關(guān)閉防火墻的前提下,,可以嘗試從A電腦中ping一下B,再?gòu)腂電腦中ping一下A,。如無(wú)意外,,都能ping通。
A給B發(fā)個(gè)消息,,從應(yīng)用層到數(shù)據(jù)鏈路層,,會(huì)分別加上A和B的各種''身份信息"。比如在傳輸層會(huì)加上A和B的應(yīng)用端口號(hào),,在網(wǎng)絡(luò)層加上源和目的IP,,在數(shù)據(jù)鏈路層會(huì)加上源和目的網(wǎng)卡的MAC頭部信息。
B收到消息后逐層解包,,驗(yàn)證,,最后順利到達(dá)應(yīng)用層。實(shí)現(xiàn)AB兩臺(tái)機(jī)器消息互通,。
至此游戲就能正常聯(lián)機(jī)對(duì)線,,兩臺(tái)電腦互聯(lián)成功!
什么是集線器
兩個(gè)人打cs,,總會(huì)覺(jué)得無(wú)聊,,但是每臺(tái)電腦又只有一個(gè)網(wǎng)線口。
想要邀請(qǐng)更多的人一起玩,,怎么辦,?
那就要回到文章開(kāi)頭提到的集線器(hub)了。
這是個(gè)工作在物理層的設(shè)備,。
有多個(gè)網(wǎng)口,很好的解決了電腦上只有一個(gè)網(wǎng)口的問(wèn)題,,可以做到多臺(tái)電腦的網(wǎng)線都插入到集線器上,。
同時(shí)工作原理也非常簡(jiǎn)單,會(huì)把某個(gè)端口收到的數(shù)據(jù),,輸入到中繼電路,。
中繼電路的基本功能是將輸入的信號(hào)廣播到集線器的所有端口上。
簡(jiǎn)單來(lái)說(shuō)就是無(wú)腦復(fù)制N份到其余N個(gè)端口上,。
數(shù)據(jù)復(fù)制到N個(gè)端口后,。對(duì)應(yīng)轉(zhuǎn)發(fā)到N臺(tái)機(jī)器里。
集線器內(nèi)部結(jié)構(gòu)
說(shuō)到這里,,已經(jīng)對(duì)集線器有個(gè)大概認(rèn)識(shí)了,。
接下來(lái),我們看下集線器的內(nèi)部結(jié)構(gòu),。
從A網(wǎng)口進(jìn)入集線器的消息,,此時(shí)還是電信號(hào),。這里經(jīng)過(guò)一個(gè)PHY模塊。
要理解PHY模塊的作用,,首先要先了解每個(gè)網(wǎng)口,,都可能接著網(wǎng)線(廢話),而每根網(wǎng)線的傳輸?shù)母袷蕉际怯锌赡懿煌?。而PHY的作用,,就是把這些格式轉(zhuǎn)化為一個(gè)通用的格式。
舉個(gè)例子,。PHY就好比一個(gè)翻譯器,,有的人說(shuō)英文,有的人說(shuō)日文,。但是PHY,,會(huì)把它統(tǒng)一轉(zhuǎn)為普通話,給內(nèi)部電路處理,。內(nèi)部電路處理完之后,,再經(jīng)過(guò)PHY模塊,轉(zhuǎn)為英語(yǔ),,或日文從對(duì)應(yīng)網(wǎng)口里輸出,。
經(jīng)過(guò)PHY的處理后,以電信號(hào)的形式輸入到中繼電路,,被無(wú)腦廣播,,再次經(jīng)過(guò)PHY模塊后變成BCD網(wǎng)口的格式輸出。
這里面的電信號(hào),,是會(huì)受噪聲干擾,,導(dǎo)致信號(hào)形變出錯(cuò)的。
但就算是錯(cuò)了,,也還是會(huì)原封不動(dòng)的廣播出去,,這就是上面提到無(wú)腦的精髓所在。
那信號(hào)如果出錯(cuò)了怎么辦,?
只能讓接收方收到消息后進(jìn)行校驗(yàn),。
還記得上文里提到的數(shù)據(jù)鏈路層的MAC報(bào)頭里最末尾有個(gè)FCS嗎?
FCS里存放的是發(fā)送方通過(guò)循環(huán)冗余校驗(yàn)CRC計(jì)算得到的值,。
接收方用收到的數(shù)據(jù)算一次CRC,,與FCS里的值進(jìn)行對(duì)比。
如果一致,,那證明數(shù)據(jù)沒(méi)問(wèn)題,。如果出錯(cuò),則直接丟棄,。
當(dāng)然,,丟棄包并不會(huì)影響數(shù)據(jù)的傳輸,, 因?yàn)閬G棄的包不會(huì)觸發(fā)確認(rèn)響應(yīng)。因此協(xié)議棧的 TCP 模塊會(huì)檢測(cè)到丟包,, 并對(duì)該包進(jìn)行重傳,。
如果消息沒(méi)出錯(cuò),但是因?yàn)闊o(wú)腦廣播,,C也能收到A發(fā)給B的數(shù)據(jù)包,。
此時(shí) C 會(huì)在接受到數(shù)據(jù)包后一層層的"剝開(kāi)"。
正常情況下,,在數(shù)據(jù)鏈路層時(shí),,識(shí)別到目的 MAC 地址跟 C 的不一致時(shí),也會(huì)把數(shù)據(jù)丟棄,。
什么是交換機(jī)
目前只有 ABC 三臺(tái)機(jī)器,,每次都是廣播發(fā)消息倒還好。
如果機(jī)器越來(lái)越多,,每臺(tái)機(jī)器發(fā)一條消息,,都會(huì)被廣播,就有點(diǎn)頂不住了,。
舉個(gè)例子,。
假設(shè)N臺(tái)機(jī)器,其中兩臺(tái)機(jī)器A和B,,A發(fā)到B和B發(fā)給A,,共兩條消息。
如果這N臺(tái)機(jī)器,,用的是集線器,。還是AB之間互發(fā)消息,每條消息都是廣播的話,,就是(N-1)+(N-1)條消息,,差距有些大,對(duì)網(wǎng)絡(luò)資源浪費(fèi)就有些嚴(yán)重了,。
那么,,有沒(méi)有可能做到,,A發(fā)給B的消息,,就不要轉(zhuǎn)發(fā)給C呢?
可以的,,把集線器換成交換機(jī),。
交換機(jī),又叫switch,,跟集線器長(zhǎng)得很像,。
但是功能更強(qiáng)一些,,從網(wǎng)絡(luò)分層上來(lái)說(shuō),屬于數(shù)據(jù)鏈路層,,比集線器所在的物理層還要高一層,。
所有發(fā)到交換機(jī)的數(shù)據(jù),都會(huì)先進(jìn)入交換機(jī)的緩存區(qū),。接著消息再被轉(zhuǎn)發(fā)到對(duì)應(yīng)機(jī)器上,。
注意這里用的是轉(zhuǎn)發(fā),而不是集線器的廣播,,交換機(jī)是怎么做到轉(zhuǎn)發(fā)的呢,?
MAC地址表
交換機(jī)內(nèi)部維護(hù)了一張MAC地址表。
記錄了 端口號(hào)和MAC地址的對(duì)應(yīng)關(guān)系,。
這個(gè)表的數(shù)據(jù)是交換機(jī)不斷學(xué)習(xí)的結(jié)果,。
當(dāng)A發(fā)消息到交換機(jī)時(shí),交換機(jī)發(fā)現(xiàn)消息是從1號(hào)端口進(jìn)來(lái)的,,則會(huì)在MAC地址表上,,記錄A的MAC地址對(duì)應(yīng)1號(hào)端口。
如果A沒(méi)有很長(zhǎng)時(shí)間沒(méi)發(fā)消息到這個(gè)1號(hào)端口,,那這條記錄就會(huì)過(guò)期并被刪除,。
那么,當(dāng)時(shí)間足夠長(zhǎng),,ABC 都發(fā)過(guò)消息給交換機(jī)后,,地址表就會(huì)有完整的關(guān)系信息。
A準(zhǔn)備發(fā)送消息給B,,此時(shí)A會(huì)把B的MAC地址,,放入要發(fā)送的數(shù)據(jù)里。數(shù)據(jù)順著網(wǎng)線發(fā)出,。
交換機(jī)從端口收到數(shù)據(jù),,會(huì)把數(shù)據(jù)里的源和目的MAC地址提出來(lái),跟MAC地址表進(jìn)行對(duì)比,。
發(fā)現(xiàn)B的MAC地址正好在2號(hào)端口,,那么就把數(shù)據(jù)轉(zhuǎn)發(fā)給2號(hào)端口。
此時(shí)B電腦從網(wǎng)線收到來(lái)自交換機(jī)2號(hào)端口的數(shù)據(jù),。
兩種特殊情況
正常流程很清楚了,,看兩個(gè)特殊情況:
交換機(jī)查詢地址表時(shí),發(fā)現(xiàn)目的 MAC 地址的目標(biāo)端口和這個(gè)包的源端口,,是同一個(gè)端口,,怎么辦?
先說(shuō)結(jié)論,會(huì)直接丟棄這個(gè)包,。
我們看下,,假設(shè)它不丟棄,會(huì)發(fā)生什么情況,。
A發(fā)了個(gè)消息給B,,中間經(jīng)過(guò)一個(gè)集線器,此時(shí)消息會(huì)被廣播到B和交換機(jī),。
此時(shí)B收到第一條A發(fā)給它的消息
交換機(jī)從1號(hào)端口收到A的消息后,,解包,獲得目的MAC地址是BB-BB-BB-BB-BB-BB,。查MAC地址表,,發(fā)現(xiàn)要發(fā)到1號(hào)端口。此時(shí),,源和目的端口都是同一個(gè),,如果交換機(jī)不丟棄這個(gè)消息,B會(huì)收到第二條A發(fā)給它的消息,。
A只發(fā)了一次消息,,B卻收到兩條消息,明顯不對(duì),。
因此,,當(dāng)交換機(jī)查詢地址表時(shí),發(fā)現(xiàn)目標(biāo)端口和源端口,,是同一個(gè)端口時(shí),,會(huì)丟棄這個(gè)包。
MAC地址表里找不到對(duì)應(yīng)的MAC地址,,怎么辦,?
這可能是因?yàn)榫哂性摰刂返脑O(shè)備,還沒(méi)有向交換機(jī)發(fā)送過(guò)包,,或者這個(gè)設(shè)備一段時(shí)間沒(méi)有工作,,導(dǎo)致地址被從地址表中刪除了。
這種情況下,,交換機(jī)無(wú)法判斷應(yīng)該把包轉(zhuǎn)發(fā)到哪個(gè)端口,,只能將包轉(zhuǎn)發(fā)到除了源端口之外的所有端口上,無(wú)論該設(shè)備連接在哪個(gè)端口上,,都能收到這個(gè)包,。
此時(shí),交換機(jī)就會(huì)跟集線器一樣進(jìn)行廣播,。
發(fā)送了包之后目標(biāo)設(shè)備會(huì)作出響應(yīng),,只要返回了響應(yīng)包,交換機(jī)就可以將它的地址寫入地址表,,下次也就不需要把包 發(fā)到所有端口了,。
交換機(jī)內(nèi)部結(jié)構(gòu)
再看下交換機(jī)內(nèi)部結(jié)構(gòu)。
其實(shí)對(duì)比可以發(fā)現(xiàn),,交換機(jī)和集線器內(nèi)部結(jié)構(gòu)很像,。
重點(diǎn)需要提到的是MAC模塊。消息以電信號(hào)的形式從網(wǎng)口進(jìn)入,,到了PHY會(huì)被轉(zhuǎn)成通用格式的電信號(hào),。而MAC模塊的作用是把這個(gè)電信號(hào)轉(zhuǎn)為數(shù)字信號(hào),這樣就能提取出MAC包頭,,并通過(guò)MAC數(shù)據(jù)幀末尾的FCS校驗(yàn)這個(gè)包有沒(méi)有問(wèn)題,,如果沒(méi)問(wèn)題,則把數(shù)據(jù)放到內(nèi)存緩沖區(qū)里,,否則直接丟棄,。
另外,這個(gè)MAC模塊,,雖然這么叫,。但其實(shí)交換機(jī)MAC模塊不具有 MAC 地址。因此交換機(jī)的端口不核對(duì)接收方 MAC 地址,,而是直接接收所有的包并存放到緩沖區(qū)中,。
放入到內(nèi)存緩沖區(qū)后,還會(huì)把MAC地址和端口號(hào)記錄到MAC地址表中,。同時(shí)檢查目的MAC地址在不在MAC地址表中,,在的話則會(huì)轉(zhuǎn)發(fā)到對(duì)應(yīng)端口。否則廣播,。
交換機(jī)與網(wǎng)橋的區(qū)別
網(wǎng)橋,,本質(zhì)上可以理解為兩個(gè)網(wǎng)線口的交換機(jī),正好可以把兩臺(tái)電腦給連起來(lái),,也叫橋接,。而交換機(jī),則是多網(wǎng)線口的網(wǎng)橋,,可以把多臺(tái)電腦給連(橋接)起來(lái),。
其他功能方面,大差不差,,不必太過(guò)糾結(jié),。
交換機(jī)和二層交換機(jī)和三層交換機(jī)有什么區(qū)別
這一部分提到的交換機(jī),其實(shí)就是二層交換機(jī),,也就是工作在第二層(數(shù)據(jù)鏈路層)的交換機(jī),,二者沒(méi)區(qū)別,。
而三層交換機(jī),是工作在第三層(網(wǎng)絡(luò)層)的交換機(jī),,其實(shí)就是接下來(lái)要提到的路由器,。
什么是路由器
有了交換機(jī)之后,小網(wǎng)吧里的電腦就都可以被連起來(lái)了,。交換機(jī)網(wǎng)口不夠,?那就再接個(gè)交換機(jī)。
但世界上電腦這么多,,交換機(jī)里的MAC地址表難道全都要記住嗎?
顯然做不到,。為了解決這個(gè)問(wèn)題。
于是就有了路由器,,工作在網(wǎng)絡(luò)層,,比數(shù)據(jù)鏈路層更高一層。
網(wǎng)絡(luò)層引入了IP的概念,。
什么是IP
比如前面提到的 192.168.0.105 就是一個(gè)IP,,同一個(gè)局域網(wǎng)內(nèi)還可能會(huì)有一個(gè)IP是192.168.0.106。有沒(méi)有發(fā)現(xiàn),,它們都是192.168.0.xxx,。
像極了 上海市.黃浦區(qū).南京東路.105號(hào),這樣的地址?,F(xiàn)實(shí)生活中,,我們可以通過(guò)一個(gè)地址定位到要去哪。到了 上海市.黃浦區(qū).南京東路.105號(hào)樓里,,我們就可以再去找某個(gè)叫身份證為xiaobaixxxxx的人,。
那互聯(lián)網(wǎng)世界里,我們也就可以通過(guò)IP地址,,定位到某個(gè)廣域網(wǎng)段,,再通過(guò)廣域網(wǎng)內(nèi)部的局域網(wǎng)的MAC地址定位到具體某個(gè)電腦。
上海市.黃浦區(qū).南京東路.105號(hào)可以幫助我們定位到在南京東路上的第105號(hào)樓的位置,。但還有些路,,比如南京西路,可能不止105號(hào),,可能要到257號(hào),。
實(shí)際上一個(gè)IP由網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)組成,共32位組成,。如果拿了前面24位做網(wǎng)絡(luò)號(hào),,那主機(jī)號(hào)就剩8位了,2的8次方=256,,最多表示表示256號(hào)樓,。因此為了多表示幾個(gè)樓,,可以向網(wǎng)絡(luò)號(hào)多挪幾位過(guò)來(lái)作為主機(jī)號(hào)。
那么具體多少位作為網(wǎng)絡(luò)號(hào)呢,?可以在IP后面加一個(gè)數(shù)字,,用來(lái)表明這一點(diǎn)。
于是就有了 192.168.0.105/24這種表示方法,,表明前24位192.168.0.0是網(wǎng)絡(luò)號(hào),105是主機(jī)號(hào),。
有了網(wǎng)段,,就可以一次性表示一大批地址。就不需要像交換機(jī)那樣苦哈哈的一條一條MAC地址記錄在表里,。
路由表
路由器的作用,,可以幫助我們?cè)诨ヂ?lián)網(wǎng)世界里轉(zhuǎn)發(fā)消息到對(duì)應(yīng)的IP。
對(duì)比一下,。
交換機(jī),,是通過(guò) MAC 頭部中,接收方 MAC 地址,,來(lái)判斷轉(zhuǎn)發(fā)目標(biāo)的,。
路由器,則是根據(jù) IP 頭部中,, IP 地址來(lái)判斷的,。
由于使用的地址不同,記錄轉(zhuǎn)發(fā)信息的表也會(huì)不同,。
類似交換機(jī)的MAC地址表,,路由器也維護(hù)了一張路由表。
而路由表,,是用于告訴路由器,,什么樣的消息該轉(zhuǎn)發(fā)到什么端口。
假設(shè)A要發(fā)消息到D,。也就是192.168.0.105/24要發(fā)消息到192.168.1.11/24,。
那么A會(huì)把消息經(jīng)過(guò)交換機(jī)發(fā)到路由器。
路由器通過(guò)192.168.0.105/24獲得其網(wǎng)絡(luò)號(hào)是 192.168.0.0 ,,而目的地的網(wǎng)絡(luò)號(hào)是192.168.1.0,,二者網(wǎng)絡(luò)號(hào)不同,處于不同局域網(wǎng),。
查路由表,,發(fā)現(xiàn)192.168.1.0,在e2端口,那么就會(huì)把消息從e2端口發(fā)出,,到達(dá)交換機(jī),,交換機(jī)發(fā)現(xiàn)MAC地址是它局域網(wǎng)下的D機(jī)器,,就把消息打過(guò)去。
當(dāng)然,,如果路由表里找不到,,那就打到默認(rèn)網(wǎng)關(guān)吧,也就是從e1口發(fā)出,,發(fā)到IP192.0.2.1,。這個(gè)路由器的路由表不知道該去哪,說(shuō)不定其他路由器知道,。
路由器的內(nèi)部結(jié)構(gòu)
路由器內(nèi)部,,分為控制平面和數(shù)據(jù)平面,說(shuō)白了就是對(duì)應(yīng)軟件部分和硬件部分,。
硬件部分跟交換機(jī)很像,。數(shù)據(jù)從A網(wǎng)口進(jìn)入,此時(shí)數(shù)據(jù)還是網(wǎng)線上格式的電信號(hào),,會(huì)被PHY模塊轉(zhuǎn)為通用信號(hào)格式,,再被MAC模塊轉(zhuǎn)為數(shù)字信號(hào),通過(guò)FCS進(jìn)行錯(cuò)誤校驗(yàn),,同時(shí)校驗(yàn)MAC地址是否是自己,,通過(guò)校驗(yàn)則進(jìn)入內(nèi)存緩沖區(qū),否則丟棄,。
再進(jìn)入軟件部分,,由路由選擇處理器,通過(guò)一定規(guī)則(軟件邏輯),,查詢路由表判斷轉(zhuǎn)發(fā)目標(biāo)和對(duì)應(yīng)轉(zhuǎn)發(fā)口,,再經(jīng)由硬件部分的交換結(jié)構(gòu)轉(zhuǎn)發(fā)出去。
如果路由表中無(wú)法找到匹配記錄,,路由器會(huì)丟棄這個(gè)包,,并通過(guò)ICMP消息告知發(fā)送方。
路由器和交換機(jī)的主要區(qū)別
MAC模塊的區(qū)別
路由器和交換機(jī)不同點(diǎn)在于,,它的每個(gè)網(wǎng)口下,,都有一個(gè)MAC地址和IP地址。
正因?yàn)槁酚善骶哂?MAC 地址,,因此它能夠成為數(shù)據(jù)鏈路層的的發(fā)送方和接收方,。
怎么理解這句話?
前面提到交換機(jī),,是不具備MAC地址的,,而MAC報(bào)頭是需要填上目的MAC地址的。因此交換機(jī)從來(lái)都不是數(shù)據(jù)的目的地,,它只簡(jiǎn)單轉(zhuǎn)發(fā)數(shù)據(jù)幀到目的地,。
但路由器,,是有MAC地址的,因此MAC報(bào)頭就可以寫上,,下一站目的地就是xx路由,。
到了路由器后,路由器可以再次組裝下一站的目的MAC地址是再下一個(gè)路由,,通過(guò)這一點(diǎn),,讓數(shù)據(jù)在路由和路由之間傳輸。
而同時(shí)因?yàn)榻粨Q機(jī)不具有MAC地址,,因此也不會(huì)校驗(yàn)收到的數(shù)據(jù)幀的MAC地址是不是自己的,,全部收下做轉(zhuǎn)發(fā)。而路由器則會(huì)校驗(yàn)數(shù)據(jù)幀的MAC報(bào)頭里的目的MAC地址是不是自己,,是的話才會(huì)收入內(nèi)存緩沖區(qū),,否則丟棄,。
找不到轉(zhuǎn)發(fā)目的地時(shí)的處理方式有區(qū)別
如果在路由表中無(wú)法找到匹配的記錄,,路由器會(huì)丟棄這個(gè)包,并通過(guò) ICMP消息告知發(fā)送方,。
而交換機(jī)在MAC地址表里找不到轉(zhuǎn)發(fā)端口時(shí)會(huì)選擇廣播,。
這里的處理方式兩者是不同的,原因在于網(wǎng)絡(luò)規(guī)模的大小,。
交換機(jī)連接的網(wǎng)絡(luò)最多也就是幾千臺(tái)設(shè)備的規(guī)模,,這個(gè)規(guī)模并 不大。如果只有幾千臺(tái)設(shè)備,,遇到不知道應(yīng)該轉(zhuǎn)發(fā)到哪里的包,,交換機(jī)可以將包發(fā)送到所有的端口上,雖然這個(gè)方法很簡(jiǎn)單粗暴,,但不會(huì)引發(fā)什么 問(wèn)題,。
但路由器工作的網(wǎng)絡(luò)環(huán)境就是互聯(lián)網(wǎng),全世界所有的設(shè)備都連接在互聯(lián)網(wǎng)上,,規(guī)模非常大,,并且這個(gè)規(guī)模還在持續(xù)擴(kuò)大中。如果此時(shí)它的操作跟交換機(jī)一樣,,將不知道應(yīng)該轉(zhuǎn)發(fā)到哪里的包發(fā)送到整個(gè)網(wǎng)絡(luò)上,,那就會(huì)產(chǎn)生大量的網(wǎng)絡(luò)包,造成網(wǎng)絡(luò)擁塞,。因此,,路由器遇到不知道該轉(zhuǎn)發(fā)到哪里的包, 就會(huì)直接丟棄,。
路由器和光貓有什么區(qū)別
不管是交換機(jī)還是路由器,,前面都是提到網(wǎng)口輸入的是電信號(hào),。但現(xiàn)在流行的是光纖傳輸,傳輸?shù)氖枪庑盘?hào),。
而光貓(modem),,是一種調(diào)制解調(diào)器,其實(shí)就是用于光電信號(hào)轉(zhuǎn)換的設(shè)備,。
接收數(shù)據(jù)時(shí),,可以將光纖里的光信號(hào)轉(zhuǎn)化為電信號(hào),發(fā)給路由器,,路由器內(nèi)部再轉(zhuǎn)成數(shù)字信號(hào),,并在此基礎(chǔ)上做各種處理。
相反,,也會(huì)把路由器傳來(lái)的電信號(hào)轉(zhuǎn)為光信號(hào),,發(fā)到光纖,并進(jìn)入互聯(lián)網(wǎng),。
總結(jié)
兩臺(tái)電腦可以通過(guò)一根網(wǎng)線直接連接,,進(jìn)行通信。
機(jī)器一多,,可以把網(wǎng)線都接到集線器(物理層)上,,但是集線器會(huì)不管三七二十一進(jìn)行廣播。
不想廣播,,可以用(二層)交換機(jī)(數(shù)據(jù)鏈路層),,又叫多端口網(wǎng)橋,它比較聰明,,會(huì)自我學(xué)習(xí)生產(chǎn)MAC地址表,,知道消息發(fā)到哪,那就不需要廣播啦
互聯(lián)網(wǎng)電腦這么多,,交換機(jī)MAC地址表總不能全放下吧,。改用路由器(網(wǎng)絡(luò)層),也叫三層交換機(jī),,通過(guò)網(wǎng)段的方式定位要把消息轉(zhuǎn)發(fā)到哪,,就不需要像交換機(jī)那樣苦哈哈一條條記錄MAC地址啦。
路由器和光貓之間是好搭檔,,光貓負(fù)責(zé)把光纖里的光信號(hào)轉(zhuǎn)換成電信號(hào)給路由器,。
現(xiàn)在一般情況下,家里已經(jīng)不用集線器和交換機(jī)了,,大部分路由器也支持交換機(jī)的功能,。所以可以看到,家里的臺(tái)式機(jī)電腦一般就連到一個(gè)路由器,再連個(gè)光貓就夠能快樂(lè)上網(wǎng)了,。
最后
以前整個(gè)班的同學(xué)家里都不見(jiàn)得有一臺(tái)電腦,,都喜歡偷偷跑去網(wǎng)吧玩電腦。改革開(kāi)放的春風(fēng),,把電腦吹進(jìn)了每家每戶,,也把網(wǎng)吧給吹成了網(wǎng)咖。
從前的我晚上偷偷上網(wǎng),,現(xiàn)在的我,,接到報(bào)警,也能在大半夜爬起來(lái)網(wǎng)上沖浪,。
沒(méi)想到我以這種方式保持了當(dāng)初最純粹的質(zhì)樸,。
更多信息可以來(lái)這里獲取==>>電子技術(shù)應(yīng)用-AET<<
電子技術(shù)應(yīng)用專欄作家 一口linux
原文鏈接:https://mp.weixin.qq.com/s/t7vomHGTMJ179XTmuJjDqQ