《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 其他 > 硬核圖解!30張圖帶你搞懂!路由器,集線器,交換機,網橋,光貓有啥區別?

硬核圖解!30張圖帶你搞懂!路由器,集線器,交換機,網橋,光貓有啥區別?

2022-11-23
作者:胖虎
來源:一口Linux

  故事就從一個車轱轆說起吧。先來看一個車轱轆。

  微信圖片_20221123150149.jpg

  輻條從車轱轆邊緣,一直匯聚到 中心的軸,這個軸在英文里叫hub。

  而我們今天要講到的集線器,英文里也叫hub

  都叫hub,多少有點關系,看下這面這個圖大概能明白,其實兩者有點像。

  微信圖片_20221123150154.png

  hub的由來

  大概想表達的意思是,它是匯聚網線的中心,因此就叫集線器

  所以可以理解,大家常逛的 Github,Docker Hub, 還有P**hub ,都是為了表達它們是某類資源的中心了吧。

  那么集線器是什么呢?那就要從電腦是怎么互聯的這個話題說起。

  小學的時候,有一種網吧,它其實是不能上外網的。也就是不能打開度娘,不能搜索資料。

  不能上網的網吧還能叫網吧?

  能。雖然不能上外網,但網吧老板可以把很多臺機子連起來,實現網吧內互聯,形成一個局域網(Local Area Network,簡稱LAN)。

  網吧內互聯之后,就可以放上各種游戲,比如CS,實現網吧內對線。

  這種網吧有種好處,沒有那么多鍵盤俠。

  畢竟你不知道什么時候鍵著鍵著,對方就順著網線找過來了。

  對戰直接從線上轉移到線下了。

  因此大家打游戲都很和諧,客氣,場面十分感人就是了。

  那么網吧內的電腦是怎么互聯呢?

  一根網線互聯電腦

  從最簡單的場景說起,假設網吧內只有兩臺電腦

微信截圖_20221123150540.png

  兩臺電腦互聯

  隨便連根網線就能實現互聯嗎?

  當然不是。

  還記得網絡分層嗎?

  微信截圖_20221123150558.png

  數據如果要進行傳輸,會從A電腦經過這些網絡分層把消息組裝好,再到B電腦層層解包。

  網線,只是代替了上面的灰色部分,實現物理層上互聯。

  如果想要兩臺電腦互聯成功,還需要確保每一層所需要的步驟都要做到位,這樣數據才能確保正確投送并返回。

  我們自頂向下,從細節開始說一下實現互聯需要做什么。

  應用層

  該層的網絡功能由應用本身保證。

  假設兩臺電腦是打算用游戲進行聯網,那么該應用層的功能由游戲程序保證。

  傳輸層

  絕大部分游戲用的傳輸層協議都是TCP,我們可以看下TCP報頭

微信截圖_20221123150657.png

  這里面我們需要關注的是源和目的端口,這個可以定位到這臺電腦上哪個進程在收發數據。

  這兩個端口信息一般是游戲內部已經填好。

  AB兩臺電腦,其中一臺作為服務端啟動,比如A,起了個服務器進程。

  服務器會開放一個固定的端口,比如27015。這就是目的端口

  這時候A和B都可以搜索到這個服務器。啟動一個客戶端進程,連接進入A的服務器進程。

  而源端口,則由A和B自己生成。

  網絡層

  上圖除了端口,我們還看到一個192.168.0.105,這個就是A的IP地址

  我們看一下IP層的報文頭。

 微信截圖_20221123150810.png

  這里面需要關注是源和目的IP地址

  如果兩臺電腦想通過一根網線進行消息通信,那么他們需要在一個局域網內。

  這意味著,他們的子網掩碼需要一致。局域網內,假設子網掩碼是 225.225.225.0,會認為 192.168.0.x 這些IP都屬于一個局域網。所以當A的IP地址是192.168.0.105 時,那么B的IP地址可以配成192.168.0.106 。

  關于IP這一塊是啥,后面會細講,大家如果沒明白我說的是啥,不要急。

  組裝好網絡層報頭后,數據包傳入到數據鏈路據層。

  數據鏈路層

  以上解決了網絡層的互聯,而在數據鏈路層,數據包里需要拼接上MAC報頭。先看下MAC報頭長什么樣子。

微信截圖_20221123153831.png

  其中需要關心的是標紅的源和目的MAC地址。MAC地址可以粗略理解是這臺電腦網卡的唯一標識。大概長這樣

  28:f9:d3:62:7d:31

  源和目的地址,在發送消息的時候就會被填上。

  但是A只知道自己的MAC地址,怎么才能知道B的MAC地址呢?

  這時候需要ARP協議。

  ARP(Address Resolution Protocal),即地址解析協議。用于將IP地址解析為以太網的MAC地址的協議。

  在局域網中,當主機A有數據要發送給主機B時,A必須知道B的IP地址。

  但是僅僅有IP地址還是不夠的,因為IP數據報文還需要在數據鏈路層封裝成幀才能通過物理網絡發送。因為發送端還必須有接收端的MAC地址,所以需要一個從IP地址到MAC地址的映射。ARP就是干這事情的協議。

  微信截圖_20221123154046.png

  A查本地ARP表發現B的IP和MAC映射關系不存在

  A通過ARP廣播的形式向局域網發出消息,詢問某IP對應的MAC地址是多少。比如A此時知道B的IP,但并不知道B的MAC地址是多少,就會嘗試在局域網內發起ARP廣播,詢問局域網下所有機器,哪個機器的IP與B的IP一致。

  B收到這個ARP消息,發現A要問的IP與自己的IP一致,就會把自己的MAC地址作為應答返回給A。

  此時A就知道了B的MAC地址,順便把消息記錄到本地ARP表里,下次直接用表里的關系就行,不需要每次都去問。

  物理層

  從數據鏈路層到物理層,數據會被轉為01比特流

  此時需要把比特流傳到另一臺電腦。

  通過一根網線,兩段水晶頭插入網口,把兩臺電腦連起來。

  但對網線有一些要求。

  這根網線兩端的水晶頭需要采用交叉互聯法

微信截圖_20221123154125.png

  水晶頭里有8根線,注意上圖里的顏色,是有順序的。第1、2根線起著收信號的作用,而第3、6腳發信號的作用。將一端的1號和3號線、2號和6號線互換一下位置,就能夠在物理層實現一端發送的信號,另一端能收到。

  當然,現在有些網卡有自適應的功能,就算是直連互聯法的線,也能有交叉互聯法的效果。如果你用的是這種網卡,就當我物理層這塊什么都沒說吧

  互聯

  此時,在確保關閉防火墻的前提下,可以嘗試從A電腦中ping一下B,再從B電腦中ping一下A。如無意外,都能ping通。

  A給B發個消息,從應用層到數據鏈路層,會分別加上A和B的各種''身份信息"。比如在傳輸層會加上A和B的應用端口號,在網絡層加上源和目的IP,在數據鏈路層會加上源和目的網卡的MAC頭部信息。

  B收到消息后逐層解包,驗證,最后順利到達應用層。實現AB兩臺機器消息互通。

  至此游戲就能正常聯機對線,兩臺電腦互聯成功!

  什么是集線器

  兩個人打cs,總會覺得無聊,但是每臺電腦又只有一個網線口。

  想要邀請更多的人一起玩,怎么辦?

  微信截圖_20221123154333.png

  那就要回到文章開頭提到的集線器(hub)了。

  這是個工作在物理層的設備。

  有多個網口,很好的解決了電腦上只有一個網口的問題,可以做到多臺電腦的網線都插入到集線器上。

  同時工作原理也非常簡單,會把某個端口收到的數據,輸入到中繼電路

  中繼電路的基本功能是將輸入的信號廣播到集線器的所有端口上。

  簡單來說就是無腦復制N份到其余N個端口上。

微信截圖_20221123154402.png

  數據復制到N個端口后。對應轉發到N臺機器里。

  集線器內部結構

  說到這里,已經對集線器有個大概認識了。

  接下來,我們看下集線器的內部結構。

 微信截圖_20221123154451.png

  從A網口進入集線器的消息,此時還是電信號。這里經過一個PHY模塊。

  要理解PHY模塊的作用,首先要先了解每個網口,都可能接著網線(廢話),而每根網線的傳輸的格式都是有可能不同的。而PHY的作用,就是把這些格式轉化為一個通用的格式。

  舉個例子。PHY就好比一個翻譯器,有的人說英文,有的人說日文。但是PHY,會把它統一轉為普通話,給內部電路處理。內部電路處理完之后,再經過PHY模塊,轉為英語,或日文從對應網口里輸出。

  經過PHY的處理后,以電信號的形式輸入到中繼電路,被無腦廣播,再次經過PHY模塊后變成BCD網口的格式輸出。

  這里面的電信號,是會受噪聲干擾,導致信號形變出錯的。

  但就算是錯了,也還是會原封不動的廣播出去,這就是上面提到無腦的精髓所在。

  那信號如果出錯了怎么辦?

  只能讓接收方收到消息后進行校驗。

  還記得上文里提到的數據鏈路層的MAC報頭里最末尾有個FCS嗎?

  FCS里存放的是發送方通過循環冗余校驗CRC計算得到的值。

  接收方用收到的數據算一次CRC,與FCS里的值進行對比。

  如果一致,那證明數據沒問題。如果出錯,則直接丟棄

  當然,丟棄包并不會影響數據的傳輸, 因為丟棄的包不會觸發確認響應。因此協議棧的 TCP 模塊會檢測到丟包, 并對該包進行重傳。

  如果消息沒出錯,但是因為無腦廣播,C也能收到A發給B的數據包。

  此時 C 會在接受到數據包后一層層的"剝開"。

  正常情況下,在數據鏈路層時,識別到目的 MAC 地址跟 C 的不一致時,也會把數據丟棄

微信截圖_20221123154704.png

  什么是交換機

  目前只有 ABC 三臺機器,每次都是廣播發消息倒還好。

  如果機器越來越多,每臺機器發一條消息,都會被廣播,就有點頂不住了。

  舉個例子。

  假設N臺機器,其中兩臺機器A和B,A發到B和B發給A,共兩條消息。

  如果這N臺機器,用的是集線器。還是AB之間互發消息,每條消息都是廣播的話,就是(N-1)+(N-1)條消息,差距有些大,對網絡資源浪費就有些嚴重了。

  那么,有沒有可能做到,A發給B的消息,就不要轉發給C呢?

  可以的,把集線器換成交換機

  交換機,又叫switch,跟集線器長得很像。

  但是功能更強一些,從網絡分層上來說,屬于數據鏈路層,比集線器所在的物理層還要高一層。

  所有發到交換機的數據,都會先進入交換機的緩存區。接著消息再被轉發到對應機器上。

  注意這里用的是轉發,而不是集線器的廣播,交換機是怎么做到轉發的呢?

  MAC地址表

  交換機內部維護了一張MAC地址表

  記錄了 端口號和MAC地址的對應關系。

  這個表的數據是交換機不斷學習的結果。

  當A發消息到交換機時,交換機發現消息是從1號端口進來的,則會在MAC地址表上,記錄A的MAC地址對應1號端口。

  如果A沒有很長時間沒發消息到這個1號端口,那這條記錄就會過期并被刪除

  那么,當時間足夠長,ABC 都發過消息給交換機后,地址表就會有完整的關系信息。

微信截圖_20221123154809.png

  A準備發送消息給B,此時A會把B的MAC地址,放入要發送的數據里。數據順著網線發出。

  交換機從端口收到數據,會把數據里的源和目的MAC地址提出來,跟MAC地址表進行對比。

  發現B的MAC地址正好在2號端口,那么就把數據轉發給2號端口。

  此時B電腦從網線收到來自交換機2號端口的數據。

  兩種特殊情況

  正常流程很清楚了,看兩個特殊情況

  交換機查詢地址表時,發現目的 MAC 地址的目標端口和這個包的源端口,是同一個端口,怎么辦?

  先說結論,會直接丟棄這個包

  我們看下,假設它不丟棄,會發生什么情況。

  微信截圖_20221123155116.png

  A發了個消息給B,中間經過一個集線器,此時消息會被廣播到B和交換機。

  此時B收到第一條A發給它的消息

  交換機從1號端口收到A的消息后,解包,獲得目的MAC地址是BB-BB-BB-BB-BB-BB。查MAC地址表,發現要發到1號端口。此時,源和目的端口都是同一個,如果交換機不丟棄這個消息,B會收到第二條A發給它的消息。

  A只發了一次消息,B卻收到兩條消息,明顯不對。

  因此,當交換機查詢地址表時,發現目標端口和源端口,是同一個端口時,會丟棄這個包。

  MAC地址表里找不到對應的MAC地址,怎么辦?

  這可能是因為具有該地址的設備,還沒有向交換機發送過包,或者這個設備一段時間沒有工作,導致地址被從地址表中刪除了。

  這種情況下,交換機無法判斷應該把包轉發到哪個端口,只能將包轉發到除了源端口之外的所有端口上,無論該設備連接在哪個端口上,都能收到這個包。

  此時,交換機就會跟集線器一樣進行廣播

  發送了包之后目標設備會作出響應,只要返回了響應包,交換機就可以將它的地址寫入地址表,下次也就不需要把包 發到所有端口了。

  交換機內部結構

  再看下交換機內部結構。

  微信截圖_20221123155955.png

  其實對比可以發現,交換機和集線器內部結構很像。

  重點需要提到的是MAC模塊。消息以電信號的形式從網口進入,到了PHY會被轉成通用格式的電信號。而MAC模塊的作用是把這個電信號轉為數字信號,這樣就能提取出MAC包頭,并通過MAC數據幀末尾的FCS校驗這個包有沒有問題,如果沒問題,則把數據放到內存緩沖區里,否則直接丟棄。

  另外,這個MAC模塊,雖然這么叫。但其實交換機MAC模塊不具有 MAC 地址。因此交換機的端口不核對接收方 MAC 地址,而是直接接收所有的包并存放到緩沖區中。

  放入到內存緩沖區后,還會把MAC地址和端口號記錄到MAC地址表中。同時檢查目的MAC地址在不在MAC地址表中,在的話則會轉發到對應端口。否則廣播。

  交換機與網橋的區別

  網橋,本質上可以理解為兩個網線口的交換機,正好可以把兩臺電腦給連起來,也叫橋接。而交換機,則是多網線口的網橋,可以把多臺電腦給連(橋接)起來。

  其他功能方面,大差不差,不必太過糾結。

  交換機和二層交換機和三層交換機有什么區別

  這一部分提到的交換機,其實就是二層交換機,也就是工作在第二層(數據鏈路層)的交換機,二者沒區別。

  而三層交換機,是工作在第三層(網絡層)的交換機,其實就是接下來要提到的路由器

  什么是路由器

  有了交換機之后,小網吧里的電腦就都可以被連起來了。交換機網口不夠?那就再接個交換機。

  但世界上電腦這么多,交換機里的MAC地址表難道全都要記住嗎?

  顯然做不到。為了解決這個問題。

  于是就有了路由器,工作在網絡層,比數據鏈路層更高一層。

  網絡層引入了IP的概念。

  什么是IP

  比如前面提到的 192.168.0.105 就是一個IP,同一個局域網內還可能會有一個IP是192.168.0.106。有沒有發現,它們都是192.168.0.xxx。

  像極了 上海市.黃浦區.南京東路.105號,這樣的地址。現實生活中,我們可以通過一個地址定位到要去哪。到了 上海市.黃浦區.南京東路.105號樓里,我們就可以再去找某個叫身份證為xiaobaixxxxx的人。

  那互聯網世界里,我們也就可以通過IP地址,定位到某個廣域網段,再通過廣域網內部的局域網的MAC地址定位到具體某個電腦。

  上海市.黃浦區.南京東路.105號可以幫助我們定位到在南京東路上的第105號樓的位置。但還有些路,比如南京西路,可能不止105號,可能要到257號。

  實際上一個IP由網絡號和主機號組成,共32位組成。如果拿了前面24位做網絡號,那主機號就剩8位了,2的8次方=256,最多表示表示256號樓。因此為了多表示幾個樓,可以向網絡號多挪幾位過來作為主機號。

  那么具體多少位作為網絡號呢?可以在IP后面加一個數字,用來表明這一點。

  于是就有了 192.168.0.105/24這種表示方法,表明前24位192.168.0.0是網絡號,105是主機號。

微信截圖_20221123160031.png

  有了網段,就可以一次性表示一大批地址。就不需要像交換機那樣苦哈哈的一條一條MAC地址記錄在表里。

  路由表

  路由器的作用,可以幫助我們在互聯網世界里轉發消息到對應的IP。

  對比一下。

  交換機,是通過 MAC 頭部中,接收方 MAC 地址,來判斷轉發目標的。

  路由器,則是根據 IP 頭部中, IP 地址來判斷的。

  由于使用的地址不同,記錄轉發信息的表也會不同。

  類似交換機的MAC地址表,路由器也維護了一張路由表。

  而路由表,是用于告訴路由器,什么樣的消息該轉發到什么端口。

微信截圖_20221123160054.png

  假設A要發消息到D。也就是192.168.0.105/24要發消息到192.168.1.11/24。

  那么A會把消息經過交換機發到路由器。

  路由器通過192.168.0.105/24獲得其網絡號是 192.168.0.0 ,而目的地的網絡號是192.168.1.0,二者網絡號不同,處于不同局域網。

  查路由表,發現192.168.1.0,在e2端口,那么就會把消息從e2端口發出,到達交換機,交換機發現MAC地址是它局域網下的D機器,就把消息打過去。

  當然,如果路由表里找不到,那就打到默認網關吧,也就是從e1口發出,發到IP192.0.2.1。這個路由器的路由表不知道該去哪,說不定其他路由器知道。

  路由器的內部結構

微信截圖_20221123160122.png

  路由器內部,分為控制平面和數據平面,說白了就是對應軟件部分和硬件部分。

  硬件部分跟交換機很像。數據從A網口進入,此時數據還是網線上格式的電信號,會被PHY模塊轉為通用信號格式,再被MAC模塊轉為數字信號,通過FCS進行錯誤校驗,同時校驗MAC地址是否是自己,通過校驗則進入內存緩沖區,否則丟棄。

  再進入軟件部分,由路由選擇處理器,通過一定規則(軟件邏輯),查詢路由表判斷轉發目標和對應轉發口,再經由硬件部分的交換結構轉發出去。

  如果路由表中無法找到匹配記錄,路由器會丟棄這個包,并通過ICMP消息告知發送方。

  路由器和交換機的主要區別

  MAC模塊的區別

  路由器和交換機不同點在于,它的每個網口下,都有一個MAC地址和IP地址。

  正因為路由器具有 MAC 地址,因此它能夠成為數據鏈路層的的發送方和接收方。

  怎么理解這句話?

  前面提到交換機,是不具備MAC地址的,而MAC報頭是需要填上目的MAC地址的。因此交換機從來都不是數據的目的地,它只簡單轉發數據幀到目的地。

  但路由器,是有MAC地址的,因此MAC報頭就可以寫上,下一站目的地就是xx路由。

  到了路由器后,路由器可以再次組裝下一站的目的MAC地址是再下一個路由,通過這一點,讓數據在路由和路由之間傳輸。

  而同時因為交換機不具有MAC地址,因此也不會校驗收到的數據幀的MAC地址是不是自己的,全部收下做轉發。而路由器則會校驗數據幀的MAC報頭里的目的MAC地址是不是自己,是的話才會收入內存緩沖區,否則丟棄。

  找不到轉發目的地時的處理方式有區別

  如果在路由表中無法找到匹配的記錄,路由器會丟棄這個包,并通過 ICMP消息告知發送方。

  而交換機在MAC地址表里找不到轉發端口時會選擇廣播。

  這里的處理方式兩者是不同的,原因在于網絡規模的大小。

  交換機連接的網絡最多也就是幾千臺設備的規模,這個規模并 不大。如果只有幾千臺設備,遇到不知道應該轉發到哪里的包,交換機可以將包發送到所有的端口上,雖然這個方法很簡單粗暴,但不會引發什么 問題。

  但路由器工作的網絡環境就是互聯網,全世界所有的設備都連接在互聯網上,規模非常大,并且這個規模還在持續擴大中。如果此時它的操作跟交換機一樣,將不知道應該轉發到哪里的包發送到整個網絡上,那就會產生大量的網絡包,造成網絡擁塞。因此,路由器遇到不知道該轉發到哪里的包, 就會直接丟棄。

  路由器和光貓有什么區別

  不管是交換機還是路由器,前面都是提到網口輸入的是電信號。但現在流行的是光纖傳輸,傳輸的是光信號。

  而光貓(modem),是一種調制解調器,其實就是用于光電信號轉換的設備。

  接收數據時,可以將光纖里的光信號轉化為電信號,發給路由器,路由器內部再轉成數字信號,并在此基礎上做各種處理。

  相反,也會把路由器傳來的電信號轉為光信號,發到光纖,并進入互聯網。

  微信截圖_20221123160203.png

  總結

  兩臺電腦可以通過一根網線直接連接,進行通信。

  機器一多,可以把網線都接到集線器(物理層)上,但是集線器會不管三七二十一進行廣播。

  不想廣播,可以用(二層)交換機(數據鏈路層),又叫多端口網橋,它比較聰明,會自我學習生產MAC地址表,知道消息發到哪,那就不需要廣播啦

  互聯網電腦這么多,交換機MAC地址表總不能全放下吧。改用路由器(網絡層),也叫三層交換機,通過網段的方式定位要把消息轉發到哪,就不需要像交換機那樣苦哈哈一條條記錄MAC地址啦。

  路由器和光貓之間是好搭檔,光貓負責把光纖里的光信號轉換成電信號給路由器。

  現在一般情況下,家里已經不用集線器和交換機了,大部分路由器也支持交換機的功能。所以可以看到,家里的臺式機電腦一般就連到一個路由器,再連個光貓就夠能快樂上網了。

  最后

  以前整個班的同學家里都不見得有一臺電腦,都喜歡偷偷跑去網吧玩電腦。改革開放的春風,把電腦吹進了每家每戶,也把網吧給吹成了網咖。

  從前的我晚上偷偷上網,現在的我,接到報警,也能在大半夜爬起來網上沖浪。

  沒想到我以這種方式保持了當初最純粹的質樸。

 更多信息可以來這里獲取==>>電子技術應用-AET<<

  微信圖片_20210517164139.jpg


微信圖片_20220701092006.jpg

電子技術應用專欄作家 一口linux

原文鏈接:https://mp.weixin.qq.com/s/t7vomHGTMJ179XTmuJjDqQ

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
主站蜘蛛池模板: 四月激情网 | 青青艹视频在线 | 国产成人涩涩涩视频在线观看免费 | 国产在线一区二区视频 | 婷婷久月 | 成人午夜看片 | 欧美男人操女人 | 国产成人亚洲精品电影 | 欧美婷婷六月丁香综合色 | 久久永久电影www电影网 | 国产爆操 | 国产欧美一区二区精品久久久 | 亚洲成人在线播放 | 国产成人一区二区三区高清 | 国产精品成在线观看 | 成人影院一区二区三区 | 国产成人精品在线观看 | 蜜桃丁香花 | 精品视频网| 人与拘一级a毛片 | 免费精品| 一级毛片在线免费看 | 伊人久久婷婷 | 99re视频在线 | 欧美亚洲另类久久综合 | 久久精品亚洲牛牛影视 | 久久伊人婷婷 | 免费在线观看黄色小视频 | 丁香婷婷视频 | 国产精品原创永久在线观看 | 日韩在线视频免费不卡一区 | 日韩在线免费视频 | 国产永久免费高清动作片www | 欧美亚洲高清日韩成人 | 九九精品视频免费 | 综合激情网五月 | 全免费a级毛片 | 狠狠色婷婷丁香六月 | 久久狠狠躁免费观看2020 | www.jiqing| 久久网站免费 |