You are on page 1of 51

DHCP 協定與 Wireshark 實作分

1
12:40
DHCP 簡介

2
12:40
DHCP 簡介
► Dynamic
Host Configuration Protocol (DHCP) 是
一個區域網路的網路協定,主要用於區域網路
內或網路服務供應商自動分配 IP 位址和網路參
數給用戶
► 用一台或一組 DHCP 伺服器來管理分配
► Uses UDP ports #67 and #68
► 使用了租約(lease) 的概念,即 IP 位址的分
配是有效期的
► IP 位址數量有限,早期的分配是要額外付費的

3
12:40
DHCP 簡介
► DHCP 使用三種機制來分配 IP 位址給客戶端:
► 自動分配 : DHCP 指配一個永久的 IP 位址給客戶端。
► 手動分配 : 客戶端的 IP 位址是由管理員分配,而此位址將透過
DHCP 傳送至客戶端。
► 動態分配 : 客戶端由 DHCP 伺服器動態租用到的 IP 位址。而此 IP 位
址租用的時間是有限制的。

4
12:40
DHCP 工作原理

5
12:40
• DHCP 客戶端在事先並沒有 IP 的相關資料設定情況下,開
機後, UDP 封包是以廣播方式送出至網路上全部的 DHCP
伺服器,要求任一部 DHCP 伺服器提供 IP 租約。
• 因為客戶端還不知道本身屬於哪一個網路,所以封包的
來源位址會設定成 0.0.0.0 ,連接埠號為 68 ;而目的端
的位址則為 255.255.255.255 ,連接埠號為 67 。
• 網路上所有的 DHCP 伺服器都會收到此訊息,並要求每一
部 DHCP 伺服器提供 IP 租約。

6
12:40
• 在 Windows 的預設環境下, DHCP DISCOVER 的等待時
間預設值為 1 秒,若訊息在 1 秒之內無回應時,就會
進行第二次廣播,最多至第 4 次的 DHCP DISCOVER 廣
播。
• 後來 3 次的等待時間分別是 9﹑13﹑16 秒。若仍然沒
有得到 DHCP 伺服器的回應,客戶端會指出錯誤,並
透過系統再重送此訊息。

7
12:40
• 當網路中的每一部 DHCP 伺服器收到 DHCP DISCOVER 廣播封包時,會
從它所管理但沒有租出去的位址範圍內找出一個可用的 IP 位址、設
定租約期限,以及提供一些資訊給客戶端。這些資訊包括:
• 客戶端的 MAC 位址。
• DHCP 伺服器所提供的 IP 位址。
• 子網路遮罩。
• IP 位址租約期限 (address lease time) 亦即 IP 位址有效時間。 DHCP 伺服器通
常會將租約期限設定幾小時或幾天。
• 每一筆 DHCP OFFER 封包提供的訊息包含 DHCP 伺服器所收到的 DHCP DISCOVER
封包的 Transaction ID 。

8
12:40
․ 提供此資訊的 DHCP 伺服器 IP 的位址。

․ 路由器資訊。

․ 網域名稱及網域名稱伺服器

• 這些資訊最後會記錄在 DHCP OFFER 封包內,再廣播至客戶端。由於


每一部 DHCP 伺服器都會送出 DHCP OFFER 封包給客戶端,但 DHCP 客
戶端只會對最早收到從 DHCP 伺服器 A 所送出的 DHCP OFFER 封包做
回應,後續收到的 DHCP OFFER 封包則不理會。
• 如果 DHCP 客戶端不接受 DHCP OFFER 封包所提供的資訊,就會廣播
一個 DHCP DECLINE 封包告知伺服器,然後再回到第 1 步驟,重新廣
播 DHCP DISCOVER 封包。

9
12:40
• 當客戶端得到一個 IP 租約後,亦會透過 255.255.255.255 的
廣播位址,將 DHCP REQUEST 的 UDP 封包送至網路上全部的
DHCP 伺服器,主要目的是讓全部的 DHCP 伺服器知道其中一台
伺服器所提供的 IP 位址已被挑選到
• 這樣可以避免其他的 DHCP 伺服器自以為自己的 IP 位址已被選
擇到而保留起來。
• 換句話說, DHCP 伺服器 B 原欲提供給客戶端租用的 IP 位址不
用再保留,可以分配給其他客戶。

10
12:40
• 被挑選到的 DHCP 伺服器收到 DHCP REQUEST 封包時,若同
意客戶端的要求,就會向客戶端發廣播,送出一個 DHCP
ACK 封包,以確認 IP 租約的正式生效,包括 IP 租約期限
及其他要求的資訊給客戶端主機。
• 反之,會送出 DHCP NAK 封包,當客戶端收到 DHCP NACK
封包後,會回到第 1 步驟重新開始。

11
12:40
12
12:40
13
12:40
• DHCP 的運作是以廣播方式進行,就網路的廣播範圍是限定在同一
網路內進行。
• 若 DHCP 客戶端和 DHCP 伺服器分別位於路由器兩端的區域網路,
在這種情況下,客戶端送出去的 DHCP DISCOVER 封包並沒有辦法
抵達另一端的 DHCP 伺服器,因為路由器也會阻擋這些廣播封包轉
送出去。
• 要克服這個問題,可以透過 DHCP Relay Agent (代理器)或稱
DHCP Proxy 主機(具有路由能力),來接受客戶端的 DHCP 要求(
即 DHCP REQUEST )。

14
12:40
15
12:40
• DHCP 客戶端送出廣播封包至 DHCP Relay Agent ,代理器會記錄路
由器另一端的 DHCP 伺服器的 IP 位址。
• 當 DHCP Relay Agent 發現區域網路中有 DHCP DISCOVER 或 DHCP
REQUEST 廣播封包時,它會接收該封包,並將封包的目的位址
255.255.255.255 改成 DHCP 伺服器的 IP 位址後重新送出
• 重新送出的封包通過路由器是以單播( unicast )方式傳送到達
DHCP 伺服器。
• DHCP 伺服器收到 DHCP Relay Agent 送到的封包後,會對其回應。

16
12:40
• 客戶端收到伺服器分配的 IP 位址時,大都會以 ARP 協定檢查該 IP
位址是否已有人在使用(有可能使用者是利用手動設定)該位址。
• DHCP 客戶端必須定期更新( Renew )所取得的 IP 租約,不然租約
過期就不能再使用此 IP 位址。
• 根據 RFC 2131 可知,每當租用時間到達租約期限的 50% 時,客戶
端必須送出 DHCP REQUEST 封包向 DHCP 伺服器要求更新租約
• 若更新租約沒有成功(一般有 3 次重試機會),可暫時延用此租約
,一直延長到達租約期限的 87.5% 時,會再度要求續約
• 若 仍 然無 法續 約 成 功 , 則 DHCP 客 戶端 會以 廣播 方式送 出 DHCP
REQUEST 封包,要求 DHCP 伺服器提供服務。

17
12:40
9-8 基礎 DHCP 封包擷取的分析
為擷取表 9-3 DHCP 訊息類型中的 DHCPINFORM 封包,如圖
9-22 所示,可以進行下面步驟:

首先,客戶端事先以手動設定好 IP 位址→開啟 Wireshark


準備擷取 DHCPINFORM 封包→開啟手動撥接連線。在這種情
況,客戶端會送出 DHCPINFORM 封包給 DHCP 伺服器,以告知
伺服器它所需要的一些參數,伺服器端會依網路情況對客戶
端的要求回覆 DHCPACK 封包訊息,或拒絕回覆 DHCPNAK 封包
。 DHCPINFORM 這種封包,在此簡單介紹:

18
12:40
19
12:40
接下來,我們改以自動撥接取得首次租用 IP 位址,操作步驟如
下:

將客戶端 改成自動撥接取得 IP 位址→重新開機→接著開啟


Wireshark 擷 取 陸 續 產 生 的 DHCP 4 種 封 包 , 包 括 :
DHCPDISCOVER 、 DHCPOFFER 、 DHCPREQUEST 及 DHCPACK 封包,
這 4 種封包將來往於 DHCP 客戶端與伺服器之間, 其主要目
的就是客戶端要求動態配置一 IP 位址。接下來, 在 Wireshark
畫 面 中 的 【 Filter 】 欄 位 敲 入 「 bootp 」 , 過 濾 得 出
DHCPDISCOVER 、 DHCPOFFER 、 DHCPREQUEST 及 DHCPACK 封包,
我們將擷取這些 DHCP 封包做分析,如圖 9-23(a)~(d) 所示。

20
12:40
21
12:40
22
12:40
[ 註解 ] 如果不是以單播傳送時,此時 Bootp Flags 應改為
0x8000 (Broadcast) 。該封包發送將以 IP 廣播位址(亦即
255.255.255.255 )作為 IP 目的端位址;鏈路層廣播位址
(亦即 0xffffffffffff )作為鏈路層位址。

23
12:40
[ 註解 ] 值得一提, 有的客戶端收到 DHCPOFFER 封包後,
會以 ARP 協定檢查伺服器欲出租出去的 IP 位址是否已被使
用,若是的話,客戶端發送出 DHCPDECLINE 封包拒絕租用該
位 址 , 並 回 到 INIT 狀 態 ; 若 還 未 被 使 用 , 則 發 送 出
DHCPREQUEST 封包給伺服器確定租用該 IP 位址。注意,此
功能在 RFC 2131 的狀態圖並沒有繪出,筆者已將此功能加
入圖 9-21 DHCP 操作的狀態流程內。

24
12:40
25
12:40
26
12:40
[ 註解 ] 再次強調,經上述 4 個步驟後,客戶端就租用到 IP
位址,爾後,若客戶端要更新租約,欲與 DHCP 伺服器溝通
時,可以不必使用廣播封包,而是改用單播封包傳送。更詳
細 的 說明 ,可參 考圖 9-21(c) 的 步驟 1 。 我們 將在 圖 9-
26(a) 做驗證。

27
12:40
9-8-1 Options 封包擷取的分析
► DHCP 訊息的 Options 有很多,我們只挑選幾個做
說明如圖 9-24(a) 與 (b) 所示,若有興趣讀者可
參考 RFC 2132 。

28
12:40
29
12:40
30
12:40
9-8-2 更新 IP 位址租約封包擷取的分

如 圖 9-25 所 示 , 讓 我 們 在 命 令 提 示 字 元 模 式 下 敲 入
ipconfig / all ,就可指出目前 IP 位址的租約期限為 2010
年 1 月 30 日下午 6 時 6 分 32 秒至 2010 年 2 月 2 日 6 時 6
分 32 秒,共 4 天。接下來我們可以「手動」更新 IP 位址租
約 。 首 先 , 開 啟 Wireshark 畫 面 , 並 在 畫 面 中 的
【 Filter 】欄位敲入「 bootp 」,然後在命令提示字元模
式下敲入 ipconfig / renew 命令,即可得到圖 9-26(a) 。

31
12:40
注意,更新 IP 位址租約時的動作不需要像圖 9-23(a)~(d) 共 4
個動作,一般而言,只需要 DHCPREQUEST 與 DHCPACK 共 2 個動
作即可完成。但圖 9-26(a) 與圖 9-23(c) 的 DHCPREQUEST 封包
並不相同,前者是用單播方式傳送,不像後者是用廣播方式發
送;另一方面,當 DHCP 伺服器收到客戶端更新租約的要求之
後,會以廣播方式回覆 DHCPACK 封包給客戶端,表示同意更新
IP 租約,如圖 9-26(b) 所示。注意,若您分析得到為單播方式
傳送,應該是廠商自己做修改。

32
12:40
33
12:40
34
12:40
35
12:40
9-8-3 撤銷 IP 位址租約封包擷取
的分析
► 除了重新啟動或關機均會送出 DHCPRELEASE 封包外,要撤
銷 IP 位址租約,我們也可以直接執行 ipconfig/release 命
令來達成。若我們原先已經以手動更新 IP 位址租約,所配
置到的 IP 位址為 192.168.1.50 ,如圖 9-27(a) 所示;現在
想撤銷 IP 位址租約。首先開啟 Wireshark 畫面,並在畫面
中的【 Filter 】欄位敲入 bootp 以過濾封包,並迅速得出
DHCPRELEASE 封包,然後敲入 ipconfig/release 執行封包
的擷取,如圖 9-27(b) 所示。

36
12:40
若客戶端的主機有 1 張以上的網路卡,可敲入
「 ipconfig/release 連線名稱」以指定要刪除的網路卡。
「連線名稱」指的是在網路連線視窗中看到的連線名稱,例
如「區域連線」、「區域連線 2 」或「無線網路連線」等
名稱;現在就來觀察撤銷 IP 位址( 192.168.1.50 )租約封
包擷取的分析,如圖 9-27(c) 所示

37
12:40
38
12:40
39
12:40
40
12:40
9-9 Wireshark 實作分析與討論
► 下面實作 Case 分析將更進一步擷取 DHCP 封包做分析,現

在我們就說明進行此 Case 的操作步驟,如圖 9-28 所示。


步驟 1 : 首先使網路中的電腦全部自動撥接連線(參考圖 4-8 )

步驟 2 :在 C:\Documents and Setting\> 敲入 ipconfig/release ,


如圖 9-28 中的 ❷ 所示。此指令指出你目前的 IP 位址已撤銷,所
以你的主機 IP 位址變成 0.0.0.0 。

41
12:40
步驟 3 :開啟 Wireshark→Capture→Options→ 選擇正確介面卡準
備擷取所要的 DHCP 封包。

步驟 4 :回到 C:\Documents and Setting\> 敲入 ipconfig/renew


,如圖 9-28 中的 ❹ 所示。此指令指出分配( allocated )得到一
個新的 IP 位址為 192.168.1.1 。

步驟 5 :一直等到 ipconfig/renew 結束後,再回到 C:\Documents


and Setting\> 敲入 ipconfig/renew ,如圖 9-28 中的❺所示。

步驟 6 :當第 2 個 ipconfig/renew 結束後,再回到 C:\Documents


and Setting\> 敲入 ipconfig/release ,如圖 9-28 中的‘所示。
此指令指出撤銷你先前分配的 IP 位址。

42
12:40
步驟 7 : 再回到 C:\Documents and Setting\> 敲入 ipconfig/renew ,如圖 9-28
所示。此指令指出再分配( allocated ),得到一個新的 IP 位址為 192.168.1.1 。

步驟 8 : 我們可停止 Wireshark 擷取所要的 DHCP 封包。並在【 Filter 】欄位敲入


「 bootp 」,加速找到 DHCP 封包,如圖 9-28(a) 所示。注意,上面步驟 2 執行後,
第 1 個 ipconfig/renew ( 即 步 驟 4 ) 會 產 生
DHCPDISCOVER 、 DHCPOFFER 、 DHCPREQUEST 、 DHCPACK ,共 4 個封包,依序為封包
No 15~ 封 包 No 18 。 第 2 個 ipconfig/renew ( 即 步 驟 5 ) 則 只 產 生
DHCPREQUEST 、 DHCPACK ,共 2 個封包,依序為封包 No 564~ 封包 No565 。接著依序
為步驟 6 的 ipconfig/release 封包 No 579 及步驟 7 的 ipconfig/renew ,又產生
DHCPDISCOVER 、 DHCPOFFER 、 DHCPREQUEST 、 DHCPACK ,共 4 個封包,依序為封包
No 582~ 封包 No 585 。

43
12:40
44
12:40
45
12:40
46
12:40
47
12:40
接 下 來 , 我 們 先 擷 取 DHCP 封 包 No 15 做 分 析 , 如 圖 9-
28(a)-1 所示。或為方便記錄,讀者可以列印出封包 No 15
的 所 有 記 錄 。 現 在 就 可 在 Wireshark 主 畫 面
→ File→Print→Selected Summary Line 及 Packet
Details 打勾→ Print 。

48
12:40
49
12:40
9-9-1 問題討論
1. 解釋圖 9-28(a) 中的封包 No 15~No 18 ,並繪出時間圖
以指出這 4 個封包的順序。

2. 解釋圖 9-28(a) 中的封包 No 564~No565 ?其 XID 為何?

3. 指出圖 9-28(a)-1 中的 sname(Server Host Name) not


given 所對應的封包位元組窗格的值?

4. 如果封包 No 579 遺失,則伺服器會如何動作?

50
12:40
5. 圖 9-28(a) 中的封包 No 582~No 585 ,假設伺服器沒有
收到一個 DHCPOFFER 或 DHCPACK 封包,或在網路上根本
沒有 DHCP 伺服器,客戶端會如何處理?

6. 請指出 DHCP 在封包交換期間存在的 ARP 發送或接收封包


51
12:40

You might also like