4. Verwendung von Session Announcements

Bisher haben wir immer von Multimedia-Konferenzen im INTERNET gesprochen. Eine wesentliche Frage blieb bisher jedoch unbeantwortet: Welche Konferenzen existieren überhaupt, zu welchen Zeiten finden sie statt, und wie es ist möglich daran teilzunehmen?

Diese, sagen wir "Programmzeitschrift" wird ebenfalls mittels IP-Multicast im INTERNET verbreitet. Eine Konferenz wird dabei mit Hilfe des "Session Description Protocols" (SDP [Hand9611:SDP]) beschrieben. Diese Beschreibung beinhaltet Informationen wie:

Das Format ist dabei fest definiert, so daß entsprechende Programme diese Ankündigungen aussenden und auch empfangen können. "Sdr" ist ein Beispiel für ein solches Programm.

Übermittelt werden diese Ankündigungen mittels IP-Multicast unter Verwendung des Session Announcement Protocols (SAP [Hand9611:SAP]). Die Ankündigungen werden dabei periodisch an eine definierte Multicast-Adresse gesendet, so daß eine globale verteilte Datenbank entsteht.


4.1. Übertragung von SAP/SDP über PPP

Auch Rechner, die nur temporär mit dem INTERNET über derartige PPP-Verbindungen gekoppelt sind, benötigen den Zugriff auf die Informationen über die stattfindenden Konferenzen. Demzufolge müßten diese SAP/SDP Pakete ebenfalls über die PPP-Verbindung gesendet werden.

Wie bereits in Kapitel [mcast] beschrieben, besteht das erste Problem darin, daß SAP mittels IP-Multicast übertragen wird. Um diese Pakete übertragen zu können, gibt es zwei Möglichkeiten:

  1. Die Übertragung von IP-Multicast wird direkt im PPP realisiert.
  2. Die Announcements werden über einen IP-Unicast "Tunnel" zwischen zwei Prozessen (einer auf jeder Seite der PPP-Verbindung) übertragen.

Bei der zweiten Variante stellt sich die Frage, wie das konfiguriert werden muß. Dieser Tunnel zwischen den beiden Prozessen muß durch irgendeine Konfiguration eingerichtet werden. Besteht die PPP-Verbindung jedoch nur recht selten oder immer für relativ kurze Zeit, so entsteht hierdurch ein zusätzlicher Aufwand.

Die erste Variante ermöglicht die Übertragung der Informationen ohne weitere Konfiguration. Es besteht in diesem Falle sogar die Möglichkeit, daß die PPP-Implementierungen hierzu ein spezielles Protokoll verwenden, mit dem diese Announcements übertragen werden können. Somit lassen sich auch Kompressionsverfahren einsetzen, um die benötigte Bandbreite zu reduzieren.


4.2. Welche Bandbreite wird für SAP/SDP benötigt?

Zu Beginn dieses Kapitels beschrieben wir bereits, daß die SDP-Ankündigungen mittels SAP periodisch neu verschickt werden. Um nun bewerten zu können, wie groß das dadurch entstehende Datenvolumen ist, untersuchten wir, wieviele Ankündigungen mit welcher Größe in welcher Zeit versendet wurden. Die Ergebnisse sind in der Tabelle [sdp:announcments] zusammengefaßt.

Zeitraum Anzahl Announcements Anzahl der versch. Announcements Datenvolumen
6,5h 1364 26 ca. 800 kbyte

Messung der empfangenen SAP/SDP Pakete

Die Messungen ergaben, daß im Durchschnitt ca. 270 bit/s für dieses Announcements benötigt werden. Die Announcements waren durchschnittlich 585 Bytes groß und wurden alle 7,5 Minuten erneut verschickt.

Auf dem ersten Blick scheint dies recht wenig zu sein. Es ist jedoch damit zu rechnen, daß in der nahen Zukunft die Benutzung von Mulimediadiensten im INTERNET zunehmen wird. Wichtig ist jedoch zu beachten, daß diese Durchschnittswerte nur die durchschnittliche Belastung zeigen. Da die Announcements jedoch teilweise bis zu 800 Bytes groß waren, entsteht hierdurch ein temporärer Engpaß.

Angenommen, zwei große Announcements mit 800 Bytes folgen dicht aufeinander. Werden diese, insgesamt 1600 Bytes (12,8 kbit), und nehmen wir weiter an, daß wir eine 28,8 kbit/s Modemverbindung benutzen, würde die Verbindung für ca. 0,5 Sekunden vollständig belegt sein. In dieser Zeit können keine Echtzeitdaten mehr übertragen werden, so daß es zu einem kurzen drop-out kommen würde. Natürlich ist es möglich die Daten verzögert abzuspielen, also die End-zu-End Verzögerung zu erhöhen. Dies mindert jedoch die Sprachqualität (bei Audio) bei einer bidirektionalen Verbindung extrem.

Da die uns zur Verfügung stehende Bandbreite ohnehin nicht ausreicht, die Multimedia-Daten in ihrer ursprünglichen Form zu übertragen und wir diese auf jeden Fall komprimieren müssen, sollten auch für andere Dienste kein einziges Byte verschenkt werden. Je mehr Bandbreite für die Übertragung der Multimediadaten zur Verfügung steht, desto besser ist die resultierende Qualität.

Aus diesem Grunde haben wir ein Verfahren entwickelt, mit dem die Session Announcements stark komprimiert werden können. Die Ergebnisse unserer Überlegungen sind in den nächsten Abschnitten aufgeführt.


4.3. Wie könnten SAP/SDP Announcements komprimiert werden?

Wie schon des öfteren beschrieben basiert SAP auf eine verteilte Datenbank. Jeder Rechner, der eine Session ankündigt muß diese immer wieder neu verschicken, damit alle Rechner im INTERNET diese auch erhalten. Wenn eine Ankündigung seit einer bestimmten Zeit nicht mehr empfangen wurde bedeutet dies, daß diese auch nicht mehr aktuell ist. Programme wie sdr entfernen aus diesem Grunde Announcements, wenn sie seit mehr als eine halben Stunde[ Die Aussage stimmt nicht ganz, die Zeit nach der ein "Implicit Timeout" stattfindet wird über eine kompliziertere Formel bestimmt. Hierbei fließt der TLL-Wert, die Größe der Ankündigung und die Anzahl der momentan versendeten Ankündigungen mit ein. Er ist jedoch immer größer gleich einer halben Stunde, so daß wir uns hier auf diesen Wert beschränken.] nicht mehr empfangen wurden.

Die Notwendigkeit, daß die Announcements regelmäßig, in ihrem vollen Umfang verschickt werden müssen, resultiert aus der Tatsache, daß wir eine globale verteilte Datenbank haben. Wird beispielsweise ein Rechner (oder genauer, ein Programm wie sdr) zu irgendeinem Zeitpunkt gestartet, besitzt er keine Informationen über aktuelle Announcements. Nur die Tatsache, daß diese immer wieder neu verschickt werden macht es möglich, daß dieser Rechner nach einigen Minuten dennoch das gesammte Wissen über die aktuellen Announcements erlangt hat.

Wenn wir uns unsere PPP-Verbindung betrachten stellen wir jedoch einen anderen Sachverhalt fest. Die PPP-Verbindung ist von ihrer Natur her immer eine direkte Verbindung zwischen zwei Rechnern. Somit ist es auch möglich, daß jede Seite sich "merkt", was die andere weiß. Es ist also nicht nötig die Session Announcements immer wieder in ihrer vollen Länge zu übertragen. Es reicht aus

Der erste Vorschlag macht eine einfache Form einer Kompression möglich, bei dem A nur feststellen muß, ob B die Ankündigung bereits erhalten hat. Die zweite Variante hat den Vorteil, daß nach einiger Zeit faktisch keine Daten für die Announcements mehr ausgetauscht werden müssen. Dafür ist der Aufwand ein wenig höher, da sichergestellt werden muß, daß B diese erste Ankündigung auch wirklich erhalten hat. Weiterhin muß sich dann B selber um das zeitgerechte Verschicken der Ankündigungen in seinem Teilnetz kümmern.

Wir haben uns der Einfachheit halber für die ersten Variante entschieden, und eine Komprimierung nach diesem Muster realisiert.


4.4. Komprimierung von SAP

Die generelle Idee ist hierbei, daß wir ein Client-Server-Verhältnis zwischen den beiden Stationen haben, die über die PPP-Verbindung gekoppelt sind, haben. Der Server der einen und der Client der anderen Station haben beide eine gemeinsame Liste von Kontexten. Jeder dieser Kontexte enthält die Informationen über exakt eine Ankündigung. Identifiziert werden diese Kontexte durch eine Kontext-ID.

4.4.1. Erzeugen eines Kontextes

Der Server ist diejenige Instanz, die einen Kontext erzeugt. Wenn eine PPP Verbindung aufgebaut wird, haben beide, Server und Client (auf jeder Seite) eine leere Listen von aktiven Kontexten. Empfängt ein Server nun ein SAP Paket, so durchsucht er seine Liste der Kontexte nach diesem Announcement[ Zum Vergleichen gibt es mehrere Möglichkeiten. Zum einen kann der "Message Identifier Hash" Eintrag des SAP Announcements verwendet werden. Wie wir aber später noch sehen werden, ist das hier beschriebene Verfahren nicht ausschließlich für SAP / SDP zu verwenden. Aus diesem Grunde haben wir uns für einen Vergleich der Nachrichten auf Byteebene entschieden. Somit sind wir unabhängig von den verwendeten Announcement-Protokoll.]. Da diese leer ist findet er somit keinen Eintrag und erzeugt einen neuen Kontext. Dieser wird mit

initialisiert. Da wir, wie bereits erwähnt, auch andere Announcement-Protokolle außer SAP/SDP mit diesem Verfahren komprimiert übertragen können, wird noch

im Kontext abgelegt.

Nachdem der Server den Kontext angelegt hat, sendet er (fast) alle Daten aus dem Kontext in einer ASSIGN Nachricht zum Client. Der Client, der diese empfängt durchsucht daraufhin seine eigene Liste der Kontexte nach der ebenfalls übermittelten Kontext-ID. Findet es einen Eintrag mit der gleichen Kontext-ID, so wird dieser Kontext gelöscht.

Der Client erzeugt nun einen neuen Kontext und speichert ebenfalls, analog zum Server, alle Daten in diesem Kontext. Im Anschluß daran, sendet er auf seiner Seite des Netzes dieses Announcement.

4.4.2. Erneuter Empfang eines Announcements

Wenn der Server nach einiger Zeit das gleiche Announcement erneut empfängt, findet er es in seiner Liste mit den Kontexten. Er weiß daraufhin, daß der Client ebenfalls einen solchen Kontext besitzt. Anstatt das Announcement erneut zu übertragen, sendet der Server nur eine kurze RETRANSMIT Nachricht an den Client. In dieser ist nun nur noch die Kontext-ID enthalten, die zuvor vom Server für dieses Announcement vergeben wurde.

Wenn der Client diese Nachricht empfängt, sucht er mit Hilfe der Kontext-ID den richtigen Kontext. Nachdem dieser gefunden wurde, sendet der Client das Announcement, das im Kontext enthalten ist (vgl. Abbildung [cSAP-1]).

4.4.3. Behandlung von Fehlersituationen

Es kann nun auch vorkommen, daß der Client eine ASSIGN Nachricht nicht erhält, da das Paket verloren ging (z.B. aufgrund eines CRC Fehlers von dem Link-Layer verworfen wurde). Der Client würde somit nach einiger Zeit eine RETRANSMIT Nachricht mit einer Kontext-ID empfangen, für die er jedoch keinen Kontext findet.

Damit dieses Announcement dennoch auf der Seite des Clients bekannt wird, benötigen wir somit einen Mechanismus um diesen Fehler signalisieren zu können. Der Client sendet in diesem Fall eine DELETED Nachricht an den Server zurück.

Sobald dieser diese Nachricht empfängt, sucht er den Kontext anhand der ebenfalls übermittelten Kontext-ID. Wenn er diesen findet, generiert er daraufhin eine neue ASSIGN Nachricht für diesen Kontext, und sendet sie zum Client (Abbildung [cSAP-error1]). Auf diesem Wege wird der Kontext im Client erneut angelegt, und der Fehler ist beseitigt.

Das einzige Problem, was in diesem Fall noch bestünde wäre, wenn nun auch diese DELETED oder die ASSIGN Nachricht verloren geht (vgl. Abbildung [cSAP-error2]). Der Server würde somit nicht über den Fehler informiert, oder der Client erhält nicht die neue Zuweisung, so daß dieses Announcement nicht auf der Seite des Client bekannt wäre. Da die Announcements jedoch periodisch neu verschickt werden, ergibt sich bei dem nächsten Announcement wiederum die gleiche Situation: Der Server sendet eine RETRANSMIT Nachricht, und der Client antwortet mit einer DELETED Nachricht. Die Wahrscheinlichkeit, daß gerade diese Pakete verloren gehen scheint sehr gering zu sein, so daß nach einiger Zeit auch dieses Announcement auf der Client-Seite bekannt wird.

Es gibt jedoch noch einen weitaus komplizierteren Fehlerfall. Angenommen ein Kontext (1) wurde beim Server und Client richtig zugewiesen und benutzt. Wenn der Server nun entschied den Kontext zu löschen, weil seit gewisser Zeit keine weiteren Announcements (a) mehr eingegangen sind, wird somit auch die Kontext-ID frei. Da unser entwickeltes Verfahren keine explizite Nachrichten zum Löschen eines Kontextes beim Server verschickt, existiert der Kontext weiterhin beim Client.

Wenn der Server dieselbe Kontext-ID (1) für ein neues Announcement (b) vergibt, sendet er eine ASSIGN Nachricht zum Client. Wie oben bereits beschrieben, entsteht hierdurch kein Problem, da der Client beim Empfang dieser Nachricht den alten Kontext zuerst löscht.

Sollte jedoch diese ASSIGN Nachricht verloren gehen, entsteht ein Problem. Empfängt der Server das gleiche Announcement (b) erneut, so geht er von einem korrekten Kontext beim Client aus. Er sendet somit nur eine RETRANSMIT Nachricht zum Client. Dieser empfängt diese, durchsucht seine Kontextliste nach der Kontext-ID (1) und findet noch den alten Kontext. Der Client geht nun davon aus, daß das Announcement (a) erneut geschickt werden soll, und sendet somit das falsche, alte Announcement (a) in sein Teil des Netzes (siehe Abbildung [cSAP-error3]). Es gibt keine Möglichkeit für ihn, diesen Fehler zu bemerken.

Aus diesem Grunde bekommt jeder Kontext und jede Nachricht eine sogenannte "Genneration-ID" hinzu. Diese ID wird vom Server verwaltet und jedesmal geändert (im Allgemeinen um eins erhöht), wenn die Kontext-ID neu vergeben wird. Empfängt nun der Client eine RETRANSMIT Nachricht, bei der die Generation-ID (2) nicht mit der im Kontext (1) übereinstimmt, weiß er, daß er mindestens eine ASSIGN Nachricht vom Server nicht erhalten hat. In diesem Fall löscht er den Kontext, und sendet eine DELETED Nachricht an den Server zurück (vgl. Abbildung [cSAP-error4]). Es ergibt sich dann der gleiche Sachverhalt wie zuvor beschrieben.

4.4.4. Implizites Timeout

Im Internet Draft für SAP [Hand9611:SAP] ist angegeben, daß es ein implizites Timeout für Announcements gibt. Wenn ein Announcement seit einer bestimmten Zeit nicht mehr empfangen wurde, sollte das Announcement automatisch aus dem Verzeichnis der empfangenen Programme gelöscht werden.

Damit auch bei unserem Vorschlag ein Kontext nicht unendlich lange erhalten bleibt, sollte der Server zu jedem Kontext eine Timeout-Zeit angeben. Diese wird bei jedem Eintreffen eines Announcements neu aktualisiert. In Zeiten, in denen der Server nicht viel zu tun hat, kann dieser seine Liste mit den Kontexten durchsuchen, und alle Kontexte löschen, bei denen diese Zeit abgelaufen ist. Es gibt keine explizite Benachrichtigung des Clients. Durch die erneute Vergabe einer zuvor benutzten Kontext-ID, wird der alte Kontext beim Client durch den Empfang der ASSIGN Nachricht ohnehin gelöscht.

Dennoch hat auch der Client die Option, Kontexte, die seit einer gewissen Zeit nicht mehr aktualisiert wurden, selbstständig zu löschen. Auch hier gibt es keine Signalisierung zum Server. Sollte nun dennoch ein Announcement für diesen Kontext beim Server eingehen, so bekommt der Client eine RETRANSMIT Nachricht. Da dieser die Kontext-ID nicht in seiner Liste findet, greift die gleiche Fehlerbehandlung wie oben beschrieben. Der Client sendet daraufhin eine DELETED Nachricht zurück, die der Server mit einer neuen ASSIGN Nachricht beantworten wird. Es enstehen auch in diesem Fall keine Fehlinterpretationen, noch gehen irgendwelche Announcements verloren.

4.4.5. Caching Option bei temporären Verbindungsabbruch

Angenommen die PPP-Verbindung zwischen Client und Server ist eine Modemverbindung. Es kann dabei durchaus vorkommen, daß diese von den Modems aufgrund einer veränderten Leitungsqualität getrennt wird. Wird die Verbindung nun wieder aufgebaut, müßten eigentlich alle Kontexte beim Server und Client gelöscht werden. Es dauert dann also einige Minuten, bis die Kontexte wieder eingerichtet wurden, so daß in dieser Zeit die Daten nahezu unkomprimiert mittels ASSIGN Nachrichten versendet werden müssen.

Um diese Last zu verringern, können Client und Server die Option benutzen, die Kontexte nicht zu löschen, wenn sie sicher sind, daß der "Partner" der war, mit dem sie gerade zuvor Kontakt hatten. Auf diese Weise würden nur die RETRANSMIT Nachrichten übertragen werden müssen.

Es gibt nun die folgenden vier Konstellationen:

  1. Beide haben die Kontexte nicht gelöscht. In diesem Fall ist alles OK.
  2. Der Client hat die Kontexte gelöscht, da inzwischen ein anderer Server Kontakt aufgenommen hatte. In diesem Fall würde der Client auf jede zuerst eintreffende RETRANSMIT Nachricht mit einer DELETED Nachricht antworten. Im Laufe der Zeit würden sich somit auch die Kontexte wieder synchronisieren. Wenn der Server "intelligent" ist, bemerkt er die vielen DELETED Nachrichten, und kann dann, in eigener Verantwortung, ebenfalls seine Kontexte löschen. Es entfällt somit das anfängliche "Ping-Pong-Spiel".
  3. Der Server hat seinen Cache mit den Kontexten gelöscht. In diesem Fall sendet er für jedes, das erste Mal eingehende Announcement eine ASSIGN Nachricht. Die Liste der Kontexte wird beim Client somit langsam überschrieben[ Ein Problem ist jedoch die momentane Generation-ID. Wenn eine ASSIGN Nachricht verloren geht, und zufälligerweise die Generation-ID im Kontext die gleiche ist wie die in der folgenden RETRANSMIT Nachricht, sendet der Client falsche Daten. Es gilt in der Zukunft zu untersuchen, wie wahrscheinlich dieser Fall ist.].
  4. Beide haben ihre Kontexte gelöscht. Dann fangen wir so an, wie immer, es gibt also keinerlei Probleme.

4.4.6. Verwendung eines neuen PPP-Protokolls

Wie bei der bisherigen Beschreibung bereits aufgefallen sein dürfte, haben wir immer von "Nachrichten" gesprochen. Der Grund ist der, daß wir für unser Protokoll keine IP/UDP-Pakete benötigen. Es handelt sich um ein neues Network-Protocol für PPP, das als solches bei IANA (Internet Assigned Number Authority) registriert werden müßte.

Eine detailierte Beschreibung unseres Protokolls ist in Anhang [cSAP-draft]

enthalten. Diese ist in der Form eines Internet-Drafts aufgebaut, so daß diese recht schnell verbreitet werden könnte. Aus diesem Grunde wurde diese Spezifikation auch in englischer Sprache erstellt.


4.5. Komprimierung von SDP-Daten

Wenn man sich einmal eine SDP-Nachricht ansieht, stellt man fest, daß diese ausschließlich aus ASCII Text in Klartext besteht. Eine Internet Adresse, die sonst 4 Bytes groß ist, wird nun in "dotted decimal notation" angegeben, und verbraucht damit bis zu 15 Bytes. Derartige Felder lassen sich natürlich stark komprimieren.

Wir entwickelten hierfür ebenfalls ein Verfahren, um SDP Nachrichten zu komprimieren. Die Komprimierungsrate ist dabei um Einiges besser, als die einfache, von Mark Handley [Hand9611:SDP] vorgeschlagene Variante durch Benutzung von gzip.

An dieser Stelle wollen wir nicht genauer auf das Verfahren eingehen, da dies eine genaue Betrachtung jedes Feldes eines SDP Paketes voraussetzt. In Anhang [cSDP-draft] ist eine englischschprachige detailierte Spezifikation enthalten. Wie schon zuvor, wurde sie in Form eines Internet-Drafts gehalten, damit sie eine weite Verbreitung erfährt.


4.6. Zusammenfassung

In diesem Kapitel haben wir die Problematik beschrieben, die bei der Benutzung von SAP und SDP über Verbindungen niedriger Bandbreite entstehen. Wir haben Verfahren vorgestellt, die die benötigte Bandbreite stark reduziert. So muß für jedes wieder empfangene Announcement nicht das Announcement selber, zuzüglich der IP und UDP-Header gesendet zu werden, sondern nur noch 2 Bytes! Um auch die Bandbreite zu reduzieren, die bei der initialen Übertragung des Announcements, zum Aufbau des Kontextes nötig ist, komprimierten wir auch die eigentlichen SDP-Daten.

Das hier vorgestellte Verfahren ist im Prinzip auch für andere Announcement Protokolle verwendbar, es ist also nicht nur auf SAP und SDP beschränkt. Wir haben es allerdings nur mit SAP und SDP getestet.

In unserer Testumgebung, in der wir ein kleines Teilnetz mit dem INTERNET koppelten, haben wir auch diese Verfahren mit eingebaut und verwendet. Exakte Messungen des Gesamtgewinns, liegen derzeit noch nicht vor.

Der Quellcode für die Implementierungen ist in Anhang [srcTestImpl] enthalten.


File was created Wed Feb 26 17:43:09 1997 by tex2html