【问题标题】:Broadcast on different subnets在不同的子网上广播
【发布时间】:2014-01-06 10:09:14
【问题描述】:

如果你能帮我解决我的问题,请。一方面,我有 IP 172.27.13.2 的服务器连接到路由器 172.27.13.1 的 WAN 接口......然后在我的路由器 192.168.1.1 的无线 LAN 上,我连接了几个客户端。现在我将在 C 中编写代码,其中客户端从服务器请求一些 UDP 流,然后服务器向客户端广播流,如果一些数据包丢失,客户端必须向服务器发送 NACK。我的问题是: 由于服务器和客户端位于不同的子网中,我如何从服务器进行广播? 以及客户端如何将请求和 NACK 发送到服务器,因为它们位于不同的子网中? 这些问题是否可以通过路由器配置或C代码来解决?

感谢您的帮助

【问题讨论】:

    标签: c networking broadcast wan


    【解决方案1】:

    您不能广播到不同的子网。路由器通常不会将广播数据包转发到不同的子网,除非您有一个可以正确配置的非常特殊的路由器(例如 Cisco ...)。但是,您可以将多播用于此类任务。这里是a C example

    还要检查这个:UDP broadcast packets across subnets

    注意:c 示例中的某些包含缺失,但它们很容易找到

    【讨论】:

    • 但是在客户端我只有一个 LAN 子网 192.168.1.1/24 所以为什么我不能从 192.168.1.255 的服务器发送广播数据包....问题是客户端如何可以响应 172.27.13.2 上的服务器吗?此响应是单播的。或者我不太了解这个概念。谢谢
    • @user3119422 广播仅适用于一个子网,因此您不能从 192.168.1.0/24 发送广播并让它们最终到达 172.27.13.2(也不能反过来)单播是没问题,只要您正确设置了路由器即可。
    • 出于安全原因,使用另一个接口广播地址进行广播几乎在任何地方都被禁用。想象一下这是允许的,结果是在不知道其细节的情况下对远程结构进行有效的 DoS。通常,某些代理应该将您的数据包重新传输到本地子网。如果您在企业级需要它,请研究多播和多播路由。
    • 我想从 172.27.13.2 发送广播并让它们在 192.168.1.0/24 结束,然后来自 192.168.1.0/24 的客户端必须回复 172.27.13.2...如果可以的话在我的情况下不使用广播,在我的情况下我必须如何为多播配置路由器?我是否必须使用一些特定的路由器(现在我有 linksys wrt54gl)
    • @user3119422 “我想从 172.27.13.2 发送广播,并让它们在 192.168.1.0/24 结束”。正如我在回答中所说,除非您有特殊的路由器,否则这根本不可能!默认情况下禁用广播到其他子网,否则会到处都是 DoS。
    【解决方案2】:

    由于服务器和用户都在不同的子网中。由于路由器不转发广播。但是我们通过修改路由器配置来解决。 如果您有 cisco 路由器并且用户连接在 cisco 交换机上,您可以在 vlan 上的交换机上使用 ip helper address 命令。您可以在路由器 ACL 上允许 udp 数据包

    【讨论】:

    • 嗨,我没有 Cisco 路由器,我读到他们可以做到这一点......所以我决定在 C 中使用多播套接字来解决我的问题。谢谢
    猜你喜欢
    • 1970-01-01
    • 2010-09-27
    • 2018-08-17
    • 1970-01-01
    • 2011-11-09
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    相关资源
    最近更新 更多