Multicast
Multicasting oder Multiple Broadcasting (von englisch : multicast ) ermöglicht das gleichzeitige Versenden von Informationen an mehrere Teilnehmer eines Netzwerks von einem Punkt oder Knoten aus . Anders als beim Broadcasting werden die Empfänger jedoch zuvor vom Sender ausgewählt . Das bedeutet, dass das Senden eingeschränkt ist und nicht alle Benutzer in einem Netzwerk die Daten erhalten [ 1 ] .
Vor dem Senden der Informationen müssen eine Reihe von Parametern festgelegt werden. Um es zu empfangen, ist es notwendig, eine sogenannte "Multicast-Gruppe" einzurichten. Dieser Multicast-Gruppe ist eine Internet -Adresse zugeordnet , auf diese Weise sendet der Absender der Multicast -Nachricht diese an eine oder mehrere Gruppen und später erreicht die Nachricht die Prozesse, die an dieser Gruppe abonniert sind, wobei ein Prozess abonniert werden kann zu mehreren zur Zeit Die aktuelle Version des Internetprotokolls (IP), bekannt als IPv4 , reserviert Typ-D-Adressen für Multicasting. IP-Adressen sind 32 Bit lang , und Typ-D-Adressen sind solche, bei denen die 4 höchstwertigen Bits „1110“ ( 224.0.0.0a 239.255.255.255) sind.
Multicasting im Internet
|
Einzelsendung |
|---|
|
Geocasting |
Einige Beispiele für Multicasting im Internet sind:
- IEEE 802.1aq – Shortest Path Bridging (SPB)
- IP-Multicast
- Internet-Relay-Chat (IRC)
- NNTP
- PSYK
- Peercasting mit Punkt-zu-Punkt -Verbindungen ( Peer-to-Peer ).
Wie es funktioniert
Die oben erwähnte Gruppenadressierung ist eine der Schlüsseleigenschaften von IP-Multicast, da sie grundlegend für das Funktionieren dieses Kommunikationskonzepts ist. Zusätzlich besteht die Möglichkeit, eine statische Adresse zu vergeben, in der beispielsweise eine Verbindung zu einem Multicast-Server konfiguriert werden kann, damit dieser den entsprechenden Dienst anbietet.
Zuverlässigkeit
Bormann [ 2 ] definiert den Begriff der Zuverlässigkeit aus Sicht des Senders und Empfängers der Nachricht. Aus Sicht des Zweiten gilt das Protokoll als zuverlässig, wenn es feststellen kann, wann es fehlschlägt. Andererseits gilt es aus Sicht des Senders als zuverlässig, wenn sichergestellt ist (mit hinreichender Wahrscheinlichkeit), dass alle Nachrichten innerhalb eines Zeitlimits bei allen nicht ausgefallenen Empfängern ankommen. Das heißt, der Zuverlässigkeitsbegriff steht in weitem Zusammenhang mit Fehlererkennungs- und Wiederherstellungsmechanismen.
Hinsichtlich des Konzepts der Zuverlässigkeit bei Multicast kann die folgende Definition gegeben werden: Der Begriff Zuverlässigkeit bei Multicast entspricht der endgültigen Lieferung aller Daten an alle Mitglieder der Gruppe, ohne dass eine bestimmte Lieferreihenfolge eingehalten wird. [ 3 ]
Zwei Arten von Multicast werden je nach verwendetem Fehlerbehebungsverfahren unterschieden: Sender-initiiert oder Empfänger-initiiert. [ 4 ]
Einfaches Multicast
Beim einfachen Multicast betrachten wir die Kommunikation als zuverlässig Eins-zu-Eins. Bei dieser Art von Multicast schlagen wir ein Protokoll vor, bei dem ein vom Sender initiiertes Fehlerwiederherstellungsverfahren verwendet wird , d. h. eines, bei dem der Absender für die Fehlerwiederherstellung verantwortlich ist und darin besteht, dass jeder Empfänger eine Empfangsbestätigung (ACK) an den sendet Absender, wenn eine Nachricht von ihm eintrifft.
Dieses Verfahren ist in Umgebungen problematisch, in denen es mehrere Multicast -Gruppen gibt, da eine große Anzahl von ACKs den Sender erreichen, was eine sogenannte ACK-Implosion verursacht, bei der der Sender gesättigt ist.
Bei dieser Art von Multicast wird die Nachricht mindestens einmal zugestellt, sodass Duplizierungsprobleme auftreten können. Darüber hinaus sagen wir, dass es eins-zu-eins zuverlässig ist, da es nicht dem Konzept der Übereinstimmung oder Unteilbarkeit entspricht: Wenn ein Prozess eine Nachricht empfängt, dann empfängt sie die gesamte Gruppe; oder alle oder keine.
Zuverlässiges Multicast
Multicast wird häufig für Multimediaverkehr verwendet, sodass gelegentlicher Paketverlust kein Problem darstellt. Hinzu kommt, dass IP-Multicast sehr zuverlässig ist und mit den im Basic-Multicast erwähnten Problemen häufig IP-Multicast über UDP verwendet wird .
Bei diesem Typ wird das zweite oben erwähnte Fehlerwiederherstellungsverfahren verwendet, das empfängerinitiierte Verfahren, bei dem der Empfänger für die Fehlerwiederherstellung verantwortlich ist. Das heißt, Empfangsbestätigungen (ACK) werden nicht separat gesendet, sondern der Absender sendet sie als Anhang an andere Nachrichten, die an die Gruppe gesendet werden, um den Empfang früherer Nachrichten zu bestätigen, was als Huckepack bezeichnet wird (der Absender sendet beispielsweise eine Nachricht X an einen Prozess p und bestätigt durch ein angehängtes ACK, dass er zuvor eine Nachricht von p korrekt erhalten hat ). Darüber hinaus senden Empfänger separate negative Bestätigungen (NACK), wenn ein Nachrichtenverlust erkannt wird.
Auch bei diesem Verfahren kann es zu einer Implosion kommen, jedoch von NACK. Um dies zu vermeiden, wenn eine bestimmte Anzahl von Empfängern die aktuelle Nachricht nicht, aber die nächste erhalten, starten sie ein zufälliges Timeout und das NACK wird nur einmal von dem Empfänger an den Sender gesendet, dessen zufälliges Timeout zuerst abläuft. Dies minimiert doppelte NACKs. Diese Arten von Mechanismen sind als RINA ( Receiver-Initiated with NACK Avoidance) bekannt. [ 5 ]
Beim zuverlässigen Multicast liefert ein Sendeprozess höchstens einmal eine Nachricht, und das Konzept der Übereinstimmung ist erfüllt.
So funktioniert zuverlässiges Multicast
Wir schlagen ein Beispiel mit einer Gruppe vor, die aus 3 Prozessen { p, q, r } besteht.
Bisherige Überlegungen:
- Jeder Prozess p hält eine Folgenummer für jede Gruppe, zu der er gehört.
- Jeder Prozess verwaltet einen Vektor aus n Elementen (wobei n die Anzahl der Prozesse in der Gruppe ist), wobei jedes Element der Anzahl der von einem bestimmten Prozess empfangenen Nachrichten entspricht (z. B. ist im Prozess q die Anzahl der von p empfangenen Nachrichten ).
Hinsichtlich des Sendens der Multicast-Nachricht sendet der Sendeprozess diese Nachricht an die Gruppe, wobei die entsprechende Sequenznummer und die erforderlichen Empfangsbestätigungen angehängt werden. Außerdem wird die Sequenznummer erhöht ( = + 1), wenn die Nachricht von den empfangenden Prozessen zugestellt wird.
Andererseits wird hinsichtlich des Empfangs zur Erläuterung des Konzepts die folgende Situation betrachtet: Empfang in q einer Nachricht von p an die Gruppe g, mit einer Sequenznummer und angehängten Bestätigungen < q, >. Wir haben drei Szenarien:
- Wenn = + 1: Der Prozess q F-liefert die Nachricht und erhöht sich (Anzahl der von p empfangenen Nachrichten ).
- Ja : Die Nachricht ist ein Duplikat (sie wurde bereits zuvor empfangen) und wird daher verworfen.
- Si + 1 o : Prozess q sendet eine negative Bestätigung (NACK) an p , die anzeigt, dass er eine oder mehrere Nachrichten verloren hat.
Wie im Bild rechts zu sehen ist, wird die aktuelle Nachricht von q und r zugestellt, obwohl vorherige Nachrichten eintreffen müssen, d. h. die Nachrichten kommen in einer anderen Reihenfolge für die verschiedenen Prozesse an. Dieses Problem wird durch die Verwendung eines anderen Typs von Multicast behoben, der als geordnetes Multicast bezeichnet wird.
Für den Fall, dass es der sendende Prozess ist, der Nachrichten verloren hat, wird er von dem entsprechenden Prozess mit einem NACK benachrichtigt.
Geordnetes Multicast
Der zuverlässige Multicast-Algorithmus über IP-Multicast garantiert nicht, dass Nachrichten immer in der gleichen Reihenfolge ankommen, und dies kann ein Problem für Anwendungen sein, die eine Reihenfolge erfordern.
Die gebräuchlichsten Sortierarten sind die Gesamtsortierung, die kausale Sortierung und die FIFO- Sortierung .
Typen sortieren
- FIFO-Ordnung: Wenn ein Prozess eine Nachricht m 1 und dann eine Nachricht m 2 rundsendet, müssen diese in der Reihenfolge zugestellt werden, in der sie vom Sender gesendet wurden, dh m 1 wird immer vor m 2 zugestellt .
- Kausale Reihenfolge: Wenn das Rundsenden einer Nachricht m 1 kausal vor dem Rundsenden einer Nachricht m 2 erfolgt, dann liefert ein korrekter Prozess m 1 vor m 2 .
- Gesamtreihenfolge: Wenn zwei korrekte Prozesse P i und P j zwei Nachrichten m 1 und m 2 liefern , dann liefert P i m 1 vor m 2 genau dann, wenn P j m 1 vor m 2 liefert .
Implementierung der FIFO-Sortierung
Ein Multicast mit FIFO-Ordnung hat zwei Operationen: OF-Multicast und OF-Delivery.
Die folgenden Variablen werden im Prozess P verwendet:
- S g p Zähler der Nachrichten, die der Prozess p an die Gruppe g gesendet hat
- R g q Sequenznummer der letzten von Prozess q empfangenen Nachricht p, die an Gruppe g gesendet wurde
Wenn die OF-Multicast-Operation von p für die Gruppe g durchgeführt wird
- Hängen Sie S g p in die Nachricht ein
- B-Multicast der Nachricht an Gruppe g
- Erhöhe S g p um 1 -> S g p = S g p + 1
Wenn p eine Nachricht von q erhält:
- Wenn S = R g q +1 → wird geprüft, ob es sich um die erwartete Nachricht handelt, und p verwendet die OF-Übermittlungseinstellung R g q = S
- Wenn S > R g q +1 → Aufbewahrung der Nachricht, bis die Zwischennachrichten zugestellt wurden und S = R g q +1 erfüllt ist [ 6 ]
Implementierung der kausalen Sortierung
Dieser Algorithmus berücksichtigt die Beziehung "vorher passiert" und die kausalen Ordnungsoperationen werden verwendet: OC-Multicast und OC-Lieferung, jeder Prozess p i hat seinen eigenen Vektor von Zeitstempeln.
Variablen im Prozess p
V p g Vektor mit der Anzahl der von jedem Prozess empfangenen Nachrichten
Um eine OC-Multicast-Nachricht an die Gruppe g zu senden, fügt der Prozess 1 zu seinem Eintrag im Zeitstempelvektor hinzu und sendet die B-Multicast-Nachricht zusammen mit ihrem Zeitstempel an g.
Wenn ein Prozess pi B-eine Nachricht p j liefert , muss er sie vor der OC-Lieferung in die Haltewarteschlange stellen: Er muss zuerst sicherstellen, dass er alle Nachrichten geliefert hat, die zuvor passiert sind, dies wird auf folgende Weise überprüft:
- P j wartet, bis es jede von p j gesendete Nachricht zugestellt hat
- P i wartet auf die Nachricht, die p j geliefert hat, bis zu dem Zeitpunkt, zu dem es die Nachricht gesendet hat.
Vollständige Sortierimplementierung
Der grundlegende Weg zum Implementieren einer vollständigen Ordnung besteht darin, Nachrichten, die per Multicast gesendet werden, vollständig geordnete Identifikatoren so zuzuweisen, dass jeder Prozess die gleiche Ordnung basierend auf diesen Identifikatoren durchführt.
Es gibt zwei Methoden, um Nachrichten Identifikatoren zuzuweisen:
- Sequenzer
Der als Sequenzer gewählte Prozess ist für das Ordnen der Nachrichten zuständig.
Wenn ein Prozess eine OT-Multicast-Nachricht m senden möchte, wird sie an den Sequenzer gesendet.
Der Sequencer weist den von B zugestellten Nachrichten inkrementell und fortlaufend eine Sequenznummer zu und sendet sie an alle Prozesse in der Gruppe.
Der Sequenzer gibt die Zahlenfolge per B-Multicast an die Nachrichtengruppe g mit der Bestellung bekannt.
Eine Nachricht wird auf unbestimmte Zeit in der Warteschlange gehalten, bis die OT-Zustellung gemäß der entsprechenden Sequenznummer durchgeführt werden kann.
- Vollständige Umsetzung nach Vereinbarung (ISIS)
Es wurde ursprünglich für die ISIS-Tools entwickelt (die Firma, die dieses Tool vermarktet hat, existiert nicht mehr, aber ISIS wurde an der New Yorker Börse gehandelt und wird immer noch im französischen Flugsicherungssystem oder dem amerikanischen Kriegsschiff AEGIS [1] verwendet . Derzeit ist ISIS hat sich zu einer neuen Version entwickelt, die sich mehr auf die Replikation konzentriert und VSync [2] genannt wird ). Bei n Prozessen sind die Variablen für Prozess q :
A g q : höchste vereinbarte Folgenummer für Gruppe g des Prozesses q
P g q : Größte vorgeschlagene Sequenznummer für die Gruppe g des Prozesses q
Implementierung
Bei der Umsetzung dieser Vereinbarung haben wir drei Teile (mit n Prozessen):
- Der Prozess p erstellt eine Nachricht ( m ) und sendet sie per Multicast, das heißt: p führt B-Multicast<m,i> an g durch (i eindeutige Kennung von m)
- Jeder Prozess q antwortet auf p mit einem Vorschlag P g q = max( A g q , P g q )+1
- Der Nachricht m wird vorläufig die Sequenznummer Pgq zugewiesen
- Es wird gemäß dieser vorläufigen Nr. in die Aufbewahrungswarteschlange gestellt und geordnet
- Der Prozess p entscheidet unter allen empfangenen Vorschlägen über die endgültige Sequenznummer und sendet sie erneut an alle Prozesse, das heißt: p sammelt alle vorgeschlagenen Sequenznummern und wählt die größte ( a ) als Übereinstimmung aus, wodurch B-Multicast < a durchgeführt wird. i> a g (wobei "a" die vereinbarte Reihenfolge ist)
- Jeder Prozess setzt A g q = max( A g q , a) und weist es der Nachricht i zu
- Ordnen Sie die Warteschlange neu an, wenn sie sich von der vorgeschlagenen unterscheidet
- Wenn die Nachricht an der Spitze der Warteschlange nicht zugestimmt hat, wird sie zugestellt
Praxisbeispiel
- Wir haben 4 Prozesse, von denen P1 und P4 eine Nachricht erstellen und den Multicast durchführen.
- Sobald die Nachricht gesendet wurde, erhalten sie die Ankunftsvorschläge für jeden Prozess (der Wert des ersten, der ankommt, ist geringer als der des letzten, der ankommt). Wir sammeln sie in zwei Gruppen und unterscheiden sie nach dem Prozess, der die Nachricht gesendet hat.
- Sobald die Sequenznummer ausgewählt ist, wird sie an alle Prozesse gesendet, die Mailbox neu geordnet und die Nachricht gesendet.
- Wenn die Vereinbarung, die bei einem Prozess ankommt, einen Wert hat, der größer ist als die in der Mailbox gespeicherten, warten wir, bis die anderen Vereinbarungen die Mailbox erreichen, und senden die Nachricht von der niedrigsten zur höchsten Sequenznummer.
- Wenn die Vereinbarung, die einen Prozess erreicht, einen niedrigeren Wert hat als die in der Mailbox gespeicherten, können wir diese Nachricht direkt senden, ohne warten zu müssen.
In welchem Szenario ist es sinnvoll
● Wenn Sie nach optimierter Netzwerkleistung suchen.
● Wenn Unterstützung für verteilte Anwendungen erwünscht ist.
● Falls Sie Ressourcen sparen möchten.
● Wenn Sie ein einfaches Wachstum in der Größenordnung finden möchten.
Referenzen
- ^ "Multicast: Mehrpunktverbindungen für effiziente Übertragung" . IONOS Digitalguide . Abgerufen am 6. Mai 2022 .
- ↑ Bormann, C.; Ott, J.; Gehrcke, H.; Seifert, N. (1994). "MTP-2: Auf dem Weg zum Erreichen der SERO-Eigenschaften für den Multicast-Transport". Proceedings of ICCCN .
- ↑ Floyd, S .; Jacobson, V.; Liu, C.-G.; McCanne, S.; Zhang, L. (Dezember 1997). "Ein zuverlässiges Multicast-Framework für leichte Sitzungen und Framing auf Anwendungsebene" . IEEE/ACM Transactions on Networking 5 (6): 784-803. doi : 10.1109/90.650139 .
- ↑ Brandt, Joseph J. (26. Mai 1998). "Zuverlässige Multicast-Protokolle und ihre Anwendung auf dem Green Bank Telescope". proz. SPIE 3351, Teleskopsteuerungssysteme III .
- ^ Kostin, A.; Ilushechkina, L. (Juni 2010). Modellierung und Simulation verteilter Systeme .
- ↑ Coulouris, George F. (2012). Verteilte Systeme: Konzepte und Design . Addison-Wesley/Pearson Education Ltd. ISBN 978-1-4479-3017-4 . OCLC 899731054 . Abgerufen am 27. Juni 2020 .
Bibliographie
- Rodrigo Santamaria. Hinweise Verteilte Systeme Universität von Salamanca. | Thema 5 – Koordinierung und Vereinbarung [ 1 ]