如果假設客戶端不在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端口67和68用於DHCP
- 3. dhcp客戶端在Linux上,端口或使用?
- 4. 默認情況下,socketIO客戶端偵聽哪個端口?
- 5. Socket.io在多個端口上偵聽?
- 6. UDP偵聽器響應客戶端
- 7. 實現DHCP客戶端
- 8. 偵聽多個TCP端口
- 9. c上的網絡端口偵聽器#
- 10. 如果客戶端不偵聽UDP端口,數據報是哪裏?
- 11. C++在窗口中的某個端口上偵聽什麼進程
- 12. 節點socket.io客戶端偵聽發送到其他客戶端的事件
- 13. 9870端口的TCP偵聽服務器。是否可以配置客戶端端口?
- 14. apache tomcat偵聽器端口的範圍是什麼?
- 15. Windows DHCP客戶端主機名編碼
- 16. 允許多個套接字在同一端口上偵聽有什麼好處?
- 17. SocketPermission - 客戶端端口?
- 18. 套接字端口不匹配偵聽端口
- 19. 警告:偵聽端口的遠程端口轉發失敗52698
- 20. snmpd未在Ubuntu服務器上的端口161上偵聽
- 21. TCP端口偵聽器不工作
- 22. 服務器偵聽多個端口[Java]
- 23. emailrelay「無法綁定偵聽端口」
- 24. 如何更改Postgres偵聽端口?
- 25. 服務器偵聽多個端口c
- 26. VBscript for netstat過濾僅偵聽端口
- 27. 如何獲取EJB偵聽端口?
- 28. TCP程序不能偵聽端口80
- 29. Socket.io可以偵聽多個端口嗎?
- 30. 無法讓PostgreSQL 9.4偵聽端口5432
問題顯示「爲什麼協議指定客戶端在端口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