網路基礎與分層模型#
網路協定是電腦之間溝通的「語言」。就像人類需要共同的語言才能交流,電腦需要共同的協定才能傳輸資料。
為什麼需要網路協定#
一段程式碼能讓一台電腦運作,但要讓一大片機器協同運作,就需要網路協定。網路協定使得全球數十億設備能夠互聯互通,建置起互聯網世界。
協定三要素#
任何協定都包含三個基本要素:
| 要素 | 說明 | 範例 (HTTP) |
|---|---|---|
| 語法 | 資料格式和結構規範 | 狀態行、首部、正文的固定格式 |
| 語義 | 內容的含義約定 | 200 表示成功,404 表示找不到 |
| 順序 | 操作的先後次序 | 先發請求,後收回應 |
網路分層模型#
複雜的系統都需要分層,網路也不例外。分層讓每一層專注於自己的職責,降低複雜度。
TCP/IP 四層模型#
實際工作中最常用的是 TCP/IP 四層模型:
flowchart TB
A["應用層 Application\nHTTP, DNS, FTP, SSH"]
B["傳輸層 Transport\nTCP, UDP"]
C["網路層 Network\nIP, ICMP, 路由協定"]
D["網路接口層 Network Interface\nMAC, ARP, 乙太網路"]
A --> B --> C --> D
style A fill:#4a90d9,stroke:#2a6cb0,color:#fff
style B fill:#50b86c,stroke:#339952,color:#fff
style C fill:#e8a838,stroke:#c4882a,color:#fff
style D fill:#d95050,stroke:#b03030,color:#fff層層封裝的核心概念#
網路上傳輸的包都是完整的。可以有下層沒上層,絕對不可能有上層沒下層。
資料在發送時,從上往下逐層添加頭部(封裝);接收時,從下往上逐層剝離頭部(解封裝):
flowchart LR
subgraph 發送方 - 封裝
direction TB
S1["HTTP 資料"]
S2["TCP 頭 + 資料"]
S3["IP 頭 + TCP 頭 + 資料"]
S4["MAC 頭 + IP 頭 + TCP 頭 + 資料"]
S1 -->|"加入 TCP 頭"| S2 -->|"加入 IP 頭"| S3 -->|"加入 MAC 頭"| S4
end
S4 -- "網路傳輸" --> R4
subgraph 接收方 - 解封裝
direction BT
R4["MAC 頭 + IP 頭 + TCP 頭 + 資料"]
R3["IP 頭 + TCP 頭 + 資料"]
R2["TCP 頭 + 資料"]
R1["HTTP 資料"]
R4 -->|"剝離 MAC 頭"| R3 -->|"剝離 IP 頭"| R2 -->|"剝離 TCP 頭"| R1
end
style S1 fill:#4a90d9,stroke:#2a6cb0,color:#fff
style S2 fill:#50b86c,stroke:#339952,color:#fff
style S3 fill:#e8a838,stroke:#c4882a,color:#fff
style S4 fill:#d95050,stroke:#b03030,color:#fff
style R1 fill:#4a90d9,stroke:#2a6cb0,color:#fff
style R2 fill:#50b86c,stroke:#339952,color:#fff
style R3 fill:#e8a838,stroke:#c4882a,color:#fff
style R4 fill:#d95050,stroke:#b03030,color:#fffTCP 三次握手時,IP 層和 MAC 層在做什麼?答案是:每發一個 TCP 包,IP 層和 MAC 層都要完整運作一遍。沒有 MAC 和 IP 頭,包根本發不出去。
二層設備與三層設備#
所謂「幾層設備」,是指該設備處理到哪一層:
- 二層設備(交換機):只看 MAC 頭,決定轉發、丟棄或自己處理
- 三層設備(路由器):剝掉 MAC 頭後,再看 IP 頭做決策
無論經過幾層設備,網路包本身始終是完整的(包含所有層的頭部)。
IP 位址基礎#
查看 IP 位址#
# Linux
ip addr # 推薦,iproute2 工具包
ifconfig # 傳統方式,net-tools 工具包
# Windows
ipconfigip addr 輸出範例
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP
link/ether fa:16:3e:c7:79:75 brd ff:ff:ff:ff:ff:ff
inet 10.100.122.2/24 brd 10.100.122.255 scope global eth0| 欄位 | 說明 |
|---|---|
eth0 | 網卡名稱 |
link/ether | MAC 位址 |
inet | IPv4 位址 |
/24 | CIDR 表示法,表示前 24 位是網路號 |
brd | 廣播位址 |
mtu 1500 | 最大傳輸單元(乙太網路預設值) |
CIDR 表示法#
傳統的 A/B/C 類位址劃分已經過時,現在普遍使用 CIDR(無類型域間選路):
10.100.122.2/24
│ │
│ └── 前 24 位是網路號,後 8 位是主機號
└── IP 位址計算方式:
| 項目 | 計算方法 | 範例 (10.100.122.2/24) |
|---|---|---|
| 網路號 | IP AND 子網掩碼 | 10.100.122.0 |
| 子網掩碼 | 前 N 位全 1,後面全 0 | 255.255.255.0 |
| 廣播位址 | 網路號 + 主機位全 1 | 10.100.122.255 |
| 可用主機數 | 2^(32-N) - 2 | 254 |
/24對應子網掩碼255.255.255.0,最多 254 台主機;/16對應255.255.0.0,最多約 65534 台主機。
公有 IP 與私有 IP#
| 類型 | 範圍 | 用途 |
|---|---|---|
| 私有 IP | 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 | 內網使用,可重複 |
| 公有 IP | 除私有 IP 外的位址 | 互聯網使用,全球唯一 |
私有 IP 就像社區內的門牌號,不同社區可以重複;公有 IP 就像國家統一分配的街道位址,不能重複。
IP 位址 vs MAC 位址#
MAC 位址是網卡的物理位址(6 個位元組,十六進制表示,如 fa:16:3e:c7:79:75)。這裡只做與 IP 位址的對照,完整的 MAC 層機制(多路存取、ARP、交換機學習)見「資料鏈結層」一章。
| 特性 | IP 位址 | MAC 位址 |
|---|---|---|
| 類比 | 門牌號碼 | 身份證號碼 |
| 功能 | 定位,指明目的地 | 標示,區分不同網卡 |
| 範圍 | 跨網路有效 | 僅在本地網路有效 |
| 是否可變 | 可設定 | 出廠固定(可軟體修改) |
IP 位址用於跨網路的路由定位,就像快遞收件地址;MAC 位址用於本地網路內的設備識別,就像收件人姓名。到了目標網路後,透過 MAC 位址找到具體的機器。
一個完整的網路請求過程#
以訪問電商網站為例,串聯所有協定:
| 步驟 | 層級 | 說明 |
|---|---|---|
| 1 | DNS 解析 | 將域名轉換為 IP 位址 |
| 2 | 應用層 | 瀏覽器建置 HTTP/HTTPS 請求 |
| 3 | 傳輸層 | TCP 封裝,加入來源/目標埠號 |
| 4 | 網路層 | IP 封裝,加入來源/目標 IP 位址 |
| 5 | 網路介面層 | ARP 取得網關 MAC 位址,封裝成乙太網路幀 |
| 6 | 物理傳輸 | 透過網關、路由器層層轉發 |
| 7 | 目標伺服器 | 逐層解封裝,處理請求,回傳回應 |
本章小結#
| 概念 | 關鍵點 |
|---|---|
| 協定三要素 | 語法、語義、順序 |
| 分層模型 | TCP/IP 四層,每層各司其職 |
| 核心原則 | 網路包必須完整,有上層必有下層 |
| IP 位址 | 用於跨網路定位,CIDR 表示網路劃分 |
| MAC 位址 | 用於本地網路識別,範圍有限 |