我有2个盒子: - 一个嵌入式设备(带有linux的ARM Omap),我称之为“ Omap ” . - a PC (可以是Windows或Linux) .
场景1
两个盒子都在同一个网络中(例如:我的办公室) .
Omap从DHCP服务器获取其地址(例如:192.168.10.110) . PC始终具有相同的地址(例如192.168.10.104) .
我可以在任何端口上成功交换UDP广播包 .
成功 .
情景2
这2个框位于网络 withOUT DHCP服务器中 .
PC具有静态IP地址(例如:10.10.10.20) .
Omap启动,查找DHCP服务器,找不到它,并且处于我称之为"bad IP address"状态的状态 .
现在......从Omap广播UDP数据包起作用:PC可以看到它们 .
相反的方法不起作用:Omap看不到PC广播的UDP数据包 . 我在另一台PC上使用Wireshark来验证数据包是否正在发送 .
失败 .
我试图改变Omap的ip地址(使用ifconfig)......没有运气 .
我错过了什么?
为了完成图片,当Omap在场景2中时,如果我运行udhcpc ...它可以与DHCP服务器通信并获得IP地址 . 我也看到了Wireshark的数据包 . 这意味着DHCP客户端能够广播UDP数据包 . (是的,我尝试使用DHCP端口67/68,但它不起作用) .
我正在使用Boost C Asio UDP套接字 . 具体来说,我拿了多播示例并将其更改为进行广播 .
任何帮助表示赞赏 .
谢谢,Benedetto
PS:一些澄清 .
Omap设备是一个嵌入式设备,我的目标是客户不必在现场设置其IP地址 . 这就是我与PC交换广播数据包的原因,以便从我在PC上运行的其他软件中获取"good" IP地址(即使在具有静态IP地址且没有DHCP服务器的网络中,也知道当前子网是什么) .
我实际上实现了一个非常简单的DHCP协议 . PC可以监听Omap广播的数据包,但反之亦然 .
2 回答
一些想法......
1)ifconfig eth0 - 接口是否正常,是否有IP地址,合适的网络掩码等?
2)路由 - 配置是否正确? (Netstat -r或route)(如果IP地址位于不同的未路由子网上,这可能是一个问题,具体取决于网络掩码 . )
3)防火墙 - 我无法告诉你有多少时间我遇到了防火墙问题 . 确认它没有在那里停止 .
4)直接在各自的系统上尝试tcpdump - 它显示了什么?什么是通过?
5)你能从一个系统ping到另一个系统吗? (ICMP可能有不同于UDP的规则 . )
(我打赌在下行界面,不同的子网被网络掩码阻止,或者没有路由来解决主机问题 . )
如果您使用
ifconfig
设置IP地址,则可能不够 . 通常,您还必须配置路由表,通常包括添加两个路由:一个说“此网络附加在eth0
" and one saying "这是默认网关” . (后者不是严格要求的 . )"Network is unreachable" - 我假设您试图从OMap ping PC?如果你的电脑是
192.something.something.something
,你的"OMap"有路由表你的评论:...那么它将无法发送 . 只有当你尝试将事情发送到
10.something
时,该路由表才有效:那个's the only route it knows. If you'没有运行10.0.0.0/8
网络,那么该路由是错误的 .如果要执行此操作,请在路由表,IP地址等上查找一些材料 . 虽然,如果你想拥有普通人"plug it in" - 他们这么错了吗?你可以't just pick an IP address on a network without some form of mediation: Either a human mediates, and sets it manually, or you use something like a DHCP server. Otherwise, you could be picking somebody else'的地址 . 此外,你需要知道你是在一个
10.0.0.0/8
网络,一个网络,一些其他局域网,还是互联网... DHCP为你做的......