# 網路是如何誕生的? 網路的本質,就是讓不同的電腦能夠**互相溝通**。 本篇文章從最簡單的兩台電腦開始,一步步了解網路是如何被設計出來的 ## 🖥️ 兩台電腦如何互相溝通? > 💡 假設有兩個電腦 (A、B),要如何讓他們互相溝通? ✅ 解法:最簡單的做法是用一條**網路線** (Ethernet Cable) 直接連接 A 與 B。 ```mermaid flowchart LR cA([Computer A]) cB([Computer B]) cA --- cB ``` 在這種情況下,A 只要將資料放入網路線中,就能傳給 B,不需要額外的識別資訊。 ``` # 傳遞的訊息,稱為 Packet (封包) [ Packet ] └── data ``` ## 🖥️ 多個電腦如何互相溝通? > 💡 假設有十個左右的電腦,要如何讓他們互相溝通? 若仍讓每兩台電腦直接連線,線路會變得非常複雜、難以管理與擴充。 ```mermaid flowchart TB cA([Computer A]) cB([Computer B]) cC([Computer C]) cD([Computer D]) cA & cB --- cC & cD ``` ✅ 解法:使用 Switch (交換器)。 Switch 是一個集中管理的中樞,所有電腦只要各自連到 Switch,就能透過它互相傳遞資料 ```mermaid flowchart TB s([Switch]) cA([Computer A]) cB([Computer B]) cC([Computer C]) cD([Computer D]) s ---|port 0| cA s ---|port 1| cB s ---|port 2| cC s ---|port 3| cD ``` ### 💡 為了讓 Switch 能正確轉傳 Packet,需要解決兩個問題: 1. **如何識別每台電腦** 每張網卡(NIC)都有一個獨一無二的 MAC 位址。Switch 就是依靠 MAC 位址來辨識每台電腦。 2. **Switch 要如何知道電腦接在哪個埠 (Port)?** Switch 會建立一張 CAM 表(Content Addressable Memory Table),用來記錄「MAC 位址」對應的「實體埠號」。 當 Packet 進入 Switch 時,它會學習來源 MAC,更新表格,再依據目標 MAC 查表,轉送到正確的埠。 ### 📦 假設:電腦 A 要傳資料給電腦 D 在 Packet 中,電腦 A 會加入以下資訊: 1. 自己的 MAC 位址(Source MAC) 2. 電腦 D 的 MAC 位址(Destination MAC) ``` [ Packet ] ├── Dst MAC: 66:77:88:99:AA:BB ├── Src MAC: 00:11:22:33:44:55 └── Payload: [ Bits / Data ] ``` ```mermaid sequenceDiagram participant A as Computer A participant S as Switch participant D as Computer D A->>S: 傳送 Packet <br/>(包含 D 的 MAC 位址) S->>S: 根據 CAM 表,找到<br/>目標 MAC 所在的 Port<br/>(Port 3) S->>D: 經由 Port 3 將 Packet 送到電腦 D ``` ## 🖥️ 更多電腦又該如何溝通? > 💡 問題:如果有上百台電腦分散在不同區域,該怎麼辦? 若只是將多個 Switch 串接在一起,網路依然會變得複雜。 ✅ 解法:加入 Router(路由器)。 Router 是連接不同子網的設備,並決定 Packet 要往哪裡送。 ```mermaid flowchart TB r([Router]) r --- sA r --- sB subgraph subsetB sB([Switch B]) cE([E]) cF([F]) cG([G]) cH([H]) sB ---|port 0| cE sB ---|port 1| cF sB ---|port 2| cG sB ---|port 3| cH end subgraph subsetA direction TB sA([Switch A]) cA([A]) cB([B]) cC([C]) cD([D]) sA ---|port 0| cA sA ---|port 1| cB sA ---|port 2| cC sA ---|port 3| cD end ``` ### 💡 為了讓 Router 和 Switch 能幫忙轉傳 Packet,需要解決三個問題: 1. 如何判斷目標電腦是否在同一個 Switch? 使用 IP 位址。 相同子網的電腦(例如 192.168.1.x)可以直接透過 Switch 溝通。若目標 IP 屬於不同子網(例如 192.168.2.x), Packet 就會被送到 Router 進行跨網段轉送。 2. Router 如何決定 Packet 要送到哪個 Switch? 依靠 Router Table (路由表) 來決定 Packet 要往哪裡送。在 Router Table 中,每一條紀錄都會包含以下資訊: | 目的子網(Destination Network) | 下一跳(更上層的 Router)或 直接連線(Switch) | 出口介面(Outgoing Interface) | | ------------------------------- | --------------------------------------------------- | ------------------------------ | | 192.168.1.0/24 | Directly Connected | eth0 | | 192.168.2.0/24 | Directly Connected | eth1 | | 0.0.0.0/0(預設路由) | 192.168.1.1 | eth0 | 3. 電腦只知道目標 IP,那 MAC 位址怎麼辦? 透過 ARP (Address Resolution Protocol,位址解析協定)。 Router 或電腦會廣播一個 ARP Request: ``` 誰是 192.168.1.20?請回覆你的 MAC 位址。 ``` 同子網的設備會收到這個請求,對應的設備會回覆自己的 MAC。 之後系統會在 ARP Table 中暫存對應關係(IP ↔ MAC)。 ### 📦 假設:電腦 A 要傳資料給電腦 E 一開始電腦A 只知道以下的資訊 1. 自己的 IP 位址 2. 自己的 MAC 位址 3. 電腦 E 的 IP 位址 ``` [ Ethernet Frame ] ├── Dst MAC: ? ├── Src MAC: A_MAC └── [ IP Packet ] ├── Src IP: 192.168.1.10 ├── Dst IP: 192.168.2.10 └── Payload: [ Data ] ``` ```mermaid sequenceDiagram participant A as Computer A participant SA as Switch A participant R as Router participant SB as Switch B participant E as Computer E A->>A: 使用 ARP 查詢 Router 的 MAC 位址 A->>SA: 傳送 Packet <br/>(Dst MAC = Router) SA->>R: Switch 依 CAM 表<br/>將 Packet 轉送給 Router R->>R: Router 查 Routing Table<br/>目的網段為 192.168.2.0/24 → eth1 R->>R: 透過 ARP 查詢<br/>E 的 MAC 位址 R->>SB: 傳送 Packet <br/>(Dst MAC = E 的 MAC) SB->>E: Switch 查 CAM 表,<br/>轉送 Packet 給 E ``` ## 🎬 結論 * Switch 根據 MAC 位址 在同一個子網內傳遞 Packet。 * Router 根據 IP 位址 在不同子網之間轉遞 Packet。 * ARP 負責在 IP 與 MAC 之間建立橋樑。 ## 🔗 參考 [大白话半小时理解网络!](https://www.bilibili.com/video/BV1tseyzCEoF?spm_id_from=333.788.player.switch)