06-2. DHCP 動態 IP 分配
深入理解 DHCP 如何自動分配 IP 位址
目錄
🌐 DHCP 動態 IP 分配
⏱️ 閱讀時間: 10 分鐘 🎯 難度: ⭐⭐ (中等)
🎯 本篇重點
理解 DHCP 的基本概念、DORA 四步驟流程、租約管理機制、以及如何在實際環境中運作。
🤔 什麼是 DHCP?
DHCP (Dynamic Host Configuration Protocol) = 動態主機設定協定
一句話解釋: DHCP 就像是網路世界的「自動編號機」,當你的裝置連上網路時,它會自動分配一個可用的 IP 位址給你,不用手動設定。
比喻:飯店入住登記
沒有 DHCP(手動設定):
- 你:我要住 Room 301
- 櫃台:抱歉,301 已有人住了
- 你:那 302 呢?
- 櫃台:302 也有人了
- 你:303?
- 櫃台:303 可以!
→ 很麻煩,還可能衝突
有 DHCP(自動分配):
- 你:我要入住
- 櫃台:(自動查詢)給你 305 房
- 你:好的!
→ 簡單、快速、不會衝突🏗️ DHCP 在網路模型中的位置
OSI 7 層模型
┌──────────────────────────────┬─────────────────┐
│ 7. Application Layer (應用層) │ DHCP │ ← DHCP 在這裡
├──────────────────────────────┼─────────────────┤
│ 6. Presentation Layer (表示層)│ 加密、壓縮 │
├──────────────────────────────┼─────────────────┤
│ 5. Session Layer (會話層) │ 建立、維護會話 │
├──────────────────────────────┼─────────────────┤
│ 4. Transport Layer (傳輸層) │ UDP │
├──────────────────────────────┼─────────────────┤
│ 3. Network Layer (網路層) │ IP │
├──────────────────────────────┼─────────────────┤
│ 2. Data Link Layer (資料鏈結層)│ Ethernet │
├──────────────────────────────┼─────────────────┤
│ 1. Physical Layer (實體層) │ 網路線、光纖 │
└──────────────────────────────┴─────────────────┘DHCP 位於第 7 層(應用層)
- DHCP 是應用層協定
- 提供自動 IP 分配服務
- 簡化網路設定流程
TCP/IP 4 層模型
┌─────────────────────────────┬─────────────────┐
│ 4. Application Layer (應用層) │ DHCP │ ← DHCP 在這裡
├─────────────────────────────┼─────────────────┤
│ 3. Transport Layer (傳輸層) │ UDP │
├─────────────────────────────┼─────────────────┤
│ 2. Internet Layer (網際網路層)│ IP │
├─────────────────────────────┼─────────────────┤
│ 1. Network Access (網路存取層)│ Ethernet │
└─────────────────────────────┴─────────────────┘DHCP 位於第 4 層(應用層)
- 在 TCP/IP 模型中,DHCP 是應用層協定
- 使用 UDP(Port 67/68)
- UDP 提供快速、無連線的傳輸
對比表:
| 協定 | OSI 層級 | TCP/IP 層級 | 傳輸層協定 | Port | 用途 |
|---|---|---|---|---|---|
| DNS | Layer 7 | Layer 4 | UDP (主要), TCP | 53 | 域名解析 |
| DHCP | Layer 7 | Layer 4 | UDP | 67/68 | 動態 IP 分配 |
| NTP | Layer 7 | Layer 4 | UDP | 123 | 時間同步 |
重點:
- DHCP 是應用層協定(兩種模型都是)
- 使用 UDP(無連線、快速)
- Server Port: 67
- Client Port: 68
- 廣播訊息(Broadcast)用於發現 DHCP Server
DHCP 使用 UDP 的原因:
為什麼 DHCP 用 UDP?
1. 客戶端沒有 IP 🚫
新裝置還沒有 IP 位址
無法建立 TCP 連線(需要 IP)
→ 只能用 UDP
2. 廣播需求 📢
DHCP Discover 需要廣播
UDP 支援廣播(255.255.255.255)
TCP 不支援廣播
3. 簡單快速 ⚡
DHCP 是簡單的請求/回應
不需要 TCP 的可靠性保證
Client 可以自己處理重試
4. 無狀態 🔄
DHCP 每次交易是獨立的
不需要維護連線狀態🔍 為什麼需要 DHCP?
手動設定 IP 的問題
場景:公司有 100 台電腦
手動設定 IP:
1. IT 管理員需要:
- 記錄每台電腦的 IP(Excel 表格)
- 確保 IP 不重複
- 設定網路遮罩、閘道、DNS
2. 新電腦加入:
- 查詢哪些 IP 已使用
- 手動分配未使用的 IP
- 更新 Excel 表格
3. 電腦移除:
- 手動從表格刪除
- IP 可能忘記回收
問題:
❌ 工作量大(100 台就很累)
❌ 容易出錯(IP 衝突)
❌ 難以管理(表格混亂)
❌ 浪費時間(每次都要手動)DHCP 自動分配
場景:同樣 100 台電腦
使用 DHCP:
1. 設定 DHCP Server 一次:
- IP 範圍:192.168.1.100 - 192.168.1.200
- 網路遮罩:255.255.255.0
- 閘道:192.168.1.1
- DNS:8.8.8.8
2. 新電腦加入:
- 自動取得 IP(不用管理員介入)
- 自動設定閘道、DNS
- 自動避免 IP 衝突
3. 電腦移除:
- IP 自動回收(租約到期)
- 可分配給其他裝置
優點:
✅ 零工作量(自動化)
✅ 不會衝突(DHCP 管理)
✅ 易於管理(集中設定)
✅ 節省時間(即插即用)📡 DHCP 工作原理:DORA 流程 ⭐⭐⭐
DORA = Discover → Offer → Request → Acknowledgment
完整流程圖
Client (沒有 IP) DHCP Server (192.168.1.1)
│ │
├──── 1. DHCP Discover (廣播) ───────>│
│ 「有 DHCP Server 嗎?我需要 IP」 │
│ Src: 0.0.0.0:68 │
│ Dst: 255.255.255.255:67 │
│ │
│<──── 2. DHCP Offer ─────────────────┤
│ 「我是 Server,給你 192.168.1.100」│
│ Src: 192.168.1.1:67 │
│ Dst: 255.255.255.255:68 │
│ │
├──── 3. DHCP Request (廣播) ────────>│
│ 「我要 192.168.1.100,確認嗎?」 │
│ Src: 0.0.0.0:68 │
│ Dst: 255.255.255.255:67 │
│ │
│<──── 4. DHCP ACK ───────────────────┤
│ 「確認!你可以用 192.168.1.100」 │
│ Src: 192.168.1.1:67 │
│ Dst: 255.255.255.255:68 │
│ │
├─ 使用 192.168.1.100 │
│ (租約:24 小時) │步驟 1:DHCP Discover(發現)
Client 廣播:「有 DHCP Server 嗎?」
封包內容:
- Source IP: 0.0.0.0 (Client 還沒有 IP)
- Destination IP: 255.255.255.255 (廣播)
- Source Port: 68 (DHCP Client)
- Destination Port: 67 (DHCP Server)
- MAC Address: Client 的 MAC
訊息內容:
"我是新裝置,我的 MAC 是 AA:BB:CC:DD:EE:FF
請給我一個 IP 位址!"
為什麼用廣播?
→ Client 還不知道 DHCP Server 在哪裡
→ 用廣播讓網路上所有裝置都收到
→ DHCP Server 收到後會回應步驟 2:DHCP Offer(提供)
Server 回應:「我可以給你這個 IP!」
封包內容:
- Source IP: 192.168.1.1 (DHCP Server)
- Destination IP: 255.255.255.255 (廣播,因為 Client 還沒 IP)
- Your IP Address: 192.168.1.100 (提供的 IP)
訊息內容:
"我是 DHCP Server (192.168.1.1)
我提供給你:
- IP: 192.168.1.100
- Subnet Mask: 255.255.255.0
- Gateway: 192.168.1.1
- DNS: 8.8.8.8, 8.8.4.4
- Lease Time: 86400 秒(24 小時)"
為什麼還用廣播?
→ Client 還沒有 IP,無法用單播
→ 但 Client 可透過 MAC Address 識別這是給它的
注意:
如果有多個 DHCP Server,Client 會收到多個 Offer
→ Client 通常選擇第一個收到的步驟 3:DHCP Request(請求)
Client 廣播:「我要這個 IP,確認嗎?」
封包內容:
- Source IP: 0.0.0.0 (還沒正式分配)
- Destination IP: 255.255.255.255 (廣播)
- Requested IP: 192.168.1.100 (我要這個 IP)
- Server ID: 192.168.1.1 (我選擇這個 Server)
訊息內容:
"我選擇 192.168.1.1 Server 提供的 192.168.1.100
請確認分配給我!"
為什麼又用廣播?
1. 告訴選中的 Server:「我要你的 Offer」
2. 告訴其他 Server:「我不要你們的 Offer,請回收」步驟 4:DHCP Acknowledgment(確認)
Server 確認:「確認!你可以用這個 IP!」
封包內容:
- Source IP: 192.168.1.1 (DHCP Server)
- Destination IP: 255.255.255.255 (廣播)
- Your IP: 192.168.1.100 (確認的 IP)
訊息內容:
"確認!你可以使用 192.168.1.100
租約時間:86400 秒(24 小時)
T1 (Renewal Time): 43200 秒(12 小時)
T2 (Rebinding Time): 75600 秒(21 小時)"
Client 收到後:
✅ 設定 IP: 192.168.1.100
✅ 設定 Subnet Mask: 255.255.255.0
✅ 設定 Gateway: 192.168.1.1
✅ 設定 DNS: 8.8.8.8, 8.8.4.4
✅ 啟動租約計時器⏱️ DHCP 租約管理(Lease Management)
租約生命週期
時間軸:(假設租約 24 小時)
0h ─────────── 12h ────────── 21h ────────── 24h
│ │ │ │
取得 IP T1 T2 租約到期
(Renewal) (Rebinding) (Expire)
50% 87.5% 100%
📍 0h - 取得 IP
Client 成功取得 IP,開始計時
📍 12h - T1 Renewal (續約)
Client 單播詢問原 Server:
「我要續約!」
成功 → 重置租約時間(再延長 24h)
失敗 → 繼續使用,等待 T2
📍 21h - T2 Rebinding (重新綁定)
Client 廣播詢問任何 Server:
「誰能給我續約?」
成功 → 重置租約(可能是不同 Server)
失敗 → 繼續使用到 24h
📍 24h - 租約到期
IP 被釋放,Client 失去網路連線
→ 重新執行 DORA 流程租約續約範例
# 租約時間:86400 秒(24 小時)
# T1 = 50% = 43200 秒(12 小時)
T1 = 43200
# T2 = 87.5% = 75600 秒(21 小時)
T2 = 75600
# 時間軸
時間 動作 狀態
0h 取得 IP (192.168.1.100) ✅ 正常使用
12h 向原 Server 續約 ✅ 成功 → 延長 24h
(單播 DHCP Request)
→ 租約重置為 24h
如果 T1 續約失敗:
12h 向原 Server 續約 ❌ 失敗
21h 廣播尋找任何 Server ✅ 成功 → 延長 24h
(廣播 DHCP Request)
如果 T2 也失敗:
24h 租約到期 ❌ 失去 IP
→ 重新執行 DORA提前釋放 IP
# Windows:釋放 IP
ipconfig /release
# Windows:重新取得 IP
ipconfig /renew
# Linux:釋放 IP
sudo dhclient -r
# Linux:重新取得 IP
sudo dhclient
# 手動釋放流程:
Client → Server: DHCP Release
「我不要這個 IP 了,請回收」
Server 回收 IP → 可分配給其他裝置🛠️ DHCP Server 設定
基本設定檔(Linux - ISC DHCP Server)
# /etc/dhcp/dhcpd.conf
# 全域設定
default-lease-time 86400; # 預設租約:24 小時
max-lease-time 172800; # 最大租約:48 小時
# DNS 伺服器
option domain-name-servers 8.8.8.8, 8.8.4.4;
# 網域名稱
option domain-name "example.com";
# 子網路設定
subnet 192.168.1.0 netmask 255.255.255.0 {
# IP 分配範圍
range 192.168.1.100 192.168.1.200;
# 預設閘道
option routers 192.168.1.1;
# 廣播位址
option broadcast-address 192.168.1.255;
}
# 靜態 IP 保留(根據 MAC)
host printer {
hardware ethernet AA:BB:CC:DD:EE:FF;
fixed-address 192.168.1.50;
}DHCP Server 啟動
# Ubuntu/Debian
sudo apt install isc-dhcp-server
sudo systemctl start isc-dhcp-server
sudo systemctl enable isc-dhcp-server
# 查看狀態
sudo systemctl status isc-dhcp-server
# 查看租約記錄
cat /var/lib/dhcp/dhcpd.leases
# 租約記錄範例:
lease 192.168.1.100 {
starts 2 2025/01/15 10:00:00;
ends 2 2025/01/16 10:00:00;
cltt 2 2025/01/15 10:00:00;
binding state active;
next binding state free;
hardware ethernet 11:22:33:44:55:66;
client-hostname "my-laptop";
}🔧 DHCP 客戶端
Windows 檢視 DHCP 資訊
# 查看 IP 設定
ipconfig /all
輸出:
Ethernet adapter 本地連線:
DHCP Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
IPv4 Address. . . . . . . . . . . : 192.168.1.100
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.1.1
DHCP Server . . . . . . . . . . . : 192.168.1.1
DNS Servers . . . . . . . . . . . : 8.8.8.8
8.8.4.4
Lease Obtained. . . . . . . . . . : 2025/01/15 10:00:00
Lease Expires . . . . . . . . . . : 2025/01/16 10:00:00
# 釋放 IP
ipconfig /release
# 重新取得 IP
ipconfig /renewLinux 檢視 DHCP 資訊
# 查看 IP
ip addr show
# 使用 dhclient
sudo dhclient -v eth0
輸出:
Internet Systems Consortium DHCP Client 4.4.1
Listening on LPF/eth0/11:22:33:44:55:66
Sending on LPF/eth0/11:22:33:44:55:66
DHCPDISCOVER on eth0 to 255.255.255.255 port 67
DHCPOFFER of 192.168.1.100 from 192.168.1.1
DHCPREQUEST for 192.168.1.100 on eth0 to 255.255.255.255 port 67
DHCPACK of 192.168.1.100 from 192.168.1.1
bound to 192.168.1.100 -- renewal in 43200 seconds.
# 查看租約檔案
cat /var/lib/dhcp/dhclient.leases🌐 DHCP Relay(中繼)
為什麼需要 DHCP Relay?
問題:DHCP Discover 是廣播
場景:
┌──────────────┐
│ VLAN 10 │ 192.168.10.0/24
│ (50 台電腦) │
└──────────────┘
│
│ Router (不轉發廣播)
│
┌──────────────┐
│ VLAN 20 │ 192.168.20.0/24
│ DHCP Server │ 192.168.20.1
└──────────────┘
問題:
VLAN 10 的廣播無法跨越 Router 到達 VLAN 20
→ VLAN 10 的 Client 收不到 DHCP
解決方案:DHCP Relay
Router 作為中繼,將廣播轉為單播DHCP Relay 流程
VLAN 10 Client Router (Relay) DHCP Server (VLAN 20)
│ │ │
├─ DHCP Discover ────>│ │
│ (廣播) │ │
│ ├─ DHCP Discover ───────>│
│ │ (單播,轉發) │
│ │<─ DHCP Offer ──────────┤
│<─ DHCP Offer ────────┤ (單播) │
│ (轉為廣播) │ │
│ │ │
├─ DHCP Request ─────>│ │
│ ├─ DHCP Request ────────>│
│ │<─ DHCP ACK ────────────┤
│<─ DHCP ACK ──────────┤ │
Relay 設定(Cisco Router):
interface Vlan10
ip helper-address 192.168.20.1🎓 面試常見問題
Q1:DHCP 的 DORA 流程是什麼?
A:DORA = Discover, Offer, Request, Acknowledgment
1️⃣ Discover(發現):
Client 廣播:「誰是 DHCP Server?我需要 IP!」
Src: 0.0.0.0:68 → Dst: 255.255.255.255:67
2️⃣ Offer(提供):
Server 回應:「我是 Server,給你 192.168.1.100」
包含:IP、Subnet Mask、Gateway、DNS、Lease Time
3️⃣ Request(請求):
Client 廣播:「我要 192.168.1.100,確認嗎?」
(廣播讓所有 Server 知道選擇結果)
4️⃣ ACK(確認):
Server 確認:「確認!你可以用這個 IP」
Client 設定 IP 並開始使用
記憶口訣:「發(Discover)現(Offer)請(Request)確(ACK)」Q2:DHCP 為什麼用 UDP 而不是 TCP?
A:三個關鍵原因
1️⃣ Client 沒有 IP
新裝置還沒有 IP 位址
無法建立 TCP 連線(TCP 需要 IP)
→ 只能用 UDP
2️⃣ 需要廣播
DHCP Discover 需要廣播到整個網段
UDP 支援廣播(255.255.255.255)
TCP 不支援廣播(只支援單播)
3️⃣ 簡單快速
DHCP 是簡單的請求/回應
不需要 TCP 的可靠性機制
Client 可以自己處理逾時重試
Port:
- Server: 67
- Client: 68
為什麼用不同 Port?
→ 避免 Client 和 Server 在同一台機器時衝突Q3:DHCP 租約(Lease)的續約機制是什麼?
A:三個時間點:T1、T2、Expire
假設租約 24 小時:
📍 T1 = 50% = 12 小時(Renewal)
Client 單播向原 DHCP Server:
「我要續約 192.168.1.100」
成功 → 租約重置為 24 小時
失敗 → 繼續使用,等待 T2
📍 T2 = 87.5% = 21 小時(Rebinding)
Client 廣播向任何 DHCP Server:
「誰能給我續約?」
成功 → 租約重置(可能不同 Server)
失敗 → 繼續使用到 Expire
📍 Expire = 100% = 24 小時(到期)
租約到期,IP 被釋放
Client 失去網路連線
→ 重新執行 DORA 流程
為什麼設計 T1 和 T2?
1. T1:優先向原 Server 續約(穩定性)
2. T2:原 Server 故障時,尋找其他 Server(容錯)
3. Expire:最終期限(回收未使用的 IP)Q4:DHCP 如何避免 IP 衝突?
A:四層防護機制
1️⃣ 租約管理
DHCP Server 記錄所有已分配的 IP
不會分配已在租約期的 IP
租約表:
192.168.1.100 → MAC: AA:BB:CC:DD:EE:FF (Active)
192.168.1.101 → MAC: 11:22:33:44:55:66 (Active)
192.168.1.102 → (Free, 可分配)
2️⃣ Ping 檢查(可選)
Server 分配 IP 前,先 Ping 檢查:
ping 192.168.1.100
無回應 → 安全,可分配
有回應 → IP 被佔用,跳過
3️⃣ ARP 探測(可選)
Client 收到 IP 後,發送 Gratuitous ARP:
「誰在用 192.168.1.100?」
無回應 → 安全
有回應 → 衝突!Client 拒絕並重新請求
4️⃣ DHCP Decline
Client 發現衝突後發送:
DHCP Decline: 「192.168.1.100 有衝突,我不要」
Server 標記該 IP 為問題 IP
Client 重新執行 DORA(取得新 IP)
實際上:
現代網路很少發生 IP 衝突
原因:DHCP 的管理機制很完善Q5:DHCP Relay 是什麼?為什麼需要?
A:DHCP Relay = 中繼代理,轉發 DHCP 訊息
為什麼需要?
問題:廣播不跨越子網路
┌────────────┐
│ VLAN 10 │ 192.168.10.0/24 (100 台電腦)
└────────────┘
│
│ Router(預設不轉發廣播)
│
┌────────────┐
│ VLAN 20 │ 192.168.20.0/24
│ DHCP Server│ 192.168.20.1
└────────────┘
如果沒有 Relay:
- VLAN 10 的廣播無法到達 VLAN 20
- 需要在每個 VLAN 都部署 DHCP Server
- 管理困難、成本高
有 Relay:
- Router 作為 Relay
- 將 VLAN 10 的廣播轉為單播,發送到 DHCP Server
- 一台 DHCP Server 服務多個 VLAN
Relay 工作流程:
1. Client (VLAN 10) 廣播 DHCP Discover
2. Router Relay 收到,轉為單播
3. 單播發送到 DHCP Server (VLAN 20)
4. Server 回應給 Relay
5. Relay 轉發回 Client
設定範例(Cisco):
interface Vlan10
ip helper-address 192.168.20.1
優點:
✅ 集中管理(一台 Server)
✅ 節省成本
✅ 易於維護Q6:如何設定靜態 IP 保留(Static Reservation)?
A:根據 MAC Address 綁定固定 IP
為什麼需要?
某些裝置需要固定 IP:
- 印表機(192.168.1.50)
- NAS(192.168.1.51)
- 伺服器(192.168.1.52)
但希望保留 DHCP 的便利性:
- 自動設定 Gateway、DNS
- 集中管理
設定方法(Linux - ISC DHCP):
```bash
# /etc/dhcp/dhcpd.conf
host printer {
hardware ethernet AA:BB:CC:DD:EE:FF;
fixed-address 192.168.1.50;
}
host nas {
hardware ethernet 11:22:33:44:55:66;
fixed-address 192.168.1.51;
}工作流程:
- Client (MAC: AA:BB:CC:DD:EE:FF) 發送 Discover
- Server 查詢設定檔: 「這個 MAC 有綁定嗎?」 → 有,綁定 192.168.1.50
- Server 發送 Offer:192.168.1.50
- Client 取得固定的 192.168.1.50
好處: ✅ IP 固定(不會改變) ✅ 仍享受 DHCP 便利(自動設定) ✅ 集中管理(不用到每台裝置設定)
---
## ✅ 重點回顧
**DHCP 定義:**
- DHCP = Dynamic Host Configuration Protocol
- 自動分配 IP 位址的協定
- Port: 67 (Server), 68 (Client)
**DORA 流程(重要):**
1. **Discover**:Client 廣播尋找 Server
2. **Offer**:Server 提供 IP
3. **Request**:Client 請求確認
4. **ACK**:Server 確認分配
**租約管理:**
- **T1 (50%)**:Renewal,向原 Server 續約
- **T2 (87.5%)**:Rebinding,向任何 Server 續約
- **Expire (100%)**:租約到期,釋放 IP
**為什麼用 UDP:**
- Client 沒有 IP,無法用 TCP
- 需要廣播,TCP 不支援
- 簡單快速,不需要 TCP 可靠性
**實用命令:**
```bash
# Windows
ipconfig /release # 釋放
ipconfig /renew # 重新取得
# Linux
sudo dhclient -r # 釋放
sudo dhclient # 重新取得面試重點:
- ✅ DORA 流程(必考)
- ✅ 租約機制(T1/T2/Expire)
- ✅ 為什麼用 UDP
- ✅ DHCP Relay 用途
- ✅ 如何避免 IP 衝突
記憶口訣:
- DORA = 「發現請確」(Discover, Offer, Request, ACK)
- T1/T2/Expire = 「續約 → 重綁 → 到期」
上一篇: 06-1. DNS 域名解析 下一篇: 06-3. NTP 時間同步
最後更新:2025-01-15