爲什麼服務器無法使用DHCP發現和請求的源IP中使用的目標IP地址0.0.0.0?它可以使用從DHCP Discover和Request中學習到的客戶端的MAC地址將幀定向到適當的客戶端機器。爲什麼廣播DHCP Offer和Ack?
回答
單播或廣播的選擇在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。
與CIADDR和GIADDR之中:
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地址或不),並相應地發送給消息的發送者,如果它是一箇中繼代理或只是一個客戶端。
在這種情況下,我的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節)。
你的問題不夠清楚。請發表[新問題](http://superuser.com/questions/ask)上的超級用戶,詳細說明所涉及的設備的行爲,它們的作用和可能的IP地址和拍攝日誌。 – Avio
我有類似的問題,但事情是,我有發往255.255.255.255一個DHCP Discover數據包的設備,服務器收到該郵件(因爲我用的是包記錄看所有節點的活動),回覆,我的設備獲得的回覆是來自DHCP服務器的廣播幀。但設備不接受IP配置。 這種異常的任何解釋? – Abhinav
很好的答案。解釋事情是如何工作的,以及它是否可能有非廣播DHCPOFFER。不過,我也想知道有一個廣播DHCPOFFER的原因。有任何想法嗎? – limitcracker
從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位的後果。
- 1. openwrt dhcp-request&ack flooding
- 2. 發送DHCP OFFER數據包的問題
- 3. 爲什麼我沒有收到廣播?
- 4. 爲什麼我的UDP廣播失敗?
- 5. 什麼是便利廣播?
- 6. 什麼是永久廣播?
- 7. 爲什麼此連接保持關閉 - SYN-> SYN,ACK-> ACK-> RST,ACK
- 8. 什麼原因以及如何避免[FIN,ACK],[RST]和[RST,ACK]
- 9. 當接收到[RST,ACK]標誌時,應爲SEQ和ACK指定什麼值?
- 10. 原子廣播和原子多播有什麼區別?
- 11. 廣播接收器的API是什麼
- 12. 什麼的setAction()的意圖做(廣播)
- 13. 觸發BluetoothDevice.ACTION_ACL廣播的是什麼?
- 14. 廣播意圖究竟是什麼?
- 15. 爲什麼同時有DHCP和靜態IP地址?
- 16. 什麼意圖做鬧鐘廣播?
- 17. 我的廣播地址是什麼
- 18. 使用DHCP獲取IP地址,網關,掩碼和廣播信息
- 19. 爲什麼TCP頭包含ACK和SEQ字段?
- 20. Queue#offer()應該優先於Queue#add()嗎?爲什麼?
- 21. 什麼是用於設置廣播應用程序的默認廣播地址
- 22. Angular:更新列表;爲什麼需要這個$廣播?
- 23. 爲什麼我的接收器不接收廣播?
- 24. 爲什麼我的ON_BOOT_COMPLETED廣播接收器不工作?
- 25. 爲什麼使用廣播增加時間?
- 26. 瓶和socket.io廣播
- 27. 如何由DHCP服務器或DHCP中繼代理單播DHCP答覆?
- 28. 我們應該使用什麼廣播/多播方法?
- 29. 爲什麼不在Angular JS中選擇廣播選項?
- 30. 爲什麼change()僅用於接收廣播?
我有一個懷疑,這是需要在有多個協作DHCP服務器的環境中工作。中繼代理也可能需要正常工作。 – Flexo