为什么DHCP客户端侦听端口68?

时间:2009-11-24 15:52:08

标签: network-programming dhcp

如果假设客户端没有监听68端口,当DHCP服务器收到请求时,它可以将它发送到收到请求的地址(客户端在发送时选择临时端口),那么为什么协议指定客户端要在端口68上监听吗?

3 个答案:

答案 0 :(得分:18)

主要原因是DHCP服务器可能在mac级别上广播“DHCP offer”,而不是将其单播发送到它收到请求的mac地址。 如果端口不是常量,那么一些正在侦听同一随机端口的主机将接受数据包到第5层 - 应用层。 换句话说,应用程序将从完全不同的应用程序获取消息,而不是健康的情况。

答案 1 :(得分:2)

因为它在RFC(Request for Comments)中指定了DHCP的行为方式。 RFC 2131是指定DHCP客户端和服务器必须如何运行的文档。

有关DHCP的更多信息,请参阅here(特别是4.1节)。有关RFC的信息,请参阅here

答案 2 :(得分:1)

我自己不得不面对同样的问题,经过一些研究后,我在RFC 2131上找到了以下内容,它描述了DHCP协议,在1.6设计目标下:

  • DHCP必须为现有BOOTP客户端提供服务

同样在描述BOOTP协议的RFC 951上,我们可以找到以下内容:

UDP标头包含源和目标端口号。该    BOOTP协议使用两个保留端口号,'BOOTP客户端'(68)    和'BOOTP服务器'(67)。客户端使用'BOOTP发送请求    server'作为目的端口;这通常是广播。该    服务器使用'BOOTP client'作为目标端口发送回复;    取决于服务器中的内核或驱动程序设施,这可能    或者可能不是广播(这在本节中进一步解释    下面标题为'鸡肉/鸡蛋问题'。 TWO保留端口的原因    使用,是为了避免'唤醒'和调度BOOTP服务器    守护进程,必须向客户端广播bootreply。自从    服务器和其他主机不会监听'BOOTP客户端'端口,    任何这样的传入广播都将在内核中过滤掉    水平。我们不能简单地允许客户端选择“随机”端口    UDP源端口字段的编号;因为服务器回复可能是    广播,随机选择的端口号可能会混淆其他主机    碰巧在那个港口上听。

所以问题的答案来自上述问题。 DHCP客户端需要使用UDP端口68,以使DHCP与BOOTP协议兼容,并且BOOTP协议需要客户端的特定端口,因为BOOTPREPLIES可以被广播,并且如果为客户端选择了随机端口,它可能导致在同一端口上侦听的其他主机混淆。

相关问题