在互联网上进行UDP组播?

23

我不确定如何最好地解决我的问题。我有一个运行在远程机器上的服务,可以接收和处理UDP数据包。我希望服务能够重新发送这些数据包给任何想要它们的人(可能没有人,通常是一个机器,但也可能是多个)。

我认为UDP组播是理想的选择-服务可以发送到组播组,注册了多少接收者并不重要,甚至没有注册接收者也可以。

然而,我希望能够通过互联网访问它,根据我所了解的情况,使用UDP组播几乎是不可能的。是否有其他方法可以实现这一点?

如果相关的话,我的客户端和服务都是用C#编写的。

2个回答

22

通常情况下不可能实现,因为多播数据包无法被路由。

有一些技术可以解决这个问题(如DVMRP、MOSPF等),但它们都要求你能够配置服务器和客户端之间的所有路由器(或创建隧道)。有一些带有多播支持的骨干网(如Abilene、Mbone),但这些对于大学等机构最为重要。普通消费者的互联网没有多播功能。

很遗憾,您需要使用点对点通信。但是请放心,互联网、电台和电视都采用点对点传输相同的数据,造成了相当大的带宽浪费。


2
Mbone 已经关闭很长时间了,IPv6 强制使用组播,一些 ISP 拥有用于 DVB 的 IPv4 组播,例如德国和英国。 - Steve-o
3
许多服务在本地使用UDP或PGM进行多播。如果您需要连接其他地方,比如通过互联网连接远程站点,可以使用TCP隧道,它监听本地的UDP并将流量路由到另一侧,在那里重新广播。这对于连接两个办公室等情况非常有效。如果您需要有关UDP的帮助,请参考以下教程:http://jarloo.com/code/networking/c-udp-multicasting-tutorial/ - Kelly

11

首选方法是使用叠加式组播,即在对等方之间使用TCP链接,并在其上实现组播语义。

许多IPv4路由器不支持组播或已禁用,IPv6规定必须支持组播,并已删除广播语义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接