这个问题可能源于对 IP 多播的根本误解,所以如果我不在基地,请纠正我。
我正在尝试编写 C 代码来查找网络上所有 DHCP 服务器的 IP 地址。用例是这样的:
- 客户端广播 DHCP 发现。
- 我的专有中继代理接收数据包,添加一些基本信息,然后将其单播转发到已知 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 响应吗?
附加信息:
- 当我做一个时,所有盒子上的接口都列出了 MULTICAST
ifconfig
- 我已经
ip route add 224.0.0.0/4 dev eth0
在所有盒子上添加了多播路由