单播通过多播

假设我有一个带有组ID的组播组,并且我想只发送一个组成员(就像我们在选播中那样)。 可能吗? 如果是,那么如何?

根据定义,发送到多播组的所有数据包将被多播组的所有成员接收。 向多播组发送数据的设备不必知道收件人是谁。 发送者将数据包发送给组播ID,任何感兴趣的接收者都可以听到它们。 在现代networking中,路由器跟踪哪个末端节点正在参与特定的多播组,并且只向这些节点发送多播stream量,因此不需要将mcaststream量发送到没有订户的子网。 networking上唯一被任何networking跟踪的状态是由路由器决定哪些子网/端点在/不在mcast组中。

在应用程序级别,可以跟踪哪些terminal节点正在参与一个组,尽pipe它取决于确切的应用程序。 当节点宣布他们想要参与一个组播组时,stream量不会传递到所有节点。 但是,某些应用程序协议需要向mcast组发布通告,这些通知可以传递到所有节点,从而可以粗略跟踪谁在组中。 这种stream量看起来类似于这样的:

192.168.231.18:33411 -> 224.0.0.1:80 

数据包形成的反面:

 224.0.0.1:80 -> 192.168.231.18:33411 

被认为是畸形的,并且会被大多数TCP / IP堆栈丢弃。

将内容通过多播传送到特定节点的唯一方法是让路由器执行必要的数据包路由。 这可能是可能的,但是对于需要它的多播协议(如果有的话),将会被烧入路由器操作系统。 这种能力将成为规则的决定性例外。


更新:多播内的任播

多播的通信方向是一个主机发送给一组用户。

任播是一个主机发送到离组最近的单个节点。

两者在定义上几乎是相反的,根本不能合并在一起。

但是,您可以使用该模型 。 组播数据包的传播距离受到路由器的限制,互联网边缘路由器一般不允许mcast数据包通过。 这限制了多点传送到站点内部。 为了将多个站点连接到单个多播组,站点内的节点需要从某个主服务器获取单播数据,然后将其中继到本地多播组。 它看起来像这样: MultiAnycast

曲线虚线表示阻止组播的边缘路由器。 长虚线是到本地主服务器的单播stream。 这个过程将会是这样的:

  1. 本地主节点连接到主(单播)。
  2. 客户端订阅其本地多播组(多播)。
  3. 主人开始发送数据给本地大师(单播)。
  4. 本地主站将该数据转发到多播组(多播)。
  5. 客户端收到组播数据包。

把它想象成无线电中继站。 中继器在带外(卫星下行链路,微波中继,埋地电线等)接收其广播内容,然后通过无线电天线广播。 本地主设备是中继器,带外链接来自主设备的单播stream,而实际的无线电广播本身是对订阅客户端的多播。

一些networking设备可能能够提供这些信息,但我不知道这样做的任何标准方式。 当一个节点join一个组播组时,不会有任何通告发送给这个源。