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