【发布时间】:2011-03-02 10:47:54
【问题描述】:
我有 2 个盒子: - 我称之为“Omap”的嵌入式设备(带有 linux 的 ARM Omap)。 - PC(可以是 Windows 或 linux)。
场景 1
两个盒子都在同一个网络中(例如:我的办公室)。
Omap 从 DHCP 服务器获取其地址(例如:192.168.10.110)。 PC 始终具有相同的地址(例如 192.168.10.104)。
我可以在任何端口上成功交换 UDP 广播数据包。
成功。
场景 2
这两个盒子位于没有 DHCP 服务器的网络中。
PC 有一个静态 IP 地址(例如:10.10.10.20)。
Omap 启动,寻找 DHCP 服务器,但没有找到,并且处于我所说的“错误 IP 地址”状态。
现在...广播 UDP 数据包来自 Omap 工作:PC 可以看到它们。
反之则不行:Omap 看不到 PC 广播的 UDP 数据包。
我在另一台 PC 上使用 Wireshark 来验证数据包是否正在发送。
失败。
我尝试更改 Omap ip 地址(使用 ifconfig)...没有运气。
我错过了什么?
为了完成图片,当 Omap 在场景 2 中时,如果我运行 udhcpc ...它可以与 DHCP 服务器通信并获取 IP 地址。我还看到了 Wireshark 的数据包。 所以这意味着 DHCP 客户端能够广播 UDP 数据包。 (是的,我尝试使用 DHCP 端口 67/68,但它不起作用)。
我正在使用 Boost C++ Asio UDP 套接字。具体来说,我拿了多播示例并将它们更改为广播。
感谢任何帮助。
谢谢, 贝内代托
PS:一些澄清。
Omap 设备是一种嵌入式设备,我的目标是客户不必在现场设置其 IP 地址。这就是为什么我要与 PC 交换广播数据包,以从我在 PC 上运行的其他软件获取“好的”IP 地址(即使在具有静态 IP 地址且没有 DHCP 服务器的网络中,它也知道当前子网是什么)。
基本上我实现了一个非常简单的 DHCP 协议。 PC 可以收听 Omap 广播的数据包,反之则不行。
【问题讨论】:
-
Omap 如何在没有 IP 地址的情况下发送 UDP 广播?可能是在 Omap 上没有配置 IP 地址的网络堆栈只会丢弃所有传入的 IP 数据包。
-
“我尝试更改 Omap ip 地址(使用 ifconfig)...没有运气。”你做了
ifconfig ethXX up吗?接口必须启动。
标签: c++ udp ip-address broadcast