Der Zweck von Multicasting auf IP-Ebene besteht darin, die Bandbreite für allgemeine Netzwerksegmente zu reduzieren, in denen viele Benutzer denselben Datenverkehr erhalten möchten. Es ist normalerweise auf ein bestimmtes Subnetz beschränkt, und ein IP-Router überträgt das Multicast nicht über das Subnetz hinaus. Dies wird aus Gründen der Skalierbarkeit getan - es wäre keine gute Idee, einem Host zu erlauben, Multicast-Pakete zu erzeugen, die an jede IP-Adresse im Internet weitergegeben werden.
Es gibt verschiedene Möglichkeiten, an "Anwendungslevel" Multicasting zu denken. Ein Ansatz besteht darin, einen Multicast-Baum unter Verwendung der am Multicast teilnehmenden Host-Computer aufzubauen. Der Dijkstra-Algorithmus könnte dazu verwendet werden (Wikipedia hat eine vernünftige Beschreibung davon). Die Liste der teilnehmenden Computer zu pflegen und den Baum auf dem neuesten Stand zu halten, kann jedoch eine Menge Arbeit bedeuten, wenn Hosts dem Netzwerk beitreten und das Netzwerk zu einem erheblichen Preis verlassen. Und Sie haben wahrscheinlich keine gute Schätzung der auf der Anwendungsebene verfügbaren Hop-Kosten.
Ein anderer Ansatz, den Sie überprüfen sollten, ist der Flutungsalgorithmus, der im Query-Routing-Protokoll des Gnutella-Netzwerks verwendet wird. (Wikipedia hat auch eine gute Beschreibung dazu.) Dieser Ansatz verringert die Notwendigkeit, einen Multicast-Baum zu erstellen, hat aber den Nachteil, dass mehr Netzwerkverkehr generiert wird. In der Tat, viel mehr Netzwerkverkehr, da der Verkehr mit dem Quadrat der Anzahl der Knoten wächst, d. H. O (n ** 2).