如果假设客户端不在68端口上侦听,当DHCP服务器收到请求时,它可以将它发送到接收请求的地址(在发送时由客户端选择临时端口),那么为什么协议指定客户端在端口68上收听?为什么DHCP客户端在端口68上侦听?
8
A
回答
1
16
主要原因是DHCP服务器可能会在mac级别上广播“DHCP offer”,而不是将其单播发送到它收到请求的mac地址。 如果端口不是固定的,一些正在监听这个相同随机端口的主机将接受数据包到第5层 - 应用层。 换句话说,应用程序将从完全不同的应用程序获得消息,而不是健康的情况。
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可以被广播,并且如果为客户端选择了随机端口,这可能会导致其他主机在同一端口上侦听混淆。
相关问题
- 1. 端口68上的DHCP客户端绑定错误
- 2. DHCP端口67和68用于DHCP
- 3. dhcp客户端在Linux上,端口或使用?
- 4. 默认情况下,socketIO客户端侦听哪个端口?
- 5. Socket.io在多个端口上侦听?
- 6. UDP侦听器响应客户端
- 7. 实现DHCP客户端
- 8. 侦听多个TCP端口
- 9. c上的网络端口侦听器#
- 10. 如果客户端不侦听UDP端口,数据报是哪里?
- 11. C++在窗口中的某个端口上侦听什么进程
- 12. 节点socket.io客户端侦听发送到其他客户端的事件
- 13. 9870端口的TCP侦听服务器。是否可以配置客户端端口?
- 14. apache tomcat侦听器端口的范围是什么?
- 15. Windows DHCP客户端主机名编码
- 16. 允许多个套接字在同一端口上侦听有什么好处?
- 17. SocketPermission - 客户端端口?
- 18. 套接字端口不匹配侦听端口
- 19. 警告:侦听端口的远程端口转发失败52698
- 20. snmpd未在Ubuntu服务器上的端口161上侦听
- 21. TCP端口侦听器不工作
- 22. 服务器侦听多个端口[Java]
- 23. emailrelay“无法绑定侦听端口”
- 24. 如何更改Postgres侦听端口?
- 25. 服务器侦听多个端口c
- 26. VBscript for netstat过滤仅侦听端口
- 27. 如何获取EJB侦听端口?
- 28. TCP程序不能侦听端口80
- 29. Socket.io可以侦听多个端口吗?
- 30. 无法让PostgreSQL 9.4侦听端口5432
问题显示“为什么协议指定客户端在端口68上侦听?”,所以他们所问的似乎更多“为什么RFC会这么说?”。 – 2009-11-24 16:04:49
DHCP基于早期的使用端口67(服务器)和68(客户端)的BOOTP协议。为什么BOOTP使用这些端口可能是因为它们当时没有被其他任何协议使用(SMTP使用25,FTP使用21等)。虽然主机通常只有一个IP地址,但它可以有数千个端口。通过将特定端口号分配给特定协议,多方可以开发标准服务和客户端。只要您在正确的端口上聆听,就可以编写您自己的DHCP客户端或服务器。 – TLiebe 2009-11-24 17:12:44
好的意思是没有技术原因? – avd 2009-11-24 17:26:34