12月 14, 2009

關於 DHCP 協定

APIA(Automatic Private IP Address) 可以在 DHCP Client 找不到 Server 時自動配置一個 IP 位址,完成 TCP/IP 垃址設定。而且在 APIPA 配置 IP 前,還會先使用 ARP 去檢查 IP 是否已經被使用,避免 IP 相衝的狀況。

** 找不到 DHCP Server **
當 DHCP Client 發出 Discover 封包,而未收到 DHCP Server 回應時,Client 會有什麼樣的反應?!

分為兩種情況:

(1)在 APIPA 功能開啟下,系統會將 IP 設成 169.254.0.0/16 中任一個 IP。雖然 Client 已經使用 APIPA 設定 IP 位址,不過每隔 5 分鐘仍會發出 Discover 找詢 Server,若找到 Server,則放棄使用原本的 168.254.0.0/16 的 IP。

(2)若 APIPA 功能末使用,則從第一次發出 Discover 封包後,每隔 5 分鐘會再發出封包,重試三次,若最後仍無收到 Server 回應則 TCP/IP 的設定就宣告失敗。

小結:
使用 APIPA 功能 → 從 169.254.0.0/16 中選一組 IP → 每隔 5 分鐘發出 Discover → 持續送出。
未用 APIPA 功能 → 第一次發出 Discover 封包後,每隔 5 分鐘再發一次 → 重覆三次 → 沒回應則宣告 TCP/IP 設定失敗。

** 重新啟動電腦後,要求更新租約 **
重開新機後,Client 在前次開機時,就已經取的IP,而且租約尚未過期。在這個狀況下,電腦會以廣播方式送出 Request 封包。在此封包中會含有 Requested Address 欄位,而此欄位值會填入前次所租用的 IP 位址。當 Server 收到此封包後,會判斷所要求的 IP 位址可否給 Client 用。如果可以則回覆 ACK 封包,否則送出 NACK。

** DHCP Relay Agent 議題 **
由於 Server 與 Client 之間,常以廣播方式傳送封包如果兩者位於不同的子網路下,則廣播封包會被 Router檔下來。那麼 Server 與 Client 無法進行溝通。

有兩種方法可以解決這個問題:

(1) 啟用 Router 的 DHCP Forwarding 功能
此功能是指 Router 收到 DHCP 廣播封包時,會讓封包通過如果 Router 支援 RFC 1542 則表示具有 DHCP Forwarding 功能

(2)指定某台電腦當 DHCP Relay Agent
DHCP Relay Agent 的功能相當於封包轉換程式,將廣播封包改以DHCP Server 為目的地的 Unicast 封包:

DHCP Request -> DHCP Relay Agent ---(Unicast)--> DHCP Server

使用 Unicast 的方式傳送 DHCP Request 封包,就不會被 Router 檔下來。

Agent 的作用主要是更改 DHCP Request 封包表頭。並以 Unicast 的方式傳給 Server,而Server 收到時,會再藉由 Agent進行 Relay 動作。DHCP Relay Agent 會以廣播的方式,傳回給 Client。

小結:
DHCP Client 廣播送出 Discover → DHCP Relay Agent 收到後 → 更改表頭,以 Unicast 送給 Server ---(Unicast)--> DHCP Relay Agent → Agent 以廣播方式回應 DHCP Client。

DHCP 使用 UDP 協定,其使用的 Port 則是: Client:67 <---> Server:68

沒有留言:

張貼留言