【发布时间】:2011-04-14 02:24:49
【问题描述】:
我的问题是针对 C 语言的 Linux。
假设子网 /16 上的主机 A 正在发送广播 UDP 数据包。 (即通过广播到 xxx.xxx.255.255)
子网掩码 /24 的子网中的主机 B 有没有办法接收该广播?
我在主机 B 上的测试程序在正确的端口上等待,但如果 A 发送到 xxx.xxx.255.255,则不会收到任何内容。但是在使用 xxx.xxx.xxx.255 时会这样。
此外,我还有一些限制 1.我无法更改网络配置, 2. 在主机 A 上运行的旧程序也无法更改。
谢谢!
【问题讨论】:
-
准确的说是收到发送到x.x.255.255的以太网帧,但是没有得到ip数据报
-
我猜这就是 tcpdump 捕获它的原因?谢谢!我只是要深入到那个级别......
-
以太网有源地址和目的地址字段。以太网上有一些保留地址,其中一个保留地址是“广播”……具体来说,目标以太网(即 Mac)地址中的所有 48 位都设置为 1。如果 NIC 看到广播,它将将数据包向上发送到主机的堆栈。当您的 IP 层看到此帧时,它会查看它是否在 IP 层被正确寻址...这就是您无法通过 UDP 接收它的原因...不匹配的子网会被 IP 层拒绝。
标签: c linux sockets broadcast subnet