2

我们在我们的应用程序中利用多播向连接到中间层的客户端有效地广播更新。网络工程师不断向我询问“我们的多播如何工作”以及它支持哪些多播协议。我对这些类型的问题感到困惑,就我而言,我们的客户端进程只需通过发出以下命令来加入多播组:

m_sSocket = socket(PF_INET, SOCK_DGRAM, 0);

if (m_sSocket == INVALID_SOCKET)
{
    SocketError();
    return false;
}

sockaddr_in saServer;
ZeroMemory(&saServer, sizeof(sockaddr_in));

saServer.sin_family = AF_INET;
saServer.sin_addr.s_addr = htonl(INADDR_ANY);
saServer.sin_port = htons(nMulticastPort);

if (bind(m_sSocket, (sockaddr *)&saServer, sizeof(sockaddr_in)) == SOCKET_ERROR)
{
    SocketError();
    return false;
}

m_ipMulticast.imr_multiaddr.s_addr = inet_addr(tostring(strMulticast).c_str());
m_ipMulticast.imr_interface.s_addr = htons(INADDR_ANY);

// join the multicast group
if (setsockopt(m_sSocket, IPPROTO_IP, IP_ADD_MEMBERSHIP, 
               (LPCSTR)&m_ipMulticast, sizeof(ip_mreq)) == SOCKET_ERROR)
{
    SocketError();
    return false;
}

那里没有关于它应该使用什么多播协议的区别。 有人对我如何回答这类问题有任何有用的建议吗? 目前我只是提供我们多播的地址/端口,并要求他们在他们的网络路由器上打开这个地址/端口。然而,这似乎还不够,他们需要更多信息(?)

4

3 回答 3

3

您的网络工程师很可能正在尝试理解以下内容:

1) 网络中的订阅是密集的还是稀疏的?思科交换机(我猜是其他交换机)可以根据您期望在每个网段上的订户数量进行不同的配置。这些设置会影响交换机的性能。

2) 您是否计划跨越多个 LAN 或 VLAN?你的 TTL 会不是 1 吗?有些设置还控制用于在交换机中路由数据包的算法。错误的设置会使每个数据包都命中交换机 CPU。不是什么好事。

这些问题的答案会影响网络的设计,即在路由器和交换机中配置哪些设置。您的网络工程师可能对协议和内容感到好奇,但那些更高级别的问题会影响他们的工作。我的猜测是他们想了解这些问题,但不知道如何问他们。

于 2009-08-18T12:45:33.477 回答
2

我有幸与我们自己的网络工程师密切合作,支持和构建多个支持多播的应用程序。

这是他们要问的(假设他们从网络级别了解“多播”是什么以及它是如何工作的)。

  1. 您的应用程序是否经常加入/离开群组?(对于故障排除很重要)
  2. 您的应用程序是否会在非工作时间离开群组?(允许网络一个窗口重建组播树)
  3. 通过多播套接字进行通信的性质是什么?您对数据丢失有多敏感(udp 不像 TCP/IP 那样保证到达)?
  4. 涉及多少台服务器,它们是什么/在哪里?(帮助他们了解从 A 到 B 的多播可能需要进行哪些网络更改)
  5. 谁是多播的生产者/消费者?(与#4一起使用)
于 2010-02-19T15:13:52.713 回答
0

有免费的跨平台库 ACE ( http://www.cse.wustl.edu/~schmidt/ACE.html ),其中包含在 TAO (The ACE Orb) 中的多播实现。很抱歉交叉引用,但我相信你的问题已经解决了。

于 2009-08-18T11:37:24.393 回答