2009-11-24 216 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可以被广播,并且如果为客户端选择了随机端口,这可能会导致其他主机在同一端口上侦听混淆。