前言
在上一篇中,我們講解了網絡是靠跨洋的海底電纜以及各大互聯網組織制定的規則、協議來進行連接運作的。
但是具體是怎么進行連接的? 沒有說明得很清楚,今天就讓我們一起來探索探索。
一個簡單的網絡
當兩台計算機需要通信時,您必須物理的 (通常使用網線) 或無線的 (例如 Wifi 或藍牙) 鏈接它們,所有現代計算機都可以維持這樣的鏈接。
這樣的網絡不限於兩台計算機之間,你可以接入任意數量的計算機,但很快也會變得復雜起來:
例如,如果要連接 6 台設備,則需要 15 根網線,每台計算機需要連接 5 根網線!
為了解決這樣的問題,我們需要一個中間設備,讓所有計算機接入它,由這個中間設備做轉發,這樣就能有效的減少網線的數量了:
這樣一來,雖然減少了網線的數量,但同時也增加了要求。
最初我只需要把信息通過合適的網線傳送出去就可以了,但現在,所有的信息都統一發到中間設備那里,誰發給誰的,還必須計算機設備自己說清楚。(就像寫郵件一樣的)
另一點要求是這個中間設備不能進行廣播。
如果我們只是無腦的做轉發,讓所有其他計算機都接受到,把是否要接受信息的權利和判斷交給接受的計算機,這既不安全也極大的浪費了網絡資源。
(當然自主搭建較為安全的網絡環境中,我們可以使用只是無腦轉發的集線器來完成這一工作)
所以我們中間設備需要更加智能一些,只轉發給需要信息的人就好了:
要做到這一點,首先我們每台設備都需要一個唯一的標識 (名字) 才行,這在每一個網絡設備出廠之前,生產它的廠家就已經給它賦予一個全球唯一的 MAC 地址。
形象地說,這就像我們的身份證號碼一樣,具有唯一性。
另一點就是我們需要一個地方記錄,哪一個 MAC 地址的設備對應着中間設備的物理連接的哪一個端口:
實際上,這就是交換機干的事情。(注意這是交換機不是路由器)
可是這張表是如何建立的呢?
最開始啟動的時候,這張表是空白的。
當有數據交換發生時,交換機通過源 MAC 地址不斷進行學習到 MAC 地址表中,並與端口進行關聯:
交換機在 MAC 地址表中並未查詢到目標 MAC 地址,因此該數據將從出了其入口接口之外所有的接口泛洪出去:
C、D 機器在收到數據后就將數據丟棄了——因為並不是發給自己的——相反 B 機器因為 MAC 地址符合,就收下了,並且需要回復數據給 A 機器。
好了,此時對於交換機來說,又是一個新的源 MAC 地址的數據發來了,記錄學習的同時也查詢到要去往 A 機器的目標 MAC 地址已經存在了,於是直接轉發到 01
端口就好了:
就在這樣不斷的數據交換中,交換機不斷更新維護着自己的 MAC 地址表。
好了,現在總算有了一個由交換機組建的簡單網絡了:
更大的網絡
到目前為止,運行一切良好,可是如果是連接成千上萬億台計算機呢?
我們很容易想到,理論上,可以通過多個交換機互聯來進行無限的擴展:
但是由於交換機本身沒有 MAC 地址,所以數量超過一定時,每台交換機維護的 MAC 地址表將會變得無法維護——事實上也無法存儲這么大數據的 MAC 地址表。
所以我們需要一種擁有獨立 MAC 地址,幫助我們做轉發的設備——路由器由此誕生。
路由器的每一個端口,都有一個獨立的 MAC 地址。
這樣就有效減少了每台設備需要維護的 MAC 地址表的數量,但同時隨着網絡的擴展,新的問題又出現了。
上面說到,MAC 地址就像我們的身份證一樣,雖然具有唯一性,但就像人和身份證的關系一樣,小范圍內,我能輕易的找到你,一旦范圍擴大 (或者說環境變復雜),身份證這樣的信息似乎對於「快速找到你」這件事來說,幫助很小。
我們需要另外一種信息,來幫助定位——這就是 IP 地址,類似於你寫在快遞單上的地址一樣,它能幫助我們在網絡中定位到你的終端。
為了適應這一改變,我們發送的數據需要添加上更多的信息:
同樣的,路由器也對應需要額外的記錄 IP 地址與 MAC 地址的對應關系:
IP 地址的發明把紛繁復雜的網絡世界 (主要是不同網絡硬件設備) 統一規划到了一個整齊的網絡中。
由於 IP 地址是跟地域掛鈎的,所以在網絡中找到你的設備就容易多了 (就像你買淘寶需要先填寫自己的收貨地址一樣),我們也能夠使用路由器搭建起更大的網絡:
互聯網
上面的網絡非常接近我們所謂的 Internet,但是我們缺少一些東西。
我們不太可能在世界的每個地方之間都鋪設上電纜,事實上,電話基礎設施已經先於網絡基礎設施連接起了全世界,這是我們需要完美的電線。
為了將我們的網絡連接到電話基礎設施,我們需要一種稱為調制解調器 (俗稱"貓") 的特殊設備,這個設備可以將來自我們網絡的信息轉換為可由電話基礎架構管理的信息,反之亦然。
(相信不少小伙伴都還記得需要「撥號上網」的日子,這就是把網絡接入電話基礎設施的過程,現在已經優化了)
到此,我們的網絡已經連上了電話基礎架構。
但我們的目的是把消息發送給我們要到達的其他網絡——目前為止,這一整套網絡都是基於自己的目的搭建的——為此,我們還需要把網絡連接到 Internet 服務提供商(ISP)。
ISP 是管理一些特殊路由器的公司,這些路由器都鏈接在一起,並且還可以訪問其他 ISP 的路由器。
(中國的 ISP 服務商耳熟能詳:電信、網通、移動、聯通、鐵通等。)
因此,來自我們網絡的消息將通過這么多 ISP 網絡搭建的基礎網絡架構來傳送到目標網絡——互聯網的基礎結構也由這個網絡組成。
現在經過一系列的發展,已經形成了三層 ISP 結構的因特網了:
由此,整個互聯網基礎架構就搭設好了。(實際更復雜)
尋找目標終端
如果要把消息發送到計算機,則必須要指定 IP 地址,它是由一系列由點分割的四個數字組成,例如:192.168.2.10
。
這對於計算機來說完全是可以的,但我們人類卻很難記住這種地址。
於是我們給 IP 地址加上了一個易於理解的名字,即 域名 domain name。
例如 google.com
是作為 IP 地址 173.194.121.32
的域名使用,訪問這兩個地址是訪問的同一服務器,這也是我們訪問 Internet 的簡便方法。
雖然我們通常使用域名來訪問網站,但 Internet 和 Web 卻並不等同,網絡是基礎設施,在互聯網之上還有許多不同於 Web 的其他服務,例如電子郵件。
這兩者的轉換需要互聯網的域名系統服務來支撐,我們會在后續詳細說到。
另外我們可以給微信好友發送消息,也是因為我們通過微信 App 連入了騰訊的服務器,以此為橋梁互相知道了 IP 地址。
總之,我們通信必須指定 IP 地址。
后記
本篇文章,我們從最初兩台互連的計算機一步一步發展到搭建起了整個互聯網的基礎通信架構:
- 通過交換機、路由器、調制解調器、ISP、跨洋電纜物理橋接;
- 通過 MAC 地址、IP 地址的發展讓整個網絡的網絡設備邏輯互連;
至少對於這個復雜的 Internet 黑盒有了一定的了解和認識。
這其中涉及到很多復雜的協議 (例如保證可靠通信的 TCP/IP 協議) 和算法 (查找 IP 位置最佳路徑的路由算法) 等都沒有提及,本篇的重點還是網絡世界中的設備是如何進行鏈接的。
也是使用了 PPT 制作了動圖幫助大家理解,希望大家能夠有所收獲。
后續也會繼續跟大家一起學習計算機網絡的基礎知識,也會嘗試着跟着后端學習路線圖的腳步跟着大家一起學習進階。
(完)
參考資料
- 這就是網絡嗎?|閃客sun - https://mp.weixin.qq.com/s/9frk_VS8Vh0mY-rXnitKFw
- How does the Internet work? - https://developer.mozilla.org/en-US/docs/Learn/Common_questions/How_does_the_Internet_work
- 知乎 | 交換機 MAC 表的獲取? - https://www.zhihu.com/question/58187639
- 百度百科|MAC地址 - https://baike.baidu.com/item/MAC地址
- 為什么有 MAC 地址還要有 IP 地址? - https://blog.csdn.net/qq_15760109/article/details/78210151
- 本文已收錄至我的 Github 程序員成長系列 【More Than Java】,學習,不止 Code,歡迎 star:https://github.com/wmyskxz/MoreThanJava
- 個人公眾號 :wmyskxz,個人獨立域名博客:wmyskxz.com,堅持原創輸出,下方掃碼關注,2020,與您共同成長!
非常感謝各位人才能 看到這里,如果覺得本篇文章寫得不錯,覺得 「我沒有三顆心臟」有點東西 的話,求點贊,求關注,求分享,求留言!
創作不易,各位的支持和認可,就是我創作的最大動力,我們下篇文章見!