为什么DHCP客户端要监听68号端口?

16
假设客户端没有监听68端口,在DHCP服务器收到请求时,它可以将请求发送到接收请求的地址(由客户端在发送请求时选择的临时端口),那么为什么协议规定客户端必须监听端口68呢?
3个回答

19

主要原因是 DHCP 服务器可能会在 MAC 层级别上广播“DHCP提供”,而不是将其单独发送到它接收到请求的 MAC 地址。 如果端口不固定,一些偶然监听到相同随机端口的主机将接受该数据包到第5层 - 应用程序层。 换句话说,一个应用程序将从完全不同的应用程序获取消息,这不是一个正常的情况。


这个答案似乎与3年前的答案没有什么不同。如果您想添加内容,请考虑建议对现有已接受的答案进行编辑 :) - Dave Newton
相关问题:在使用DHCP客户端获取IP地址的正常设置中,我可以安全地防火墙关闭此端口吗?也就是说,在现实世界中,这个“可能”是否相关? - Zero3

4
我刚刚自己也碰到了同样的问题,在研究之后,我在描述DHCP协议的RFC 2131第1.6节中找到了以下内容:
  • DHCP必须为现有的BOOTP客户端提供服务。
此外,在描述BOOTP协议的RFC 951中,我们可以找到以下内容:
UDP头包含源端口号和目标端口号。 BOOTP协议使用两个保留端口号,“BOOTP客户端”(68)和“BOOTP服务器”(67)。 客户端使用“BOOTP服务器”作为目标端口发送请求;这通常是广播。 服务器使用“BOOTP客户端”作为目标端口发送回复;根据服务器中的内核或驱动程序功能,这可能是广播,也可能不是广播(在下面标题为“鸡/蛋问题”的部分中进一步解释)。 使用两个保留端口的原因是为了避免在必须向客户端广播引导答复时“唤醒”并计划BOOTP服务器守护程序。 由于服务器和其他主机不会侦听“BOOTP客户端”端口,因此任何此类传入广播都将在内核级别被过滤掉。 我们不能简单地允许客户端选择UDP源端口字段的“随机”端口号;由于服务器回复可能是广播的,因此随机选择的端口号可能会使正在侦听该端口的其他主机混淆。
因此,问题的答案就来自上述内容。 DHCP客户端需要使用UDP端口68,以便DHCP与BOOTP协议兼容,并且BOOTP协议要求客户端具有特定端口,因为BOOTPREPLIES可以进行广播,如果为客户端选择了随机端口,则可能导致在同一端口上侦听的其他主机混淆。

3
因为它在规定DHCP行为的RFC(请求评论)中。RFC 2131是规定DHCP客户端和服务器必须遵循的文件。
有关DHCP的更多信息,请参见此处(特别是第4.1节)。有关RFC的信息,请参见此处

7
问题是“为什么协议规定客户端要监听68号端口?”,所以他们似乎更想问的是“为什么RFC这样说?” - MikeBaz - MSFT
2
DHCP基于先前的BOOTP协议,该协议使用端口67(服务器)和68(客户端)。 BOOTP为什么使用这些端口可能是因为它们当时没有被任何其他协议使用(SMTP使用25,FTP使用21等)。虽然主机通常只有一个IP地址,但它可以拥有数千个端口。通过将特定的端口号分配给特定的协议,多个方​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​执行标准服务和客户端就成为可能。只要您在正确的端口上侦听,就可以编写自己的DHCP客户端或服务器。 - TLiebe
1
好的意思是没有技术上的原因吗? - avd
技术原因是,如果您希望客户端能够从任何正常的DHCP服务器听到响应,则需要在正确的端口上进行侦听。我想,如果您正在编写自己的DHCP服务器/客户端软件(或者您可以配置服务器使用不同的端口),那么只要您不尝试使用已被其他协议使用的端口,您可以使用任何端口。 - TLiebe
我想知道“无法将端口号绑定到1024以下的端口,因为当前用户没有特权”是否与此有关。 - Joshua

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接