2012-05-17 65 views
12

爲什麼服務器無法使用DHCP發現和請求的源IP中使用的目標IP地址0.0.0.0?它可以使用從DHCP Discover和Request中學習到的客戶端的MAC地址將幀定向到適當的客戶端機器。爲什麼廣播DHCP Offer和Ack?

+0

我有一個懷疑,這是需要在有多個協作DHCP服務器的環境中工作。中繼代理也可能需要正常工作。 – Flexo

回答

14

單播或廣播的選擇在DHCP RFC 2131指定:

如果來自客戶機的DHCP消息中的「GIADDR」字段是非零, 服務器發送任何返回消息發送到 BOOTP中繼代理的'DHCP服務器'端口,其地址顯示爲'giaddr'。如果'giaddr' 字段爲零且'ciaddr'字段不爲零,則服務器 單播DHCPOFFER和DHCPACK消息至'ciaddr'中的地址。 如果'giaddr'爲零且'ciaddr'爲零,且廣播位爲 集,則服務器廣播DHCPOFFER和DHCPACK消息至 0xffffffff。如果廣播位未設置且'giaddr'爲零且 'ciaddr'爲零,則服務器單播DHCPOFFER和DHCPACK 消息到客戶端的硬件地址和'yiaddr'地址。在 所有情況下,當'giaddr'爲零時,服務器將任何DHCPNAK 消息廣播到0xffffffff。

CIADDRGIADDR之中:

ciaddr  4 Client IP address; only filled in if client is in BOUND, RENEW or REBINDING state and can respond to ARP requests. 
giaddr  4 Relay agent IP address, used in booting via a relay agent. 

因此,DHCP服務器選擇相應的廣播或不給客戶端的當前狀態(主要是它是否已經一個IP地址或不),並相應地發送給消息的發送者,如果它是一箇中繼代理或只是一個客戶端。

Unicast DHCPOFFER

在這種情況下,我的DCHP服務器選擇單播DHCPOFFER,因爲我的機器已經有了一個IP地址,我沒有中繼代理在我的局域網。

編輯:

沒有人可以使用IP地址0.0.0.0作爲目標地址。正如在IPv4 RFC 5735指定:

0.0.0.0/8 - 解決這個塊指源主機 「這個」 網絡上。 地址0.0.0.0/32可用作此網絡上此 主機的源地址;可以使用0.0.0.0/8以內的其他地址, 是指該網絡上的指定主機([RFC1122],第 3.2.1.3節)。

+0

你的問題不夠清楚。請發表[新問題](http://superuser.com/questions/ask)上的超級用戶,詳細說明所涉及的設備的行爲,它們的作用和可能的IP地址和拍攝日誌。 – Avio

+0

我有類似的問題,但事情是,我有發往255.255.255.255一個DHCP Discover數據包的設備,服務器收到該郵件(因爲我用的是包記錄看所有節點的活動),回覆,我的設備獲得的回覆是來自DHCP服務器的廣播幀。但設備不接受IP配置。 這種異常的任何解釋? – Abhinav

+0

很好的答案。解釋事情是如何工作的,以及它是否可能有非廣播DHCPOFFER。不過,我也想知道有一個廣播DHCPOFFER的原因。有任何想法嗎? – limitcracker

0

the RFC 2131,第24頁:

通常情況下,DHCP服務器和BOOTP中繼代理嘗試直接提供 DHCPOFFER,DHCPACK和DHCPNAK消息使用 uicast交付客戶。 IP目標地址(在IP標頭中)被設置爲 到DHCP'yiaddr'地址,而鏈路層目標地址是 設置爲DHCP'chaddr'地址。不幸的是,一些客戶端實現不能接收這樣的單播IP數據報,直到 該實現已經被配置有效IP地址 (導致死鎖,其中客戶端的IP地址不能被 交付直到客戶端被配置爲具有IP地址)。

直到其 協議軟件已經配置了IP地址應當以任何DHCPDISCOVER或客戶端發送DHCPREQUEST 消息設置 廣播位在「標誌」字段爲1不能接收單播IP數據報的客戶端。廣播位將提供 的提示,DHCP服務器和BOOTP的中繼代理客戶端的子網廣播任何 消息給客戶端。

如果客戶端 可以其協議軟件之前接收單播IP數據報已經 配置應該清除廣播位爲0。BOOTP 澄清文檔討論了使用 BROADCAST位的後果。

相關問題