你管這破玩意叫網絡?
內容來源于飛天閃客,以前沒有學習過網絡的相關基礎知識,只會去瞎設置,現在終于是弄明白了。
多臺電腦之間想要通信,可以直接通過一條網線進行連接。但是隨著網線的增加,這個就會比較繁雜了。
所以就有了集線器這樣的設備。
集線器會將包不做任何處理的分給每個設備。這樣的話就不知道包是誰發給誰的了,但是每個設備都有自己的mac物理地址,數據中再加上從哪個mac來,發送到目標mac地址就好了。
當然,這個時候,其他電腦其實還是可以看到不屬于自己的包的數據的內容,所以就有了新的需求:將包只發給一個設備就好了——更加智能的集線器:交換機。
交換機內部維護著一張mac地址表,記錄了每個設備的mac地址和對應的交換機端口號。這個時候包在傳遞的時候就會根據包信息,將包數據傳輸給對應的端口。
但是最開始的時候mac表是空的,是怎么樣一點點維護起來的呢?
一開始的時候交換機就是一個集線器,不過它知道學習,把流經自己的數據包攜帶的信息記錄下來了,然后就學習到對應的mac映射表:
這基本就是現在常用的單交換機的形式,但是交換機的端口也不夠用了怎么辦呢?于是就有了多個交換機之間的通信。
這個時候一個端口對應的mac地址也就會變多了,所以要維護的mac地址表也就會逐漸增加,此時應該怎么辦呢?
那這時就又有了新的設備了,在交換機與交換機之間連接一個新的設備。沒錯,就是大家非常常見的路由器了。
它的功能就是作為一臺獨立的mac地址設備,將數據包作一次性轉發。路由器每個端口都是由獨立的mac地址。
左邊的端口6對應路由器的mac地址,那問題是端口6的數據怎么先發給路由器的呢(原本是要發給E,F,G,H這四個設備的)?
此時就引入了ip地址的概念了192.168.0.1。此時我們再來看完整的發布過程:
一包數據帶有對應的源mac,目標mac。源ip,目標ip等信息。
a與b通信時,直接可以通過交換機獲得信息,通過源mac和目標mac就可以傳遞。
a與c通信時,a需要先把數據發給路由器,然后再轉交給c。
a要給c,過程中先給到路由器,所以數據鏈路層的目標mac要是路由器的mac地址,網絡層的ip必須時a的ip到c的ip。
先看傳給路由器的時候,數據是:
由于數據先給路由器,此時的目標mac和目標ip對應如上所示。接下來路由器給到c的時候,有個神奇的過程,它會把目標mac自動變成目標ip對應的mac地址。
那么問題就來了,如果a給c發送數據,怎么知道需要路由器轉發數據呢?
這里就涉及到子網的概念,如果源ip與目標ip再同一個子網,直接將包通過交換機發出去。如果源ip與目標ip不在同一個子網,就會交給路由器去處理。是否在同一個子網又是通過掩碼去判斷的,也就是說192.68.0開頭的就是同一個子網,否則就不是同一個子網。
掩碼常用255.255.255.0,將原ip與掩碼進行與運算,相等就是同一個子網。計算結果如下:
第二個問題,a怎么知道哪個是路由器的呢?
有一個默認網關的概念,默認網關就是一個ip地址。當遇到不是在同一個子網的電腦時,先把包發給默認網關對應的ip地址,所以就會先給路由器的ip地址。
還有一個問題,數據包在發送時是需要mac地址和ip地址的,現在雖然有了ip的相關數據了,但是沒有mac地址。
此時是一個叫ARP協議的東西,這個機制會把ip與mac地址進行對應,同樣,需要先進行一次映射。這個協議是廣泛使用的,交換機和路由器都會要通過ARP協議維護一個ip與mac的映射表。
對于交換機來說,還有一個路由表,對應的是ip和端口,把目標ip范圍得到,查表得到端口。當然也是存在ARP協議的,將mac地址獲取到。
最后我們來完整看一下數據包的傳輸過程。
涉及到的三張表分別是mac地址表(交換機)-映射mac地址和端口,路由表-映射ip和端口,arp緩存表(電腦和路由器中都有)-映射ip和mac地址