嗨,我正在创建流媒体应用程序。因为我正在使用 IP 多播。
告诉我如何在将客户端添加到组之前对其进行验证。
我和 IGMP 有什么关系吗?
你不会用你的应用程序来做这件事。
IGMP
是一个互联网层协议,它甚至可能无法到达您的应用程序。
每当一个单元想要接收到某个地址的多播时,它都会发送一个IGMP
加入组的请求。路由器收到请求并记住该用户希望属于该组。
每当路由器接收到发往该地址的多播包时,它会将其路由到所有组成员,可能会考虑一些访问控制限制。
所有组操作均由路由器执行。您只需将UDP
数据包发送到多播地址(即224/4
),然后路由器决定是否将其路由到订阅者。
如果您想限制多播数据包的目的地,您可以在路由器上进行。
不过,您应该明白,上面的“路由”一词意味着路由器将数据包发送到适当的接口,其中标头中的多播目标地址Ethernet
和标头中的多播目标地址IP
。连接到接口的以太网交换机(如果有)将在所有活动端口上分发数据包。由于它对 Internet 路由一无所知,它只会看到Ethernet
标头中设置的广播/多播位并采取相应的行动。
但是,有些link layer
设备(以太网交换机)会窥探network layer
标头并将多播限制到订阅的单元。那就是所谓的IGMP snooping
。其中一些还可以控制访问。
好的,控制谁可以加入多播组是合法的。我可以看到完成的唯一方法是过滤路由器接口上的入站 IGMP 数据包。如果“允许的订阅者”列表足够静态,这将起作用,但如果有很多变化,它很快就会变得站不住脚。
如果(且仅当)有管理控制一直到“客户放置的”路由器,我怀疑可以在那里做一些事情,以限制设备可见的组,但这在很大程度上取决于环境(在“来自单个提供商的宽带和多播视频”场景,使用提供商管理的 DSL 路由器的合同要求是可能的)。
除了 Quassnoi 关于多播如何工作的评论之外,我还想知道……为什么要限制多播成员资格和/或在将接收者添加到组之前对其进行验证?