網路概論(二)

img

前言

在上一篇網路概論(一)我們討論如何透過 MAC 位址來傳遞資料,這對於小型網路來說沒有太大的問題,但是對於擁有大量使用者的大型網路而言它是不足的,撇開硬體可行性限制,我們假設有一台超級交換器可以把全球的電腦都串接起來,而且它的 MAC Address Table 容量也足以記錄所有的 MAC 位址,使用上會發生什麼問題?只要有一台電腦變更連接埠(例如你帶電腦出差),相關的資料傳遞在 MAC Address Table 更新前就會以廣播(Broadcast)的方式處理,全球每分鐘都多少裝置在移動,這台交換器絕大多數的時間是在做廣播,我想就算大家都是使用光纖串接也頻寬也不夠用,更不用說大家的電腦每分每秒都在收垃圾資料。

我們知道 MAC 位址是跟著電腦,如果位置(連接埠)不變情況下,交換器確實可以做到點對點的傳送,但是一旦變更,交換器就會不知道資料的派送方式,這種位址是依靠被動的方式來得知顯然有些弊端,因此我們需要一種位址讓網路傳遞設備可以主動知道它的實際地址(連接埠),這樣就可以直接傳送,避免廣播佔用頻寬,所以我們今天來談論另一種位址-IP位址(Internet Protocol Address,簡稱:IP Address)。

IP位址 (IP Address)

什麼 IP 位址?我們以最普及的 IPv4 (IP 第4版本) 來說明,基本上它是由 32 位元組成的資料,為了方便人類識別,我們會分拆成 4 組數據(每組 8 個位元),並以十進制來表示,如下圖,我們一般看到的 IP 192.168.0.11 在電腦裡其實是以 11000000 10101000 00000000 00001011 方式儲存。

img

所以理論上我們可以使用的 IP 位址有 2 的 32 次方個,也救世會有超過 40 億組 IP 位址,但是它與 MAC 位址差別在於,MAC 位址在網路設備生產階段就就燒錄到韌體內,也就是事前就配置好了,而 IP 位址則是透過事後配置來對應,例如我們跟 ISP 業者(例如:中華電信)申請網路時,他們除了會拉一條實體線路之外同時還會配置一組以上的 IP 位址給我們,,而在 ISP 之上其實還有組織負責分配全球的 IP 位址,確保大家使用的 IP 位址不會重複。
img

子網路遮罩 (Subnet Mask)

如果所有 IP 位址都必須一個一個分配會十分沒有效率,所以我們需要將 IP 位址分割成多組,這樣分配效率會比姣好,但是一組要多少 IP 位址?太少似乎沒有效益,太多又容易造成沒有使用的閒置 IP 位址,最終產生了可以動態決定群組 IP 數量的子網路遮罩(Subnet Mask)這種分割方式。

我們常常看到子網路遮罩都是以 255 開頭、以 0 結束,這到底是甚麼意思?想要快速了解,其實只要把子網路遮罩由十進制轉換回二進制就可以理解,如下圖,我們以子網路遮罩 255.255.255.0 來說明,其實他就是指比較長度1表示要比較,0表示不需要比較,所以 255.255.255.0 表示比較 IP 位址的前 24 個位元(規格上比較位元需要連續,不可跳號),如果相同表示為同一群組,因此我們會需要 IP 位址來代表這個群組,為了避免混淆,所以我們將 IP 位址不比較的位元標示為 0,下圖範例的這組 IP 位址就是 192.168.0.0,最後 8 位元也代表十進制的最後一組數據,所以這組 IP 位址理論上可以由 192.168.0.0192.168.0.255,共 256 個 IP 位址,不過第一組 IP 位址(不比較的位元皆為 0)會拿來代表這個群組,而最後一組 IP 位址(不比較的位元皆為 1)會拿來代表這個 IP 位址群組的廣播(Broadcast)位址,因此會少掉 2組,最終可配置的設備的 IP 位址為 254 個。

img

我們也可以用 192.168.0.0/24 來表示群組網段,前面的 IP 位址(192.168.0.0) 表示比較基準,後面的子網路遮罩(24)表示比較長度,等同於 255.255.255.0

習慣上,子網路遮罩長度往往是使用 81624,這是因為我們為了檢視方便,將 IP 位址每 8 位元轉成一組十進位數字,所以使用 8 倍數來切割網段會比較容易了解,但是不代表只能是這幾個數字,如下圖,我們以 192.168.0.128/26 為例,他的子網路遮罩為 255.255.255.192,代表 IP 位址為 192.168.0.128,廣播位址為 192.168.0.191,可配置 IP 位址由 192.168.0.129192.168.0.190,整個就是無法很直觀的了解。
img

由此可以知道子網路遮罩比對長度越短,表示該網段群組內可以使用的 IP 位址越多,我們從維基百科:已分配的 /8 IPv4位址網段列表可以看到,利用 /8 的子網路遮罩分配給區域網際網路註冊機構(RIR),此外,從維基百科:保留IP位址也可以看到有一些 IP 位址是不可以在網際網路上使用的,因為不是所有的網路需求都需要連線到整個網際網路,他們可以僅需要內部幾台電腦可以互相同訊即可,因此我們不需要像任何組織申請,就可以自行使用這些 IP 位址,我們只需要確保在自己的網路環境內每台電腦 IP 位址不會重複即可。

img

閘道器 (Gateway)

說完 IP 位址與子網路遮罩,接下來就要談論到閘道器(Gateway),這是一個有點可悲的裝置,筆者沒有機會實際見過這種裝置,因為它的功能跟路由器(Router)太相似了,甚至會被認為這是路由器上的一種功能,那閘道器到底是做什麼用的?我們連到維基百科閘道器去看,他是一個轉送網路資料的裝置,聽起來似懂非懂,交換器也是再轉送資料阿,為什麼要有它的存在?再來,我們在 Windows 系統上透過指令 ipconfig 來查看網路設定,如下圖,我們可以看到上面也有一個預設閘道,感覺起來似乎也是很重要。
img

我們現在知道在傳送網路資料時,除了會有目的端與來源端的 MAC 位址之外,還會有目的端與來源端的 IP 位址,但是我們電腦連接的網路線另一邊幾乎都是交換器,交換器只認 MAC 位址,IP 位址對它來說只是傳遞資料的一部分,這樣 IP 位址不就沒有意義了嗎?
img

位址解析協定 (Address Resolution Protocol)

所以我們需要一個可以由 IP 位址解析 MAC 位址的功能-位址解析協定(Address Resolution Protocol,簡稱:ARP),當然還需要一個可以儲存結果的表格(ARP Table,或者稱 ARP Cache)來儲存對應關係 IP 位址與 MAC 位址,我們可以透過指令 arp /a 來查看作業系統上目前已經儲存的資料。
img

從上面這張表應該也可以了解到子網路遮罩內最後一組 IP 位址(大部分是 255 結尾)是怎麼廣播(Broadcast)的,這組 IP 位址的 MAC 位址就是被設為 FF:FF:FF:FF:FF:FF 這組不存在的位址,交換器收到時就會採取廣播方式派送資料。

我們現在如果去 ping 一台不存在 ARP Table 內的主機(192.168.10.20),然後再重新查詢就可以發現它會自動寫入到表格內。
img
所以比起交換器的 MAC Address Table 是被動式的蒐集資料,我們可以利用 IP 位址主動查詢 MAC 位址,但是,我們又是如何查詢的?
我們在 ping 的同時開啟 Wireshark 來監控網路封包,如下圖,可以看到我們本機電腦(192.168.10.100)會發出一個目的端的 IP 位址為 192.168.10.20、MAC 位址為 FF:FF:FF:FF:FF:FF 的 ARP 封包,也因為這個 MAC 位址所以交換器會以廣播方式發送,緊接著我們會收到來自 192.168.10.20 主機內含 MAC 位址的 ARP 封包,這樣我們就可以知道對方的 MAC 位址,簡單的說就是如果不知道 IP 位址所對應的 MAC 位址那就”到處問”。

img

因為會透過廣播方式發送 ARP 封包來詢問,所以會友安全性顧慮,因為交換器網路內的電腦都可以收到這個訊息,當然也可以發送假 MAC 位址的 ARP 封包來誘騙。

路由表 (Routing Table)

知道了如何建立 IP 位址與 MAC 位址的關聯,接下來就要說 IP 位址如何決定網路封包的傳送方式,如下圖,我們執行 route print 命令,可以看到畫面先輸出我們電腦的所有網路傳輸的介面卡,它們對應著 MAC 位址,接著會列出一張路由表(Routing Table),這張表主要是用來決定網路傳輸方式。
網路目的地網路遮罩,主要用來篩選傳送的目的端的 IP 位址是否位於該子網路遮罩的範圍內,如果符合就以此條件傳送,傳送方式則是看介面欄位,雖然是以 IP 位址呈現,但是它其實代表著上方其中一張介面卡,也就是它除了決定網路封包要從哪一張介面卡輸出之外,同時也決定了來源端的 IP 位址與 MAC 位址。
img

從介面清單可以看到一個沒有 MAC 位址的介面卡 Software Loopback Interface 1,其實它是一張軟體虛擬的迴環網路卡(Loopback Adaptor),對應的 IP 位址為 127.0.0.1,迴環的概念我們可想像成這張網路卡插上一個如下圖的網路頭,這個網路頭的傳遞端(Tx)線路會直接連結到自己的接收端(Rx)線路,所以由這張網路卡輸出什麼資料就同樣可以收到什麼資料。
img
再看看路油表內有一個目的端 IP 位址為 127.0.0.1 的規則,可以看到它同時也是透過 127.0.0.1 介面輸出,這也是為什麼我們可以使用 ping 127.0.0.1 來測試本機電腦的網路(TCP/IP)傳輸與接收是否正常。
img

如果有注意到 120.0.0.0 的規則就可以發現它的子網路遮罩為 255.0.0.0,這表示它只比對前 8 位元,也就是只要是 127 開頭的 IP 位址都可以拿來測試。
img

接下來我們再看看路由表上的閘道欄位,可以發現大部份都是在連結上(On-link),簡單的說就是這些網段(子網路遮罩的範圍內的 IP 位址)我們都有辦法取得 MAC 位址,也就是說他們都是在交換器範圍內可以連結到的電腦,這也是一般說的內部網路(Intranet,或稱區域網路)。
那如果要連結到內部網路之外呢?你可想像將2個獨立的內部網路串接起來有多少狀況要考慮嗎?為了避免互相干預(例如:IP 位址衝突),所以我們中間就多了一個轉送裝置-閘道器(Getway),說是轉送,其實對交換器來說它就是一台電腦,就跟一般資料傳輸一樣,閘道器收到資料後要如何處理,完全不必理會。
最後我們看看路由表上的第一筆資料,它的網路遮罩為 0.0.0.0,這表示 IP 位址比對長度為 0,也就是不比對,任何 IP 位址都會符合這個條件,因為不比對,所以網路目的地的 IP 位址也用 0.0.0.0 代表,再來這邊閘道欄位就有一組 IP 位址,這表示當符合這個條件時,將資料發送到這台閘道器主機,這組條件我們就稱為預設閘道,也就是當其他路由條件都不符合時就採用此條件處理(雖然它是放在第一筆,但是我們可以想像成它是最後一個篩選條件),就交換器的角度而言,就是資料傳遞目的的電腦不再交換器內時就把資料丟給閘道器主機。

所以有時候我們會關閉 VPN 連線的使用遠端網路的預設閘道來加速網路速度,這樣可以避免所有連線都要經過 VPN Server,但是網路的安全性就會降低,因為對外連線(VPN 內網之外)會無法控管。
img

因為閘道器也是在交換器的環境內,所以我們會再資料發送前將目的端的 MAC 位址換成閘道器的 MAC 位址再傳送,這樣就可以將資料改送到閘道器。
img

後記

如果說一個 MAC 位址代表一個固定的資訊設備,那一個 IP 位址就代表一個網路上的固定的位置,同時也表示一種已知傳遞路徑,除了利用路油表來決定路徑之外,其實真正傳遞資料時依然
是以 MAC 位址為主要識別方式。

過去閘道器設備沒有機會出現在一般市場,有些公司或是學校會拿一台伺服器配多張網路卡來處理網路封包轉送,沒錯,這確實就算是閘道器主機,但是,隨著物聯網的興起,又出現一種物聯網閘道器(IoT Gateway),看起來就跟一台小電腦(Mini PC)一樣只它有很多輸入介面,網路孔、USB、COM Port、Wi-Fi、Bluetooth…等等,當你了解閘道是在做什麼的時候,你就會發現,它真的就是一台電腦,有些廠商是賣乾淨的空主機,有些廠商則是會開發一些軟體幫你處理資料轉送的工作,物聯網閘道器與以往的閘道器最大差別就是提供更多的傳輸協定的轉換。

我們可以說以前的閘道器是 IP Gateway,因為它專注在網路,站在閘道的定義上,物聯網(Internet of Things,簡稱IoT)重點也是在”網”,但是不代表物聯網閘道器只能透過網路輸出,有些可以透過 USB 或是 COM Port 連接到其他電腦彙整資料。