我相信我們都玩過一款特別火的游戲:帝國時代。小時候想要玩帝國時代,需要到軟件城購買盜版光盤安裝,大概3塊錢一張左右的樣子,當時已經覺得很便宜了,誰想到現在有了網絡之后是免費。
小A是一個帝國時代大神,他打通了游戲的所有關卡,可以一個人單挑8個瘋狂的電腦玩家。漸漸地他覺得無聊了,想要找小伙伴一起PK。
但是兩個電腦需要互聯才行,如何實現兩臺設備的互聯呢?
小A很聰明,他發明了一個類似于USB口一樣的可以傳輸數據的端口,他將其命名為網口。小A通過一根網線將自己的電腦與小B的網口相連,實現了兩臺電腦間的互連(如下圖)。
兩個小伙伴很開心,聯機玩了起來,這時被路過的小C看見了,小C也要加入進來。
但是我們知道,每臺電腦只有一個網口,無法實現三臺電腦的相互連接,那要要怎么辦呢?
這時候小B出了一個主意:咱們再找一臺計算機,給他多設計幾個網口,我們每個人都連到這臺計算機的網口上,不也實現咱們哥幾個之間的互連了嗎。
說干就干,于是他們設計出了一款微型計算機,他本身具備多個網口,專門實現多臺計算機的互聯作用,這個微型計算機就是集線器(HUB)。
顧名思義,集線器起到了一個將網線集結起來的作用,實現最初級的網絡互通。
集線器是通過網線直接傳送數據的,我們說他工作在物理層(如下圖所示)。
有了集線器后,越來越多的小伙伴加入到游戲中,小D、小E等人都慕名而來。
然而集線器有一個問題,由于和每臺設備相連,他不能分辨出具體信息是發送給誰的,只能廣泛地廣播出去。
例如小A本來想問小C:你吃了嗎?結果小B,小D和小E等所有連接在集線器上的用戶都收到了這一信息。
由于處于同一網絡,小A說話時其他人不能發言,否則信息間會產生碰撞,引發錯誤,對這種情況,我們稱為各設備處于同一沖突域內。
這樣的設備用戶體驗極差,于是小伙伴們一起討論改進措施。
這時聰明的小D發話了:我們給這臺設備加入一個指令,讓他可以根據網口名稱自動尋址傳輸數據。
比如我把小A的網口命名為macA,將小C的命名為macC,這時如果小A想要將數據傳給小C,則設備會根據網口名稱macA和macC自動將資料從A的電腦傳送到C的電腦中,而不讓小B、小D和小E收到。
(補充說明: 這里的macA, macB指的就是MAC地址,相當于一個人的身份證,獨一無二。)
也就是說,這臺設備解決了沖突的問題,實現了任意兩臺電腦間的互聯,大大地提升了網絡間的傳輸速度,我們把它叫做交換機。
由于交換機是根據網口地址傳送信息,比網線直接傳送多了一個步驟,我們也說交換機工作在數據鏈路層(如下圖)。
這回小伙伴們高興了,他們愉快地玩耍起來。
漸漸地,他們在當地有了名氣,吸引了越來越多的小伙伴加入到他們的隊伍中。有一天,一個外村的小伙突然找上門來,希望能和他們一起互聯,實現跨村間的網絡對戰。
小A說可以呀,于是他們找了一根超長的網線將兩個村落的交換機連在了一起。結果發現一件奇怪的事:兩個村落間竟然不能相互通信。
怎么回事?原來那邊的電腦和他們用的不是一套操作系統,這導致信息間的傳送形式的不匹配。在這期間,還有其他村落的人也來找過小A,可是小A發現,每個村子之間用的操作系統都不一樣。
這可咋辦吶?難道以后只能各自村子玩各自的了嗎?為了解決這一問題,各村的小伙伴們坐在一起組織了一場會議,最終得出了一套解決方案:采用同樣的信息傳送形式(像不像秦始皇統一度量衡?)。
那如何實現呢?小伙伴們規定,不同的村子間先在各自的操作系統上加上一套相同的協議。不同村落通信時,信息經協議加工成統一形式,再經由一個特殊的設備傳送出去。這個設備就叫做路由器。
在這套協議中,每個機器都被賦予了一個IP地址,相當于一個門牌號一樣。路由器通過IP地址尋址,我們說它工作在計算機的網絡層。
這樣,經由如此的一系列改裝,小A終于帶領村民們實現了整個鄉鎮的通信。隨著越來越多的城里人也加入小A的協議,小A帶領村民逐步實現了全市、全國乃至全世界的通信。這一套協議便是TCP/IP協議簇,互聯網也便這樣形成了。
然而,即便如今全網絡已遍布了全世界,在小A和村里的小伙伴對戰帝國時代的時候,也仍然用著交換機。只有和外面更大的世界交流的時候才用到路由器。
其實上圖只是為了幫助您更好地理解路由器,一個真實的網絡拓撲中,路由器、交換機、集線器是一起分工合作的,正如下圖所示: