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