5

这个问题可能源于对 IP 多播的根本误解,所以如果我不在基地,请纠正我。

我正在尝试编写 C 代码来查找网络上所有 DHCP 服务器的 IP 地址。用例是这样的:

  1. 客户端广播 DHCP 发现。
  2. 我的专有中继代理接收数据包,添加一些基本信息,然后将其单播转发到已知 IP 地址的 DHCP 服务器。

我遇到的问题是告诉中继代理 DHCP 服务器在哪里。我发现多播地址 224.0.0.12 是 IANA 为 DHCP 服务器保留的,所以我想我只需将服务器配置为侦听该多播流量。但是,每当我将 IP_ADD_MEMBERSHIP 的 linux 套接字选项配置为 224.0.0.12 时,它都会使用 IGMP,这是一个完全独立的协议,我不想实现它。

我只是误解了多播的工作原理吗?我不应该能够从中继代理向 224.0.0.12 发送 ping 并让它从所有 DHCP 服务器返回 ping 响应吗?


附加信息:

  • 当我做一个时,所有盒子上的接口都列出了 MULTICASTifconfig
  • 我已经ip route add 224.0.0.0/4 dev eth0在所有盒子上添加了多播路由
4

2 回答 2

2

也许您应该做客户端所做的事情 - 在目标网络上使用 DHCPDISCOVER 数据包广播(而不是多播!)?我有几个正在运行的 DHCP 服务器,它们都没有在 224 网络上监听。

您可能还需要请求您现有的地址,或者发送 DHCPRELEASE 以获取您返回的任何优惠,以免在服务器上的虚假预订中占用地址。

于 2012-05-12T04:49:27.967 回答
0

在一般 IPv4 设置中,使用广播到 UDP 端口 67,而不是多播。广播请求应由网络上的所有 DHCP 服务器响应。查看Wikipedia 页面上解释的详细信息或阅读RFC 2131第 3 节中的广播解释。另请参阅此线程

于 2012-06-01T17:59:14.607 回答