題 為什麼DHCP使用UDP端口67和68進行客戶端和服務器之間的通信?


我知道DHCP用於為客戶端分配IP地址,因此建立連接的唯一可能方法是偵聽特定端口。但選擇67和68背後有什麼具體原因嗎?


4
2018-06-14 18:55


起源


可能是唯一可以實際的人, 理論上 回答這將是設計BOOTP的人(RFC 951)1985年(或更早)。其他一切都是猜測。雖然只是好奇心有時是一個正當理由,但我沒有看到這個問題旨在解決的問題。 - a CVn
因為他們需要選擇 某物?端口號後面沒有任何押韻或原因。 - David
為什麼不........? :) - emirjonb


答案:


DHCP基於早期的BOOTP協議,該協議使用眾所周知的端口號用於服務器和客戶端而不是短暫的端口。服務器和客戶端通過廣播進行通信,服務器在UDP端口68上向客戶端廣播提供的IP地址。引入了客戶端上眾所周知的端口,以解決與此廣播相關的問題,我們將對此進行描述下面。

假設主機A在臨時端口1883上使用BOOTP客戶端,而主機B(在同一網絡上)在同一端口上使用MQTT客戶端。現在,當BOOTP服務器發送廣播回复消息時,廣播IP地址為255.255.255.255,目的端口號為。 1883,然後主機A將在其應用層的DHCP客戶端上接受正確的消息。但是,在主機B的應用層上運行的MQTT客戶端將收到不正確的消息。使用眾所周知的端口(在我們的例子中為68)可以防止使用相同的兩個目標端口號,因此它禁止其他協議使用已經被另一個協議使用的相同端口。簡單來說,它可以防止應用程序從完全不同的協議中獲取消息。

有關詳細信息,我建議您仔細閱讀 RFC 2131


7
2018-06-24 12:26



換句話說,客戶端 - 服務器的區別對於UDP無效,並且當接收“回复”時,用戶的計算機必須像監聽服務器一樣監聽它們。但這不僅僅是回复。今天的DHCP服務器發送推送續訂,這些更新發生在協商租約之後的幾個小時,有時幾天。這使得端口68上的偵聽成為真正類似服務器的工作。順便說一句,傳出端口總是67,可能是因為用戶空間代碼無法欺騙它。 - Zdenek


DHCP基於 BOOTP 它創建於1985年。

BOOTP使用 TFTP 作為文件傳輸協議。

TFTP創建於1981年並使用端口69,因此使用最近的未使用端口(68和67)。


7
2018-06-15 08:54



謝謝你的回答。我還研究了一下並得出結論,在客戶端使用未使用的端口68,以便在第5層上運行的應用程序不會從另一個協議獲得消息。 - valafar