2

在此处输入图像描述

我知道这一点这个stackoverflow问题,它回答了实现“可靠多播”的已知方法,但是我遇到了一些网站,其中提到甚至路由器也应该被编程来处理通过UDP设计的自定义协议,是真的吗?

基本上我想为我的应用程序使用多播,并且我不想对更改路由器施加任何限制以配置自定义协议以可靠的方式处理 UDP,例如我正在考虑通过 UDP 实现/使用 PGM 协议来处理多播但有人说路由器也应该支持 PGM,这限制了我提供解决方案,因为客户应该为我的解决方案更改基础设施,这是没有根据的。

请让我知道是否有任何解决方案可以实现以可靠的方式处理 UDP 数据包,而无需对网络基础设施进行任何更改。

提前致谢。

编辑:

我并不是说我不想在路由器中启用多播,我肯定会在路由器中启用多播路由。当我读到 PGM 实施时,有人说即使路由器也应该支持 PGM,我认为这与商店中的商用路由器不同。我的理解错了吗?

4

2 回答 2

0

如果您使用多播,则需要向网络基础架构添加多播支持要求。除非在网络设备(多播路由器)上启用了多播路由,否则多播将仅在一个 LAN 内可用。

通过 Internet 基础设施的唯一可靠方式是单播。

更新:组播路由是在网络层执行的,组播路由器不需要知道任何关于传输/应用层的信息。在某些情况下,网络层需要有关应用层的知识,但几乎所有这些情况都与 NAT ALG(应用层网关)有关。

顺便说一句,通过 Internet 传递多播的一种可能解决方案是隧道协议(GRE、IP over IP 等)。

于 2015-07-13T13:04:12.847 回答
0

如果您不能或不想将路由器配置为转发多播流量或以其他方式处理第三方协议,则需要通过单播链路传输多播流量。 UFTP能够通过使用 UFTP 代理服务器进行多播隧道。

从手册页:

代理可以以以下三种模式之一运行:服务器代理、客户端代理或响应代理。

服务器代理通常位于服务器本地,并充当多播隧道的上游端。它侦听公共多播地址(以及指定的私有多播地址)并将下游数据包转发到下游的特定地址。上游数据包被转发回公告的来源。

客户端代理通常位于一个或多个客户端的本地,并形成多播隧道的下游端。它从一个或多个服务器代理接收单播数据,并将下游流量转发到数据包标头中指定的多播地址。来自客户端的上游流量被收集并转发回公告来自的地方作为聚合响应。

下面是一个典型配置图,其中服务器向本地网络发送多播消息,一个或多个服务器代理将消息单播到相应的客户端代理,然后再将消息多播到其本地网络。

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
x                                              Network A   x
x   ----------                                             x
x   | Server |                                             x
x   ----------                                             x
x        |                                                 x
x        |  multicast                                      x
x        |                                                 x
x        |-----------------------------------------        x
x        |                   |                    |        x
x        v                   v                    v        x
x   ----------------    ----------------      ----------   x
x   | Server Proxy |    | Server Proxy |      | Client |   x
x   ----------------    ----------------      ----------   x
x        |                   |                             x
x        |  unicast          |  unicast                    x
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
         |                   |
         |                   ------------
         |                              |
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx   xxxxxxxxxxxxxxxxxxxxxxxxxxxx
x        |       Network B  x   x       |       Network C  x
x        v                  x   x       v                  x
x  ----------------         x   x  ----------------        x
x  | Client Proxy |         x   x  | Client Proxy |        x
x  ----------------         x   x  ----------------        x
x       |                   x   x       |                  x
x       |  multicast        x   x       |  multicast       x
x       |                   x   x       |                  x
x       |-------------      x   x       |------------      x
x       |            |      x   x       |           |      x
x       v            v      x   x       v           v      x
x  ----------   ----------  x   x  ----------  ----------  x
x  | Client |   | Client |  x   x  | Client |  | Client |  x
x  ----------   ----------  x   x  ----------  ----------  x
x                           x   x                          x
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx   xxxxxxxxxxxxxxxxxxxxxxxxxxxx

这些代理也能够在 NATed 环境中工作:

如果客户端代理位于防火墙后面,则代理可以向上游代理发送心跳消息,以在防火墙中形成一个针孔,上游服务器代理可以连接到该针孔。如果客户端代理也进行了 NAT,上游服务器代理可能不知道客户端代理的 IP/端口,因此可以将服务器代理配置为等待心跳消息,并使用心跳来自的 IP/端口作为其下游地址。如果服务器代理也在防火墙或 NAT 之后,则可以在第一个服务器代理和客户端代理之间插入具有可公开访问 IP 的计算机上的第二个服务器代理。在这种情况下,第一个服务器代理设置为使用第二个作为其下游地址,

我是这个软件的作者,所以如果您需要有关如何设置它的指示,请通过 UFTP 页面底部的链接给我发送电子邮件,我们会看看我们能做什么。

更新:

在 PGM 的情况下,它可以配置为在应用层(即在 UDP 之上)或在传输层(即直接在 IP 之上)运行。如果 PGM 在传输层运行,那么您可能需要担心路由器对其有特殊支持。相反,UFTP 严格运行在应用层。

于 2015-07-13T13:17:22.473 回答