如何在服务器中隔离 UDP 多播地址 + 端口
Posted
技术标签:
【中文标题】如何在服务器中隔离 UDP 多播地址 + 端口【英文标题】:How can i isolate an UDP multicast address + port in a server 【发布时间】:2014-01-14 17:41:16 【问题描述】:我用 C# 开发了一个使用 UDP 多播系统的程序。我的多播组使用 224.0.0.1 地址进行通信。
场景如下:
我有几台服务器运行这个程序; 每台服务器使用不同的端口进行通信; 这些服务器共享同一个网络。我想保护每台服务器免受其他服务器的干扰。如果有人决定使用相同的地址和端口,这将不利于程序的稳定性。
如何将我的地址和端口与外部流量引起的噪音隔离开来?
如何隔离我的多播流量并防止其从网络中流出?
【问题讨论】:
【参考方案1】:对于第一个问题,我相信你可以实现某种控制层。
从网络拓扑 POV:
您可以尝试将路由器或代理配置为仅允许特定计算机将数据包发送到特定地址,包括多播地址。以编程方式:
添加有效服务器的本地目录。如果收到来自未知地址的数据包,请将其丢弃。 使用 Rijndael 等可逆算法加密数据包有效负载。未能解密的有效载荷可能会被宣布为无效。对于第二个问题 - 将套接字 TimeToLive 设置为 1。这意味着多播数据只会“跳跃”一次。引用:
s.SetSocketOption(SocketOptionLevel.IP,
SocketOptionName.MulticastTimeToLive, 2);
这设定了生存时间 对于套接字 - 这对于定义 多播数据。设置值 1 意味着多播数据将 不要离开本地网络,将其设置为高于此的任何值都会 允许多播数据通过几个路由器,每个 路由器将 TTL 减 1。正确获取 TTL 值是 对带宽考虑很重要
http://www.codeproject.com/Articles/1705/IP-Multicasting-in-C
【讨论】:
以上是关于如何在服务器中隔离 UDP 多播地址 + 端口的主要内容,如果未能解决你的问题,请参考以下文章
Boost UDP 多播接收器:set_option:请求的地址在其上下文中无效