2009-11-24 213 views
8

如果假設客戶端不在68端口上偵聽,當DHCP服務器收到請求時,它可以將它發送到接收請求的地址(在發送時由客戶端選擇臨時端口),那麼爲什麼協議指定客戶端在端口68上收聽?爲什麼DHCP客戶端在端口68上偵聽?

回答

1

因爲它在RFC(Request for Comments)中,它指定了DHCP的行爲。 RFC 2131是指定DHCP客戶端和服務器必須如何工作的文檔。

有關DHCP的更多信息(特別是第4.1節),請參閱here。有關RFC是什麼信息,請參閱here

+5

問題顯示「爲什麼協議指定客戶端在端口68上偵聽?」,所以他們所問的似乎更多「爲什麼RFC會這麼說?」。 – 2009-11-24 16:04:49

+1

DHCP基於早期的使用端口67(服務器)和68(客戶端)的BOOTP協議。爲什麼BOOTP使用這些端口可能是因爲它們當時沒有被其他任何協議使用(SMTP使用25,FTP使用21等)。雖然主機通常只有一個IP地址,但它可以有數千個端口。通過將特定端口號分配給特定協議,多方可以開發標準服務和客戶端。只要您在正確的端口上聆聽,就可以編寫您自己的DHCP客戶端或服務器。 – TLiebe 2009-11-24 17:12:44

+1

好的意思是沒有技術原因? – avd 2009-11-24 17:26:34

16

主要原因是DHCP服務器可能會在mac級別上廣播「DHCP offer」,而不是將其單播發送到它收到請求的mac地址。 如果端口不是固定的,一些正在監聽這個相同隨機端口的主機將接受數據包到第5層 - 應用層。 換句話說,應用程序將從完全不同的應用程序獲得消息,而不是健康的情況。

+0

這個答案看起來不像3年前的那個。如果你想添加一些東西,可以考慮給現有的接受的答案建議編輯:) – 2013-03-11 13:52:42

+3

謝謝,這實際上是正確的答案。 – Parzifal 2013-06-20 11:52:09

+0

相關問題:我可以在使用DHCP客戶端獲取IP地址的正常設置中安全地防火牆關閉此端口嗎?即是真實世界中的* might *相關嗎? – Zero3 2017-04-01 20:32:10

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可以被廣播,並且如果爲客戶端選擇了隨機端口,這可能會導致其他主機在同一端口上偵聽混淆。