标签: reliable-multicast

什么是可靠多播的最有效协议?

当发送者需要通过以太网以可靠的方式将相对大量的数据(比如几兆字节每秒)多播到同一子网上的适量接收器(比如少于十几个)时,最有效的协议是什么?通过可靠,我的意思是,如果数据包丢失,协议确保重新发送,以便任何接收器都不会丢失数据." 高效"这个术语要定义起来要困难得多,但是假设我们希望通过两端适度的CPU使用来最大化吞吐量并最小化网络带宽.这仍然不是一个明确的定义,但它是我能想到的最好的.面向流或面向消息的协议都是可以接受的.

我很欣赏现实世界的例子,我很乐意接受主观的答案,即你最喜欢的多播协议是什么,如果你能解释它的优点和缺点.

ethernet protocols multicast file-transfer reliable-multicast

16
推荐指数
3
解决办法
1万
查看次数

IPPROTO_RM在接受呼叫期间阻止

这个问题类似于/sf/ask/815522991/,但我的代码与它略有不同,因此可能会导致在一个不同的答案.

我试图获得可靠的多播服务器/客户端概念验证设置.

解决方案本身是服务器/客户端连接.客户端通过TCP/IP连接到服务器.然后,服务器打开一个可靠的多播套接字供客户端监听.客户端通过TCP发送消息,服务器通过TCP回送消息IPPROTO_RM.最终目标是让许多客户端连接到服务器,所有客户端都接收每个回显的消息.

示例代码基于此页面.

我已经设置了类似的RM套接字(参见下面的清单).TCP套接字工作正常.问题在于RM套接字.服务器开启了组播插座,然后bindsconnects多播地址正确.然而,客户端是listens正确的,但accept永远是对块的调用.

客户端和服务器进程都在同一主机上运行.

我已经检查过,主机上安装了多播支持(Server 2008).


更新:我注意到,如果我先从发送方侧向套接字发送一些数据,有时接受将返回.这不是理想的,也不可靠.

更新:标志指向开关.看起来像一个小集线器不会削减它.我们发生了一个搞笑的事件,导致整栋大楼失去了通讯.


房源

服务器创建并连接多播发送方

short
   Port = 0;
const char
   *Address = "234.5.6.7";

SOCKET
   RMSocket;

SOCKADDR_IN 
   LocalAddr, 
   SessionAddr;

RMSocket = socket(AF_INET, SOCK_RDM, IPPROTO_RM);


if (RMSocket == INVALID_SOCKET)
   {
   return Failed;
   }

LocalAddr.sin_family = AF_INET;
LocalAddr.sin_port = htons(0);
LocalAddr.sin_addr.s_addr = htonl(INADDR_ANY);

if ( bind( RMSocket, (SOCKADDR*)&LocalAddr, sizeof(LocalAddr)) == SOCKET_ERROR )
   {
   return Failed;
   }

SessionAddr.sin_family …
Run Code Online (Sandbox Code Playgroud)

c multicast winsock2 reliable-multicast

9
推荐指数
1
解决办法
299
查看次数

实现UDP组播可靠的方法

我正在为我的大学考试做准备,去年的一个问题是"如何使UDP组播可靠"(如tcp,重传丢失的数据包)

我想过这样的事情:

  1. 服务器使用UDP发送多播

  2. 每个客户端发送接收该数据包的确认(使用TCP)

  3. 如果服务器意识到不是每个人都收到数据包,它会将多播或单播重新发送到特定客户端

问题是可能有一个客户端通常丢失数据包并强制服务器重新发送.

好吗 ?

udp tcp multicast reliable-multicast

6
推荐指数
1
解决办法
1429
查看次数

本地网络上的可靠组播

我正在使用 C++ 和 Qt 实现一个消息系统。经过深思熟虑,我确定多播或多播风格的技术最能解决我的问题。然而,我了解到UDP的不可靠性并认为这是不可接受的。

我的要求如下:

  • 消息将以二进制序列化形式发送。
  • 从网络上的任何给定节点,我必须能够向其他节点发送消息。
  • 消息传递必须有保险。

我听说过 OpenPGM 和 NORM 作为 UDP 的替代品。如果有人有这方面的经验,可以分享一下吗?

我也对自己在应用层实现“可靠”多播的可能性持开放态度,但如果有一个库已经实现了这一点,我不希望这样做。

我使用的是 C++ 和 Qt,因此基于 .NET 或 Java 的解决方案是不可接受的,除非它们是开源的并且我可以将它们移植到 C++。

非常感谢。

编辑 20120816T1853 MDT:另一个问题:是否必须在硬件/IP 级别实现 PGM 或 NORM?或者它们可以叠加在现有协议之上吗?

c++ network-programming multicast reliable-multicast

4
推荐指数
1
解决办法
3467
查看次数