如果假設客戶端不在68端口上偵聽,當DHCP服務器收到請求時,它可以將它發送到接收請求的地址(在發送時由客戶端選擇臨時端口),那麼爲什麼協議指定客戶端在端口68上收聽?爲什麼DHCP客戶端在端口68上偵聽?
8
A
回答
1
16
主要原因是DHCP服務器可能會在mac級別上廣播「DHCP offer」,而不是將其單播發送到它收到請求的mac地址。 如果端口不是固定的,一些正在監聽這個相同隨機端口的主機將接受數據包到第5層 - 應用層。 換句話說,應用程序將從完全不同的應用程序獲得消息,而不是健康的情況。
1
我不得不面臨着同樣的問題我自己,經過一番研究,我發現了RFC 2131,它描述了DHCP協議下,根據第1.6的設計目標:
- DHCP必須提供的服務,現有的BOOTP客戶
同樣在RFC 951,它描述BOOTP協議,我們可以發現以下幾點:
UDP頭包含源端口號和目標端口號。 BOOTP協議使用兩個保留端口號,'BOOTP客戶端'(68) 和'BOOTP服務器'(67)。客戶端使用'BOOTP 服務器'作爲目標端口發送請求;這通常是一個廣播。 服務器使用「BOOTP客戶端」作爲目標端口發送回覆; 取決於服務器中的內核或驅動程序設施,這可能是 或可能不是廣播(這在下面標題爲'雞/蛋問題'的部分 中進一步解釋)。使用TWO保留端口 的原因是,當bootreply必須廣播到客戶端時,是爲了避免「喚醒」和安排BOOTP服務器守護進程 。由於 服務器和其他主機不會在'BOOTP客戶端'端口上偵聽,因此任何此類傳入的廣播都將在內核 級別被過濾掉。我們不能簡單地允許客戶端爲UDP源端口字段選擇一個「隨機」端口 號碼;由於服務器回覆可能是 廣播,隨機選擇的端口號可能會混淆恰好在該端口上偵聽的其他主機 。
所以問題的答案來自上述。 DHCP客戶端需要使用UDP端口68,以使DHCP與BOOTP協議兼容,並且BOOTP協議需要客戶端的特定端口,因爲BOOTPREPLIES可以被廣播,並且如果爲客戶端選擇了隨機端口,這可能會導致其他主機在同一端口上偵聽混淆。
相關問題
- 1. 端口68上的DHCP客戶端綁定錯誤
- 2. DHCP客戶端不接收端口68上的響應
- 3. DHCP端口67和68用於DHCP
- 4. NIO。多個客戶端通道在同一端口上偵聽
- 5. Python dhcp客戶端
- 6. 爲什麼Wildfly不會在http端口上偵聽?
- 7. 爲什麼rabbitmq在端口43411上偵聽?
- 8. dhcp客戶端在Linux上,端口或使用?
- 9. 默認情況下,socketIO客戶端偵聽哪個端口?
- 10. 服務器偵聽客戶端串行端口
- 11. Socket.io在多個端口上偵聽?
- 12. SQL Azure在替代端口上偵聽
- 13. UDP偵聽器響應客戶端
- 14. 實現DHCP客戶端
- 15. 如何使用unboundid ldap偵聽器偵聽端口636上的ldap客戶端請求
- 16. C#偵聽TCP端口
- 17. tomcat websocket servlet偵聽端口
- 18. 的Java偵聽端口
- 19. 偵聽多個TCP端口
- 20. 端口80上的Mac偵聽器
- 21. c上的網絡端口偵聽器#
- 22. 爲什麼netstat顯示Tomcat進程偵聽多個端口?
- 23. 爲什麼OS X允許兩次在同一個TCP端口上偵聽?
- 24. 如果客戶端不偵聽UDP端口,數據報是哪裏?
- 25. C++在窗口中的某個端口上偵聽什麼進程
- 26. 節點socket.io客戶端偵聽發送到其他客戶端的事件
- 27. 如何在Java中偵聽UDP端口?
- 28. 9870端口的TCP偵聽服務器。是否可以配置客戶端端口?
- 29. apache tomcat偵聽器端口的範圍是什麼?
- 30. 一個基本的DHCP客戶端
問題顯示「爲什麼協議指定客戶端在端口68上偵聽?」,所以他們所問的似乎更多「爲什麼RFC會這麼說?」。 – 2009-11-24 16:04:49
DHCP基於早期的使用端口67(服務器)和68(客戶端)的BOOTP協議。爲什麼BOOTP使用這些端口可能是因爲它們當時沒有被其他任何協議使用(SMTP使用25,FTP使用21等)。雖然主機通常只有一個IP地址,但它可以有數千個端口。通過將特定端口號分配給特定協議,多方可以開發標準服務和客戶端。只要您在正確的端口上聆聽,就可以編寫您自己的DHCP客戶端或服務器。 – TLiebe 2009-11-24 17:12:44
好的意思是沒有技術原因? – avd 2009-11-24 17:26:34