Technische Universität Berlin Fachbereich Elektrotechnik Institut für Kommunikationsnetze DIPLOMARBEIT Thema: Tarifbasierte Dienstgüteauswahl für IP-Multimedia-Dienste mit Vorwärtsfehlerkorrektur Betreuer: Prof. Dr. Adam Wolisz Institut für Kommunikationsnetze Technische Universität Berlin Dr. Georg Carle GMD FOKUS / GloNe Tanja Zseby GMD FOKUS / GloNe angefertigt von: Sebastian Zander Tirschenreuther Ring 4 12279 Berlin Berlin, den 11.07.2001 Danksagung Ich danke allen, die mich bei dieser Diplomarbeit unterstützt haben insbesondere: • • • • • • Herrn Prof. Dr. Adam Wolisz dafür, daß ich meine Diplomarbeit bei ihm anfertigen durfte und für seine konstruktive Kritik, meinen Betreuern Dr. Georg Carle und Tanja Zseby für die umfangreiche Unterstützung und die vielen interessanten Diskussionen, Long Le für die moralische Unterstützung und die ständige Versorgung mit Keksen, Torsten Ackemann für die schöne Visualisierung der Preisentwicklung (Abbildung 7), Dorgham Sisalem für die Installation des RTP Reflektors, und meinen Eltern die mir das alles ermöglicht haben. Inhaltsverzeichnis 1 MOTIVATION UND ZIEL DER DIPLOMARBEIT 1 2 EINFÜHRUNG 3 2.1 TARIFIERUNG 2.1.1 MECHANISMEN ZUR SICHERSTELLUNG DER DIENSTQUALITÄT 2.1.2 GRUNDLAGEN DER TARIFIERUNG 2.1.2.1 Kriterien für ein Tarifmodell 2.1.2.2 Grundlegende Modelle 2.1.2.3 Beschreibung der Modelle 2.1.3 BEISPIELE FÜR TARIFMODELLE 2.1.4 KOSTENAUFTEILUNG BEI MULTICAST-KOMMUNIKATION 2.1.5 TARIFIERUNG FÜR INTEGRATED SERVICES 2.1.6 ONLINE TARIFIERUNG 2.2 DIENSTGÜTE 2.2.1 VERLUSTVERMEIDUNG 2.2.2 VERLUSTVERSCHLEIERUNG 2.2.3 VERLUSTKORREKTUR 2.2.3.1 Prinzip der Vorwärtsfehlerkorrektur 2.2.3.2 Reed-Solomon-Codes 2.2.3.3 Übertragungsprotokolle mit FEC Mechanismen 3 3 5 5 5 6 7 8 8 9 10 11 11 12 12 13 15 3 ÜBERTRAGUNG UND NUTZUNG VON DIENSTINFORMATIONEN 17 3.1 SYSTEMÜBERBLICK 3.1.1 SYSTEMKOMPONENTEN 3.1.1.1 CIP Client 3.1.1.2 C&A/CIP Server 3.1.1.3 C&A Management 3.1.1.4 FEC Gateway 3.1.1.5 Meßsystem 3.2 DAS CIP PROTOKOLL 3.2.1 ÜBERBLICK 3.2.1.1 Funktionalität 3.2.1.2 Dienste 3.2.1.3 Eigenschaften des Protokolls 3.2.1.4 CIP Adressen 3.2.2 PROTOKOLLABLAUF 3.2.3 TRANSAKTIONEN 3.2.4 CIP NACHRICHTEN 3.2.4.1 CIP Requests 3.2.4.2 CIP Responses 3.2.5 HEADER FELDER 3.2.5.1 Transaction-ID 3.2.5.2 Iseq 3.2.5.3 Encryption 3.2.5.4 From 3.2.5.5 Service 3.2.5.6 Vendor 17 17 18 18 19 19 20 21 21 21 22 22 22 23 23 24 24 26 27 28 28 28 28 28 29 3.2.5.7 Valid-Until 3.2.5.8 Valid-From 3.2.5.9 Currency 3.2.5.10 Guarantees 3.2.5.11 Parameter 3.2.5.12 Formula 3.2.5.13 Response-Key 3.2.5.14 Require 3.2.5.15 Filter 3.2.5.16 Authorisation 3.2.5.17 Endpoint 3.2.5.18 Mode 3.2.5.19 Reservation 3.2.5.20 Reservation-Parameter 3.2.5.21 Update-Frequency 3.2.5.22 Unsupported 3.2.5.23 Warning 3.2.5.24 Authenticate 3.2.5.25 Header Felder Kurzform 3.2.6 CIP TRANSPORT 3.2.6.1 REGISTER, CANCEL, SELECT 3.2.6.2 GET_INFO, INFO 3.2.6.3 CIP and Multicast 3.2.7 SICHERHEIT 3.2.7.1 Authentifizierung 3.2.7.2 Verschlüsselung 3.2.8 KOSTENAUFTEILUNG ZWISCHEN SENDER UND EMPFÄNGER 3.2.9 WEITERE ÜBERLEGUNGEN 3.2.9.1 CIP Directory-Server 3.2.9.2 Kostenkompensation zwischen Providern 3.2.9.3 Integration des CIP Protokolls in die existierende Protokollhierarchie 3.2.9.4 CIP als Erweiterung des DIAMETER Protokolls 3.2.10 IMPLEMENTIERUNG 3.3 SPEZIFIKATION VON TARIFFORMELN 3.3.1 ANFORDERUNGEN AN DIE SPRACHE 3.3.2 AUFBAU UND EIGENSCHAFTEN DER SPRACHE 3.3.2.1 Aufbau der Sprache 3.3.2.2 Operatoren, Funktionen, bedingte Ausdrücke und Konstanten 3.3.2.3 Global definierte Variablen 3.3.3 BEISPIELE 3.3.4 IMPLEMENTIERUNG 3.4 AUSWAHL DER OPTIMALEN SERVICEKLASSE 3.4.1 OPTIMALE SERVICEKLASSE 3.4.2 UTILITY-KURVEN 3.4.3 HERLEITUNG UND UNTERSUCHUNG DES ALGORITHMUS 3.4.4 VERSCHIEDENE SZENARIEN FÜR DIE OPTIMIERUNG 3.4.5 IMPLEMENTIERUNG 29 29 29 29 30 30 30 30 30 30 30 31 31 31 31 31 32 32 32 32 33 33 34 35 35 36 37 37 37 38 39 39 40 40 40 41 41 42 43 44 46 46 46 47 48 52 53 4 VERBESSERUNG DER DIENSTQUALITÄT DURCH FEC 57 4.1 RTP GATEWAY 4.1.1 GRUNDSÄTZLICHE FUNKTION 4.1.2 PAKETFORMAT 4.1.3 ERZEUGUNG DER REDUNDANZ 4.1.4 WIEDERHERSTELLUNG VERLORENER PAKETE 57 57 58 59 61 4.1.5 GATEWAY KONTROLLE 4.1.6 STATISTIKBERECHNUNG 4.1.7 VERLUSTSIMULATION 4.1.8 EINSATZMÖGLICHKEITEN 4.1.9 IMPLEMENTIERUNG 4.2 PERFORMANCE 4.2.1 REED-SOLOMON KODIERER 4.2.2 RTP GATEWAY 4.3 UNTERSUCHUNG DER ÜBERTRAGUNGSQUALITÄT 4.3.1 BURSTVERLUSTE 4.3.2 VERLUSTRATE 62 64 65 66 68 69 69 71 71 72 72 5 UNTERSUCHUNG EINES REALEN SZENARIOS 77 6 ZUSAMMENFASSUNG UND AUSBLICK 81 7 ANHANG 83 7.1 7.2 7.3 7.4 7.5 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 83 83 84 85 86 86 87 87 87 88 VERWENDETE NOTATION CIP PROTOKOLLABLAUF TFL TARIFFORMELN MEßWERTE MAN PAGES CIP CLIENT CIP SERVER RS PERFORMANCE MESSUNG OPTIMIERUNGSALGORITHMUS RTP GATEWAY 8 LITERATURVERZEICHNIS 91 Kapitel 1: Motivation und Ziel der Diplomarbeit 1 Motivation und Ziel der Diplomarbeit Die Benutzung von Multimedia-Anwendungen über IP-basierte Netze erfordert eine gewisse Ende-zu-Ende Dienstqualität (QoS). Das gilt insbesondere dann, wenn es sich um Anwendungen mit Echtzeitanforderungen wie zum Beispiel Videokonferenzen oder Telefonie handelt. Dienstqualitätsanforderungen lassen sich in IP-basierten Netzen gegenwärtig mit dem Integrated Service Modell oder dem Differentiated Service Modell unterstützen. Beide Modelle sorgen dafür, daß die von der Anwendung benötigte Dienstgüte durch einen IP-Dienst mit entsprechender Qualität gewährleistet wird. Da die einzelnen Nutzer grundsätzlich nicht kooperieren und Dienstqualität (in Form von Bandbreite) nicht unbegrenzt vorhanden ist, muß bei Diensten mit einer garantierten QoS eine Regulierung in Form einer Tarifierung erfolgen. Zur Realisierung einer verursachergerechten Tarifierung ist neben einer Auswertung der reservierten Ressourcen die vom Nutzer tatsächlich erzeugte Last (das Datenvolumen) von Bedeutung. Diese muß mit geeigneten Meßinstrumenten im Netz gemessen und dem einzelnen Verbraucher zugeordnet werden. Werden zusätzliche Maßnahmen zur Fehlerkontrolle eingesetzt, so kann auch unter Verwendung eines relativ preiswerten Dienstes eine verhältnismäßig hohe Qualität erbracht werden. Bei Echtzeitanwendungen sind insbesondere Vorwärtsfehlerkorrekturmechanismen (FEC) von Interesse, die die Verlustwahrscheinlichkeit von Datenpaketen auf Kosten der benötigten Bandbreite verringern. Im Rahmen dieser Diplomarbeit soll eine Diensterbringung von Multimedia-Diensten mit Fehlerkontrolle in Form von Vorwärtsfehlerkorrektur in Verbindung mit IP-Diensten unterschiedlicher Qualität untersucht werden. Hierbei sollen der Einsatz von RTP/RTCP zur Übertragung von Audio und Video sowie RTP-spezifische FEC-Mechanismen untersucht werden. Die unterschiedliche Qualität der IP-Dienste spiegelt sich in den unterschiedlichen Tarifen bzw. Kosten der einzelnen angebotenen Dienstklassen wieder. Damit sich Endsysteme und letztlich die Nutzer vor der Dienstauswahl und Dienstnutzung über die einzelnen Serviceklassen und die zugehörigen Tarife informieren können, soll im Rahmen dieser Arbeit ein Protokoll zur Übertragung von Tarifierungsinformationen für unterschiedliche Dienstklassen entwickelt werden. Weiterhin soll ein Modul entworfen werden, das anhand der Anforderungen der Anwendung und den angebotenen Serviceklassen den optimalen Tarif auswählt. Darüber hinaus soll das Modul zusätzlich bei Bedarf Vorwärtsfehlerkorrekturmechanismen einsetzen, wobei die FEC-Parameter automatisch dimensioniert werden. Im zweiten Kapitel wird zunächst eine kurze Einführung in die beiden Bereiche Tarifierung und Vorwärtsfehlerkorrektur gegeben. Es werden nur die wesentlichen Tarifierungsmechanismen sowie die grundlegenden Formeln zur Tarifierung vorgestellt. Bei der Betrachtung der Vorwärtsfehlerkorrektur steht die konkrete Realisierung als Teil eines Protokolls im Vordergrund, im wesentlichen werden hier nur Reed-Solomon-Codes (RS-Codes) behandelt. Auf die mathematischen Verfahren der Kodierung wird nicht näher eingegangen, es wird nur das grundlegende Prinzip erläutert. In Kapitel drei wird ein Protokoll zur Übertragung von Informationen über Dienstklassen anhand der verschiedenen Anforderungen definiert. Dabei werden verschiedene Szenarien zur Tarifierung untersucht und miteinander verglichen. Weiterhin wird untersucht, inwieweit sich das Preis-Leistungs-Verhältnis des gekauften Dienstes durch den gezielten Einsatz von Vorwärtsfehlerkorrektur optimieren läßt. Dazu wird das entsprechende Verfahren mathematisch hergeleitet und mit Hilfe von Beispielen die Auswirkungen gezeigt. Die bei der Tarifierung Seite 1 Kapitel 1: Motivation und Ziel der Diplomarbeit eingesetzten Tarifformeln müssen bei der Bestimmung des optimalen Tarifs durch einen Computer ausgewertet werden. Es werden die Anforderungen an eine Sprache zur Beschreibung der Formeln formuliert und eine entsprechende Grammatik entwickelt, die Ausdrücke dieser Sprache korrekt und zuverlässig erkennt und auswertet. Weiterhin wird ein implementierter Prototyp des Systems vorgestellt. Im vierten Kapitel wird ein Modul zur Vorwärtsfehlerkorrektur bei RTP-Datenströmen entwickelt. Zur Erzeugung der Redundanzinformationen wird ein bereits für die Paketübertragung optimierter RS-Kodierer eingesetzt. Der Einsatz der Vorwärtsfehlerkorrektur ist dabei völlig transparent, so daß bereits vorhandene Multimedia-Anwendungen eingesetzt werden können. Ein implementierter Prototyp wird in der Realität mittels verschiedener Szenarien untersucht. Dies ermöglicht es, zum einen Aussagen über die tatsächlichen Auswirkungen auf reale Anwendungen in einem existierenden Netz zu machen. Zum anderen können sowohl objektive als auch subjektive Qualitätsaussagen gemacht werden, da richtige Audio- bzw. Videodaten übertragen werden. In Kapitel fünf wird das gesamte System zur Dienstgüteauswahl anhand eines Beispielszenarios untersucht. Es soll der Eindruck vermittelt werden, wie der Einsatz eines solchen Systems in der Realität aussehen könnte. Das sechste Kapitel faßt die erzielten Ergebnisse zusammen und gibt einen Ausblick auf die zukünftige Entwicklung. Seite 2 Kapitel 2: Einführung 2 Einführung Das zweite Kapitel soll einen kurzen Einblick in die beiden Themenkomplexe Tarifierung und Dienstgüte geben, ohne dabei zu tief in die Materie vorzudringen. Hier soll lediglich eine Basis zum besseren Verständnis der nächsten Kapitel geschaffen werden. 2.1 Tarifierung In den letzten Jahren hat sich das Internet immer mehr von einem Forschungsnetz zu einem kommerziellen Netz entwickelt. Der wichtigste Katalysator für diese Entwicklung war sicherlich die Entwicklung des World Wide Web (WWW). Neben dem WWW und den klassischen Internet-Diensten wie FTP, Telnet oder Email entwickelten verschiedene Organisationen eine ganze Reihe von weiteren Anwendungen, die zum Beispiel Videokonferenzen, Radio und Telefonie oder E-Commerce im Internet ermöglichen, um sie dem potentiellen Kunden anzubieten. Viele dieser neuen Anwendungen haben allerdings im Gegensatz zu den klassischen Diensten bestimmte Anforderungen an das Netzwerk. Besonders Multimedia-Anwendungen mit Echtzeitanforderungen benötigen eine große Bandbreite, eine kleine Verzögerung und minimalen Jitter. Allerdings hatte niemand in den Anfängen des Internet an solche Anwendungen gedacht. Deshalb hatte das Internet in seiner ursprünglichen Form auch keine Mechanismen, um einen Dienst mit einer bestimmten geforderten Qualität bereitzustellen. Das Internet bietet nur einen sogenannten „Best Effort“ Service, d.h., es werden keinerlei Garantien gegeben. Das Netz versucht lediglich das Beste beim Transport von Paketen. Um die speziellen Anforderungen einer Anwendung zu erfüllen, wurden verschiedene Modelle zur Auswahl und Sicherstellung einer gewissen Dienstqualität während der Übertragung entwickelt. Diese Mechanismen werden kurz in Abschnitt 2.1.1 beschrieben. Da Netzwerkressourcen nicht unbegrenzt vorhanden sind, es sich also um sogenannte knappe Güter handelt, muß es Marktmechanismen zur Regelung des Angebots und der Nachfrage geben. Abschnitt 2.1.2 beschreibt die grundlegenden Überlegungen zur Tarifierung, während in Abschnitt 2.1.3 aus der Literatur bekannte Tarifmodelle vorgestellt werden. Die Abschnitte 2.1.4 und 2.1.5 stellen Lösungsansätze für die Kostenaufteilung bei MulticastÜbertragung und die Tarifierung bei IntServ vor. Abschnitt 2.1.6 gibt eine kurze Einführung in die Problematik der Online-Tarifierung. 2.1.1 Mechanismen zur Sicherstellung der Dienstqualität Um eine geforderte Dienstqualität in einem IP-basierten Netz bereitzustellen, gibt es momentan zwei Ansätze: • • RSVP/Integrated Services (Intserv) Differentiated Services (Diffserv) Die Integrated Services Architektur wird in [RFC1633] beschrieben. Intserv definiert Dienstklassen, die eine bestimmte Dienstgüte in IP-basierten Netzwerken bereitstellen. Die Sicherstellung der Dienstgüte erfolgt durch die Reservierung der benötigten Ressourcen im Netzwerk. Momentan gibt es zwei standardisierte Dienstklassen: Controlled Load und Guaranteed. In [GGPR96] wird eine weitere Dienstklasse vorgeschlagen: Guaranteed Rate. Der Controlled Load Dienst bietet dem Benutzer einen Dienst, der einem Best-EffortDienst in einem unbelasteten Netzwerk entspricht. Die Definition ist relativ unpräzise, was für Seite 3 Kapitel 2: Einführung den kommerziellen Einsatz – also den Verkauf eines solchen Dienstes – problematisch ist. Der Guaranteed Dienst ist für Anwendungen, die sehr harte Bedingungen an die zulässige Verzögerung stellen zum Beispiel Audio/Video-Konferenzen. Der Verkehrsstrom wird bei beiden Diensten durch einen Token Bucket charakterisiert und erhält seine geforderte Servicerate an jedem Router. Beim Guaranteed Dienst wird eine obere Grenze für die Verzögerungszeit garantiert. Die Garantie der maximalen Verzögerungszeit wird momentan durch eine Überreservierung der Servicerate erreicht. Der überreservierte Anteil bleibt jedoch die meiste Zeit ungenutzt. Deshalb wird in [GGPR96] der Guaranteed Rate Dienst vorgeschlagen, um diese ungenutzten Ressourcen besser zu nutzen als durch reinen Best-Effort Verkehr. Garantiert wird eine mittlere Senderate, aber keine maximale Ende-zu-Ende Verzögerung. Im Rahmen von Intserv wird RSVP (siehe [RFC2205]) als Signalisierungsprotokoll eingesetzt, um die Reservierungsanforderungen zu übertragen. Der Sender sendet RSVP PATHNachrichten an die Empfänger, welche die sogenannte Tspec enthalten. Die Tspec beschreibt den zu übertragenen Datenstrom. Die Empfänger antworten mit RESV Nachrichten, welche die sogenannte Rspec enthalten. Die Rspec definiert die vom Empfänger gewünschte Dienstgüte. Intserv-fähige Router auf der Strecke vom Empfänger zum Sender reservieren Ressourcen entsprechen der Rspec in den RESV Nachrichten. Die Reservierung der Ressourcen erfolgt bei Intserv also durch die Empfänger. Verschiedene Reservierungen können an Knotenpunkten im Netz (Router) unter Umständen zu einer zusammengefaßt werden. Einen anderen Ansatz zur Sicherstellung der Dienstqualität stellt das relativ neue Differentiated Services Modell (Diffserv) dar. Das Modell wird in [NiBl98] beschrieben. Diffserv versucht skalierbare Dienste anzubieten, ohne daß Zustandsinformationen über die einzelnen Ströme vorliegen. Außerdem gibt es keine Signalisierung wie bei Intserv. Bei Diffserv werden Pakete durch ein Type of Service (TOS) Feld klassifiziert, das sogenannte DS Byte. Jeder Router hat Informationen, wie ein Paket mit einem bestimmten DS Wert behandelt wird. Dabei bestimmt der Dienstanbieter, auf welche Weise Pakete mit einem bestimmten DS Byte behandelt werden. Um eine Änderung des DS Bytes am Übergang zwischen zwei Dienstanbietern zu vermeiden, sollte eine gleiche Dienstgüte allerdings auch durch den gleichen DS Wert gekennzeichnet werden (siehe [NiBl98]). Das RSVP Protokoll bietet einen per-flow Service für Applikationen, die eine bestimmte Dienstqualität benötigen. Im Rahmen der Entwicklung von RSVP/Intserv wurden die Grenzen der Lösung deutlich. Da bei RSVP/Intserv für jeden flow der momentane Zustand gespeichert werden muß und die Bearbeitung pro flow erfolgt, ergeben sich Probleme bei der Verbreitung in großen Netzwerken insbesondere natürlich im Internet. Außerdem geht bei RSVP die Signalisierung vom Endsystem aus, von denen allerdings viele noch nicht über RSVP verfügen. Der Diffserv Ansatz gewinnt in letzter Zeit immer mehr an Bedeutung, da er eine einfache Alternative zu Intserv darstellt. Es treten keine Skalierbarkeitsprobleme wie bei Intserv auf. Diffserv kann auch in großen Netzwerken eingesetzt und gewartet werden, eine Bereitstellung in jedem Endsystem ist nicht nötig. In [BeYF98] wird deshalb ein Framework für Ende-zu-Ende Dienstqualität vorgestellt, daß auf dem Zusammenwirken von Intserv und Diffserv basiert. Das Framework soll sowohl Dienstanbieter mit großen Netzwerken als auch die Benutzer, die letztlich die Dienstqualität benötigen, zufriedenstellen. Der Ansatz geht davon aus, daß es in Zukunft Diffserv Kernnetzwerke (Transit Netzwerke) geben wird, an deren Peripherie sich Intserv Netzwerke (Stub Netzwerke) anschließen. Auf diese Weise wird versucht, die Vorteile beider Technologien auszunutzen. Abbildung 1 zeigt eine schematische Darstellung des Netzwerkes. Aufgrund der Übersichtlichkeit ist nur ein Sender und ein Empfänger dargestellt. Seite 4 Kapitel 2: Einführung Stub Netzwerk Edge Router Transit Boundry Netzwerk Boundry Router Router Edge Router Sender Stub Netzwerk Empfänger Abbildung 1: QoS Ende-zu-Ende Framework Am Rande der Stub Netzwerke befinden sich Edge Router, die die Grenzen zwischen dem Intserv und dem Diffserv Netzwerk bilden. Edge Router enthalten quasi eine RSVP Hälfte und eine Diffserv Hälfte. Am Rande des Transit Netzwerkes befinden sich Boundry Router. Hierbei handelt es sich um normale Router, die Diffserv Policing unterstützen. Das Transit Netzwerk besteht aus Routern, von denen wenigstens einige Diffserv unterstützen. Ebenso besteht das Stub Netzwerk aus Routern, von denen wenigstens einige Intserv unterstützen. 2.1.2 Grundlagen der Tarifierung 2.1.2.1 Kriterien für ein Tarifmodell Da Netzwerkressourcen nicht unbegrenzt vorhanden sind, muß dem einzelnen Benutzer ein Anreiz zum verantwortlichen Umgang mit den vorhandenen Ressourcen gegeben werden. Daher sollte der Benutzer einen Preis zahlen, der der Höhe des Ressourcenverbrauchs entspricht. Der Ressourcenverbrauch umfaßt auch die vom Benutzer möglicherweise reservierten Ressourcen, unabhängig davon ob er diese ausnutzt oder nicht. Auch wenn der Benutzer die reservierten Ressourcen nicht nutzt, bleiben sie doch reserviert und stehen anderen Benutzern nicht automatisch zur Verfügung. Allerdings gibt es bereits Ansätze wie SoftQoS oder Measurement based Admission Control, bei denen reservierte aber unbenutzte Ressourcen auch für andere Anwender verfügbar gemacht werden können. Um die Akzeptanz eines Tarifmodells zu erhöhen, sollte es auch für den Laien verständlich sein. Auch die Möglichkeit, den Preis vorhersagen zu können, stellt einen wichtigen Faktor dar. Der Tarif sollte außerdem fair sein, d.h., der Preis sollte der reservierten und der tatsächlich erhaltenen Qualität angepaßt sein. Das Modell sollte die kooperative Netzaufteilung fördern und schnell auf Änderungen der Verkehrscharakteristik reagieren. Weitere Kriterien sind für die technische Realisierung relevant. Die Implementierung eines Modells sollte preiswert sein und es sollte ausreichend Sicherheitsmechanismen geben, um Manipulationen Dritter zu verhindern. Weiterhin sollte die Anpassung oder Erweiterbarkeit an neue Tarifmodelle leicht möglich sein. Hat der Benutzer jederzeit die Möglichkeit, die momentan anfallenden Kosten zu überprüfen, erhöht sich die Akzeptanz des Modells (siehe Abschnitt 2.1.6). Um weitere Anreize für den Benutzer zu schaffen, kann man kundenabhängige Tarifmodelle anbieten. Hier sind sowohl Rabatte entsprechend des Umsatzvolumens denkbar, als auch maßgeschneiderte Angebote für das jeweilige Dienstportfolio des Kunden. 2.1.2.2 Grundlegende Modelle Die einfachste Form der Tarifierung ist die sogenannte Flat Rate. Bei diesem Modell wird ausschließlich eine Zugangsgebühr erhoben, die normalerweise von der Bitrate des AnschlusSeite 5 Kapitel 2: Einführung ses abhängt. Es fallen keine Kosten für das übertragene Volumen oder die Dauer der Verbindung an. Das Modell hat den Vorteil, daß die Preise exakt vorhersagbar sind. Es bietet jedoch für den Nutzer keinen Anreiz sein Datenvolumen oder die Verbindungsdauer einzuschränken. Dies führt meist zu einem verschwenderischen Umgang mit den Netzressourcen. Wird der Preis nur auf Basis der Verbindungsdauer berechnet, handelt es sich um rein zeitbasierte Modelle. Der Benutzer wird nach Möglichkeit versuchen, seine Verbindungsdauer einzuschränken. Ein solches Modell bietet allerdings keine Anreize zur Verringerung des Datenvolumens. Dies kann zu einer Überlastung des Netzes führen. Handelt es sich um ein verbindungsorientiertes Netzwerk (zum Beispiel ATM) ist es sinnvoll, rein zeit-basierte Tarife mit einer Verbindungsaufbaugebühr zu kombinieren. Ansonsten wird der Benutzer mehrere Verbindungen aufbauen, um die Daten schneller übertragen zu können. Auch für das rein zeitbasierte Modell ergibt sich für den Benutzer ein vorhersagbarer Preis. Der Dienstanbieter hat den Vorteil, daß keine Volumenmessung im Netzwerk durchgeführt werden muß. Hängt der Preis bei einem Tarifmodell nur vom übertragenen Volumen ab, spricht man von einem rein volumen-basierten Modell. Hier muß der Dienstanbieter das übertragen Datenvolumen der einzelnen Kunden messen. Ein Nachteil des Modells ist, daß kein Anreiz zum Abbau bestehender Verbindungen besteht. Das bedeutet, der Benutzer erhält Verbindungen aufrecht, auch wenn längere Zeit keine Daten übertragen werden. Dieser Effekt verstärkt sich, wenn es eine Verbindungsaufbaugebühr gibt. Ist der Preis sowohl vom übertragenen Volumen als auch von der Verbindungsdauer abhängig, bietet das Modell einen Anreiz für den Benutzer, sowohl das Datenvolumen als auch die Verbindungsdauer entsprechend einzuschränken. Die Preise für Volumen- und Zeiteinheit sollten hier natürlich geringer als bei einem jeweiligen zeit- oder volumen-basierten Modell sein. Das extreme Nutzerverhalten, das bei einem rein zeit- oder volumen-basierten Modell entsteht, kann mit einem kombinierten Modell verhindert werden. Ein Nachteil des kombinierten Modells ist seine Komplexität. Für den Kunden wird es schwieriger, den entstehenden Preis abzuschätzen. Werden für eine aufgebaute Verbindung Ressourcen reserviert, muß dies in dem Tarifmodell berücksichtigt werden, da durch eine Reservierung Ressourcen gebunden werden und somit anderen Nutzern nicht automatisch zur Verfügung stehen. Dies stellt für den Benutzer außerdem einen Anreiz dar, seinen Ressourcenverbrauch möglichst genau im Voraus abzuschätzen. Um die Kosten für die Reservierung mit in den Preis eingehen zu lassen, können die Tarifmodellparameter als Funktion von den für die Verbindung reservierten Ressourcen formuliert werden. So könnte zum Beispiel der Preis pro Volumeneinheit in Abhängigkeit von der Dienstklasse berechnet werden. 2.1.2.3 Beschreibung der Modelle Die gängigsten Tarifmodelle können durch die folgende Formel beschrieben werden: Preis = CVER + P PT ⋅ T + V ⋅V UT UV Die Parameter CVER, PT, UT, PV und UV werden als Tarifmodellparameter bezeichnet und können ihrerseits von verschiedenen Faktoren abhängen. Sie können zum Beispiel von der Spitzenrate oder der Distanz abhängen: CVER = f(Spitzenrate, Distanz) Seite 6 Kapitel 2: Einführung CVER beschreibt die Gebühr, die für den Verbindungsaufbau erhoben wird. PT beschreibt die Kosten pro Zeiteinheit, UT die Länge der Zeiteinheit und T die Verbindungsdauer. Dementsprechend beschreibt PV die Kosten pro Volumeneinheit, UV die Menge einer Volumeneinheit und V das gemessene Datenvolumen. Für Tarifmodelle, die sich nicht befriedigend durch die obige Funktion beschreiben lassen, muß die Formel um einen zusätzlichen Term erweitert werden, der die speziellen Abhängigkeiten erfaßt. 2.1.3 Beispiele für Tarifmodelle In [WaKS97] wird ein Tarifmodell zur verbrauchsorientierten Tarifierung in ATM Netzen vorgestellt. Die Preise sind hier abhängig von der ATM Dienstklasse (CBR, VBR, ABR oder UBR). In der folgenden Tabelle sind die Preise pro Mbit nach Walker angegeben: Dienstklasse CBR VBR ABR UBR Preis pro Mbit [DM] 0,17 0,34 0,0085 0,0003 Tabelle 1: Preis pro Mbit nach Walker Der Preis berechnet sich dabei nach folgenden Formeln: Preis = CVER + Z ⋅T ⋅ PV UV für CBR, VBR Preis = CVER + V ⋅ PV UV für ABR, UBR Z ist entweder die Peak Cell Rate (PCR) bei CBR oder die Mean Cell Rate (MCR) bei VBR Verbindungen. In [McEn97] wird das Modell von Walker als zu teuer für CBR Verkehr kritisiert. Als Preis pro Mbit für CBR werden 0,0068 DM vorgeschlagen. Die nachfolgende Abbildung 2 zeigt die Preisentwicklung einer gemessenen CBR Verbindung nach Walker und McEntee. Die PCR beträgt 71000 Zellen/s, die Dauer der Messung beträgt ca. 6,5 Stunden. Seite 7 Kapitel 2: Einführung Abbildung 2: Vergleich von Tarifmodellen - Walker und McEntee 2.1.4 Kostenaufteilung bei Multicast-Kommunikation In [HSE97] wird die Zuordnung von entstehenden Kosten auf die einzelnen Benutzer im Multicast-Baum ausführlich diskutiert. Die Kostenzuteilung geschieht durch das Aufteilen der Kosten eines Links zwischen einer definierten Teilmenge der Benutzer. Die Definition der Teilmenge entscheidet über die Zuteilungsstrategie. Natürlich muß die Summe der einzelnen Kostenanteile den Gesamtkosten des Links entsprechen. Um einen solchen Ansatz zu realisieren, müssen die Kosten durch eine Funktion ausgedrückt werden, die linear von den Reservierungsparametern abhängig ist (siehe [KSWS99]). Im nächsten Abschnitt wird eine solche Kostenfunktion vorgestellt. In [CaHS98] und [LoLe98] wird ein Charging and Acounting Protocol (CAP) vorgestellt, durch das die einzelnen Teilnehmern einer Multicast-Gruppe Informationen über die anfallenden Kosten erhalten. Die Kosten werden dabei entsprechend den QoS-Anforderungen aufgeteilt. Das CAP Protokoll benutzt für die Übertragung der Kosteninformationen das RSVP Protokoll. 2.1.5 Tarifierung für Integrated Services In [KSWS99] wird ein Modell zur Kostenberechnung von Intserv Diensten vorgestellt. Es wird angenommen, daß der Ressourcenverbrauch bei Intserv Diensten nur von der Rate und dem Pufferbedarf abhängt. Es wird gezeigt, daß die Kosten für den Puffer (Speicher) nur bei ungefähr 1% der Gesamtkosten liegen und deshalb als einziger Parameter die Rate verwendet werden kann. Das Kostenmodell hat drei virtuelle Ressourcenparameter, denen die entsprechenden Intserv Parameter (je nach Dienstklasse) zugeordnet werden. Da die Kostenfunktionen linear sind, läßt sich eine Kostenaufteilung in Multicast-Bäumen problemlos durchführen. Die Kosten für die einzelnen Dienstklassen berechnen sich folgendermaßen: cost G (r , R) = a ⋅ r + b ⋅ ( R − r ) cost CL (r ) = a ⋅ r + c ⋅ e cost GR (r ) = c ⋅ r G: Guaranteed Service, CL: Controlled Load, GR: Guaranteed Rate R, r, e: Intserv Flow Spezifikation Seite 8 Kapitel 2: Einführung a, b, c: Kosten pro Ressourceneinheit 2.1.6 Online Tarifierung Das grundlegende Konzept der Online Tarifierung ist, daß der Benutzer eines Dienstes bereits während der Dienstnutzung Informationen über die anfallenden Kosten bekommt. Eine Online Tarifierung ermöglicht es dem Anwender, seine Dienstnutzung entsprechend der anfallenden Kosten zu steuern. Voraussetzung ist natürlich, daß der Benutzer oder eine entsprechende Anwendung die Möglichkeit hat, den Dienst bzw. dessen Parameter zu manipulieren. In diesem Fall gibt es quasi eine Rückkopplung zwischen der Preisberechnung und der Wahl der Dienstklasse. Eine solche Rückkopplung ist natürlich nur dann vorhanden, wenn der Preis in irgendeiner Weise auch von den Parametern abhängig ist. Online Tarifierung bietet sich daher besonders bei Tarifmodellen an, bei denen der Preis von den reservierten oder den tatsächlich verbrauchten Ressourcen im Netzwerk abhängt. Abbildung 3 zeigt eine schematische Darstellung der Online Tarifierung. Anzeige: - Dienstqualität - Kosten Entscheidung über Dienstwechsel Nutzer - Anwendung Dienstwechsel Kostenanzeige Datentransfer Accounting Tarifierung Tarifierungsinformationen Accounting Tarifierung Datentransfer Abbildung 3: Online Tarifierung Der Vorteil einer Online Tarifierung liegt für den Benutzer darin, daß er jederzeit den Bezug zwischen der Netznutzung und dem zu zahlenden Preis kennt. Er hat also immer die Kontrolle darüber, wieviel er tatsächlich bezahlt. Das Ziel des Benutzers ist es, eine seinen Zwecken entsprechende Qualität zu einem möglichst günstigen Preis zu bekommen. Basiert der Preis auf reservierten Netzressourcen, stellt dies einen Anreiz dar, den entstehenden Verkehr möglichst genau vorherzusagen bzw. zu schätzen. Dies hat für den Netzbetreiber den Vorteil, daß eine optimale Netzauslastung eher erreicht werden kann, da eine größere Anzahl von Reservierungen akzeptiert werden kann. Eines der wichtigsten Kriterien für die Akzeptanz eines Tarifmodells stellt die Vorhersagbarkeit des Preises für den Kunden dar [CAN_D5]. Wird der Nutzer laufend über die anfallenden Kosten informiert, steigert dies die Akzeptanz besonders bei komplexen Tarifmodellen. Dies führt letztlich zu einer erhöhten Dienstnutzung. Seite 9 Kapitel 2: Einführung 2.2 Dienstgüte Die Dienstgüte in einem paketorientierten Netz wird im wesentlichen durch drei Faktoren bestimmt: • • • Verlustwahrscheinlichkeit, Verzögerung und Jitter. Die Verlustwahrscheinlichkeit gibt an, mit welcher Wahrscheinlichkeit ein gesendetes Paket im Netz verloren geht. In drahtgebundenen Netzen – wie dem Internet – treten Verluste normalerweise durch Pufferüberläufe an Routern (Überlastsituationen) auf. In drahtlosen Netzen entstehen viele Verluste durch die schlechte Übertragungsqualität des Mediums. Die Verzögerung ist die Zeit, die ein Paket braucht, um vom Sender zum Empfänger zu gelangen. Die Verzögerung setzt sich aus der reinen Laufzeit des Pakets auf dem Medium und den Wartezeiten in Routern zusammen. Jitter ist die Varianz der Zwischenankunftszeiten der Pakete am Empfänger. Jitter entsteht durch unterschiedliche Laufzeiten der Pakete, d.h., die Verzögerung in den Routern ist unterschiedlich je nach Netzsituation. Außerdem können verschiedene Pakete auch unterschiedliche Wege zum Ziel nehmen. Jitter ist also eine Größe, die nur in paketvermittelten Netzen auftritt, nicht aber in leitungsvermittelten. Neben diesen drei Größen ist natürlich auch die maximal mögliche Bandbreite wichtig. Sie gibt an, mit welcher Qualität man Multimedia-Daten überhaupt übertragen kann. Da die Bandbreite stets begrenzt ist, wurden eine Vielzahl von Verfahren zur Komprimierung der Daten während der Übertragung entwickelt. Dabei muß zwischen verlustfreien und verlustbehafteten Komprimierungen unterschieden werden. Bei verlustfreier Komprimierung läßt sich das ursprüngliche Signal nach der Dekomprimierung exakt wiederherstellen. Bei der verlustbehafteten Komprimierung entstehen Verluste, die aber für den Menschen nicht unbedingt wahrnehmbar sein müssen. Als aktuelles Beispiel soll hier das MPEG Verfahren genannt werden, insbesondere MPEG Layer 3 (MP3). Bei der Komprimierung werden hörphysiologische Gegebenheiten des menschlichen Ohrs ausgenutzt. So klingt das dekomprimierte Signal trotz Verlusten genauso gut wie das Original. Die Verluste können vom menschlichen Ohr nicht wahrgenommen werden. Anzumerken in diesem Zusammenhang ist, daß im Internet burstartige Verluste auftreten, d.h., es geht meistens nicht nur ein einzelnes isoliertes Paket verloren, sondern mehrere aufeinanderfolgende. Lange Verlustbursts wirken sich bei Kodierverfahren, wo Kodierer und Dekodierer quasi kontinuierlich Statusinformationen austauschen, drastisch aus. Der Zustand auf Kodierer- und Dekodiererseite unterscheidet sich nach einem Verlustburst, so daß auch nachfolgende Pakete noch in Mitleidenschaft gezogen werden können. Die Verzögerung im Netz läßt sich grundsätzlich nicht beseitigen, weil die Geschwindigkeit des Informationsaustauschs begrenzt ist. Informationen können maximal mit Lichtgeschwindigkeit übertragen werden, bei leitungsgebundenen Systemen beträgt die Übertragungsgeschwindigkeit ungefähr zwei Drittel der Lichtgeschwindigkeit. Durch Priorisierung oder durch virtuelle Kanäle kann der Jitter gemindert aber nicht beseitigt werden. Jitter läßt sich aber am Empfänger durch einen Playoutbuffer ausgleichen. Dabei entsteht natürlich eine zusätzliche Verzögerung (Playoutverzögerung). Verluste im Netz lassen sich durch mehrere Verfahren ausgleichen. Kleine Verlustraten können vollständig kompensiert werden, hohe Seite 10 Kapitel 2: Einführung Verlustraten – insbesondere durch Überlast – können nur teilweise oder überhaupt nicht mehr ausgeglichen werden. Im einzelnen lassen sich die Verfahren folgenden Klassen zuordnen: • • • Verlustvermeidung, Verlustverschleierung und Verlustkorrektur. Bei der letzten Klasse gehen die korrigierten Verluste allerdings zu Lasten einer größeren benötigten Bandbreite und/oder einer größeren Verzögerung und höherem Jitter. 2.2.1 Verlustvermeidung Eine Möglichkeit der Verlustkontrolle ist die Verlustvermeidung durch Rate Control, d.h. Anpassen der Senderate. Da das Internet über keine Zugangskontrolle verfügt, ist es möglich, daß zu viele Benutzer auf einmal gleichzeitig Daten über eine Verbindung senden. Durch die Überlast treten dann Verluste auf. Das TCP Protokoll verfügt über eingebaute Mechanismen, die im Überlastfall die Senderate verringern. Um die Verluste im Netz zu reduzieren, müßten Echtzeitanwendungen die Senderate entsprechend senken. Für die meisten Echtzeitdienste (insbesondere für Audioübertragung) benötigt man allerdings eine konstante Bitrate. Verfahren zur Ratenanpassung für Videoströme sind wohlbekannt. Die große Reichweite der Bitraten mit guter Qualität macht den Einsatz von adaptiven Rate Control Algorithmen möglich. Verfahren zur Ratenanpassung bei Audioströmen existieren allerdings so gut wie keine. Ein weiteres Problem ist die Ratenanpassung beim Einsatz von Multicast, da hier die Verluste für jeden Empfänger anders sind. Eine Lösung des Problems ist eine hierarchische Kodierung kombiniert mit Layered-Multicast, d.h., die einzelnen „Schichten“ des Videos werden auf unterschiedlichen Multicast-Gruppen gesendet. Die Empfänger empfangen die unterschiedlichen „Schichten“ je nach auftretendem Verlust. Ratenkontrolle ist also ein Ansatz, um die Verluste durch Überlast im Netzwerk von vornherein zu vermeiden. Eine wirksame Verringerung der Verluste ist nur möglich, wenn alle oder zumindest fast alle Anwendungen eine Ratenkontrolle einsetzen. Problematisch ist außerdem, daß es momentan für Audio keine Verfahren zu Ratenanpassung gibt. 2.2.2 Verlustverschleierung Bei der Verlustverschleierung wird versucht, die aufgetretenen Verluste möglichst gut vor der Wahrnehmung des Menschen zu verbergen. Eine einfache Möglichkeit ist, mit Hilfe vorangegangener und/oder nachfolgender Daten die verlorenen Daten beim Empfänger näherungsweise zu erzeugen. Bei Audioströmen kann man zum Beispiel einfach das vorangegangene Paket duplizieren oder über das vorangegangene und das nachfolgende Paket interpolieren um die Lücke zu schließen. Ist die Lücke genügend klein, wird das Ergebnis als deutlich besser vom Menschen empfunden als ein Verlust, der eine kurze Unterbrechung des Signals bedeutet. Eine interessante Methode zur Verlustverschleierung ist das Adaptive Packetization and Loss Concealment (AP/C) Verfahren. Hier werden unterschiedlich lange Pakete erzeugt, je nachdem ob gerade stimmhafte oder nicht stimmhafte Laute vorliegen. Bei stimmhaften Lauten wird eine kleine Paketgröße gewählt, bei nicht stimmhaften Lauten eine große Paketgröße. Verlorene Pakete werden am Empfänger durch Kopieren und Resampling wiederhergestellt (siehe [San98]). Vorteile der Verlustverschleierung sind, daß keine oder kaum (AP/C) zusätzliche Bandbreite verbraucht wird und die zusätzliche Verzögerung klein ist. Ein Problem ist, daß die Verschleierung nur bei kleinen Lücken im Signal gut funktioniert. Bei großen Lücken – mehSeite 11 Kapitel 2: Einführung rere aufeinanderfolgende Pakete gehen verloren (Fehlerbursts) – ist die Qualität kaum besser als ohne Fehlerverschleierung. Da im Internet meist burstartige Verluste auftreten, funktioniert eine Verschleierung nur bedingt. Eine Idee ist, durch geeignetes Queue Management in den Netzknoten (Routern) dafür zu sorgen, daß möglichst keine Burstverluste auftreten (siehe [SaCa98]). 2.2.3 Verlustkorrektur Um die Übertragungsqualität in einem paketorientierten und verlustbehafteten Netz durch Verlustkorrektur zu verbessern, gibt es im wesentlichen drei Alternativen: • • • Erneute Übertragung fehlerhafter Pakete (ARQ-Verfahren), Vorwärtsfehlerkorrektur durch Redundanz (FEC-Verfahren) und Hybride Verfahren (Mischung aus ARQ und FEC). Für Multimedia-Anwendungen mit Echtzeitbedingungen bieten sich insbesondere FECVerfahren an, da diese die Verluste im Netz durch zugesetzte Redundanz ausgleichen und die Verzögerungszeit nicht weiter erhöhen. Die Übertragungszeit erhöht sich nur geringfügig durch den entstehenden Kodierungs- und Dekodierungsaufwand im Sender bzw. Empfänger. Bei ARQ Verfahren werden verlorengegangene Pakete komplett neu übertragen. Bei langen Übertragungszeiten zum Beispiel auf Satellitenverbindungen steigt die Verzögerungszeit bereits bei einer Wiederholung von ca. 260 ms auf ca. 780 ms. Diese langen Laufzeiten beeinträchtigen Dialoge stark, der Sprechwirkungsgrad liegt nur noch bei 0,1 (siehe [Noll96], Seite 131). Ein weiterer Nachteil bei der Fehlerkorrektur durch ARQ-Verfahren ist das Auftreten von Jitter. Jitter bedeutet, die Zwischenankunfszeiten der einzelnen Datenpakete sind nicht konstant, d.h., die Pakete kommen in sehr unterschiedlichen Abständen beim Empfänger an. Vorhandener Jitter läßt sich natürlich durch Mechanismen wie zum Beispiel einen Playoutbuffer kompensieren. Dadurch steigt allerdings wieder die Verzögerungszeit, was den Sprechwirkungsgrad gerade bei Dialogen negativ beeinflußt. Bei Multicast-Übertragung und vom Sender gesteuerten ARQ-Verfahren treten Skalierbarkeitsprobleme auf. Bei einer großen Anzahl von Empfängern in der Multicast-Gruppe kann es zu einer sogenannten (N)ACK-Implosion kommen. Die große Menge von (N)ACKs erzeugt nicht nur weitere Last im Netz – was zu zusätzlichen Verlusten führen kann – sondern kann auch den Sender überlasten. In [NoBT97] wird gezeigt, daß der Einsatz von FEC als transparente Schicht unterhalb von ARQ die Effizienz und Skalierbarkeit wesentlich verbessert. Weitere Vorteile ergeben sich, wenn FEC und ARQ integriert werden. 2.2.3.1 Prinzip der Vorwärtsfehlerkorrektur Bei der Vorwärtsfehlerkorrektur werden aus den ursprünglichen Daten mit Hilfe geeigneter Kodierungsverfahren Redundanzinformationen erzeugt, die zusätzlich über das Netz übertragen werden. Eine Gruppe von k Datenpaketen und h Redundanzpaketen bezeichnet man auch als FEC Block. Die Datenpakete innerhalb des Blocks werden Transmission Group (TG) genannt. Jeder FEC Block hat also die Größe n = k + h. Durch die Redundanzpakete ist der Empfänger in der Lage, verlorengegangene oder beschädigte Pakete wiederherzustellen, ohne das eine erneute Übertragung erforderlich ist. Der Empfänger kann den empfangenen FEC Block wiederherstellen, wenn er mindestens k der n gesendeten Pakete korrekt empfangen hat. Dabei ist es unerheblich, ob es sich bei einem der k Pakete um ein Datenpaket oder ein Redundanzpaket handelt. Für die höheren Protokollschichten ist dann kein Verlust sichtbar. Seite 12 Kapitel 2: Einführung Die nachfolgende Abbildung 4 zeigt eine schematische Darstellung der Übertragungsstrecke, auf der ein Datenpaket verlorengeht (D2). Das Paket D2 kann jedoch am Empfänger durch das noch übriggebliebene Redundanzpaket R2 rekonstruiert werden, so daß für höhere Protokollschichten kein Verlust sichtbar ist. D3 D2 D1 D3 R2 R2 R1 R1 D3 D2 D1 D1 R2 FEC Codierer D3 D2 D1 FEC Decodierer Abbildung 4: Übertragung mit FEC (k=3, h=2) Zur Erzeugung der Redundanz können verschiedene Kodierungsverfahren benutzt werden (siehe [Noll96], Seite 312-326). Besonders geeignet und häufig verwendet im Bereich der Übertragung und Speicherung digitaler Daten sind die zyklischen Blockcodes, insbesondere die BCH- und Reed-Solomon-Codes (RS-Codes). Reed-Solomon-Codes arbeiten mit Symbolen, die aus m Bit bestehen, anstatt mit einzelnen Bits. Im folgenden Abschnitt 2.2.3.2 soll das Reed-Solomon Verfahren zur Kodierung näher erläutert werden. 2.2.3.2 Reed-Solomon-Codes Reed-Solomon-Codes gehören zu den zyklischen Blockcodes, sie sind eine Teilmenge der BCH-Codes. Sie werden inzwischen in vielen Bereichen der digitalen Datenverarbeitung eingesetzt [RiRi98]: • • • • Speichermedien (Tape, Compact Disc, DVD, Barcodes) Drahtlose Kommunikation (Handys, Satelliten) Digitales Fernsehen (Digital Video Broadcasting - DVB) xDSL Modems Im Gegensatz zu BCH-Codes arbeiten Reed-Solomon-Codes auf Symbolen, die jeweils aus m Bit bestehen. Bei m = 8 werden also Bytes als Symbole verwendet, es können jedoch auch ganze Pakete als Symbole verwendet werden Es werden Kodierblöcke mit N = 2m – 1 Symbolen gebildet, von denen K = 1,2,...N-1 Informationssymbole sind. Ein von einem ReedSolomon-Kodierer erzeugtes Symbol soll im folgenden auch als Codewort bezeichnet werden. Es können alle Kombinationen aus T oder weniger Codewörtern korrigiert werden. Es gilt laut [Noll96]: T= d min − 1 mit dmin = N – K + 1 2 Dabei ist dmin der Mindestabstand zweier beliebiger Codewörter (minimaler Hammingabstand). Reed-Solomon-Codes können verkürzt werden, wenn im Kodierer eine Anzahl von Informationssymbolen zu Null gesetzt wird. Diese zu Null gesetzten Symbole werden nicht übertragen, sondern vor dem Dekodieren wieder eingefügt. Seite 13 Kapitel 2: Einführung Reed-Solomon Codewörter (Symbole) werden mit einem speziellen Generator-Polynom erzeugt. Alle gültigen Codewörter sind durch dieses Polynom teilbar. Die allgemeine Form des Generator-Polynoms ist: g ( x) = ( x − a i ) ⋅ ( x − a i +1 ) ⋅ ... ⋅ ( x − a i + 2T ) Das Codewort wird folgendermaßen konstruiert: c( x ) = g ( x ) ⋅ i ( x) Dabei ist g(x) das Generatorpolynom und i(x) der Informationsblock. Der Dekodierer am Empfänger kann das angekommene Codewort rekonstruieren, wenn 2 ⋅ s + r ≤ 2 ⋅ T (s = Fehler, r = bekannter Fehler) ist. Ein bekannter Fehler ist ein Fehler, dessen Position im Codewort bekannt ist. Kennt man die Positionen aller Fehler im Codewort, kann ein Reed-Solomon-Code doppelt so viele Fehler korrigieren. Normalerweise weiß man bei der Übertragung von Paketen aufgrund der Sequenznummern bereits vor dem Dekodieren, welche Pakete verloren wurden. Deshalb kann der Dekodierer genau so viele Pakete wiederherstellen, wie es Redundanzpakete gibt. Ein verlorenes Paket kann also nicht rekonstruiert werden, wenn weniger als k der übrigen n-1 Pakete beim Empfänger angekommen sind. Wenn p die ursprüngliche Verlustwahrscheinlichkeit ist, beträgt die Restverlustwahrscheinlichkeit bei Einsatz eines Reed-Solomon-Codes laut [NoBT97]: n −k −1 n − 1 j ⋅ p ⋅ (1 − p) n − j −1 mit 1 ≤ k ≤ n q(k , n, p) = p ⋅ 1 − ∑ j j Diese Formel gilt allerdings nur unter der Annahme, daß die auftretenden Fehler statistisch unabhängig sind. Abbildung 5 zeigt die Auswirkungen von FEC auf die Ankunftswahrscheinlichkeit eines Paketes in Abhängigkeit von der ursprünglichen Verlustrate. Die Wahrscheinlichkeiten wurden mit der obigen Formel berechnet. Da jeweils Symbole korrigiert werden, sind RS-Codes insbesondere zur Korrektur von Burstfehlern geeignet, soweit die Burstfehler innerhalb eines Symbols auftreten. Die m-bitorientierte Dekodierung ist sehr effizient und ermöglicht die Verwendung von langen Blöcken. Bei der Dekodierung können mit hoher Wahrscheinlichkeit empfangene nicht korrigierbare Codewörter erkannt werden. Das genaue mathematische Verfahren soll hier nicht näher erläutert werden, eine gute Einführung findet man in [Rett97]. Seite 14 Kapitel 2: Einführung 1 Ankunftswahrscheinlichkeit 0,9 0,8 0,7 0,6 0,5 0,4 0,3 0,2 0,1 FEC 6/3 FEC 6/4 ohne FEC 0 1,E-02 1,E-01 1,E+00 Paketverlustrate Abbildung 5: Auswirkung der Paketverlustrate auf die Ankunftswahrscheinlichkeit Eine Abschätzung der Geschwindigkeit eines Reed-Solomon-Dekodierers liefert die folgende Tabelle aus [RiRi98]: Code RS (255,251) RS (255, 239) RS (255, 223) Datenrate [Mbps] 12 2,7 1,1 Tabelle 2 : Geschwindigkeit eines Reed-Solomon-Dekodierers Die Geschwindigkeit wurde auf einem Pentium mit 166MHz ermittelt. Die Kodierung ist um einiges schneller, weil weniger Berechnungen erforderlich sind. Eine interessante neue Entwicklung auf dem Gebiet der Kanalkodierung sind die sogenannten Turbo Codes. Turbo Code Kodierer erzeugen mit Hilfe zweier schwacher Faltungskodierer und eines Interleavers einen sehr mächtigen Code. Trotz des mächtigen Codes ist die Struktur des Kodierers wesentlich einfacher als die vergleichbarer Reed-Solomon-Kodierer. Eine Einführung in die Theorie der Turbo Codes findet man in [Ryan98]. 2.2.3.3 Übertragungsprotokolle mit FEC Mechanismen In [PaWa98] wird ein adaptives FEC Verfahren zur Übertragung von Paketen für Echtzeitdienste vorgestellt. Es wird von der Annahme ausgegangen, daß die Menge an eingesetzter Redundanz entsprechend dem Zustand des Netzwerkes variiert werden muß. Sind die Verluste im Netzwerk gering, benötigt man nur wenig Redundanz. Sind die Verluste dagegen hoch, benötigt man entsprechend mehr Redundanz. Allerdings gibt es einen gewissen Punkt, ab dem man keine zusätzliche Redundanz mehr einsetzen sollte, da sich dann der Zustand des Netzwerkes durch die zusätzliche Redundanz stark verschlechtert. Die selbst erzeugten Verluste steigen dann rapide an, so daß die effektive Verlustrate am Empfänger schließlich größer wird, als mit einer kleineren eingesetzten Menge an Redundanz. Seite 15 Kapitel 2: Einführung Die Autoren definieren ein Protokoll, das die Redundanz am Sender entsprechend der erreichten Recovery-Rate am Empfänger wählt. Die vorgegebene Mindest-Recovery-Rate muß dabei natürlich kleiner oder gleich der optimalen Recovery-Rate sein. Die Analyse des Kontrollalgorithmus zeigt, daß es Instabilitäten gibt. Das Algorithmus wird instabil, wenn die eingesetzte Redundanz die Menge überschreitet, die zur Erreichung der optimalen RecoveryRate notwendig ist. Dieses Verhalten kann durch einen exponentiellen Backoff (wie bei TCP) beseitigt werden, wenn das System den stabilen Bereich verläßt. Instabilitäten durch die Verzögerung im Netzwerk werden durch einen der Verzögerungszeit angepaßten Faktor vermieden. [RFC2198] beschreibt ein Format für die Übertragung von redundanten Audiodaten mit dem RTP Protokoll. Die Übertragung von Redundanz erlaubt eine Verbesserung der Qualität, falls Verluste im Netzwerk auftreten. Wenn ein Paket im Netz verlorengeht, kann es am Empfänger aus den redundanten Daten, die mit einem späteren Paket eintreffen, rekonstruiert werden. An den RTP Header angrenzende zusätzliche Header spezifizieren die redundanten Daten. In [BoFT98] wird ein Algorithmus entwickelt, der eine kombinierte Raten- und Fehlerkontrolle ermöglicht. Dabei wird mit Hilfe von Utility-Kurven versucht, eine optimale subjektive Qualität zu erreichen. Zur Übertragung wird eine redundante Audioübertragung entsprechend [RFC2198] benutzt. In [RoSc98] wird ein Format spezifiziert, um Redundanzinformation zur Vorwärtsfehlerkorrektur in RTP zu übertragen. Das Format wurde speziell für Algorithmen entwickelt, die mit Paritätsinformationen (XOR) arbeiten. Sowohl die Mediendaten als auch alle wichtigen Felder des RTP Headers können am Empfänger wiederhergestellt werden. Die Redundanzinformationen werden hier als separater Strom gesendet, so daß eine Abwärtskompatibilität sichergestellt ist. Empfänger, die keine Vorwärtsfehlerkorrektur beherrschen, können die Redundanzpakete einfach ignorieren. Alle Informationen, die der Empfänger zu Wiederherstellung von verlorenen Paketen benötigt, werden in einem sogenannten FEC Header übertragen, der sich direkt an den RTP Header anschließt. Ein leicht modifiziertes Format zur Übertragung von Redundanzinformationen mittels Reed-Solomon Codes wird in [RoSc98-2] vorgestellt. Das Format ermöglicht beliebige Blocklängen. Die Parameter h und k können Werte zwischen 1 und 256 annehmen. Auch hier wird die Redundanz als separater Strom gesendet, so daß eine Abwärtskompatibilität sichergestellt ist. Empfänger, die keine Vorwärtsfehlerkorrektur beherrschen, können die Redundanzpakete einfach ignorieren. In [GuCW98] wird ein universelles, flexibel einsetzbares Format zur Übertragung von verschiedenen Medien innerhalb eines RTP Pakets vorgestellt. Das Format läßt sich sowohl für Video und Audio als auch für Szenenbeschreibungen nutzen. Außerdem bietet es die Möglichkeit, beliebig kodierte und an die Mediendaten angepaßte Redundanzinformationen zu übertragen. Medienspezifische Informationen befinden sich in sogenannten Extension Data Feldern, deren Bedeutung mit einem out-of-band Mechanismus zum Beispiel dem Service Description Protocol (SDP) signalisiert wird. Seite 16 Kapitel 3: Übertragung und Nutzung von Dienstinformationen 3 Übertragung und Nutzung von Dienstinformationen Um den Anwender über angebotene Dienstklassen und deren Tarife zu informieren, muß ein Datenaustausch zwischen Dienstanbieter und potentiellem Dienstnutzer stattfinden. Abschnitt 3.1 gibt einen Überblick über ein solches System und beschreibt die einzelnen Komponenten. Die Syntax und die Semantik des Datenaustausches wird durch ein Protokoll definiert. In Abschnitt 3.2 wird ein entsprechendes Protokoll, das Charging Information Protokoll (CIP), vorgestellt. Um Tarife mathematisch angeben zu können, wurde eine entsprechende Sprache entwickelt. Die Tariff Formula Language (TFL) wird in Abschnitt 3.3 definiert und anhand von Beispielen dargestellt. Da der Benutzer daran interessiert ist, eine angemessene Qualität für einen möglichst günstigen Preis zu bekommen, wird in Abschnitt 3.4 ein Verfahren zur automatischen optimalen Wahl der Dienstklasse vorgestellt. Dabei wird auch der Einsatz von Vorwärtsfehlerkorrektur (Reed-Solomon-Codes) berücksichtigt. 3.1 Systemüberblick 3.1.1 Systemkomponenten Die Abbildung 6 gibt einen Überblick über die einzelnen Komponenten eines Systems zur Dienstgüteauswahl mit Vorwärtsfehlerkorektur. Abgebildet sind hier sowohl die Komponenten auf der Seite des Benutzers, als auch die auf der Seite des Dienstanbieters. Die Schnittstelle zwischen beiden Seiten bildet der Zugangsrouter. Benutzer Dienstanbieter SNMP Anwendung unbekannt RTP/RTCP C&A/CIP Server CIP Client CIP FGCP C&A Management CIP Router SNMP Meßpunkt SNMP FEC Gateway RTP/RTCP – FEC Tunnel Meßpunkt Kontrollverbindung Datenverbindung Abbildung 6: System zur Dienstgüteauswahl Der Benutzer hat eine oder mehrere Multimedia-Anwendungen zum Beispiel ein Programm für Videokonferenzen oder ähnliches. Die Anwendung benutzt zur Übertragung der Seite 17 Kapitel 3: Übertragung und Nutzung von Dienstinformationen Mediendaten das RTP Protokoll. Der CIP Client fragt die verfügbaren Dienstklassen beim CIP Server des Dienstanbieters ab und präsentiert sie dem Benutzer. Wenn der Benutzer eine bestimmte Dienstklasse wählt, wird dies dem CIP Server durch den CIP Client mitgeteilt. Hat der eingekaufte Dienst eine nicht vernachlässigbare Verlustrate, verbessert ein FEC Gateway durch Vorwärtsfehlerkorrektur die Ende-zu-Ende Dienstqualität. Zusätzlich zu den Medienpaketen werden Redundanzpakete gesendet, die am Empfänger zur Wiederherstellung verlorener Pakete eingesetzt werden. Auf der Seite des Dienstanbieters werden die reservierten und verbrauchten Ressourcen gemessen und der zu zahlende Preis berechnet. Ein Management System erlaubt die Konfiguration des C&A/CIP Servers. 3.1.1.1 CIP Client Der CIP Client fragt die Dienstklasseninformationen beim CIP Server des Dienstanbieters ab und präsentiert sie dem Benutzer. Bei der Anfrage kann ein entsprechender Filter angegeben werden, so daß der Benutzer nur über Dienstklassen informiert wird, die ihn auch interessieren. Der Client kann auf Basis der vom Anwender eingegebenen Informationen (zum Beispiel Bandbreite, Dauer) und der Tarife die entstehenden Kosten im Voraus berechnen. Der Benutzer weiß so bereits vorher, was ihn ein bestimmter Dienst kosten würde. Sind alle Parameter des gewählten Tarifs (mit Ausnahme der Zeit) konstant, kann der Client auch während der Nutzung die momentanen Kosten anzeigen. Es handelt sich also um eine sehr einfache Form der Online Tarifierung. Für eine allgemeine Online Tarifierung muß der Client außerdem Informationen über die verbrauchten und reservierten Ressourcen vom Server bekommen (siehe 3.1.1.5). Die Kommunikation zwischen Client und Server findet über das CIP Protokoll statt. Vor der Nutzung des Dienstes teilt der Client dem Server des Dienstanbieters die gewählte Dienstklasse mit. Dann kann die Reservierung der Ressourcen erfolgen (Intserv) bzw. der Zugangsrouter markiert den Medienstrom mit dem entsprechenden TOS (Diffserv). Hat der gewählte Dienst eine bekannte Verlustrate, kann der Client eine Verbesserung der Qualität durch Vorwärtsfehlerkorrektur veranlassen. Der Client bestimmt die optimalen Kodierparameter für den Datenstrom (siehe Abschnitt 3.4) und sendet sie an das FEC Gateway. Im Normalfall ist die Verlustrate bei Einkauf des Dienstes nicht bekannt. Der Client kann die tatsächlich auftretende Verlustrate für den Strom beim FEC Gateway abfragen. Die Kommunikation zwischen Client und FEC Gateway wird über ein sogenanntes FEC Gateway Control Protocol (FGCP) durchgeführt. Eine minimale Variante eines solchen Protokolls wird in Abschnitt 4.1.5 definiert. Weiterhin wäre eine direkte Kommunikation zwischen Anwendung und Client denkbar. Die Anwendung könnte dann zum Beispiel dem Client direkt die gewünschte Dienstqualität und die den Datenstrom beschreibende Parameter mitteilen. Eine solche Kommunikation erfordert die Definition eines neuen Protokolls sowie Änderungen an bereits existierenden Anwendungen. Für die Übertragung der Characteristik des Datenstroms wäre es denkbar, das Session Description Protocol (SDP) einzusetzen. 3.1.1.2 C&A/CIP Server Der in Abbildung 6 dargestellte C&A/CIP Server besteht in der Realität mit hoher Wahrscheinlichkeit aus mehreren unterschiedlichen Servern, die hier aber konzeptionell als ein Server betrachtet werden sollen. Seite 18 Kapitel 3: Übertragung und Nutzung von Dienstinformationen Der allgemeine Carging&Accounting Teil des Servers hat die folgenden Aufgaben: • • • Sammeln von Meßdaten über die verbrauchten und reservierten Ressourcen (Accounting), Berechnung des Preises anhand des Tarifs und der Meßdaten (Charging) und Anfertigung der Rechnung (Billing). Im weiteren soll nur der CIP Teil näher betrachtet werden. Der CIP Server hat die Informationen über alle angebotenen Dienstklassen gespeichert. Auf Anforderung des Clients übermittelt der Server entweder die kompletten oder einen Teil der Informationen (bei Verwendung eines Filters). Es ist denkbar, daß bestimmte Dienste nur für ausgewählte Kunden angeboten werden. Der Server muß über einen Authentifizierungsmechanismus verfügen, der sicherstellt, daß diese Dienste nur den ausgewählten Kunden angeboten werden. Ein Beispiel für solche Dienste wären zum Beispiel kundenspezifische Sonderangebote. Der Server nimmt Dienstklassenanforderungen des Clients entgegen und veranlaßt dann die nötigen Maßnahmen, um den Dienst zur Verfügung zu stellen. Der Server sorgt außerdem dafür, daß die benötigten Ressourcen gemessen und am Ende der Dienstnutzung dem Kunden in Rechnung gestellt werden. Der Server kommuniziert mit den Servern anderer Dienstanbieter, um einen Ende-zu-Ende Dienst über mehrere Dienstanbieter zu ermöglichen (siehe 3.2.9.2). Weiterhin wäre ein Roaming von Diensten vorstellbar. Das bedeutet, man kann seinen üblichen benutzten Dienst auch über einen anderen Dienstanbieter beziehen, zum Beispiel wenn man verreist ist. 3.1.1.3 C&A Management Das C&A Management ist für die Konfiguration des C&A/CIP Servers zuständig. Das Management ermöglicht die Konfiguration des Meßsystems. Es kann zum Beispiel festgelegt werden, mit welcher Genauigkeit welche Parameter gemessen werden. Ebenso kann man sich die Konfiguration des Abrechnungssystems vorstellen. Das Management ermöglicht außerdem die Erzeugung und Einführung von neuen Diensten mit den entsprechenden Tarifen. Vorstellbar ist zum Beispiel die Erzeugung eines neuen Dienstes aus vorhandenen Dienstkomponenten. Diese Dienstkomponenten könnten dann grafisch einfach zusammengesetzt werden, so wie heutzutage bei den Intelligenten Netzen (IN) in der Telefonie. Werden bestimmte Dienste nur für ausgewählte Benutzer angeboten, müssen diese entsprechend authorisiert werden. 3.1.1.4 FEC Gateway Das FEC Gateway verbessert die Dienstqualität durch eine Vorwärtsfehlerkorrektur. Am Sender wird für den Medienstrom Redundanz erzeugt (Sender Gateway). Die Parameter des Kodierers können für jeden Strom beliebig eingestellt werden. Die hinzugefügte Redundanz erlaubt es, verlorengegangene Pakete am Empfänger wiederherzustellen (Empfänger Gateway). Denkbare Verfahren, um die Redundanz zu erzeugen, sind zum Beispiel Parity Codes oder Reed-Solomon Codes (auch in Kombination mit Interleaving). Die Kodierparameter werden dem Gateway durch das FEC Gateway Control Protocol (FGCP) mitgeteilt. Außerdem läßt sich die Dienstqualität (Verluste, Jitter), die die Empfänger erfahren, mit dem Protokoll auslesen. Seite 19 Kapitel 3: Übertragung und Nutzung von Dienstinformationen 3.1.1.5 Meßsystem Das Meßsystem mißt die durch einen Datenstrom verbrauchten und reservierten Ressourcen. Die gemessenen Daten werden dann für die Preisberechnung benutzt. In [RFC2063] wird die Architektur für ein solches Meßsystem vorgestellt. Das System besteht aus Meßinstanzen (Metern), die das Volumen (Bytes und Pakete) der im Netzwerk auftretenden Ströme messen und aufzeichnen. Es werden also nur die verbrauchten Ressourcen gemessen. Der Meter arbeitet auf der Ebene von IP-Paketen, Meßskripte ermöglichen eine beliebige Filterung von Strömen beim Meßvorgang. Mit Hilfe der Sender- und Empfängeradresse kann die Messung zum Beispiel auf einen einzelnen Strom eingeschränkt werden. Die gemessenen Daten werden in einer MIB (siehe [Brow98]) gespeichert und können von einem Meter Reader per Simple Network Management Protocol (SNMP) abgefragt werden. In [CaMM98] wird eine Erweiterung für das oben beschriebene Meßsystem entwickelt, mit der auch durch RSVP reservierte Ressourcen gemessen werden können. Dazu werden die Felder der RSVP RESV Nachrichten ausgewertet. Abbildung 7 zeigt die Tarifierung eines gemessenen Stromes mit drei unterschiedlichen Tarifen. Die Tarife wurden in der TFL (siehe Abschnitt 3.3) spezifiziert und sind im Anhang 7.3 angegeben. Abbildung 7: Tarifierung einer gemessenen Verbindung Seite 20 Kapitel 3: Übertragung und Nutzung von Dienstinformationen 3.2 Das CIP Protokoll In den nächsten Abschnitten wird ein Protokoll definiert, das die oben gestellten Anforderungen erfüllt. Das Protokoll wurde, in Anlehnung an die Funktion, Charging Information Protokoll (CIP) genannt. 3.2.1 Überblick 3.2.1.1 Funktionalität Das CIP Protokoll hat zwei wesentliche Aufgaben. Erstens soll es dem Kunden Informationen über die vom Dienstanbieter angebotenen Dienstklassen und deren Tarife liefern. Die Informationen über eine Dienstklasse bestehen dabei aus: • • • • • Identifikation (Dienst, Anbieter), Gültigkeit, Tarif, QoS Garantien und Informationen über die Reservierung. Als zweites soll das Protokoll die Auswahl einer Dienstklasse durch den Kunden ermöglichen. Dabei kann der Kunde die Auswahl manuell treffen oder einem intelligenten Programm überlassen, das anhand der gewünschten Dienstspezifikation die günstigste Dienstklasse wählt. Eine gewählte Dienstklasse kann natürlich auch wieder abbestellt werden. Das CIP Protokoll funktioniert ausschließlich zwischen dem Client eines Kunden und dem Server des Dienstanbieters. Die Signalisierung zwischen mehreren Servern eines Dienstanbieters oder zwischen verschiedenen Dienstanbietern liegt außerhalb des Protokolls. Das CIP Protokoll ist ein Application-Layer-Protokoll, das existierenden Transportprotokolle zur Übertragung benutzt. Das Protokoll hat die folgenden Eigenschaften: • • • Sicher, zuverlässig und robust, einfach aber flexibel und skalierbar. Da das Protokoll sowohl die Angebote des Dienstanbieters als auch den Einkauf einer Dienstklasse durch den Benutzer ermöglicht, können sich Fehler oder Sicherheitslücken fatal auswirken. Es kann ein großer finanzieller Schaden auf der Seite des Anbieters oder des Benutzers entstehen. Das Protokoll muß also in erster Linie sicher und zuverlässig sein. Es muß einen Authentifizierungsmechanismus geben, der eine eindeutige Identifikation des Kunden oder des Dienstanbieters ermöglicht. Manipulationen durch Dritte müssen ausgeschlossen werden. Das Protokoll soll außerdem auch bei der Benutzung eines unzuverlässigen Transportdienstes zuverlässig arbeiten. Ist bei einer Transaktion ein Fehler aufgetreten, müssen die Ergebnisse der Transaktion verworfen und die Transaktion wiederholt werden. Der Protokollablauf ist einfach, um das Protokoll robust zu machen und eine einfache Implementierung zu ermöglichen. Gleichzeitig ist das Protokoll aber flexibel, so daß Änderungen einfach und schnell vorgenommen werden können. Das Protokoll soll außerdem skalierbar sein, d.h., auch bei einer größeren Anzahl von Benutzern muß das Protokoll zuverlässig und möglichst effizient arbeiten. Seite 21 Kapitel 3: Übertragung und Nutzung von Dienstinformationen 3.2.1.2 Dienste Die durch das CIP Protokoll angebotenen oder eingekauften Dienste sind IP-Dienste. Der Dienst wird durch einen Strom von IP-Paketen realisiert, der eine bestimmte Dienstqualität bietet. Die Dienstqualität wird mit den üblichen QoS Parametern gemessen (Verlust, Verzögerung, Jitter) und durch Reservierung im Netzwerk sichergestellt. Als Mechanismen für die Sicherstellung der Dienstqualität kann sowohl das Intserv- als auch das Diffserv-Modell, sowie eine Kombination eingesetzt werden (siehe Abschnitt 2.1.1). 3.2.1.3 Eigenschaften des Protokolls Das CIP Protokoll macht nur minimale Annahmen über das darunterliegende Transportprotokoll. Das Transportprotokoll kann entweder einen zuverlässigen oder unzuverlässigen Dienst bereitstellen. Auf das Internet bezogen, kann CIP sowohl über das UDP- als auch über das TCP-Protokoll eingesetzt werden. UDP ermöglicht ein genaueres Timing der Nachrichten und der Retransmissions. Die Unterstützung von UDP erlaubt außerdem den Einsatz von Multicast und damit eine bessere Skalierbarkeit. TCP erlaubt einen einfacheren Einsatz bei Verbindungen über Firewalls und ermöglicht aufgrund des ähnlichen Protokolldesigns gemeinsame Server für CIP, SIP und HTTP (siehe [HaSS98]). Das Protokoll ist text-basiert, es wird die ISO 10646 UTF-8 Kodierung benutzt. Das vereinfacht das Debuggen und erleichtert die Implementierung in Sprachen wie Java, Tcl oder Perl. Ein text-basiertes Protokoll ist außerdem sehr flexibel, Erweiterungen oder Änderungen lassen sich leicht durchführen. Außerdem entstehen keine Konvertierungsprobleme bei der Übertragung von Fließkommazahlen. Aufgrund der vielen denkbaren Dienste und unterschiedlichen Tarife ist die Flexibilität wichtiger, als der durch ein text-basiertes Protokoll entstehende Overhead. Weiterhin wird hier angenommen, daß eine Änderung der Tarife in genügend großen Intervallen erfolgt, so daß der entstehende Overhead nicht signifikant ist. Das CIP Protokoll orientiert sich von der Form an dem in [HaSS98] definierten SIP Protokoll. Eine mögliche Integration der beiden Protokolle wird in Abschnitt 3.2.9.3 diskutiert. Für alle nun folgenden Definitionen wird die im Anhang 7.1 erläuterte Notation benutzt. 3.2.1.4 CIP Adressen CIP Server und CIP Client werden durch CIP Adressen identifiziert. Eine CIP Adresse besteht aus einem Benutzer und einem Host Teil. Die Adresse des CIP Servers eines Anbieters kann out-of-band abgefragt werden, etwa auf den WWW Seiten des Anbieters oder bei einem CIP-Directory-Server (siehe 3.2.9.1). CIP Adressen werden als CIP URLs angegeben. CIP URLs identifizieren Sender und Empfänger einer Nachricht. Eine CIP URL ist folgendermaßen definiert: CIP-URL benutzer passwort host nhost port digits = "cip:" [benutzer] [":" passwort] "@" (host | nhost) [":" port] = siehe [RFC1738] = (ZEICHEN)+ = siehe [RFC1738] = digits "." digits "." digits "." digits = digits = (ZIFFER)+ Eine CIP URL besteht aus dem Präfix "cip:", dem Benutzernamen, dem Paßwort, der Hostadresse und dem Port. Die Benutzeridentifizierung kann wegelassen werden, wenn es nur einen Benutzer auf dem Rechner geben kann (zum Beispiel der CIP Server). Das Paßwort kann als einfache Authentifizierung eines Benutzers für einen CIP Server benutzt werden. Im Seite 22 Kapitel 3: Übertragung und Nutzung von Dienstinformationen einfachsten Fall handelt es sich um das normale Paßwort des Benutzers. Diese Form der Authentifizierung darf nur über eine absolut sichere Netzwerk-Verbindung benutzt werden. Besteht die Möglichkeit, daß die Nachricht durch unbefugte Dritte abgehört werden kann, muß eine Authentifizierung entsprechend Abschnitt 3.2.7.1 durchgeführt werden. Wenn eine CIP Adresse keine Portnummer enthält, muß die CIP Standard-Portnummer benutzt werden. Die Standard-Portnummer für das CIP Protokoll wird vorläufig auf den Wert 4444 festgelegt. In beiden Fällen muß der Client zunächst versuchen, eine Verbindung per UDP herzustellen. Falls dies fehlschlägt, weil der Server kein UDP unterstützt, kann der Client eine TCP Verbindung aufbauen. 3.2.2 Protokollablauf Bei der Betrachtung des Protokollablaufs muß zwischen Unicast- und MulticastÜbertragung unterschieden werden. Bei einer Unicast-Übertragung registriert sich der Client beim Server. Der Server kann die Informationen dann entweder automatisch in bestimmten Abständen an den Client senden (push), oder der Client fordert die Informationen regelmäßig an (pull). Der Client kann bestimmte Dienstklassen auswählen und die Registrierung beim Server jederzeit beenden. Bei einer Multicast-Übertragung werden die Informationen in regelmäßigen Abständen an die Clients übertragen (push). Es gibt keine Bestätigungen oder Retransmissions. Die Zuverlässigkeit der Übertragung hängt damit von der Fehler- bzw. Verlustrate im Netz ab (siehe 3.2.6.3). Eine Multicast-Verbindung ermöglicht eine bessere Skalierbarkeit, außerdem müssen beim Server keine Zustandsinformationen gespeichert werden (minimal state). Exklusive Tarife für ausgewählte Benutzer müssen natürlich verschlüsselt werden, wenn es nur eine Multicast-Gruppe ohne Zugangsbeschränkungen gibt. CIP Nachrichten bestehen aus Requests und Responses. Ein Request wird an einen Empfänger gesendet und löst eine Response aus, die an den Sender geschickt wird. 3.2.3 Transaktionen Eine CIP Transaktion besteht aus einem Request und der dazugehörigen Response. Um festzustellen, ob eine Response zu einem bestimmten Request gehört, gibt es das TransactionID Feld. Der Sender eines Requests erzeugt eine Transaktions-ID und schickt die mit dieser ID versehene Nachricht an den Empfänger. Der Empfänger antwortet mit einer Response, die eine Kopie der Transaktions-ID enthält. Eine Transaktions-ID hat den folgenden Aufbau: Transaktions-ID = nummer ":" benutzer "@" (host | nhost) [":" port] nummer = ZAHL benutzer = siehe [RFC1738] host = siehe [RFC1738] nhost = digits "." digits "." digits "." digits port = digits digits = (ZIFFER)+ Beispiel: 453463747:[email protected] Seite 23 Kapitel 3: Übertragung und Nutzung von Dienstinformationen 3.2.4 CIP Nachrichten CIP Nachrichten sind entweder ein Request oder eine Response. Eine CIP Nachricht ist folgendermaßen aufgebaut: cip_message start-line message-fields = start-line message-fields = request-line | status-line = (general-fields | request-fields | response-fields)* Alle Zeilen werden mit einem CRLF beendet. Leere Zeilen vor der ersten Zeile (start-line) werden ignoriert. Die verschiedenen Requests und Responses werden in den folgenden Abschnitten erläutert. Ein Beispiel für einen CIP Protokollablauf findet man in Anhang 7.2. 3.2.4.1 CIP Requests Ein CIP Request ist folgendermaßen aufgebaut: CIP_Request request-line method cip-version = request-line (general-fields | request-fields)* = method request-uri cip-version CRLF = "REGISTER" | "CANCEL" | "GET_INFO" | "INFO" | "SELECT" = "CIP/" digits "." digits Der Request beginnt mit dem Methodenbezeichner (method), gefolgt von der Empfängeradresse und der Version des Protokolls. Mit einem REGISTER Request registriert sich ein CIP Client bei einem CIP Server. Bei einer Registrierung im push Modus (Unicast) (siehe 3.2.5.18) schickt der Server den registrierten Clients in regelmäßigen Abständen Informationen über die angebotenen Dienstklassen mit INFO Requests. Es werden nur für den Client neue oder geänderte Dienstklassen übermittelt. Wenn keine neuen Dienstklassen existieren, wird ein INFO Request ohne Dienstklasse verschickt. Der Client muß am Ende jeder INFO Paketübermittlung mit einer Response quittieren. So können Server und Client feststellen, ob überhaupt noch eine Verbindung existiert und der Server weiß, welche Pakete er gegebenenfalls neu übertragen muß. Bekommt der Server für eine bestimmte Zeit keine Nachrichten vom Client, hebt der Server die Registrierung auf. Registriert sich der Client im pull Modus, muß er die Informationen mit GET_INFO Requests anfordern. Mit einem CANCEL Request beendet der Client die Registrierung beim Server. Weitere Requests werden erst nach einer erneuten Registrierung vom Server bearbeitet. Mit einem GET_INFO Request kann der Client jederzeit alle Dienstklassen abfragen. Der Server schickt alle Dienstklassen als INFO Response. Der Client sendet also keine Bestätigung an den Server. Falls der Client den Verlust eines Paketes erkannt hat, muß er einen erneuten GET_INFO Request an den Server schicken oder auf einen INFO Request des Servers warten. Der Server schickt in regelmäßigen Abständen einen INFO Request an den Client. Ein INFO Request besteht aus mehreren Paketen. Jede Dienstklasse wird in einem eigenen Paket verschickt. Der Client antwortet dann mit einem OK oder einer Fehler-Response. Aufgrund der Sequenznummern kann der Server die verlorenen INFO Pakete sofort neu übertragen. Seite 24 Kapitel 3: Übertragung und Nutzung von Dienstinformationen Mit dem SELECT Request wählt der Client eine Dienstklasse beim Server aus. Der Client teilt dem Server den ausgewählten Dienst und den Endpunkt (das Ziel) der Verbindung mit. CIP Client CIP Server REGISTER 200 (OK) ........ INFO1 ........ INFOn 200 (OK) SELECT 200 (OK) ........ CANCEL 200 (OK) Abbildung 8: Protokollablauf Die Abbildung 8 zeigt den normalen Protokollablauf bei einer Unicast-Verbindung. Abbildung 9 zeigt ein verlorenes Paket bei einer vom Server ausgelösten Übertragung von INFO Paketen und die erneute Übertragung durch den Server. In Abbildung 10 fordert der Client die Information mit einem GET_INFO an. Das verlorene Paket wird nicht direkt neu übertragen, der Client muß einen erneuten GET_INFO Request senden. CIP Client CIP Server ........ INFO1 INFO2 ........ INFOn 403 (REQ TIMEOUT) INFO2 200 (OK) Abbildung 9: Protokollablauf - Verlorenes INFO Paket Seite 25 Kapitel 3: Übertragung und Nutzung von Dienstinformationen CIP Client CIP Server ........ GET_INFO (201) INFO1 (201) INFO2 ........ (201) INFOn GET_INFO ........ Abbildung 10: GET_INFO - Verlorenes INFO Paket Bei einer Multicast-Übertragung registriert sich der Client nicht beim Server. Der Client empfängt die regelmäßig vom Server gesendeten INFO Pakete. Der Client bestätigt keine empfangenen Pakete. Tritt bei der Übertragung ein Fehler auf (Paketverlust), muß der Client warten, bis der Server die Informationen erneut überträgt. SELECT Requests werden vom Client auf einem zusätzlichen Unicast Kanal an den Server gesendet (wie oben beschrieben). 3.2.4.2 CIP Responses Eine CIP Response ist folgendermaßen aufgebaut: CIP-Response status-line cip-version status-code reason-phrase = status-line (general-fields | response-fields)* = cip-version status-code reason-phrase CRLF = "CIP/" digits "." digits = success | client-error | server-error | global-failure = string Ein Request beginnt mit der Versionsnummer, es folgt der numerische Statuscode und eine Textbeschreibung des numerischen Codes (reason-phrase). Der Statuscode ist für eine maschinelle Auswertung gedacht, während die Beschreibung für einen menschlichen Benutzer lesbar ist. Die Statuscodes sind in folgende Gruppen unterteilt (siehe auch [HaSS98]): 2xx: Erfolg 4xx: Client Error - Der Request wurde erfolgreich empfangen und bearbeitet. - Der Request ist fehlerhaft oder kann nicht an diesem Server ausgeführt werden. 5xx: Server Error - Der Server kann den anscheinend korrekten Request nicht ausführen. 6xx: Global Failure - Der Request kann an keinem Server ausgeführt werden. Folgende Statuscodes und ihre Beschreibungen sind definiert: success = "200" ; OK = "201" ; INFO client-error = "400" ; Bad Request | "401" ; Unauthorized | "402" ; Forbidden Seite 26 Kapitel 3: Übertragung und Nutzung von Dienstinformationen | | | | "403" ; Request Timeout "420" ; Bad Extension (Require) "430" ; Bad Numeric Expression "440" ; Invalid Transaction-ID server-error = "500" ; Server Internal Error | "501" ; Not Implemented | "502" ; Service Unavailable | "503" ; Version Not Supported global-failure = "600" ; Global Failure 3.2.5 Header Felder Die Header Felder orientieren sich von der Syntax und der Semantik an HTTP. Die Reihenfolge der Felder in einer Nachricht ist beliebig. Tabelle 3 zeigt, welche Header Felder bei welchen Methoden benutzt werden müssen, welche optional sind und welche nicht angewendet werden dürfen. Header Felder haben die folgende Syntax: header-field field-name field-value = field-name ":" field-value = (ZEICHEN)+ = (WS | (ZEICHEN)+)* Folgende Nachrichtenfelder sind definiert: general-fields request-fields response-fields = Transaction-ID | Iseq | Encryption | From = Service | Vendor | Valid-Until | Valid-From | Currency | Guarantees | Parameter | Formula | Require | Filter | Authorisation | Endpoint | Mode | Response-Key | Reservation | Reservation-Parameter = Update-Frequency | Unsupported | Warning | Authenticate General-Fields können sowohl in Requests als auch Responses eingesetzt werden. Request- und Response-Fields dürfen entsprechend nur in Requests oder Responses vorkommen. Transaction-ID Iseq Encryption From Service Vendor Valid-Until Valid-From Currency Guarantees Parameter Formula Response-Key Require Type g g g g R R R R R R R R R R GET_INFO x o x o o INFO x x o x x x o o x o x x o - REGISTER x o x o o CANCEL x o x o - SELECT x o x x o o o Seite 27 Kapitel 3: Übertragung und Nutzung von Dienstinformationen Filter Authorization Endpoint Mode Reservation ReservationParameter Update-Freqency Unsupported Warning Authenticate R R R R R R o o - o - o o o x x o - o x - r r(420) r r(401) o o o o o o - o o o o o o o o Tabelle 3 : CIP Header Felder Type: g = general, R = Request, r = response Anwendung: x = erforderlich, o = optional, - = nicht anwendbar 3.2.5.1 Transaction-ID Die Transaction-ID kennzeichnet eine Request-Response Transaktion (siehe 3.2.3). Beispiel: 453463747:[email protected] 3.2.5.2 Iseq Alle zusammengehörigen INFO Pakete werden mit fortlaufenden Sequenznummer versehen. Der Client schickt bei der Bestätigung die Sequenznummern aller angekommenen Pakete an den Server. Dieser kann dann die verlorenen Pakete neu übertragen. Iseq = "Iseq:" ZAHL Beispiel: Iseq: 25456 3.2.5.3 Encryption Das Encryption Feld wird in verschlüsselte Nachrichten eingefügt (siehe 3.2.7.2). 3.2.5.4 From Das From Feld ist eine CIP URL und kennzeichnet den Absender eines Requests. Es muß bei allen Requests verwendet werden. Beispiel: From: cip:[email protected] 3.2.5.5 Service Das Feld Service identifiziert eine Dienstklasse durch eine Nummer und eine Beschreibung. Service = "Service:" "id=\"" ZAHL "\"" "," "name=" string Beispiel: Service: id="1234", name="audio over IP" Seite 28 Kapitel 3: Übertragung und Nutzung von Dienstinformationen 3.2.5.6 Vendor Das Vendor Feld identifiziert den Dienstanbieter einer Serviceklasse. Vendor = "Vendor:" "id=\"" ZAHL "\"" "," "name=" string Beispiel: Vendor: id="25", name="NEW-TEL INC." 3.2.5.7 Valid-Until Das Feld Valid-Until gibt an, bis zu welchem Zeitpunkt der Tarif gültig ist. Bei der Angabe eines Tarifs gibt es zwei Möglichkeiten. Entweder deckt der Tarif den vollständigen Zeitraum ab, d.h., in der Formel gibt es eine Fallunterscheidung nach der Zeit, oder die zeitliche Gültigkeit wird durch die Felder Valid-Until und Valid-From ausgedrückt. Es wird empfohlen, die Zeitabhängigkeit direkt in der Tarifformel auszudrücken. Valid-Until tag monat = "Valid-Until:" tag "," TAG monat JAHR HH ":" MM ":" SS ZEITZONE = "Mon" | "Tue" | "Wed" | "Thu" | "Fri" | "Sat" | "Sun" = "Jan" | "Feb" | "Mar" | "Apr" | "May" | "Jun" | "Jul" | "Aug" | "Sep" | "Oct" | "Dec" Beispiel: Valid-Until: Wed, 9 Dec 1998 18:00:00 MET 3.2.5.8 Valid-From Das Valid-From Feld gibt an, ab welchem Zeitpunkt der Tarif gültig ist. Es hat die gleiche Syntax wie das Valid-Until Feld (siehe 3.2.5.7). Beispiel: Valid-From: Wed, 9 Dec 1998 12:00:00 MET 3.2.5.9 Currency Das Currency Feld drückt die Währung aus, in der der Tarif abgerechnet wird. Im Rahmen dieser Arbeit wurden keine Bezeichner für die verschiedenen Währungen ausgearbeitet, deshalb soll hier nur ein Beispiel gezeigt werden. Beispiel: Currency: US-Dollar 3.2.5.10 Guarantees Das Feld Guarantees beschreibt die QoS Garantien, die die Dienstklasse bietet. Momentan können die maximalen Werte für die Verlustrate, die Verzögerung und den Jitter angegeben werden. Guarantees verluste verzögerung jitter = "Guarantees:" "loss=\"" verluste "\"" "," "delay=\"" verzögerung "\"" "," "jitter=\"" jitter "\"" = Verlustrate = Verzögerung in ms = Jitter in ms Beispiel: Guarantees: loss="0.2", delay="150", jitter="10" Seite 29 Kapitel 3: Übertragung und Nutzung von Dienstinformationen 3.2.5.11 Parameter Mit dem Feld Parameter werden alle nicht global definierten Parameter beschrieben (siehe 3.3.2.3), die in der Tarifformel vorkommen. Parameter name wert = "Parameter:" name "=\"" wert "\"" (","name "=\"" wert "\"")* = (ZEICHEN)+ = ZAHL | TFL Ausdruck Beispiel: Parameter: c="0.1", ct="0.2", ut="60", cv="0.25", uv="1024" 3.2.5.12 Formula Das Feld Formula beschreibt die in der TFL (siehe 3.3) angegebene Tarifformel. Beispiel: c + (t/ut)*ct + (v/uv)*cv 3.2.5.13 Response-Key Das Feld Response-Key gibt an, mit welchem Schlüssel die Response verschlüsselt werden muß (siehe 3.2.7.2). 3.2.5.14 Require Das Require Feld teilt dem Server mit, daß der Client eine bestimmte Funktionalität voraussetzt (siehe [HaSS98]). Mit diesem Mechanismus lassen sich Erweiterungen in das Protokoll einfügen. Wenn der Server die Option nicht unterstützt, antwortet er mit einer Bad Extension Response, die das Unsupported Feld enthält. Beispiel: C->S: REGISTER cip:[email protected] CIP/1.0 Require: com.example.zone-billing Payment: zone="regional" S->C: SIP/1.0 420 Bad Extension Unsupported: com.example.zone-billing 3.2.5.15 Filter Das Filter Feld ermöglicht dem Client, eine Vorauswahl an Dienstklassen zu treffen. Das Filter Feld wird also nur bei Unicast eingesetzt. Filter filter = "Filter:" filter = TFL Ausdruck Beispiel: Filter: jitter<10 3.2.5.16 Authorisation Das Authorisation Feld ermöglicht eine eindeutige Identifizierung des Absenders (siehe 3.2.7.1). 3.2.5.17 Endpoint Mit dem Endpoint Feld legt der Client den Endpunkt (das Ziel) für eine eingekaufte Dienstklasse fest. Endpoint host Seite 30 = "Endpoint:" (host | nhost) [":" port] = siehe [RFC1738] Kapitel 3: Übertragung und Nutzung von Dienstinformationen nhost port digits = digits "." digits "." digits "." digits = digits = (ZIFFER)+ Beispiel: Endpoint: mycomputer.some-provider.de:10000 3.2.5.18 Mode Dieses Feld legt fest, ob der Server regelmäßig automatisch INFO Nachrichten an den Client sendet (push), oder ob der Client die INFO Pakete selber mit GET_INFO Requests anfordern muß (pull). Standardmäßig wird der push-Mode benutzt. Das Mode Feld kann nur bei Unicast Übertragung benutzt werden. Mode = "Mode:" "push" | "pull" Beispiel: Mode: pull 3.2.5.19 Reservation Das Reservation Feld kennzeichnet die Art der Ressourcenreservierung im Netzwerk. Momentan gibt es nur das Intserv und das Diffserv Verfahren. Reservation = "Reservation:" "Intserv" | "Diffserv" Beispiel: Reservation: Intserv 3.2.5.20 Reservation-Parameter Das Reservation-Parameter Feld legt notwendige Reservierungsparameter und ihre Werte fest. Reservation-Parameter name wert = "Reservation-Parameter:" name "=\"" wert "\"" (","name "=\"" wert "\"")* = (ZEICHEN)+ = ZAHL Beispiel: Reservation-Parameter: rate="5000" 3.2.5.21 Update-Frequency Mit dem Feld Update Frequency teilt der Server dem Client mit, in welchen Zeitabständen die Dienstklasseninformationen im push Modus übertragen werden. Im pull Modus bestimmt der Client das Intervall, in dem die Informationen gesendet werden (GET_INFO Request). Update-Frequency freq = "Update-Frequency:" freq = Update-Intervall in s Beispiel: Update-Frequency: 30 3.2.5.22 Unsupported Mit dem Feld Unsupported teilt der Server dem Client mit, welche per Require verlangten Optionen er nicht unterstützt (siehe 3.2.5.14). Seite 31 Kapitel 3: Übertragung und Nutzung von Dienstinformationen 3.2.5.23 Warning Das Warning Feld dient zur Übertragung von zusätzlichen Informationen in einer Response. Warning = "Warning:" warn-code warn-text warn-code = 3*ZIFFER "." 2*ZIFFER warn-text = (ZEICHEN)+ Beispiel: Warning: 600.2 Multicast not available 3.2.5.24 Authenticate Mit diesem Feld teilt der Server dem Client mit, daß eine Authentifizierung nötig ist (siehe 3.2.7.1). 3.2.5.25 Header Felder Kurzform Um Bandbreite bei der Übertragung von CIP Nachrichten zu sparen, kann eine Kurzform der Headerfelder benutzt werden. Statt dem Feldbezeichner wird nur ein einziger Buchstabe angegeben. Gerade bei häufig benutzten Feldern lohnt sich eine solche Einsparung. In Tabelle 4 werden ein paar Kurzformen gezeigt, weitere können definiert werden. Feldname From Transaction-ID Service Vendor Guarantees Kurzform f i s v g Tabelle 4: Header Felder Kurzformen 3.2.6 CIP Transport CIP wurde so definiert, daß entweder UDP oder TCP als Transportprotokoll eingesetzt werden kann. Es verfügt über eigene Zuverlässigkeitsmechanismen, so daß es auch über unzuverlässige Transportprotokolle wie UDP eingesetzt werden kann. Das CIP Protokoll verwendet dazu Timeouts und Retransmissions. Das Protokoll kann bei UDP sowohl über Unicast als auch Multicast benutzt werden. Aufgrund des Overheads, der durch die Nachrichten der Clients an den Server entsteht, sollte bei Multicast allerdings eine einfachere Variante des Protokolls (nur INFO Requests, siehe 3.2.6.3) eingesetzt werden. Über eine TCP Verbindung können beliebig viele CIP Transaktionen abgewickelt werden, es muß nicht für jede CIP Transaktion eine neue TCP Verbindung hergestellt werden. CIP Nachrichten, die als UDP Datagramme verschickt werden, sollten normalerweise kleiner als die MTU sein. Wenn die MTU nicht bekannt ist, sollten die CIP Nachrichten kleiner als 1400 Byte sein. Kürzliche Studien haben gezeigt, daß die typische MTU bei ungefähr 1500 Byte liegt (siehe [HaSS98]). Zieht man davon die Länge der Paket-Header ab, so ergibt sich der Wert von 1400 Byte als maximale Länge einer CIP Nachricht. Seite 32 Kapitel 3: Übertragung und Nutzung von Dienstinformationen 3.2.6.1 REGISTER, CANCEL, SELECT Der CIP Client sendet einen REGISTER, CANCEL oder SELECT Request solange im Abstand t1, bis er entweder eine Antwort vom CIP Server bekommt, oder die maximale Anzahl der Retransmissions erreicht ist. Der Standardwert für t1 ist 5s, die maximale Anzahl der Sendeversuche beträgt 5. Abbildung 11 zeigt den Ablauf der Transaktionen. CLIENT SERVER Request senden Request Fehler Timer t1 Request 200 (OK) Fehler? J N N Max Retrans? 200 (OK) Fehler J Abbildung 11: REGISTER, CANCEL, SELECT 3.2.6.2 GET_INFO, INFO Fordert der CIP Client die Tarife beim CIP Server an, sendet er den GET_INFO Request im Abstand t1 bis er eine Antwort bekommt oder die maximale Anzahl an Retransmissions erreicht ist (siehe 3.2.6.1). Mit Eintreffen des ersten INFO Paketes wartet der Client, bis entweder alle INFO Pakete eingetroffen sind oder der Timer t2 abgelaufen ist. Der Client kann feststellen, ob er alle INFO Pakete bekommen hat, da alle zusammengehörigen INFO Pakete die gleiche Transaktionsnummer haben und in jedem INFO Paket die Gesamtanzahl der Pakete steht. Außerdem sind alle INFO Pakete mit einer Sequenznummer (Iseq) durchnumeriert. Wenn der Client festgestellt hat, daß er nicht alle Pakete bekommen hat, sendet er einen erneuten GET_INFO Request. Der Timer t2 hat standardmäßig einen Wert von 5s. Komplizierter wird es bei der automatischen periodischen INFO Übertragung (Push Mode) durch den Server. Wenn der Client festgestellt hat, daß er nicht alle Pakete bekommen hat, sendet er eine TIMEOUT Response an den Server, welche die Sequenznummer aller empfangenden Pakete enthält. Der Server kann dann die nicht angekommenen Pakete erneut schicken (Selective Repeat). Hat der Client alle Pakete empfangen, quittiert er mit einer OK Response in der ebenfalls alle Sequenznummer enthalten sind. Ein Problem ergibt sich, wenn der Client überhaupt kein Paket bekommt. Er kann nicht wissen, ob der Server überhaupt kein Paket geschickt hat oder alle Pakete bei der Übertragung verloren wurden. Nach Absenden aller INFO Pakete setzt der Server den Timer t3. Wird innerhalb der Zeit t3 keine Rückmeldung vom Client empfangen, überträgt der Server alle INFO Pakete erneut. Auch hier gibt es eine maximale Anzahl der Retransmissions. Der Timer t3 hat einen standardmäßigen Wert von Seite 33 Kapitel 3: Übertragung und Nutzung von Dienstinformationen 10s. Das Update Intervall des Server muß natürlich größer als t3 sein, standardmäßig ist es auf 30s gesetzt. Abbildung 12 zeigt den Ablauf beim Versenden der INFO Pakete. CLIENT SERVER Warten auf INFO INFO senden INFO INFO 1. Paket: Timer t2 starten komplett? N J 200 (OK) Timer t2 abgelaufen Timer t3 TIMEOUT 200 (OK) N J TIMEOUT N Max Retrans? J Warten auf INFO Abbildung 12: Empfang der INFO Pakete 3.2.6.3 CIP and Multicast Zur Übertragung des CIP Protokolls über eine Multicast-Verbindung wird ein wesentlich einfacheres Schema vorgeschlagen. Die vom Client zum Server gesendeten Requests führen bei Multicast zu einem relativ großen Overhead, da sie auch an alle anderen Clients gesendet werden. Bei Multicast versendet deshalb nur der Server die INFO Nachrichten an die Clients, alle anderen Requests werden nicht benutzt. Die INFO Pakete werden auch nicht durch die Clients bestätigt und es gibt keine unmittelbare Retransmission durch den Server. Die Übertragung der INFO Pakete erfolgt ansonsten genau wie bei Unicast Verbindungen. Der Client kann verlorene Pakete anhand der Transaktionsnummer und des Count Feldes erkennen. Erkennt der Client, daß Pakete verloren wurden, muß er warten, bis der Server diese neu überträgt. Die Auswahl einer Dienstklasse muß über einen zusätzlichen Unicast Kanal erfolgen, oder wird einer anderen Instanz überlassen (zum Beispiel einem sogenannten Bandwidth Broker). Wird der SELECT Request auf einem zusätzlichen Unicast Kanal benutzt, ist der Ablauf wie in 3.2.6.1 beschrieben. Die Zuverlässigkeit ist bei diesem Protokollablauf von der Übertragungsqualität im Netz abhängig und damit in der Regel geringer als bei der komplizierteren Unicast-Übertragung. Bei moderaten Verlustraten und relativ großen Update-Intervallen des Servers kann es schon etwas dauern, bis der Client alle INFO Pakete erhalten hat. Unter Umständen kann der Client natürlich auch schon einen Dienst wählen, wenn er nicht die Information über alle Dienste hat. Die Vorteile bei einer Multicast Übertragung sind der wesentlich einfachere Protokollablauf und die bessere Skalierbarkeit bei großen Zahlen von Benutzern. Ein Vorteil bei dem Unicast-Modell ist, daß jeweils nur für den Client neue Dienstklassen übertragen werden müssen. Bei kleinen Benutzerzahlen ist eine Unicast-Übertragung also sogar effizienter als eine Multicast-Übertragung zum Beispiel, wenn es nur einen kleinen Anteil an dynamischen Tarifen gibt. Seite 34 Kapitel 3: Übertragung und Nutzung von Dienstinformationen 3.2.7 Sicherheit Gerade bei einem Protokoll wie dem CIP Protokoll ist die Sicherheit ein wichtiger Punkt, weil CIP Nachrichten sensible Daten enthalten und die mit Hilfe des Protokolls getroffenen Entscheidungen des Anwenders unmittelbar seinen Kontostand beeinflussen. Es ist möglich, daß ein GET_INFO Request durch einen Dritten belauscht wird. Der Lauscher kann dann dem Benutzer eine falsche Dienstklasse vorspielen. Das ist ein Problem, wenn ein Dienst mit dieser Identifikation tatsächlich existiert. Ein sehr teuerer Dienst könnte zum Beispiel so in einen sehr billigen Dienst verwandelt werden und der Benutzer zahlt unnötig viel Geld. Der Lauscher könnte auch einen SELECT Request des Benutzers fälschen. Der Benutzer muß dann für einen Dienst bezahlen, den er nie eingekauft hat. Um solche Manipulationen zu vermeiden, benötigt man eine Authentifizierung der Kunden und des Dienstanbieters. Außerdem muß sichergestellt sein, daß keines der Felder der Nachricht geändert wurde. Eine weitere Möglichkeit ist, daß der Lauscher ausspäht, welche Dienste ein Anwender zu welcher Zeit einkauft und so Profile über den Benutzer erstellen kann. Gibt es spezielle Tarife für bestimmte Benutzer, können auch diese ausgespäht werden. Ein Ausspähen der Daten kann mit einer Verschlüsselung verhindert werden. Die im folgenden gezeigten Sicherheitsmechanismen wurden aus [HaSS98] abgeleitet und basieren auf PGP (Pretty Good Privacy). Andere Mechanismen sind aber ebenso denkbar. 3.2.7.1 Authentifizierung Bei dem PGP Authentifizierungsschema identifiziert sich der Client durch die Signierung des Requests mit seinen privaten Schlüssel. Der Server kann den Sender eindeutig zuordnen, wenn er den öffentlichen Schlüssel des Clients kennt. Die Echtheit des öffentlichen Schlüssels muß durch eine Zertifizierungsinstanz bestätigt werden, die garantiert, daß der öffentliche Schlüssel auch der Person gehört, die vorgibt der Eigentümer zu sein. Die Zertifierungsinstanz kennt also die Person (Personalausweis), welcher der Schlüssel gehört. Ein Anbieter kann natürlich auch gleichzeitig als Zertifizierungsinstanz fungieren, wenn Kunden sich zum Beispiel mit einer Kopie des Personalausweises anmelden müssen. Wenn eine Authentifizierung erforderlich ist, kann dies der Server mit dem Authenticate Feld in einer Response anzeigen: Authenticate realm pgp-version pgp-algorithm = "Authenticate: " "pgp" realm "," pgp-version "," pgp-algorithm = "realm=" string = "version=\"" ZIFFER ("." ZIFFER)* (ZEICHEN)* "\"" = "algorithm=" ( "md5" | "sha1" ) Der Wert realm ist ein Text, der dem Benutzer die Art der geforderten Identität anzeigt. Der Wert pgp-algorithm zeigt den erwarteten Algorithmus an, mit dem die Signatur erzeugt wird (Message Integrity Check (MIS)). Der Wert pgp-version gibt die PGP Version an, die der Client benutzen muß. Beispiel: Authenticate: pgp realm="Your NEW-TEL identity please", version="5.0", algorithm="md5" Seite 35 Kapitel 3: Übertragung und Nutzung von Dienstinformationen Der Client muß dann in seinem Request das Authorisation Feld verwenden: Authorisation realm pgp-version pgp-signature = "Authorisation: " "pgp" realm "," pgp-version "," pgp-signature "," = "realm=" string = "version=\"" ZIFFER ("." ZIFFER)* (ZEICHEN)* "\"" = "signature=" string Die Werte realm und pgp-version entsprechen den Werten des Authenticate Feldes und haben dieselben Werte wie in einer vorher empfangenen Response mit Authenticate Feld. Der Wert pgp-signature ist die von PGP erzeugte ASCII-armored Signatur zwischen dem "BEGIN PGP MESSAGE" und dem "END PGP MESSAGE" ohne die Versionsnummer. Die Signatur wird über die komplette Request Nachricht (mit Ausnahme des Authorisation Feldes) berechnet und ohne Zeilensprünge eingefügt. Beispiel: Authorisation: pgp realm="Your NEW-TEL identity please", version="5.0", signature="ZfguU78uzjht67567ufgvuzR/uzfvludouor6778d" 3.2.7.2 Verschlüsselung Das CIP Protokoll ermöglicht eine Ende-zu-Ende Verschlüsselung der Nachrichten. Die Nachricht wird mit dem öffentlichen Schlüssel des Empfängers verschlüsselt und kann nur von diesem mit dem privaten Schlüssel entschlüsselt werden. Der Request-Header, der Response-Header, Authorisation oder Authenticate Felder dürfen nicht verschlüsselt werden. Alle anderen Felder können verschlüsselt werden, müssen es aber nicht. Normalerweise sollte zum Beispiel das From Feld nicht verschlüsselt werden. Unverschlüsselte Felder müssen sich alle am Anfang der Nachricht vor dem verschlüsselten Teil befinden. Nach der Verschlüsselung wird das Encryption Feld in den unverschlüsselten Teil der Nachricht eingefügt: Encryption pgp-version pgp-encoding = "Encryption: " "pgp" pgp-version "," pgp-encoding = "version=\"" ZIFFER ("." ZIFFER)* (ZEICHEN)* "\"" = "encoding=" "ascii" Der Wert version hat dieselbe Bedeutung wie bei Authenticate oder Authorisation Feldern. Der Wert encoding beschreibt die benutzte Kodierung. Unterstützt wird momentan nur die ASCII-armored Kodierung von PGP ohne die Zeilen "BEGIN PGP MESSAGE" und "END PGP MESSAGE" und ohne Versionsnummer. Beispiel: Encryption: pgp version="5.0", encoding="ascii" In einem Request kann angegeben werden, mit welchem Schlüssel und welcher Kodierung eine Response verschlüsselt werden soll. Dazu wird das Response-Key Feld in den Request eingefügt: Response-Key pgp-version pgp-encoding pgp-key = "Response-Key:" "pgp" pgp-version "," pgp-encoding "," pgp-key = "version=\"" ZIFFER ("." ZIFFER)* (ZEICHEN)* "\"" = "encoding=" "ascii" = "key=" string Beispiel: Response-Key: pgp version="5.0", encoding="ascii", key="Gbuzlvulczk/(4580ztcdzdnmjl" Seite 36 Kapitel 3: Übertragung und Nutzung von Dienstinformationen 3.2.8 Kostenaufteilung zwischen Sender und Empfänger Momentan bezahlt jeder an das Internet angeschlossene Benutzer seinen lokalen Service Provider, der ihm den Zugang ermöglicht. Der Service Provider wiederum bezahlt seinen regionalen oder Wide Area Provider. Das System hat den Effekt, daß jeder Benutzer quasi einen Teil der Kosten des in seiner Nähe befindlichen regionalen Netzwerkes bezahlt. In der Mitte des Netzes gibt es neutrale Punkte, an denen keine Bezahlung in die eine oder andere Richtung fließt. An diesen Punkten wird ein Gleichgewicht angenommen, d.h., die Provider auf beiden Seiten werden angemessen durch die an ihnen angeschlossenen Nutzer bezahlt (siehe [Clark96]). Eine virtuelle Verbindung im Internet wird also von beiden Benutzern bezahlt. Dies steht im Gegensatz zum klassischen Telefonsystem, wo eine Verbindung entweder vom Anrufer oder vom Angerufenden bezahlt wird. In [Clark96] wird gezeigt, daß eine Flexibilität der Kostenaufteilung zwischen Sender und Empfänger vorteilhaft ist. Als Lösung wird ein Zonen-basiertes Bezahlungsschema vorgeschlagen, bei dem jeder Teilnehmer für eine gewisse Region zahlt. Decken die Zone des Senders und die Zone des Empfängers nicht die gesamte Strecke ab, bekommt der Datenstrom für den unbezahlten Teil keine garantierte Dienstqualität (Best Effort). Der Autor zeigt außerdem, daß eine Implementierung des Schemas möglich ist. Es sind sowohl Informationen in den gesendeten Paketen als auch Zustandsinformationen pro Strom in den Routern nötig. Um ein solches System durch das CIP Protokoll zu unterstützen, muß der Provider zunächst Tarife anbieten, die auch von der Zone abhängig sind. Zonenabhängige Tarife werden in der traditionellen Telefonie weltweit benutzt und könnten entsprechend angepaßt verwendet werden. Mit der TFL (siehe Abschnitt 3.3) läßt sich eine solche Formel zum Beispiel folgendermaßen ausdrücken: preis = if(ZO==1,preis1, if(ZO==2,preis2)) ZO ist dabei die global bekannte Variable für die Zone, preis1 und preis2 repräsentieren beliebige Tariffunktionen. Da die TFL keine Vergleiche von Strings erlaubt, muß die Zone als numerischer Wert repräsentiert werden, beispielsweise 1=Ortszone, 2=Fernzone. Ein neues CIP Schlüsselwort in der SELECT Nachricht erlaubt dem Kunden dann, die Reichweite seiner Bezahlung festzulegen. Dabei reicht die Bandbreite von vollständiger Bezahlung, über die Bezahlung einer gewissen Zone bis hin zu überhaupt keiner Bezahlung. Die Umsetzung im Netz übernimmt dann das in [Clark96] vorgestellte Verfahren. Das neue Schlüsselwort wird folgendermaßen definiert: Payment = "Payment: " "full" | "none" | "zone=" ZONE ZONE spezifiziert dabei eine bestimmte Zone oder Region. Jeder Provider kann bestimmte Regionen und deren Reichweite festlegen. 3.2.9 Weitere Überlegungen 3.2.9.1 CIP Directory-Server Damit ein Kunde zwischen verschiedenen Dienstanbietern vergleichen kann, gibt es einen sogenannten CIP Directory-Server. Dieser Server liefert dem Kunden die CIP URLs der einzelnen Dienstanbieter. Der Kunde kann dann die Dienste der verschiedenen Anbieter abfragen, vergleichen und sich für den günstigsten entscheiden. In der einfachsten Form könnten die CIP URLs einfach in einer WWW Seite angegeben sein und der Kunde muß sie manuell Seite 37 Kapitel 3: Übertragung und Nutzung von Dienstinformationen in die Konfiguration seines Client übertragen. Besser wäre natürlich, wenn die URLs automatisch zum CIP Client übermittelt werden. Der CIP Client sucht dann den für den Benutzer günstigsten Tarif aus (siehe 3.4). Abbildung 13 zeigt eine Darstellung des CIP DirectoryServers. CIP Server CIP Server CIP Client Adreßanfrage Abfrage der Dienste CIP DirectoryServer CIP Server Abbildung 13: CIP Directory-Server 3.2.9.2 Kostenkompensation zwischen Providern Wenn IP-Ströme die Grenze zwischen verschiedenen Providern überschreiten, muß es eine Kostenkompensation zwischen den beiden Dienstanbietern geben. In [CaHS98] wird als Ansatz die Rekursive Accounting Methode vorgestellt. Jeder Provider stellt den angrenzenden Providern die verbrauchten Ressourcen in Rechnung, d.h., die Provider müssen für Ströme zahlen, die von ihrer Domäne in die betrachtete fließen. Ein Provider, der Dienste für Anwender anbietet, stellt diesen die verbrauchten Ressourcen in Rechnung. Für die verschiedenen Dienstanbieter ist es also ausreichend, untereinander Rechnungen auszutauschen. Ein Dienst, der bei einem Provider eingekauft wird, muß bei einem Übergang zu einem anderen Anbieter natürlich auf einen Dienst mit ähnlicher Dienstqualität abgebildet werden. Dieses Schema funktioniert, wenn der jeweilige Sender den Tarif seiner Heimatdomäne bezahlt. Für erweiterte Dienste wie zum Beispiel Roaming müssen zusätzliche Informationen zwischen den Providern ausgetauscht werden. Beim Roaming bezahlt der Benutzer für die verbrauchten Ressourcen beim entfernten Provider mit dem Tarif seines Heimat-Providers (zuzüglich Roaming-Gebühr). Dazu muß der momentane Provider dem Heimat-Provider die verbrauchten Ressourcen mitteilen. Eine Datenstruktur, die zur Übermittlung von Accounting Daten genutzt werden kann, ist der PIP-NAR (siehe [ETSI98]). Das dazu notwendige Protokoll und Datenformat liegen außerhalb der Anwendung des CIP Protokolls und sollen hier deshalb nicht näher betrachtet werden. [Clark96] zeigt, wie eine Kostenkompensation bei Anwendung des Zonen-basierten Kostenmodells erfolgen kann. Seite 38 Kapitel 3: Übertragung und Nutzung von Dienstinformationen 3.2.9.3 Integration des CIP Protokolls in die existierende Protokollhierarchie Da Dienstauswahl und Dienstnutzung unmittelbar miteinander verbunden sind, ist eine Integration des CIP Protokolls in die Internet Multimedia Konferenz Architektur aus [HaCB98] denkbar. Zur Integration des CIP Protokolls gibt es zwei Ansätze: • • Integration als eigenständiges Protokoll und Integration durch Verschmelzung von CIP und SIP Protokoll. Bei der Integration als eigenständiges Protokoll bleibt das CIP Protokoll unabhängig von den anderen existierenden Protokollen. Dies entspricht mehr dem allgemeinen Internet Ansatz der kleinen überschaubaren, auf einen bestimmten Zweck ausgelegten Protokolle. Eine Verschmelzung des CIP und SIP Protokolls profitiert von den Gemeinsamkeiten der Protokolle. Nicht nur die Form beider Protokolle ist sehr ähnlich, auch bestimmte Mechanismen wie Authentifizierung, Verschlüsselung lassen sich gemeinsam nutzen. Ein Problem ist dann jedoch die deutlich zunehmende Komplexität gegenüber den beiden einzelnen Protokollen. In beiden Fällen ist der grundsätzliche Ablauf gleich. Der Einladende wählt eine Dienstklasse und legt fest, welchen Anteil an den Kosten er übernehmen will bzw. welche Zone er bezahlt (siehe 3.2.8). Die gewählte Dienstklasse erstreckt sich dabei über die gewählte Zone. Bei einer Integration von CIP und SIP kann die Kostenübernahme zum Beispiel durch die INVITE Nachricht (siehe [HaSS98]) übermittelt werden. Der Eingeladene kann dann entscheiden, ob er die restlichen Kosten übernehmen will und welche Dienstqualität er innerhalb seiner Zone haben will. Wenn er mit den Kosten nicht einverstanden ist, kann er die Einladung ablehnen. Anschließend wird dem jeweiligen Dienstanbieter die gewünschte Dienstklasse mitgeteilt und die Ressourcen im Netz werden reserviert. Während der Verbindung erhalten die Teilnehmer die eingekaufte Dienstqualität. Beendet ein Teilnehmer die Verbindung (BYE), wird die Dienstnutzung beendet und die reservierten Ressourcen werden freigegeben. Anhand der verbrauchten und reservierten Ressourcen, der Kostenübernahme und anderen relevanten Parametern wird der zu zahlenden Preis berechnet. Ohne das Zonenmodell von [Clark96] vereinfacht sich der obige Ablauf. Es gibt dann für den Sender nur die Möglichkeit zu bezahlen oder das Bezahlen dem Empfänger zu überlassen (Reverse Charging). Bei Multicast-Verbindungen können die Kosten auf die einzelnen Empfänger aufgeteilt werden (siehe 2.1.4). 3.2.9.4 CIP als Erweiterung des DIAMETER Protokolls Das in [CaRu98] beschriebene DIAMETER Protokoll stellt ein Rahmenwerk für beliebige Dienste im Authentification-, Authorization- und Accounting-Bereich (AAA) dar. Das Protokoll ist sehr flexibel und ermöglicht die Definition von Erweiterungen, um die Anforderungen eines bestimmten Dienstes zu erfüllen. Das DIAMETER Protokoll ist der Nachfolger des RADIUS Protokolls. Das DIAMETER Protokoll ist besser erweiterbar und ein DIAMETER Server kann unaufgeforderte Nachrichten an den Client schicken. Ein Server kann also eine Nachricht an einen Client senden, ohne daß er zuvor einen Request von dem Client empfangen hat. Außerdem wurde die Zuverlässigkeit bei der Übertragung gegenüber RADIUS verbessert. DIAMETER besteht aus einem Basis-Protokoll und mehreren Erweiterungen. Die Erweiterungen umfassen zum Beispiel Mobile-IP, QoS, Authentification und Ressourcen Management. DIAMETER Nachrichten bestehen aus einem Header und mehreren Attribut-WertPaaren (AVPs). Das erste Attribut-Wert-Paar einer Nachricht ist das Command AVP. Das Command AVP enthält das Kommando der Nachricht. Es folgen weitere AVPs mit Kommando-spezifischen Feldern. Seite 39 Kapitel 3: Übertragung und Nutzung von Dienstinformationen Weil das RADIUS Protokoll mittlerweile weit verbreitet ist, wird sich wohl auch sein Nachfolger DIAMETER entsprechend durchsetzen. Deshalb erscheint es sinnvoll, das CIP Protokoll als DIAMETER Erweiterung zu realisieren. CIP Requests und Responses werden als DIAMETER Command AVPs definiert. Alle weiteren CIP Felder werden als DIAMETER AVPs definiert. Wenn es bereits Felder im DIAMETER Header oder AVPs mit der gleichen Semantik wie ein CIP Feld gibt, werden diese benutzt und es wird kein eigener AVP definiert. Der gesamte Protokollablauf von CIP wird in der DIAMETER Erweiterung übernommen. Der Protokollablauf bleibt also gleich, es kommt lediglich das Basis-Protokoll von DIAMETER hinzu. 3.2.10 Implementierung Im Rahmen dieser Diplomarbeit wurden der CIP Client und der CIP Server als Prototyp in der Sprache C++ implementiert. Es wurde nur die UDP Unicast-Übertragung realisiert, TCP und UDP Multicast lassen sich aber relativ einfach hinzufügen. Sicherheitsmechanismen wie Authentifizierung und Verschlüsselung und der Extension Mechanismus (Require) wurden nicht implementiert. Die Auswertung des Filter Headerfeldes wurde ebenfalls nicht implementiert. Um den Protokollablauf verfolgen zu können, werden alle gesendeten und empfangenen CIP Nachrichten ausgegeben. Beispiele für den Protokollablauf findet man in Anhang 7.2. 3.3 Spezifikation von Tarifformeln Um Tarifformeln beschreiben und auswerten zu können, benötigt man die Definition einer geeigneten Sprache und einen Parser, der Ausdrücke auf ihre Korrektheit überprüft und gegebenenfalls auswertet. 3.3.1 Anforderungen an die Sprache Die zu entwickelnde Sprache soll sowohl zur Beschreibung von Tarifen als auch zur Beschreibung von Utility-Kurven (siehe 3.4.2) verwendet werden. Die Sprache muß über die grundlegenden Operatoren wie zum Beispiel Addition oder Subtraktion und über die grundlegenden Funktionen wie zum Beispiel Wurzel- und Exponentialfunktion verfügen. Beliebige Klammerebenen sollen möglich sein. Ein weiterer grundsätzlicher Bestandteil sind Variablen, die sowohl durch Konstanten als auch durch komplexe Ausdrücke definiert werden können. Da beim CIP Protokoll keine Informationen über die Semantik bestimmter Variablen übertragen werden, müssen sogenannte wohlbekannte d.h. global geltende Variablennamen definiert werden. Unvollständige oder falsche Ausdrücke dürfen keinesfalls ausgewertet werden, der Fehler muß einer höheren Instanz mitgeteilt werden (CIP Client). Diese entscheidet dann, ob der fehlerhafte Tarif verworfen und/oder möglicherweise neu angefordert wird. Da Tarife oft von der Uhrzeit abhängig sind, muß es eine Funktion geben, die Zeitangaben in numerische Werte umrechnet. Um den Preis entsprechend der Uhrzeit zu bestimmen, muß die Sprache außerdem über bedingte Ausdrücke, Vergleichsoperatoren und die grundlegenden logischen Funktionen verfügen. Im Rahmen dieser Diplomarbeit wurde eine Sprache entwickelt, mit der sich auch komplexe Tarifformeln ausdrücken lassen. Diese Sprache soll im folgenden Tariff Formula Language (TFL) genannt werden. Seite 40 Kapitel 3: Übertragung und Nutzung von Dienstinformationen 3.3.2 Aufbau und Eigenschaften der Sprache 3.3.2.1 Aufbau der Sprache Bei der TFL handelt es sich im Sinne der theoretischen Informatik um eine kontextfreie Sprache, die durch eine kontextfreie Grammatik beschrieben wird. Die Sprache orientiert sich von der Syntax her an der Formelbeschreibung gängiger Tabellenkalkulationen (EXCEL), allerdings ist der Funktionsumfang verringert. Die Operatoren entsprechen von der Syntax den bei der Sprache C gebräuchlichen. Die Funktionsnamen entsprechen ebenfalls zum großen Teil C Funktionsnamen. Die Sprache unterscheidet bei Schlüsselwörtern und Variablen nicht zwischen Groß- und Kleinschreibung. Komplexere Datentypen wie Variablen und Strings lassen sich aus den Terminalsymbolen (siehe Anhang 7.1) bilden: • • • • • • • • • • • var const string stunde minute sekunde tag monat jahr monat_name zeit_string = (ZEICHEN)+ = "E" | "PI" = "\"" (ZEICHEN)* "\"" = 2*ZIFFER = 2*ZIFFER = 2*ZIFFER = 2*ZIFFER = 2*ZIFFER = 4*ZIFFER = (ZEICHEN) + = "\"" stunde ":" minute ":" sekunde "\"" | "\"" tag (monat | monat_name) jahr stunde ":" minute ":" sekunde "\"" Im folgenden werden die komplexeren Produktionsregeln beschrieben: • eingabe = zeile | LEER | (zeile "\n" | "\n")* • zeile = ausdruck | string_ausdruck | prädikat • • vergleich prädikat = "==" | "!=" | ">=" | "<=" | ">" | "<" = ausdruck vergleich ausdruck | "OR" "(" prädikat "," prädikat ")" | "AND" "(" prädikat "," prädikat ")" | "NOT" "(" prädikat ")" | "(" prädikat ")" • string_ausdruck = string | "IF" "(" prädikat "," string_ausdruck ")" | "IF" "(" prädikat "," string_ausdruck "," string_ausdruck ")" • • operator funktion • • funktion2 zeit_funktion = "+" | "-" | "*" | "/" | "^" = "SIN" | "COS" | "ASIN" | "ACOS" | "TAN" | "ATAN" | "LN" | "EXP" | "SQRT" | "CEIL" | "FLOOR" | "RND" | "ABS" | "FAK" = "MAX" | "MIN" = "TIME" Seite 41 Kapitel 3: Übertragung und Nutzung von Dienstinformationen • ausdruck = NUM | var | const | var "=" ausdruck | "-" ausdruck | "(" ausdruck ")" | ausdruck operator ausdruck | funktion "(" ausdruck ")" | funktion2 "(" ausdruck "," ausdruck ")" | zeit_funktion "(" zeit_string ")" | "IF" "(" prädikat "," ausdruck ")" | "IF" "(" prädikat "," ausdruck "," ausdruck ")" Ein TFL-Ausdruck besteht also aus einer oder mehreren Zeilen, die durch einen Zeilenumbruch getrennt sind. Jede Zeile kann entweder aus einem Ausdruck, einem String-Ausdruck oder einem Prädikat bestehen. Prädikate sind Funktionen oder Operatoren, die einen boolschen Wert liefern. Ein String-Ausdruck liefert als Ergebnis einen String, während ein Ausdruck eine reelle Zahl als Ergebnis liefert. Variablen können nur mit Zahlen belegt werden, eine Zuweisung von Strings ist nicht möglich. Die Sprache verfügt über insgesamt elf Operatoren und 17 Funktionen, die im nächsten Abschnitt näher beschrieben werden. Außerdem werden die bedingten Ausdrücke und Variablenzuweisungen näher erläutert. 3.3.2.2 Operatoren, Funktionen, bedingte Ausdrücke und Konstanten In der Tabelle 5 werden die vorhandenen numerischen Operatoren beschrieben. Die Priorität nimmt von oben nach unten zu. Operator + * / ^ Bedeutung Addition Subtraktion Multiplikation Division Potenzfunktion Tabelle 5: TFL Operatoren Die Tabelle 6 beschreibt die vorhandenen Vergleichsoperatoren. Die Syntax der Operatoren entspricht der in der Sprache C üblichen. Wie bei C bedeutet ein „=“ eine Zuweisung, während ein „==“ den Test auf Gleichheit symbolisiert. Operator == != <= < >= > Bedeutung gleich ungleich kleiner gleich kleiner größer gleich größer Tabelle 6: TFL Vergleichsoperatoren Die Tabelle 7 beschreibt die in TFL vorhandenen Funktionen und gibt jeweils ein Beispiel. Seite 42 Kapitel 3: Übertragung und Nutzung von Dienstinformationen Funktion SIN COS ASIN ACOS TAN ATAN LN EXP SQRT CEIL FLOOR RND ABS FAK MAX MIN TIME Bedeutung Beispiel Sinus sin(pi/2) = 1 Cosinus cos(pi) = -1 Asinus asin(1) = 1.57 Acosinus acos(1) = 3.14 Tangens tan(1) = 1.55 Atangens atan(pi/2) = 1.00 Natürlicher Logarithmus ln(e) = 1 Exponentialfunktion exp(1) = 2.71 Wurzelfunktion sqrt(81) = 9 Aufrunden ceil(4.5) = 5 Abrunden floor(4.5) = 4 Runden zur nächsten Ganzzahl rnd(4.5) = 5 Betrag abs(-2) = 2 Fakultätsfunktion fak(5) = 120 Maximum max(3,4) = 4 Minimum min(3,4) = 3 Zeitwert-Funktion, Zeit seit 1. time("1 jan 1970 01:00:01") Januar 1970 in Sekunden =1 Tabelle 7: TFL Funktionen Bedingte Ausdrücke lassen sich mit der IF-Anweisung formulieren. Dabei gibt es die zwei Formen: 1. IF(Bedingung, Wert1) 2. IF(Bedingung, Wert1, Wert2) Im ersten Fall ist der Rückgabewert Wert1, wenn die Bedingung wahr ist und Null, wenn die Bedingung falsch ist (if-then). Im zweiten Fall ist der Rückgabewert Wert2, wenn die Bedingung falsch ist (if-then-else). Eine Variablenzuweisung erfolgt mit dem "=" Operator. Dabei muß auf der linken Seite ein Variablenbezeichner stehen und auf der rechten Seite ein Ausdruck, der ausgewertet werden kann. Im Ausdruck auf der rechten Seite dürfen also keine undefinierten Variablen stehen. Schlüsselwörter der Sprache, sowie Funktionsnamen und Konstanten dürfen natürlich nicht als Variablenbezeichner angegeben werden. Die nachfolgende Tabelle 8 zeigt die vordefinierten Konstanten (hier nur mit den ersten fünf Nachkommastellen). Konstante PI E Wert 3,14159 2,71828 Tabelle 8: TFL Konstanten 3.3.2.3 Global definierte Variablen Das CIP Protokoll hat keine Möglichkeit, dem Empfänger die Semantik bestimmter Variablen mitzuteilen. Deshalb muß die Bedeutung von Variablen, deren Werte der Empfänger in Seite 43 Kapitel 3: Übertragung und Nutzung von Dienstinformationen die Funktion einsetzen muß, jedem Empfänger bekannt sein. Die Tabelle 9 zeigt diese global definierten Variablen. Diese Bezeichner dürfen keinesfalls in Zusammenhang mit einer anderen Bedeutung benutzt werden, es sei denn, alle potentiellen Empfänger wurden darüber informiert und die verwendete Software entsprechend angepaßt. Die Variablen TD und D können mit der TFL TIME-Funktion oder der UNIX time-Funktion (C) gesetzt werden. Bezeichner T TD V VP PL PLR BN R oder V K N D EBW ZO Einheit [s] [s] [byte] [packets] [bit/s] [packets] [packets] [s] [bit/s] Bedeutung Die Dauer einer Verbindung oder eines Flows Die momentane Uhrzeit (time of day, UNIX time_t) Das übertragene Volumen Das übertragene Volumen in Paketen Verlustrate Restverlustrate nach Fehlerkorrektur Normierte Bandbreite Rate oder Volumen pro Sekunde Anzahl der Medienpakete pro Gruppe Anzahl der Pakete pro Gruppe Das momentane Datum (UNIX time_t) Effektive Bandbreite Tarifzone Tabelle 9 : Global definierte Variablen Als weitere globale Variablen können Parameter der RSVP Flowspec wie zum Beispiel die Rate definiert werden (siehe Abschnitt 2.1.5). 3.3.3 Beispiele Im folgenden Abschnitt sollen zwei Beispiele für die Anwendung der TFL gegeben werden. Bei dem ersten Beispiel handelt es sich um den normalen City Tarif der Deutschen Telekom an Samstagen. Berechnet wird der Preis pro Zeiteinheit (10s). Variablen: • td = Uhrzeit Funktion: • einh_preis = IF(AND(td>=TIME("00:00:00"), td<TIME("05:00:00")), 0.5, IF(AND(td>=TIME("05:00:00"), td<TIME("21:00:00"), 0.8, 0.5)) Das zweite Beispiel zeigt eine Utility Funktion für MPEG Video nach [ReIz97]. Die Funktion setzt sich abschnittsweise aus drei Geraden zusammen. Variablen: • a = 0.5 • b = 0.45 • c = 0.1 • bn = Normierte Bandbreite Seite 44 Kapitel 3: Übertragung und Nutzung von Dienstinformationen Funktion: • utility = IF(AND(bn>=C, bn<B), 1/(B-C)*bn+2-C/(B-C), IF(AND(bn>=B, bn<A), 1/(A-B)*bn+3-B/(A-B), IF(AND(bn>=A, bn<=1), 1/(1-A)*bn+4-A/(1-A),-1))) 1 0,9 Preis pro 10s [Pfennig] 0,8 0,7 0,6 0,5 0,4 0,3 0,2 0,1 0 00:00:00 06:00:00 12:00:00 18:00:00 00:00:00 Uhrzeit Abbildung 14: TFL Beispiel - Telekom City Tarif 6 Utility [MOS] 5 4 3 2 1 0 0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 1 Bandbreite/Bandbreite max Abbildung 15: TFL Beispiel - Utility Funktion Seite 45 Kapitel 3: Übertragung und Nutzung von Dienstinformationen 3.3.4 Implementierung Die TFL wurde mit Hilfe des GNU Bison Parser Generators implementiert. Bison erzeugt anhand der gegebenen Grammatik, der lexikographischen Analyse und den Symboltabellen einen Parser, der nur korrekte Ausdrücke der Sprache auswertet. Um eine bessere Schnittstelle zu haben, wurde der Parser in einer C++ Klasse verpackt. Die TFL kann sehr einfach um neue Funktionen erweitert werden. Wenn eine Funktion als C-Funktion vorliegt, muß einfach nur ein entsprechender Eintrag in den Symboltabellen vorgenommen werden. Eine mögliche Erweiterung wären bedingte Ausdrücke, die sowohl Zahlen als auch Strings zurückliefern können, obwohl eine solche Funktionalität zur Tarifierung nicht unbedingt notwendig ist. Eine weitere Verbesserung wären intelligentere Fehlermeldungen bei falschen Ausdrücken. Das erfordert aber Änderungen an dem von Bison erzeugten Code. Im Extremfall läßt sich die TFL bis hin zu einer kleinen Skriptsprache mit beispielsweise Schleifen und Unterprozeduren erweitern. Es stellt sich allerdings die Frage, ob eine solche Sprache nicht etwas überdimensioniert für ihren Anwendungszweck ist. Derart komplizierte Tarifformeln wären vom Anwender nicht zu durchschauen und würden nicht akzeptiert werden. Die Tabelle 10 zeigt die Performance des Parsers. Gemessen wurde die Berechnungszeit anhand der beiden Formeln aus den Beispielen auf einem Pentium mit 133 MHz unter Linux. Formel Beispiel 1 Beispiel 2 Berechnungszeit 3,3 ms 1,4 ms Tabelle 10: TFL Parser Performance 3.4 Auswahl der optimalen Serviceklasse 3.4.1 Optimale Serviceklasse Das Ziel eines Benutzers ist es, die für seine Anforderungen optimale Dienstklasse einzukaufen. Optimal bedeutet in diesem Zusammenhang, die ausgewählte Dienstklasse erfüllt die Anforderungen des Benutzers hinsichtlich der Qualität und es gibt keine andere Dienstklasse, die ebenfalls die Anforderungen erfüllt und gleichzeitig billiger ist. Da eine solche Auswahl bei einer genügend hohen Anzahl von Dienstklassen mit einer Vielzahl von Parametern nicht mehr per Hand durchgeführt werden kann, muß das ein Programm mit einem entsprechenden Algorithmus übernehmen. Der Algorithmus muß versuchen, das Preis-Leistungs-Verhältnis für den Anwender zu maximieren. Das Preis-Leistungs-Verhältnis soll im folgenden als der Quotient von Qualität und Preis verstanden werden (Utility Price Ratio (UPR)). Die Frage ist nun, wie sich die Qualität eines Dienstes für den Benutzer bestimmen läßt. Eine Möglichkeit wären objektive Maße wie zum Beispiel die Verlustrate oder der Signal Noise Ratio (SNR). Diese Maße sagen jedoch nichts über die wirklich empfundene (subjektive) Qualität aus. Als subjektives Qualitätsmaß sollen im folgenden Utility-Kurven beschrieben werden. Seite 46 Kapitel 3: Übertragung und Nutzung von Dienstinformationen 3.4.2 Utility-Kurven Das Konzept der Utility Kurven wird in [ReIz97] und [BoFT98] vorgestellt. Abbildung 15 zeigt die Utility für Video in Abhängigkeit von der normierten Bandbreite, wie sie in [ReIz97] beschrieben wird. Die Utility kann man auch als Mean Opinion Score (MOS) bezeichnen, d.h., es handelt sich um einen Qualitätsindex auf einer Skala. Je höher die Utility, desto besser wurde die Qualität von den Benutzern empfunden. Den Verlauf einer UtilityKurve kann man zwar theoretisch vorhersagen oder propagieren, letztendlich ergibt sich eine solche Kurve aber nur durch die Befragung einer ausreichenden Menge von Testpersonen. Die folgende Abbildung 16 aus [BoFT98] zeigt eine Utility-Funktion für Audio Kodierer (LPC, GSM, ADM4, ADM6 und PCM) bei Sprachübertragung. Die Bandbreite wurde auf die Bandbreite von PCM (64 kB/s) normiert. 1,2 ADM6 1 GSM PCM ADM4 Utility 0,8 0,6 0,4 0,2 LPC 0 0 0,2 0,4 0,6 normierte Bandbreite 0,8 1 Abbildung 16: Utility-Funktion für Audio Kodierer Die Qualität ändert sich nicht nur mit der benötigten Bandbreite, sondern auch mit der Verlustrate, die der Datenstrom erfährt. In [GrSt85] wurde die subjektive Qualität von Audio bei verschiedenen Verlustmustern untersucht. Abbildung 17 zeigt eine Utility-Funktion in Abhängigkeit von der Verlustrate. Die durch die Verluste entstehenden Lücken im Audiosignal waren dabei 16 ms und 64 ms lang. Seite 47 Kapitel 3: Übertragung und Nutzung von Dienstinformationen 4 3,5 1 2 Utility [MOS] 3 2,5 2 1,5 1 16 ms Lücken 2 64 ms Lücken 1 0,00 0,01 0,10 1,00 Paketverlustrate Abbildung 17: Audio Qualität in Abhängigkeit von der Verlustrate 3.4.3 Herleitung und Untersuchung des Algorithmus Bei den folgenden Betrachtungen soll zunächst davon ausgegangen werden, daß keine Verluste auf der Übertragungsstrecke auftreten. Nach der Herleitung einer Lösung unter dieser vereinfachten Annahme, wird das Ergebnis um die Berücksichtigung von Verlusten erweitert. Das Ziel des Anwenders ist es, das maximale Utility-Preis-Verhältnis (UPR) zu erzielen. Das Utility-Preis-Verhältnis ist definiert als: UPR = Utility ( MOS ) Preis (1) Dabei müssen die folgenden beiden Randbedingungen beachtet werden: • • umin = Minimale Utility (Qualität) pmax = Maximaler Preis Die Frage ist nun, mit welcher Rate man das maximale Utility-Preis-Verhältnis erzielen kann. Das Optimum ergibt sich bei: ′ u ( B) = 0 und upr ′′( B ) < 0 upr ′( B) = p( B) unter den Randbedingungen: u ( B) ≥ u min und p ( B) ≤ p max Seite 48 (2) Kapitel 3: Übertragung und Nutzung von Dienstinformationen Betrachtet wird nur die Abhängigkeit des Preises von der Bandbreite bzw. Rate, d.h. der Preis pro Sekunde. Ist der Preis zusätzlich von der Zeit abhängig, setzt man die Anzahl der Zeiteinheiten auf 1 und betrachtet den Preis einfach als Preis pro Zeiteinheit. Dies ist möglich, da sich bei interaktiver Audio- oder Videoübertragung nur die Qualität mit der Übertragungsrate ändert, die Übertragungszeit aber nicht. Die Abbildung 18 zeigt die Funktionen g(B), u(B) und p(B) sowie die optimale zu wählende Bandbreite. Bereiche die außerhalb der Randbedingungen (umin = 2,75 und pmax = 4) liegen, sind grau dargestellt. u(B) ist hier die in [ReIz97] Utility Funktion für Video. Die Qualität ist oberhalb von u(B) = 3 als gut, unterhalb davon als schlecht definiert. Die Tariffunktion p(B) ist linear von der Bandbreite (Rate) abhängig. Man sieht, daß die optimale zu wählende Rate genau bei der Hälfte der maximalen Rate liegt. Die hier verwendete Tariffunktion lautet: p(V ) = PV P ⋅ V d.h. pro Zeiteinheit p ZE ( B ) = V ⋅ BZE UV UV (3) Nun soll die Bandbreite als variabel betrachtet werden, d.h. die Rate des Senders läßt sich beliebig zwischen einer minimalen (Null) und einer maximalen (Bmax) Rate regeln: p ZE ( B) = PV ⋅ BZE max ⋅ b mit 0 ≤ b ≤ 1 UV (4) Für die Abbildung 18 wurden die Parameter folgendermaßen gewählt: Parameter PV UV Bmax Wert 1 3000 15000 Tabelle 11: Parameter der Tariffunktion Diese Optimierung wird dann über alle möglichen Dienstklassen durchgeführt und die Dienstklasse mit dem größten Utility-Preis-Verhältnis ausgewählt: uprmax = max{upri ( B )} ∀i (5) Seite 49 Kapitel 3: Übertragung und Nutzung von Dienstinformationen 6 Utility/Preis Utility 5 Preis 4 3 2 1 0 0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 1 Bandbreite/Bandbreitem ax Abbildung 18: Optimale Wahl der Bandbreite In einem realen paketorientierten Netzwerk wie dem Internet treten allerdings ab einer gewissen Distanz Paketverluste auf, die die Qualität der Audio- oder Videoübertragung verschlechtern. Um die Qualität am Empfänger zu verbessern, wird eine Vorwärtsfehlerkorrektur eingesetzt. Der obige Algorithmus soll nun so erweitert werden, daß er das UtilityPreis-Verhältnis sowohl für die Bandbreite als auch für die Menge an eingesetzter Redundanz optimiert. Die Utility-Funktion ist jetzt sowohl von der Bandbreite als auch von der Verlustrate abhängig. Sie setzt sich im einfachsten Fall aus einem bandbreiten- und einem verlustabhängigen Faktor zusammen: u ( B, p L ) = u B ( B ) ⋅ u L ( p L ) (6) Abbildung 19 zeigt eine solche 3-dimensionale Utility Funktion. Dabei ist u ( B, pL ) die Utility-Funktion für Video aus [ReIz97] und uL wurde zu u L ( pL ) = exp(−3 ⋅ pL ) gesetzt. In der Realität läßt sich eine solche Funktion wahrscheinlich nicht mit zwei unabhängigen Faktoren darstellen, sondern die gesamte Funktion muß mit Hilfe von Testpersonen ermittelt werden. Seite 50 Kapitel 3: Übertragung und Nutzung von Dienstinformationen 5 4 Utility 3 2 1 1 0 0.5 0.8 0.4 0.6 0.3 0.4 0.2 0.2 0.1 Verlustrate 0 0 normierte Bandbreite Abbildung 19: 3-dimensionale Utility Funktion Um die Qualität einer Dienstklasse (im Hinblick auf die Verluste) zu verbessern, kann Vorwärtsfehlerkorrektur eingesetzt werden. Zur Redundanzerzeugung sollen im weiteren ausschließlich Reed-Solomon-Codes eingesetzt werden. Der Einsatz von Redundanz erhöht natürlich den Preis, wenn dieser von der Rate abhängig ist. Andererseits steigt auch die Utility aufgrund der geringeren Restverlustrate nach der Dekodierung am Empfänger. Die Restverlustrate berechnet sich zu (siehe Abschnitt 2.2.3.2): n −k −1 n − 1 ⋅ p L j ⋅ (1 − p L ) n − j −1 mit 1 ≤ k ≤ n p L* = q(k , n, p L ) = p ⋅ 1 − ∑ j j (7) Die zu optimierenden Funktion ist nun also: upr ( B, p L , n, k ) = u ( B, p L* ) , die Redundanz ist h = n − k n p( ⋅ B) k (8) Zur Optimierung werden dann wieder die Gleichungen (2) und (5) verwendet. Als weitere Randbedingungen kommen jetzt k und nmax hinzu. Der Parameter k bestimmt die minimale, der Parameter nmax die maximale Verzögerung der Pakete. Außerdem legt die Differenz h = nmax − k die Menge an eingesetzter Redundanz fest. Um den Einsatz von zuviel Redundanz zu vermeiden, sollte ein adaptives Verfahren entsprechend [PaWa98] eingesetzt werden. Seite 51 Kapitel 3: Übertragung und Nutzung von Dienstinformationen 3.4.4 Verschiedene Szenarien für die Optimierung Der entwickelte Optimierungsalgorithmus läßt sich ohne Problem bei UnicastVerbindungen (zum Beispiel Internet Telefonie) einsetzten. Zunächst soll hier eine Senderbezahlte Unicast-Verbindung betrachtet werden. Der Sender kennt die Tarife, die UtilityFunktion und die Verlustrate auf der Übertragungsstrecke und kann anhand dieser Parameter die Optimierung durchführen. Der Sender kennt die Verluste entweder durch Rückmeldung vom Empfänger (RTCP) oder durch die Garantien des Dienstanbieters. Optimiert wird dann das Verhältnis der Qualität am Empfänger und des Preises für den Sender. Die Optimierung läßt sich allerdings auch genauso bei einer Empfänger-bezahlten Unicast-Verbindung durchführen. Der Empfänger kennt ja ebenfalls die Tarife, die Utility-Funktion und die Verlustrate. Um die optimale Menge an Redundanz zu erzeugen, müssen die ermittelten Kodier-Parameter dem Sender signalisiert werden. Für den Einsatz des Optimierungsalgorithmus bei Multicast-Übertragungen müssen einige zusätzliche Überlegungen angestellt werden. Hier soll als erstes eine Sender-bezahlte Multicast-Verbindung betrachtet werden. Ein Beispiel für eine solche Verbindung wäre zum Beispiel Internet-Radio oder Internet-Fernsehen. Der Sender bezahlt zwar die Kosten der Verbindung, holt sich diese Kosten jedoch durch Abonnement-Beiträge der Empfänger zurück. Der Sender kennt wieder die Tarife und die Utility-Funktion. Er kennt außerdem die Verlustraten, welche die einzelnen Empfänger erleiden. Die Frage ist nun, wieviel Redundanz der Sender erzeugen soll, bzw. wie die einzelnen Verlustraten in die Optimierung eingehen. Ein intuitiver Ansatz um alle Empfänger optimal zufriedenzustellen, wäre die maximale Verlustrate für die Optimierung zu benutzen. Wenn die maximale Verlustrate allerdings wesentlich größer als die durchschnittliche Verlustrate im Multicast-Baum ist, führt dieser Ansatz zu einer Verschwendung von Ressourcen im Netz. Ist die maximale Verlustrate bereits sehr groß, erhöht die zusätzliche im Netz erzeugte Last die Verlustwahrscheinlichkeit nur überproportional. Ab einem bestimmten Punkt steigt dann auch die effektive Verlustwahrscheinlichkeit, trotz der zusätzlichen Redundanz, an (siehe 2.2.3.3). Möglicherweise werden auch weitere Empfänger in Mitleidenschaft gezogen. Eine weitere Alternative wäre, den Mittelwert der Verlustwahrscheinlichkeiten für die Optimierung zu benutzen. Dann ist die Qualität nicht mehr bei allen Empfängern optimal, aber es werden auch nicht so viele Ressourcen unnötig verbraucht. Eine bessere Lösung des Problems ist der Einsatz eines adaptiven Verfahren zur Bestimmung der optimalen Redundanzmenge wie in [PaWa98] vorgestellt. Die optimale Redundanzmenge wird für alle Empfänger bestimmt und das Maximum davon wird am Kodierer erzeugt. Zusätzlich wird durch eine Konstante festgelegt, welcher Anteil der Empfänger optimal versorgt wird. Setzt man die Konstante zum Beispiel auf 95%, erhalten 5% der Empfänger nicht die optimale Menge an Redundanz, der Preis für die Übertragung wird jedoch verringert. Eine weitere Idee ist, sogenannte Layered-FEC einzusetzen. Der Sender stellt dabei mehrere Ebenen an Redundanz zur Verfügung (verschiedene Multicast-Gruppen) und die Empfänger lauschen je nach Verlustrate auf mehr oder weniger Ebenen (Multicast-Gruppen). Dies entspricht dem Ansatz für Ratenadaption bei Videoübertragung. Auch hier ergeben sich einige Fragen. Wieviel Redundanz soll maximal zur Verfügung gestellt werden und wieviel Redundanz steht auf einer Ebene zur Verfügung? Abbildung 20 zeigt eine schematische Darstellung des Verfahrens. Empfänger 1 empfängt nur die erste, Empfänger 2 und Empfänger 3 empfangen die erste und zweite und Empfänger 4 empfängt alle drei FEC Ebenen. Seite 52 Kapitel 3: Übertragung und Nutzung von Dienstinformationen Empfänger 1 Empfänger 2 Empfänger 3 Sender Empfänger 4 Ebene 1 Ebene 2 Ebene 3 Abbildung 20: Layered FEC Problematisch bei Sender-bezahltem Multicast ist, daß die Kosten für alle Teilnehmer steigen, wenn einige wenige Teilnehmer durch hohe Verlustraten die Menge an übertragenen Daten erhöhen. Durch die größere Menge an verbrauchten Ressourcen steigen die Kosten des Senders und da diese auf alle Empfänger gleichmäßig verteilt werden, steigen die Kosten für jeden Empfänger. Deshalb soll jetzt eine Empfänger-bezahlte Multicast-Verbindung betrachtet werden. Wie bei Unicast kann jeder Empfänger die Optimierung durchführen, die ermittelten Kodier-Parameter werden dem Sender signalisiert. Das führt im Prinzip zu dem selben Problem wie bei Sender-bezahltem Multicast: Wieviel Redundanz muß am Sender erzeugt werden? Bei Sender-bezahltem Multicast tritt das oben beschriebene Problem allerdings nur bei einem Best Effort Dienst auf. Gibt der Dienst gewisse Garantien hinsichtlich der Verlustrate und nimmt man weiterhin an, daß die Garantien auch über die Grenzen von Dienstanbietern hinweg erhalten bleiben (siehe 2.1.1), so hat man eine nahezu einheitliche Verlustrate im Baum und kann mit dieser optimieren. 3.4.5 Implementierung Der Algorithmus wurde entsprechend der Definition implementiert. Er akzeptiert beliebige Utility- und Tariffunktionen, die nötigen Randbedingungen müssen entsprechend vorgegeben werden. Für die Optimierung bzw. für die Maximierung der Utility-Preis-Funktion wurden zwei Algorithmen entwickelt: • • Brute Force Methode und Downhill Simplex Methode für mehrere Dimensionen. Bei der Brute Force Methode werden alle Punkte der Utility-Preis-Funktion ausgerechnet. Dabei beschränkt sich die Auflösung des Algorithmus bezüglich der Bandbreite auf 1%Schritte. Dies sollte im Normalfall allerdings auch völlig ausreichend sein. Da n und k ohnehin nur diskrete Werte annehmen können, braucht man hier keine weitere Einschränkung. Der Vorteil der Methode ist, daß innerhalb der Genauigkeit immer das globale Maximum der Funktion upr(B,pL,n,k) gefunden wird. Allerdings kostet die Berechnung relativ viel Zeit, weil alle Punkte (im Rahmen der Genauigkeit) der Funktion ausgerechnet werden müssen. Die genaue Berechnungsdauer hängt von der maximal möglichen Redundanz hmax = nmax − k und der Anzahl der Dienstklassen ab, über die die Optimierung durchgeführt wird. Werden viele Seite 53 Kapitel 3: Übertragung und Nutzung von Dienstinformationen Dienstklassen angeboten, ist es sinnvoll anhand bestimmter Kriterien eine Vorauswahl zu treffen (siehe 3.2.5.15). Um eine schnellere Auswahl treffen zu können, wurde als zweiter Algorithmus die Downhill Simplex Methode implementiert (siehe [PFTV88]). Bei dieser Methode wird ein geometrisches Gebilde (der Simplex) über die gegebene Funktion bewegt. Der Simplex kann sich außerdem vergrößern und verkleinern. Auf diese Weise bewegt sich der Simplex durch die im allgemeinen n-dimensionale Funktion auf der Suche nach einem Maximum, d.h., er bewegt sich in Richtung größerer Funktionswerte. Liegt die Differenz des neuen nach der Bewegung berechneten und des vorherigen Funktionswerts unterhalb einer gewissen Schwelle, entscheidet der Algorithmus auf ein Maximum. Der Simplex besteht immer aus n+1 Punkten, d.h., im hier vorliegenden Fall der 2-dimensionalen Optimierung ist der Simplex ein Dreieck. Grundsätzlich ist es nicht möglich, mit dieser Methode das globale Maximum einer Funktion zu finden. Dafür benötigt der Algorithmus wesentlich weniger Funktionsberechnungen als die Brute-Force Methode. Da der Algorithmus normalerweise nur auf reellen Zahlen arbeitet, muß die Redundanzmenge h vor der Funktionsauswertung diskretisiert werden. Ein weiteres Problem ergibt sich, weil die Funktion upr(B,pL,n,k) in allen Dimensionen endlich ist. Da ein Punkt des Simplexes nicht den Wert undefiniert annehmen kann, muß dem Algorithmus hier ein sehr kleiner Funktionswert vorgetäuscht werden, so daß er sich wieder in die Funktion hinein bewegt. Entscheidend für den Erfolg des Algorithmus ist die Wahl eines geeigneten Start-Simplex. Da a priori keine Annahmen über die Funktion getroffen werden können und auch nicht sollen, werden die Punkte des anfänglichen Simplex per Zufall bestimmt. Es wird darauf geachtet, daß die Punkte nur im definierten Bereich der Funktion liegen. Außerdem muß vorausgesetzt werden, daß mindestens einer der Punkte sich von den anderen beiden im Wert unterscheidet. Haben alle n+1 Punkte den gleichen Wert, weiß der Algorithmus nicht, in welche Richtung er den Simplex bewegen muß. Um die Trefferquote auf das globale Maximum der Utility-Preis-Funktion zu erhöhen, wird der Algorithmus mehrmals mit jeweils zufällig gewählten Start-Simplexes durchlaufen. Das beste Ergebnis wird dann als Maximum zurückgeliefert. Es zeigt sich, daß bereits bei vier Durchläufen die Trefferquote recht hoch ist, obwohl die Berechnungsdauer um einiges kürzer als bei der Brute Force Methode ist. Der Zeitgewinn steigt natürlich mit der Größe der Differenz zwischen nmax und k. Als Beispiel sollen hier die optimalen Parameter für die in Abbildung 18 gezeigten Funktionen berechnet werden. Dabei soll die im Netz auftretende Verlustrate gleich 0,3 sein. Um die Verzögerung klein zu halten ist k=5 und nmax=10. Die folgenden Tabellen zeigen die Randbedingungen und das Ergebnis. Randbedingung umin pmax pL k nmax Wert 3 10 0,3 5 15 Tabelle 12: Randbedingungen für die Optimierung Seite 54 Kapitel 3: Übertragung und Nutzung von Dienstinformationen Ergebnis b n Nutzen Utility Preis Wert 0,5 9 0,746 3,358 4,5 Tabelle 13: Ergebnisse der Optimierung Die folgende Tabelle 14 zeigt den Performancegewinn der Downhill Simplex Methode für das eben berechnete Beispiel. Die Berechnung wurde auf einer SUN Sparc 20 durchgeführt: Algorithmus Brute Force Downhill Simplex Rechenzeit [s] 5,52 0,95 Tabelle 14: Performance des Optimierungsalgorithmus Die nachfolgende Abbildung 21 zeigt die gesamte Utility/Preis-Funktion. Die optimale Redundanzmenge (h=4) ist bei genauem Hinsehen zu erkennen. Die Abbildung 22 zeigt die Schnitte durch die Funktion bei h=0, h=4 und h=10. 2 Nutzen 1.5 1 0.5 1 0 10 0.8 8 0.6 6 0.4 4 0.2 2 Redundanz h 0 0 normierte Bandbreite Abbildung 21 : Die gesamte Nutzen Funktion Seite 55 Kapitel 3: Übertragung und Nutzung von Dienstinformationen 2 h=4 h=0 h = 10 1.8 1.6 Nutzen 1.4 1.2 1 0.8 0.6 0.4 0.2 0.1 0.2 0.3 0.4 0.5 0.6 normierte Bandbreite 0.7 0.8 0.9 Abbildung 22: Nutzen Funktion bei h=0, h=4 und h=10 Seite 56 1 Kapitel 4: Verbesserung der Dienstqualität durch FEC 4 Verbesserung der Dienstqualität durch FEC Dieses Kapitel beschreibt die Entwicklung eines Systems zur Vorwärtsfehlerkorrektur für RTP Medienströme, mit dem die Dienstqualität in bezug auf die Verlustrate verbessert wird. Die Redundanz wird durch ein RTP Gateway beim Sender erzeugt und die verlorenen Pakete werden durch ein RTP Gateway beim Empfänger wiederhergestellt. Aufbau und Funktion des RTP Gateways werden in Abschnitt 4.1 beschrieben. In Abschnitt 4.2 wird die Performance des Reed-Solomon Kodierers und des Gateways untersucht. Abschnitt 4.3 zeigt die gemessenen Verlustraten auf unterschiedlichen Strecken mit unterschiedlichen Mengen an Redundanz. Es werden sowohl künstlich erzeugte Verluste als auch eine reale Übertragungsstrecke untersucht. 4.1 RTP Gateway Zur Erzeugung der Redundanz soll ein Reed-Solomon Kodierer verwendet werden. ReedSolomon Kodierer sind bereits weit verbreitet und von der Theorie her bestens bekannt (siehe 2.2.3.2). Reed-Solomon Kodierer sind sehr flexibel. Sie arbeiten mit unterschiedlichen Paketgrößen und die Menge der erzeugten Redundanz läßt sich nahezu beliebig einstellen. Ein Nachteil von Reed-Solomon Codes ist die Komplexität und damit die Performance (insbesondere des Decoders). Heutzutage sind allerdings selbst die sogenannten Einsteiger-PCs schnell genug, um Audio- und Videoströme quasi nebenbei zu kodieren (siehe 4.2). Im Rahmen dieser Diplomarbeit wird der in [Rizzo97] vorgestellt RS-Kodierer benutzt. Dieser Kodierer wurde bereits für die Vorwärtsfehlerkorrektur bei einer Paketübertragung optimiert. Da der in Abschnitt 3.4 vorgestellte Optimierungsalgorithmus ein genereller Algorithmus für beliebige übertragene Medien ist, muß auch die Vowärtsfehlerkorrektur für beliebige Medien funktionieren. Weil es im Rahmen dieser Diplomarbeit nicht möglich ist, mehrere der existierenden Multimedia-Anwendungen zu modifizieren, wurde der Gateway-Ansatz gewählt. Zwischen Sender und Empfänger befinden sich zwei RTP Gateways. Das Gateway am Sender fügt Redundanz in den Medienstrom ein, die das Gateway am Empfänger zur Wiederherstellung von verlorenen Paketen benutzt. 4.1.1 Grundsätzliche Funktion Die grundsätzliche Funktion des Gateways soll anhand von Abbildung 23 erläutert werden. Der Benutzer sendet seine Mediendaten an das lokale Gateway. Das Gateway wartet, bis es einen Block von k RTP Paketen empfangen hat und generiert dann mit dem Reed-Solomon Kodierer die h = n-k Redundanzpakete zum Schutz der k Datenpakete. Die Größen k und h können sich von Block zu Block ändern. Die FEC Pakete werden als neuer Strom (getrennt von den Datenpaketen) versendet. FEC Pakete haben also eigene Sequenznummern. Das bedeutet, daß die FEC Pakete zum Beispiel auch an eine andere Multicast-Gruppe verschickt werden können als die Datenpakete. Das Gateway am Empfänger regeneriert den ursprünglich Block der k RTP Pakete, wenn mindestens k der n Pakete (RTP und Redundanz) eingetroffen sind. Die k Pakete werden dann an den Empfänger geschickt. Wenn innerhalb einer bestimmten Zeit nur i Pakete (i<k) von den n Paketen eingetroffen sind, werden diese i Pakete an den Empfänger weitergeleitet. Wenn mehr als n-k Pakete verloren wurden, kann keine Wiederherstellung der Pakete am Empfänger durchgeführt werden (siehe 2.2.3.1). Die Zuordnung der Redundanz- und Datenpakete erfolgt über den RTP Synchronization Source Identifier (SSRC), FEC Pakete haben die gleiche SSRC wie die Datenpakete (siehe [RoSc98]). Seite 57 Kapitel 4: Verbesserung der Dienstqualität durch FEC RTCP RTCP Benutzer RTP FEC Gateway RTP FEC LAN MAN/WAN Abbildung 23: Übertragung mit FEC Gateway RTCP Pakete werden von den Gateways ohne Veränderung weitergeleitet. Sie werden aber zur Auswertung der QoS benutzt (siehe 4.1.5). Für Sender und Empfänger ist das Gateway also absolut transparent. Nach [RFC1889] handelt es sich um einen RTP Translator. Aufgrund dieser Transparenz kann die ursprüngliche Forderung erfüllt werden. Existierende Anwendungen erhalten damit eine Vorwärtsfehlerkorrektur, ohne daß Änderungen an ihnen vorgenommen werden müssen. 4.1.2 Paketformat Das Paketformat der FEC Pakete wurde aus [RoSc98-2] übernommen. Die FEC Pakete haben einen RTP Header und einen FEC Header. Zunächst wird hier der Inhalt des RTP Header beschrieben. Die Versionsnummer wird auf 2 gesetzt. Das Padding-, Marker- und Extension-Bit sowie das CSRC Count (CC) Feld werden bei der Redundanzerzeugung berechnet. Unabhängig von den Werten des CC Feldes oder des Extension-Bits gibt es keine Contributing Source Identfiers (CSRC) Liste und keine Header Extensions. Die SSRC Nummer entspricht der SSRC Nummer des ursprünglichen Datenstroms. Die Seqenznummer entspricht der normalen Definition. Für jedes übertragenen FEC Paket wird die aktuelle Sequenznummer um 1 erhöht. Der Startwert der Sequenznummern wird wie bei den RTP Paketen mit einem Zufahlszahlengenerator bestimmt (MD5-Algorithmus). Der Timestamp aller h FEC Pakete wird auf den Wert des Timestamps des ersten der k Datenpakete gesetzt. Der Timestamp steigt also, unabhängig vom FEC Schema, monoton an. Der Wert des Payload Type Feldes muß entweder festgelegt werden (durch die IANA) oder sich im Bereich der dynamisch zu vergebenen Typen befinden (siehe [RFC1890]). Die Bedeutung des Payload Types kann dem Empfänger durch eine out-of-band Signalisierung übermittelt werden. Es bietet sich allerdings an, eine feste Nummer für Reed-Solomon kodierte FEC Pakete zu verwenden, da alle Parameter des RS-Codes, mit Ausnahme der Symbollänge, im FEC Header stehen. Eine kleinere Symbollänge als 8 ist allerdings nicht möglich und eine größere (zum Beispiel 16) verringert die Performance des Kodierers. Außerdem ist der maximale Wert für n bei einer Symbollänge von 8 bereits 255, was mehr als ausreichend ist. Bei Audioübertragungen müssen zum Beispiel wesentlich kleinere Werte für n und k benutzt werden, da sonst die Verzögerung zu groß wird. Die Symbollänge ist also im Prinzip auf den Wert 8 festgelegt. Die Abbildung 24 zeigt das Format des Reed-Solomon FEC Headers. SN Base ist die Sequenznummer des ersten Medienpaketes des von diesem FEC Paket geschützten Blockes von k Medienpaketen. Das Length Recovery Feld dient dazu, die Länge eines wiederhergestellten Paketes zu bestimmen. Es wird bei der Redundanzerzeugung über die Längen der Inhalte der Seite 58 Kapitel 4: Verbesserung der Dienstqualität durch FEC Medienpakete berechnet. Als Inhalt werden hier die Nutzdaten, die CSRC Liste, die Extension und das Padding betrachtet. Das Length Recovery Feld wird benötigt, weil die Medienpakete prinzipiell unterschiedlich lang sein können. Bei der Redundanzerzeugung müssen die Pakete für den RS-Kodierer aber alle gleich lang sein, d.h., sie werden mit Nullen auf die Länge des längsten Paketes aufgerundet. Das Length Recovery Feld wird bei der Wiederherstellung eines verlorenen Paketes benutzt, um die ursprüngliche Länge wieder herzustellen. Das E Bit zeigt eine Extension an, wenn es auf 1 gesetzt ist. Nach der momentanen Spezifikation muß es auf 0 gesetzt werden. Das PT Recovery Feld wird bei der Redundanzerzeugung über die Payload Types der Medienpakete berechnet. Das K Feld wird auf die Anzahl der Medienpakete eines Blockes (minus 1) gesetzt. Das N Feld ist die Anzahl aller Pakete eines Blockes minus 1. Das i Feld gibt an, daß das Paket das i+1-te FEC Paket (i<h) des Blockes ist. Das Timestamp Recovery Feld wird bei der Redundanzerzeugung über die TS Felder der Medienpakete berechnet. SN Base E PT Recovery Length Recovery N K i TS Recovery Abbildung 24: Reed-Solomon FEC Header Der Inhalt eines FEC Paketes wird bei der Redundanzerzeugung über die Nutzdaten, die CSRC Liste, die Extension und das Padding der Datenpakete berechnet. 4.1.3 Erzeugung der Redundanz Alle RTP Pakete von lokalen Sendern werden kopiert, bevor sie an das Gateway am Empfänger weitergeleitet werden. Wenn k Pakete eines Datenstromes beim Sender-Gateway eingetroffen sind, kann das Gateway die h Redundanzpakete erzeugen und übertragen. Die Kopien der k Pakete werden anschließend gelöscht. Wenn der Timer t1 abgelaufen ist und weniger als k Pakete eingetroffen sind, werden diese kopierten i Pakete verworfen und es wird keine Redundanz erzeugt. Die Pakete werden also ungeschützt übertragen, was die effektive Verlustrate am Empfänger möglicherweise erhöht. Eine Alternative ist, die i Pakete mit h* Redundanzpaketen zu schützen. h* wird so gewählt, daß das Verhältnis von Redundanz und Daten möglichst erhalten bleibt: i h * = ⋅ h k Die Klammern bedeuten dabei das Aufrunden auf den nächsten ganzzahligen Wert. Problematisch bei dieser Lösung ist, daß kürzere RS-Codes – auch wenn der Anteil an Redundanz gleich bleibt – weniger efektiv sind. Außerdem führt die zusätzliche Verzögerung zu einem höheren Jitter, der sich am empfangenden Gateway nachteilig auswirken kann. Für den Timer t1 gilt folgende Abschätzung: t1 = ti ⋅ k + to Die Zeit ti ist dabei die gemessene Zwischenankunftszeit (Interarrival-Time) der vom lokalen Sender ankommenden Pakete. Die zusätzliche Zeit to (Overhead-Time) dient dazu, den Seite 59 Kapitel 4: Verbesserung der Dienstqualität durch FEC Jitter des Paketstromes auszugleichen. Man beachte, daß Jitter nicht nur im Netzwerk entsteht, sondern auch an der Socket-Schnittstelle, wenn der Rechner unter hoher Last steht. Im Extremfall (kein Jitter) kann to auf 0 gesetzt werden. Bei der Redundanzerzeugung wird für jedes Paket die Länge des variablen Teils berechnet. Dazu werden die Längen von CSRC Liste, Extension, Nutzdaten und Padding addiert. Anschließend werden der Header, die berechnete Länge und der variable Teil hintereinander in einen Speicherbereich kopiert. Der Speicherbereich hat die Länge des größten der k Pakete plus 2 Byte für die berechnete Länge. Alle Bytes zwischen dem Ende der Paketdaten und dem Ende des Speicherbereichs werden mit Nullen initialisiert. Das Versionsfeld, die Sequenznummer und die SSRC Nummer des Headers werden ebenfalls auf 0 gesetzt. Dies ist einfacher und effektiver als das Weglassen dieser Felder und das umständliche Kopieren der restlichen Felder in [RoSc98-2]. Der Reed-Solomon Kodierer erzeugt mit den k Speicherbereichen h FEC Speicherbereiche mit den Redundanzinformationen. Jeder dieser h Speicherbereiche wird benutzt, um ein FEC Paket zu erzeugen. Die ersten 12 Byte des FEC Speicherbereichs entsprechen dabei genau einem durch den Kodierer erzeugten redundanten RTP Header. Das Padding Bit, das Extension Bit, das Marker Bit und das CC Feld werden aus dem FEC Speicherbereich (2te bis 9te Bit) in den RTP Header kopiert. Die anderen Felder des RTP Header werden wie in Abschnitt 4.1.2 beschrieben gesetzt. Das PT Feld (10te bis 16te Bit) wird in das PT Recovery Feld und das TS Feld (8te bis 12te Byte) wird in das TS Recovery Feld des FEC Headers kopiert. Die nächsten zwei Bytes des FEC Speicherbereiches (nach dem Header) werden in das Length Recovery Feld des FEC Headers kopiert. Die anderen Felder des FEC Headers werden auf die entsprechenden Werte des verwendeten Reed-Solomon Codes gesetzt. Die restlichen Bytes des FEC Speicherbereiches sind dann die Nutzdaten des FEC Paketes. Die erzeugten Redundanzpakete werden dann an das empfangene Gateway gesendet. Die Frage ist nun, mit welchem Abstand die Pakete gesendet werden sollen. Im Rahmen dieser Diplomarbeit durchgeführte Messungen haben gezeigt, daß ein burstartiges Senden (sehr kleiner Abstand) die Verlustrate erhöht. Die Abbildung 25 zeigt die kurz hintereinander mit verschiedenen Sendeabständen gemessenen Verlustraten auf einer realen Verbindung (siehe 4.3). Die Verlustrate ist hier die am Empfänger gemessene Verlustrate, es wurde keine FEC eingesetzt. Übertragen wurde ein PCM Audiostrom mit 160 Byte Nutzdaten pro RTP Paket. Man sieht, daß die Verlustraten bei kleinen Abständen der Pakete deutlich höher liegen. Um Fehler durch wechselnde Netzwerkeigenschaften auszuschließen, wurde die Messung mehrmals durchgeführt. Das qualitative Ergebnis war bei allen Messungen gleich. Da es keine Signalisierungsverbindung zwischen dem Sender- und dem EmpfängerGateway gibt, muß der Sendeabstand im Voraus bekannt sein. Das Gateway soll jedoch für beliebige Medienströme mit beliebigen Abständen der Datenpakete funktionieren. Es kann deshalb kein fester Abstand eingestellt werden, sondern der Abstand der FEC Pakete muß dynamisch festgelegt werden. Wenn der Sendeabstand der FEC Pakete sich vom Abstand der Datenpakete unterscheidet, müssen beide Abstände am Empfänger gemessen werden. Bei wenig Redundanz und genügend großer Verlustrate ist eine solche Schätzung für FEC Pakete allerdings nicht mehr möglich bzw. sehr ungenau, da nicht mehr genügend Pakete am Empfänger ankommen. Die FEC Pakete müssen also den gleichen Abstand wie die Datenpakete haben. Dann ist eine hinreichend gute Schätzung am Empfänger möglich. Diese Lösung hat zusätzlich den Vorteil, daß sie sich gut mit dem Piggy-backing Ansatz vereinbaren läßt (siehe 4.1.9). Seite 60 Kapitel 4: Verbesserung der Dienstqualität durch FEC Verlusrate am Empfänger 0,5 0,4 0,5 ms 2 ms 0,3 10 ms 20 ms 0,2 0,1 0 10 20 30 40 RTCP Intervall 50 60 Abbildung 25: Verlustrate bei unterschiedlichen Paketabständen 4.1.4 Wiederherstellung verlorener Pakete Die Wiederherstellung am Empfänger kann in zwei verschiedene Schritte unterteilt werden. Im ersten Schritt stellt das empfangene Gateway fest, wann eine Wiederherstellung durchgeführt werden muß. Der zweite Schritt ist die tatsächliche Wiederherstellung der Pakete. Der Ansatz für den ersten Schritt ist sehr einfach. Wenn k der n Pakete einer Transmission Group (TG) eingetroffen sind, kann die Wiederherstellung durchgeführt werden. Wenn die ersten k eingetroffenen Pakete die Datenpakete sind, können diese direkt an den Empfänger gesendet werden. Später eintreffende FEC Pakete der Gruppe können verworfen werden. Falls die k Pakete aus Daten- und FEC-Paketen bestehen, müssen verlorene Pakete vom ReedSolomon Decoder wiederhergestellt werden. Da es keine Signalisierung zwischen den Gateways gibt, muß für die Entscheidung im ersten Schritt zumindest das erste FEC Paket eingetroffen sein. Die Parameter n und k lassen sich dann aus dem FEC Header dieses Paketes ablesen. Wenn innerhalb einer Zeit t2 keine k Pakete eingetroffen sind, werden alle angekommenen Pakete der Gruppe an den Empfänger weitergeleitet. In diesem Fall bleibt die Vorwärtsfehlerkorrektur wirkungslos. Falls überhaupt keine FEC eingesetzt wird, müssen die eingetroffenen Pakete sofort ohne Verzögerung an den Empfänger gesendet werden. Die Zeit t2 ist also von den Parametern n und k abhängig. Falls FEC eingesetzt wird (n>k) ist die minimale Verzögerung: t 2 min = t i ⋅ k + t o Dies entspricht genau der Verzögerung t1. Die maximale Verzögerung ist: t 2 max = t i ⋅ n + t o Bei der maximalen Verzögerung können also alle h Redundanzpakete zur Reparatur eingesetzt werden. Die tatsächliche Verzögerung der TGs im Gateway wird gemessen und soll hier Seite 61 Kapitel 4: Verbesserung der Dienstqualität durch FEC als d bezeichnet werden. Die Zeit t2 muß also zwischen d und t2max liegen. Der genaue Punkt und die Konvergenzgeschwindigkeit lassen sich mit den Faktoren a und b einstellen. t 2’ = t 2 − (a ⋅ (t 2 − (t i ⋅ n + t o )) + b ⋅ (t 2 − d )) Ein Problem ist, daß die Pakete diese Verzögerung auch erleiden, wenn überhaupt keine FEC eingesetzt wird. Das empfangene Gateway weiß aufgrund der fehlenden Signalisierung nicht, wann keine FEC Pakete gesendet werden. Das Problem läßt sich jedoch sehr einfach lösen. Bei jedem Datenpaket, das durch einen Timeout (t2) an den Empfänger gesendet wird, wird die Zeit t2 verringert: t 2’ = t 2 − c ⋅ t 2 Die Geschwindigkeit mit der t2 auf Null fällt, läßt sich durch die Konstante c steuern. Dabei muß c ein bis zwei Größenordnungen kleiner als a sein, um die optimale Reparaturfähigkeit nicht durch gelegentliche Timeouts zu vermindern. Die momentanen in der Praxis benutzten Standardwerte für die Konstanten a, b und c findet man in Abschnitt 4.1.9. Wenn k Pakete einer TG eingetroffen sind, aber eines oder mehrere der k Datenpakete verloren wurden, müssen die verlorenen Pakete mit dem Reed-Solomon Decoder wiederhergestellt werden. Alle Datenpakete werden in Speicherbereiche (wie in 4.1.3 beschrieben) kopiert. Die FEC Pakete werden ebenfalls in Speicherbereiche kopiert. Es werden der RTP Header, das Length Recovery Feld aus dem FEC Header und der variable Teil (Nutzdaten) des FEC Pakets hintereinander kopiert. Das PT Feld und das TS Feld im kopierten RTP Header werden auf die Werte des PT Recovery Feldes und des TS Recovery Feldes des FEC Headers gesetzt. Versionsnummer, Sequenznummer und SSRC werden wie bei Datenpaketen auf 0 gesetzt. Die so erzeugten k Speicherbereiche werden dann an den RS-Decoder übergeben, der alle verlorenen Datenpakete wiederherstellt. Damit der Decoder weiß, welche Pakete verloren wurden, wird ihm noch ein Feld mit den Indizes der angekommenen Pakete übergeben. Die Indizes lassen sich mit den RTP Sequenznummern und den i-Feldern der FEC Pakete berechnen. Für jedes wiederhergestellte Paket wird ein neuer RTP Header erzeugt. Die Versionsnummer wird auf 2 und die Sequenznummer auf die Summe von SN_Base und dem Index des verlorenen Paketes (innerhalb der TG, beginnend bei 0) gesetzt. Die SSRC wird auf den Wert der SSRC des Datenstromes gesetzt. Alle anderen Felder werden aus dem wiederhergestellten RTP Header kopiert. Die Länge des variablen Teils des Datenpaketes steht in den zwei Byte hinter dem Header. Abschließend werden so viele Bytes wie das Längenfeld angibt (beginnend mit dem ersten Byte hinter dem Längenfeld) an den gerade erzeugten RTP Header angehängt. Diese Bytes sind die CSRC Liste, die Extension, die Nutzdaten und das Padding des RTP Paketes. Für die Wiederherstellung nicht benötigte FEC Pakete werden nach dem Timeout t2 gelöscht. 4.1.5 Gateway Kontrolle Das RTP Gateway verfügt über eine einfache Schnittstelle, um die Redundanzmenge für einzelne Datenquellen während des Betriebes zu verändern. Gleichzeitig kann über diese Schnittstelle die empfangene Qualität für jeden Sender ermittelt werden. Die Schnittstelle ist als UDP Port realisiert. Seite 62 Kapitel 4: Verbesserung der Dienstqualität durch FEC Um die RS-Parameter für einen Sender zu ändern, wird ein Paket mit der SSRC und den Parametern n und k an das Gateway gesendet. Abbildung 26 zeigt das Format des Paketes. SSRC N K Abbildung 26: Kontrollpaket - RS-Parameter Das RTP Gateway empfängt alle RTCP Nachrichten und wertet Sender- und Receiver Reports aus, um Informationen über die Qualität an den Empfängern zu bekommen. Für jede Sender-Empfänger-Kombination werden die Verlustrate und der Jitter gespeichert. Zusätzlich wird die Umlauf-Verzögerung (round trip delay) zwischen dem Empfänger und dem SenderGateway gemessen. Wenn man davon ausgeht, daß die Verzögerung zwischen SenderGateway und Sender klein ist, entspricht der gemessene Wert nahezu der UmlaufVerzögerung zwischen Sender und Empfänger: rtd = t RR − t SR − d LSR Die folgende Abbildung 27 zeigt den Ablauf der Messung. tSR Sender Report Gateway tRR Gateway Gateway dLSR Receiver Report Gateway Abbildung 27: Messung der Umlauf-Verzögerung Bekommt das Gateway ein Paket auf der Kontrollschnittstelle, antwortet es mit einem Paket, das die gemessenen Quality of Service (QoS) Informationen enthält. Die QoS Nachricht enthält für jeden Sender die Parameter Verlustrate, Jitter und Umlaufverzögerung. Die Parameter werden über alle berichtenden Empfänger gemittelt. Wenn noch kein bekannter Sender existiert, schickt das Gateway auch kein QoS Paket. In diesem Fall muß darauf geachtet werden, daß das abfragende Programm nicht blockiert. Abbildung 28 zeigt das Format des Pakets. Die Felder Fraction und Jitter entsprechend genau der Definition im RTCP Protokoll (siehe [RFC1889]). Das Delay Feld enthält die auf die nächste ganze Zahl gerundete UmlaufVerzögerung in ms. Seite 63 Kapitel 4: Verbesserung der Dienstqualität durch FEC SSRC_1 Fraction Delay Jitter SSRC_2 .... Abbildung 28: Kontrollpaket - QoS Informationen 4.1.6 Statistikberechnung Um die Funktion des Gateways beobachten zu können, wird in regelmäßigen Intervallen (alle 10 s) eine Statistik für jede SSRC angezeigt. Diese Statistik wird im Gateway berechnet, es werden keine Werte aus den RTCP Nachrichten benutzt. Das Problem ist, daß die Intervalle in denen die RTCP Nachrichten verschickt werden unterschiedlich lang sind und mit steigenden Teilnehmerzahlen immer größer werden (Skalierbarkeit). Dies führt zu großen Problemen, wenn Statistiken in regelmäßigen Intervallen ausgegeben werden sollen. Abbildung 29 zeigt eine Ausgabe der Statistiken am Sender- und Empfänger-Gateway über einen Zeitraum von 20 s. Die Bedeutung der einzelnen Felder wird in Tabelle Tabelle 15 erläutert. Sender SSRC Recv Med Trans Med Recv FEC Trans FEC Recover Timed Med Timed FEC Mean Delay Loss Eff Loss LMInt RMInt 1573926991 499 499 0 490 0 6 0 - 0.02 2361045661 0 0 0 0 0 0 0 SSRC Recv Med Trans Med Recv FEC Trans FEC Recover Timed Med Timed FEC Mean Delay Loss Eff Loss LMInt RMInt 1573926991 501 501 0 505 0 0 0 0.02 2361045661 0 0 0 0 0 0 0 - Empfänger SSRC Recv Med Trans Med Recv FEC Trans FEC Recover Timed Med Timed FEC Mean Delay Loss Eff Loss LMInt RMInt 1573926991 386 481 382 0 97 6 279 0.1041 0.2 0.0041 - 0.02 2361045661 0 0 0 0 0 0 0 SSRC Recv Med Trans Med Recv FEC Trans FEC Recover Timed Med Timed FEC Mean Delay Loss Eff Loss LMInt RMInt 1573926991 402 493 392 0 94 3 298 0.1071 0.2 0.014 - 0.02 2361045661 0 0 0 0 0 0 0 - Abbildung 29: Statistikberechnung Feld Received Media Transmitted Media Received FEC Transmitted FEC Recovered Timed Out Media Timed Out FEC Mean Delay Loss Effective Loss Local Media Interval Seite 64 Bedeutung Anzahl der empfangenen Medien Pakete (RTP Pakete) Anzahl der gesendeten Medien Pakete Anzahl der empfangenen FEC Pakete Anzahl der gesendeten FEC Pakete Anzahl der wiederhergestellten Medien Pakete Media Paket Timeouts (t1 oder t2) FEC Paket Timeouts (t2) Mittlere Verzögerung der Pakete in s Verlustrate zwischen den Gateway (Media und FEC) Verlustrate zwischen Gateway und Empfänger Paketintervall des lokalen Senders in s Kapitel 4: Verbesserung der Dienstqualität durch FEC Remote Media Interval Paketintervall zwischen den Gateways in s Tabelle 15 : Statistikberechnung Bei den Recovered Paketen ist zu beachten, daß nicht alle der wiederhergestellten Pakete auch gesendet werden (Duplikate). Timed out Media Pakete entstehen am Sender durch den Timer t1 und am Empfänger durch den Timer t2. Am Sender werden diese Pakete gelöscht, da es sich nur um Kopien handelt. Am Empfänger werden diese Pakete gesendet, allerdings werden auch hier keine Duplikate übertragen. Timed Out FEC Pakete entstehen am Empfänger. Nicht benutzte FEC Pakete werden nach Ablauf des Timers t2 verworfen. Loss ist die Verlustrate im Netzwerk (ohne FEC). Effective Loss gibt die tatsächliche Verlustrate (mit FEC) an, d.h. die Verlustrate, die ein Empfänger erleidet. Durch Jitter können allerdings zusätzliche Verluste am Empfänger entstehen, wenn der Jitter nicht durch den Playoutbuffer kompensiert werden kann. Der Effective Loss Wert kann auch negative Werte annehmen, weil die Meßintervalle nicht mit den Transmission Groups (TGs) synchronisiert sind. Das bedeutet, es können in einem Meßintervall mehr Pakete an den Empfänger gesendet werden, als in diesem Intervall angekommen sind. Pakete einer TG werden erst gesendet, wenn alle Pakete der TG eingetroffen bzw. wiederhergestellt wurden oder der Timer abläuft. Die korrekte effektive Verlustrate ergibt sich durch Addition der Werte der beiden aufeinanderfolgenden Intervalle. 4.1.7 Verlustsimulation Um das Gateway mit reproduzierbaren Verlustraten testen zu können, wurde eine Verlustsimulation eingebaut. Pakete von entfernten Sendern gehen am empfangenen Gateway verloren (siehe Abbildung 30). RTP Gateway RTP Gateway Abbildung 30: Paketverluste Zur Verlustsimulation gibt es zwei Möglichkeiten. Unabhängige Verluste werden einfach mit einer Funktion erzeugt, die gleichförmig verteilte Zufallszahlen zwischen 0 und 1 generiert. Ist die Zufallszahl kleiner als die Verlustwahrscheinlichkeit pL, dann ist das Paket verloren. Burstartige Verluste werden mit einem 2-state Markov Modell erzeugt (siehe [Noll96], Seite 285). Abbildung 31 zeigt die beiden Zustände und die Übergangswahrscheinlichkeiten. p 1-p 1-q lost arrived q Seite 65 Kapitel 4: Verbesserung der Dienstqualität durch FEC Abbildung 31: 2-state Markov Modell Das Markov Modell läßt sich durch eine Verlustrate pL und eine mittlere Burstlänge b beschreiben: pL p= b ⋅ (1 − p L ) q= 1 b Es muß beachtet werden, daß keine beliebigen Kombinationen von pL und b möglich sind. Es kann zum Beispiel keine Verlustrate größer als 50% mit einer mittleren Burstlänge von 1 erzeugt werden. Die Parameter können in einer Konfigurationsdatei angegeben werden. 4.1.8 Einsatzmöglichkeiten Das RTP FEC Gateway läßt sich in verschiedenen Szenarien einsetzen, da das Gateway in beide Richtungen sowohl Unicast als auch Multicast senden kann. Das Gateway läßt sich deshalb auch als Unicast-Multicast-Translator benutzen. Im einfachsten Fall läßt sich das Gateway für eine einzelne Unicast-Verbindung (zum Beispiel Internet-Telefonie) einsetzen (siehe Abbildung 32). Jedes Gateway empfängt einen Datenstrom vom lokalen Sender, erzeugt FEC Pakete und sendet die Daten- und FEC Pakete an das entfernte Gateway. Das Empfänger-Gateway repariert mit den FEC-Paketen verlorene Medien-Pakete. Benutzer A Gateway Gateway Benutzer B Abbildung 32: Szenario - Internet Telefonie Das Gateway läßt sich auch für Audio/Video-Konferenzen über Multicast-Verbindungen einsetzen. Abbildung 33 zeigt sechs Teilnehmer (A-F) an drei unterschiedlichen Orten. Paketverluste zwischen den Gateways (zum Beispiel im WAN) werden mit den FEC Paketen repariert. Die Multicastgruppen müssen natürlich mittels TTL- oder Administrative Scoping entsprechend dimensioniert werden. Seite 66 Kapitel 4: Verbesserung der Dienstqualität durch FEC C RTP D GW A RTP GW RTP/FEC B E RTP GW F Abbildung 33: Szenario - Audio/Video-Konferenz Da Audio- und Videoströme normalerweise auf unterschiedlichen Multicast-Gruppen gesendet werden, benötigt jeder Teilnehmer für Audio und Video jeweils ein Gateway. Im WAN kann für die Übertragung eine Multicast-Gruppe benutzt werden, im LAN müssen die Audio- und Videoinformationen wieder in zwei getrennten Multicast-Gruppen versendet werden. Ein weiterer interessanter Fall ergibt sich, wenn es sogenannte Legacy und FEC-enhanced Anwendungen gibt. Legacy-Anwendungen verfügen über keine FEC Mechanismen und sind auf ein Gateway angewiesen. FEC-enhanced Anwendungen verfügen über FEC Mechanismen und können sowohl FEC Pakete erzeugen als auch FEC Pakete empfangen und zur Reparatur benutzen. FEC-enhanced Anwendungen sind also nicht auf ein Gateway angewiesen. In Abbildung 34 haben die Benutzer A, B, C und D Legacy-Anwendungen und sind auf Gateways angewiesen. Benutzer E und F setzen FEC-enhanced Anwendungen ein und benötigen kein Gateway. C RTP D GW A RTP GW RTP/FEC E B F Abbildung 34: Szenario - Unterschiedliche Anwendungen Ein weitere Idee ist, nur eine Multicast-Gruppe für die Übertragung zu benutzen. Das bedeutet, die Gateways senden auf der selben Adresse von der sie auch empfangen. Das Gateway am Sender fügt also FEC Pakete in die Multicast-Gruppe ein und Gateways an den Empfängern können diese zur Wiederherstellung verlorener Pakete benutzen. Die wiederhergestellten Pakete werden dann ebenfalls in die Multicast-Gruppe eingefügt. Da bei diesem Szenario auch FEC Pakete bei Legacy-Anwendungen eintreffen, muß sichergestellt werden, daß diese am Empfänger als unbekannt klassifiziert und verworfen werden. Seite 67 Kapitel 4: Verbesserung der Dienstqualität durch FEC Die FEC Pakete können jetzt natürlich nicht mehr mit der gleichen SSRC Nummer gesendet werden, da sonst der Sender durch die auch bei ihm eintreffenden FEC Pakete ständig Kollisionen erkennt und seine SSRC Nummer wechselt. Aus dem selben Grund dürfen keine reparierten Pakete zurück zum Sender gelangen. Letzteres läßt sich zum Beispiel mit geeignetem TTL-Scoping verhindern. Der erste Punkt erfordert aber, daß FEC Ströme jetzt eine andere SSRC Nummer haben als der dazugehörige Datenstrom. Um eine Zuordnung zwischen FEC- und Medien-Paketen zu haben, werden FEC-Pakete mit einer SSRC markiert, die der SSRC der Medienpakete plus 1 entspricht. Der Raum der SSRC Nummern ist groß genug, um selbst bei einer hohen Anzahl von Empfängern die Kollisionswahrscheinlichkeit klein zu halten, wenn ein guter Zufallszahlenalgorithmus (zum Beispiel MD5) verwendet wird. Da das Gateway dann eigene SSRCs vergeben muß, muß es auch eigene RTCP Nachrichten versenden und eine SSRC-Kollisionsbehandlung durchführen. Es handelt sich dann nicht mehr um einen RTP Translator (siehe [RFC1889]) sondern um eine Mischung aus RTP Translator und RTP Mixer. 4.1.9 Implementierung Das RTP Gateway wurde als Prototyp in der Sprache C++ implementiert. Zur Speicherung von angekommenen oder ausgehenden Paketen wurde keine eigene Datenstruktur entwickelt, sondern es wurde auf die bewährte map-Klasse der Standard Template Library (STL) zurückgegriffen. Die map-Klasse ermöglicht außerdem eine automatische Vermeidung von Duplikaten und ein Reseqencing, weil die Pakete jeweils mit der Sequenznummer indiziert werden. Da das Gateway über keinen Playoutbuffer verfügt, ist die Duplikatvermeidung und das Resequencing auf jeweils eine TG beschränkt. Das Gateway wurde im wesentlichen so implementiert wie in den vorigen Abschnitten beschrieben. Die einzige Aussnahme ist, daß bei Ablaufen des Timers t1 am Sender-Gateway keine Redundanz erzeugt wird. Beim Abfragen der verschiedenen Sockets wird ein relativ großer Timeout von 1 ms benutzt. Das hat den Vorteil, daß das RTP Gateway keine unnötige Rechenzeit verbraucht. Ein Problem entsteht, wenn der Rechner durch andere Anwendungen stark ausgelastet wird. Es kommt zu Timing-Problemen, da das Gateway nicht mehr genug Rechenzeit erhält. Pakete können nicht mehr schnell genug von den Sockets abgeholt werden, so daß die Timer t1 und t2 quasi zu früh ablaufen. Die Effektivität der Vorwärtsfehlerkorrektur verringert sich deshalb entsprechend. Bei der Berechnung der Timeouts hat es sich gezeigt, daß es für eine optimale Audioübertragung günstig ist, die Konstante b auf 0 zu setzen. Die weiteren Konstanten werden zu a = 0,5 und c = 0,05 gesetzt. Die eigentliche Kodierung und Dekodierung wird in Child-Prozessen durchgeführt, die vom Gateway erzeugt werden (fork-Funktion). Dadurch ist der Parent-Prozess in der Lage, schneller wieder neue Pakete entgegenzunehmen, ohne die doch relativ lange dauernde Dekodierung abwarten zu müssen (siehe Abschnitt 4.2.2). Die Effektivität der Vorwärtsfehlerkorrektur könnte weiter gesteigert werden, wenn am Sender ein Interleaving der Pakete durchgeführt wird. Der Sender sendet die Pakete nicht mehr in der natürlichen Reihenfolge, sondern verwürfelt sie entsprechend dem IntervleavingFaktor. Ein Interleaving der Pakete am Sender verringert die Länge der Fehlerbursts und erhöht damit die Wahrscheinlichkeit, daß die Pakete am Empfänger wiederhergestellt werden können. Allerdings erhöht sich die entstehende Verzögerung ebenfalls, so daß der Einsatz von Interleaving nur bei nicht interaktiven Anwendungen sinnvoll erscheint. In der momentanen Implementierung werden die FEC Pakete als einzelne Pakete verschickt. Weil der Paket-Header im Verhältnis zu den Nutzdaten (zumindest bei Audiodaten) recht groß ist, entsteht ein unnötiger Overhead. Um Bandbreite im Netz zu sparen, kann man die FEC Informationen an später gesendete Datenpakete anfügen (piggy-backing). Als weitere Seite 68 Kapitel 4: Verbesserung der Dienstqualität durch FEC Verbesserungen sind eine direkte Integration in die Anwendung (FEC enhanced application) und eine automatische Adaption der Kodier-Parameter (siehe [PaWa98]) denkbar. Weiterhin könnte der Layered-FEC Ansatz für Multicast-Übertragung implementiert werden. Bei Versuchen mit Videoübertragung hat sich gezeigt, daß das Gateway weitaus weniger effektiv ist als bei Audioübertragung. Das Problem ist, daß die benutzte Anwendung über keinen Playoutbuffer verfügt. Weil das Gateway nur ein begrenztes Resequencing durchführt (innerhalb einer TG), kommen unter Umständen ganze TGs außerhalb der ursprünglichen Reihenfolge an. Zu spät angekommene Pakete haben dann natürlich die gleiche negative Wirkung wie verlorene Pakete. Deshalb wurde eine zweite Version des Gateways mit integriertem Playoutbuffer implementiert. Die Playout-Verzögerung ist bei gleichem RS-Code und gleichem Paketabstand konstant: d p = n ⋅ ti Verfügt die eingesetzte Anwendung über einen eigenen Playoutbuffer, kann diese Verzögerung dann natürlich auf den minimalen Wert 0 gesetzt werden. 4.2 Performance Um eine Abschätzung der Leistungsfähigkeit zu bekommen, wird in diesem Abschnitt die Performance des RS-Kodieres aus [Rizzo98] und des RTP Gateways untersucht. Kodiergeschwindigkeit [Mbps] 4.2.1 Reed-Solomon Kodierer Die Performance des Reed-Solomon Kodierers wurde auf einer Sparc Ultra 10 gemessen. Kodier- und Dekodiergeschwindigkeit sind hier als die Nutzdatenmenge, die pro Zeit kodiert bzw. dekodiert werden kann, definiert. Abbildung 35 zeigt, daß die Kodiergeschwindigkeit nahezu unabhängig von der Paketgröße ist. Nur bei sehr kleinen Paketgrößen fällt die Geschwindigkeit etwas geringer aus. Für die Messung wurde ein 255/223 Code benutzt (Vergleiche mit Tabelle 2). 12 10 8 6 4 2 0 0 512 1024 1536 2048 2560 Paketgröße [bytes] 3072 3584 4096 Abbildung 35: Kodiergeschwindigkeit in Abhängigkeit von der Paketgröße Die Abbildung 36 zeigt, daß die Kodiergeschwindigkeit abhängig von der erzeugten Redundanzmenge h ist. Die Kodiergeschwindigkeit ist umgekehrt proportional zu h, weil h verSeite 69 Kapitel 4: Verbesserung der Dienstqualität durch FEC schiedene Redundanzblöcke erzeugt werden müssen. Diese Beobachtung entspricht der Aussage in [Rizzo98]. Für die Messung wurde eine Paketgröße von 1024 Byte benutzt. Kodiergeschwindigkeit [Mbps] 350 300 250 200 150 100 50 0 0 20 40 60 h [Pakete] 80 100 Abbildung 36: Kodiergeschwindigkeit in Abhängigkeit von der Redundanzmenge Die Dekodiergeschwindigkeit ist abhängig von der Zahl der verlorenen Pakete und der Anzahl der Datenpakete k. Abbildung 37 zeigt die Abhängigkeit der Dekodiergeschwindigkeit von der Anzahl der verlorenen Pakete. Es wurde wieder ein 255/223 Code und eine Paketgröße von 1024 Byte benutzt. Man sieht, daß die Dekodiergeschwindigkeit umgekehrt proportional zur Anzahl der verlorenen Pakete ist (siehe auch [Rizzo98]). Auf eine Darstellung der Dekodiergeschwindigkeit in Abhängigkeit von k wurde hier verzichtet. Die Dekodiergeschwindigkeit ist auch zu k umgekehrt proportional. Dekodiergeschwindigkeit [Mbps] 250 200 150 100 50 0 0 5 10 15 20 Verlorene Pakete 25 30 Abbildung 37: Dekodiergeschwindigkeit in Abhängigkeit von den Verlusten Wie man anhand der Grafiken sieht, reicht die Performance des Kodierers bei weitem aus, um eine entsprechende Redundanz für Audioströme zu erzeugen. Ein PCM Audiostrom hat eine Rate von 64 kb/s, d.h., ein FEC Gateway kann mehrere Ströme gleichzeitig kodieren und Seite 70 Kapitel 4: Verbesserung der Dienstqualität durch FEC dekodieren. Auch für komprimierte Videoströme (H.261) reicht die Performance des Kodierers aus. 4.2.2 RTP Gateway Das RTP Gateway wurde so implementiert, daß möglichst wenig Rechenzeit unnötig verbraucht wird. Bei einem PCM Audiostrom mit 20 ms Paketisierung und einer simulierten Verlustrate von 0,2 liegt die Rechnerauslastung durch Empfänger- und Sender-Gateway bei 510% auf einer SUN Ultra-20. Die Kodierzeit für einen 10/5 Block beträgt ungefähr 3 ms, die Dekodierzeit liegt bei einer Verlustrate von 0,2 zwischen 1,5 und 3 ms. 4.3 Untersuchung der Übertragungsqualität In diesem Abschnitt wird untersucht, wie sich die Übertragungsqualität durch den Einsatz des FEC Gateways verbessert. Die Untersuchung beschränkt sich dabei auf die Übertragung von Audiodaten. Versuche mit H.261 Videoströmen lieferten allerdings vergleichbare Ergebnisse. Es werden sowohl Messungen mit künstlich erzeugten Verlusten als auch mit Verlusten auf einer realen Übertragungsstrecke durchgeführt. Die reale Übertragungsstrecke wurde mit Hilfe eines in den USA installierten RTP Reflektors realisiert (siehe Abbildung 38). Tabelle 16 zeigt die mit traceroute ermittelten Hops auf der Strecke zwischen winnie.fokus.gmd.de und systems.seas.upenn.edu. Diese Strecke wird natürlich zweimal von den RTP Paketen durchlaufen. Hop 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Name rockmaster (193.175.132.225) ferry (193.174.154.1) GMD-Berlin1 (188.1.1.101) ZR-Berlin1.WiN-IP.DFN.DE (188.1.162.73) ZR-Frankfurt1.WiN-IP.DFN.DE (188.1.144.106) IR-Perryman2.WiN-IP.DFN.DE (188.1.144.86) 166.48.39.253 (166.48.39.253) core3.WestOrange.cw.net (204.70.4.1) wor-verio-nap.WestOrange.cw.net (204.70.1.10) ucsc1-gw-h0-0-0.phl.pa.verio.net (205.238.52.106) upenn-gw.pa.verio.net (130.94.193.20) UPENN-VERIO.MAGPI.NET (198.32.242.2) DEFAULT1-GW-FE.UPENN.EDU (165.123.237.2) SYSTEMS.SEAS.UPENN.EDU (130.91.4.52) Tabelle 16: Reale Strecke - Traceroute rockmaster.fokus. gmd.de SYSTEMS.SEAS. UPENN.EDU winnie.fokus.gmd. de Abbildung 38: Reale Übertragungsstrecke Seite 71 Kapitel 4: Verbesserung der Dienstqualität durch FEC 4.3.1 Burstverluste Die Messungen über die reale Übertragungsstrecke zeigen, daß Verluste in der Realität nicht einzeln sondern immer burstartig auftreten. Die Verlustwahrscheinlichkeit eines Paketes ist also abhängig von der Tatsache, ob das vorherige Paket verloren wurde oder nicht. Diese Verlustbursts lassen sich dadurch erklären, daß Verluste im Internet in der Regel immer durch Überlast entstehen. Es kommt zu Pufferüberläufen in den Routern der Übertragungsstrecke. Weitere Ursachen für Verluste sind Fehlkonfigurationen oder Übertragungsfehler. Letztere treten aber nur bei drahtlosen Systemen nennenswert in Erscheinung. Abbildung 39 zeigt die relative Häufigkeit der Länge der Verlustbursts auf der realen Übertragungsstrecke. Die Messung wurde mit PCM Audiopaketen im Abstand von 20 ms durchgeführt. Die Wahrscheinlichkeit für einen Burstfehler (clp=p(l>1)) beträgt ungefähr 0,49. Dieses Ergebnis stimmt mit den Messungen in [Bolot93] überein. Für einen Paketabstand von 20 ms wurde dort eine Burstfehlerwahrscheinlichkeit von 0,42 gemessen. Die Burstfehlerrate verringert sich mit dem Paketabstand. Bei einem Paketabstand von 50 ms ist die Burstfehlerrate bereits auf 0,27 gesunken (siehe [Bolot93]). Weil die Effizienz von ReedSolomon Codes abnimmt, je größer die Wahrscheinlichkeit für Burstfehler ist, sollte bei der Übertragung ein größerer Paketabstand benutzt werden. Da größere Paketabstände zu höheren Verzögerungszeiten führen, kann der Abstand allerdings auch nicht beliebig groß gewählt werden. Bei den Tests auf der realen Strecke hat sich ein Paketabstand von 40 ms als geeignet erwiesen (Burstfehlerwahrscheinlichkeit 0,32). 0,6 Relative Häufigkeit 0,5 0,4 0,3 0,2 0,1 0 1 2 3 4 5 6 7 8 9 10 Länge des Verlustbursts [Pakete] Abbildung 39: Messung der Burstverluste 4.3.2 Verlustrate Abbildung 40 zeigt die gemessene effektive Verlustrate am Empfänger. Die simulierte Verlustrate beträgt im Mittel 30%, die Verluste sind statistisch unabhängig (keine Burstverluste). Weil keine Burstverluste auftreten, entspricht die effektive Verlustrate mit FEC den theoretisch erreichbaren Werten (siehe RS 10/5 – Theorie in Anhang 7.4). Seite 72 Kapitel 4: Verbesserung der Dienstqualität durch FEC 0,4 0,35 Effektive Verlustrate 0,3 0,25 keine FEC RS 8/5 RS 10/5 RS 15/5 0,2 0,15 0,1 0,05 0 0 50 100 150 200 Zeit [s] Abbildung 40 : Effektive Verlustrate - Simulierte Verluste Werden die Daten auf einer realen Strecke im Internet übertragen, verringert sich die Effektivität des Reed-Solomon Codes, weil ein großer Anteil der Verluste Burstfehler sind (siehe 4.3.1). Abbildung 41 zeigt die gemessenen effektiven Verlustraten mit den selben FEC Parametern wie in der vorangegangenen Abbildung. Die mittlere Verlustrate im Netzwerk beträgt ungefähr 23%. 0,35 0,3 Effektive Verlustrate 0,25 keine FEC 0,2 RS 8/5 RS 10/5 0,15 RS 15/5 0,1 0,05 0 0 50 100 150 200 Zeit [s] Abbildung 41: Effektive Verlustrate - Reale Strecke Seite 73 Kapitel 4: Verbesserung der Dienstqualität durch FEC Die beiden Messungen wurden mit einem PCM Audiostrom und einem Paketabstand von 20 ms durchgeführt. Die gemessene Verlustrate stimmt mit der für den Anwender tatsächlich hörbaren überein, Verluste durch Jitter traten nicht auf. Nun soll untersucht werden, wie die effektive Verlustrate von der Verlustrate abhängt. Die Abbildung 42 zeigt die effektiven Verluste ohne FEC, die theoretisch ermittelte effektive Verlustrate (siehe 2.2.3.2), die gemessene effektive Verlustrate bei simulierten unabhängigen Verlusten, die gemessene effektive Verlustrate auf der realen Übertragungsstrecke und die gemessene effektive Verlustrate bei simulierten burstartigen Verlusten. Übertragen wurde ein PCM Audiostrom mit 20 ms Paketlänge, zur Vorwärtsfehlerkorrektur wurde ein ReedSolomon 10/5 Code benutzt. Das Diagramm zeigt, daß die effektive Verlustrate bei unabhängigen Paketverlusten der theoretisch berechneten entspricht. Die Implementierung ist also offensichtlich korrekt. Die effektive Verlustrate auf der realen Strecke ist deutlich schlechter, weil hier burstartige Verluste die Effektivität des Reed-Solomon Codes verringern. Die Kurve mit den simulierten Burst-Verlusten zeigt einen ähnlichen Verlauf. Allerdings ist selbst auf der realen Übertragungsstrecke die für den Empfänger spürbare Verlustrate wesentlich geringer als die tatsächlich vorhandene, wenn die Verluste im Netz nicht über 30% liegen. Der Einsatz von FEC steigert die Übertragungsqualität also ganz erheblich. Die Funktionswerte der abgebildeten Kurven findet man in Anhang 7.4. 1 0,9 0,8 Effektive Verlustrate 0,7 keine FEC 0,6 RS 10/5 Theorie RS 10/5 Unabh. Verluste 0,5 RS 10/5 Reale Strecke 0,4 RS 10/5 Burst-Verluste 0,3 0,2 0,1 0 0 0,1 0,2 0,3 0,4 0,5 0,6 Verlustrate 0,7 0,8 0,9 1 Abbildung 42: Die Effektivität von FEC Die Abbildung 43 zeigt die gleichen Kurven wie die Abbildung 42 bis zu einer effektiven Verlustrate von 0,2. Zusätzlich wurde eine Messung mit einem Audiosignal mit Sprachpausen durchgeführt. Die effektive Verlustrate liegt etwas höher als die ideal berechnete, da bei der momentanen Implementierung unvollständige Blöcke vor einer Pause nicht durch FEC geschützt werden. Seite 74 Kapitel 4: Verbesserung der Dienstqualität durch FEC Effektive Verlustrate 0,2 keine FEC RS 10/5 Theorie RS 10/5 Unabh. Verluste 0,1 RS 10/5 Reale Strecke RS 10/5 Burst-Verluste RS 10/5 Silence Det. 0 0 0,1 0,2 0,3 Verlustrate 0,4 0,5 Abbildung 43: Effektive Verlustrate unterhalb 0,2 Um die Effizienz des RS Codes bei Burst-Fehlern zu steigern, gibt es zwei Möglichkeiten. Ein größeres Paketisierungsintervall verringert die Wahrscheinlichkeit für das Auftreten von abhängigen Verlusten (siehe 4.3.1). Als Alternative kann die Anzahl der Redundanzpakete h (bei gleichem Verhältnis von n und k) erhöht werden. Beide Maßnahmen verringern die effektive Verlustrate, verursachen aber eine zusätzliche Verzögerung. Diese Verzögerung ist dann akzeptabel, wenn es sich um eine nicht interaktive Übertragung handelt (zum Beispiel Radio). Bei interaktiver Kommunikation führt die zusätzliche Verzögerung allerdings zu Problemen (siehe 2.2.3). Seite 75 Kapitel 4: Verbesserung der Dienstqualität durch FEC Seite 76 Kapitel 5: Untersuchung eines realen Szenarios 5 Untersuchung eines realen Szenarios In diesem Abschnitt soll die Funktionsweise des in den vorangegangenen Kapiteln beschriebenen Systems zur Dienstgüteauswahl an einem realen Szenario vorgestellt werden. Das Szenario besteht aus zwei Anwendern, die per IP-Telefonie miteinander kommunizieren. Beide Anwender sind Kunden des selben Dienstanbieters, eine Kostenkompensation zwischen Dienstanbietern muß also nicht betrachtet werden. Abbildung 44 zeigt eine schematische Darstellung des Szenarios. Benutzer Dienstanbieter RTP Benutzer RTP FEC Tunnel FEC Gateway CIP CIP Server FEC Gateway CIP CIP Client CIP Client Abbildung 44: Szenario IP-Telefonie Der Dienstanbieter stellt die folgenden IP-Dienste mit den entsprechenden Tarifen zur Verfügung: Dienst Best Effort Controlled Load Guaranteed Rate Tarif CBE(r,t)=d.r.t CCL(r,e,t)=(a + c.e).r.t CGR(r,t)=c.r.t Parameter d=0,0002 a=0,001; c=0,0004; e=0,05 c=0,0004 Verlustrate ~25% <<1% ~5% Tabelle 17 : Angebotene Dienste Bei den hier angebotenen Diensten handelt es sich um zwei Intserv-Dienste und einen Best-Effort-Dienst. Die Tariffunktionen für die Intserv-Dienste wurden aus [KSWS99] entnommen. Der ratenabhängige Tarif wird zusätzlich mit der Verbindungsdauer multipliziert, d.h., die ratenabhängigen Kosten fallen pro Zeiteinheit an. Die Rate wird in kBit und die Zeit in Minuten angegeben. Die Verlustraten der einzelnen Dienste sind als bekannt vorausgesetzt, in der Realität müßte eine Messung durchgeführt werden. Es wird außerdem angenommen, daß die Verlustraten über eine gewisse Zeit relativ konstant sind. Dies scheint sogar bei einem Best-Effort Dienst der Fall zu sein (siehe Abbildung 41). Keiner der angebotenen Dienste gibt Garantien für die Verzögerung und den Jitter. Beide Benutzer starten ihren CIP-Client mit der Adresse des CIP-Servers des Dienstanbieters als Parameter. Die Informationen über die angebotenen Dienstklassen werden dann an die Clients übertragen. In Anhang 7.2 wird der Protokollablauf gezeigt. Die Utility-Funktion für Audio setzt sich aus der Funktion in Abbildung 16 und der als realistisch angenommenen in Abbildung 45 gezeigten Funktion zusammen und ist beiden Clients bekannt. Die Funktion in Abbildung 45 wurde in einem Selbstversuch ermittelt; der Verlauf entspricht aber im wesentlichen der Funktion in Abschnitt 3.4.2. Die Konstanten der abschnittsweisen Exponentialfunktionen lassen sich mit Hilfe des Start- und Endpunktes jedes Abschnitts berechnen. Seite 77 Kapitel 5: Untersuchung eines realen Szenarios 5 Utility [MOS] 4,5 4 3,5 3 2,5 2 1,5 1 0,5 0 0,01 0,1 1 Verlustrate Abbildung 45: Utility in Abhängigkeit von der Verlustrate Die gesamte Utility-Funktion ist in TFL ausgedrückt: u(bn, pl) = (if(bn==0.08,0.2,if(bn==0.19,0.85,if(bn==0.5,0.9,if(bn==0.75,0.95,if(bn==1,1,0)))))*5)* (if(pl==0,5,if(and(pl>0,pl<=0.02),10^(-3.1847*pl)*5.32663,if(and(pl>0.02,pl<=0.1),10^(6.4579*pl)*6.1932,if(and(pl>0.1,pl<=0.15),10^(-2.9226*pl)*2.7446,0))))/5) Dabei ist bn die normierte Bandbreite und pl die Paketverlustwahrscheinlichkeit. Anhand der in Tabelle 18 angegebenen Randbedingungen der beiden Benutzer kann dann der günstigste Tarif ausgewählt werden. Im einfachsten Fall bestimmt der Sender die Qualität, die der Empfänger bekommt und bezahlt für die übertragenen Daten. Im Normalfall will allerdings der jeweilige Empfänger die Qualität der erhaltenen Daten bestimmen, d.h., der Empfänger muß dem Sender die gewünschte Qualität übermitteln (Signalisierung). Jeder Empfänger zahlt dann die Kosten des anderen Senders und bekommt die gewünschte Qualität. Die Signalisierung der Qualität könnte bei Intserv zum Beispiel mit RSVP durchgeführt werden, bei Diffserv müßte ein entsprechendes Protokoll spezifiziert werden. Parameter umin pmax k nmax Anwender 1 3 (gerade noch gut) 0,04 DM/min 5 10 Anwender 2 4,75 (sehr gut) 0,25 DM/min 5 10 Tabelle 18: Randbedingungen der Anwender Die Parameter k und nmax werden durch die maximale zusätzliche Verzögerung und den maximalen Overhead durch die Redundanz bestimmt. Diese beiden Werte werden vom Benutzer eingestellt. Bei 20 ms Audio-Paketen entsprechen die obigen Parameter einer maximalen zusätzlichen Verzögerung von 200 ms, der Overhead durch die Redundanz kann maximal 50% betragen. Um den Gesamtpreis einfach berechnen zu können, soll angenommen werden, daß das Gespräch 30 Minuten dauert und während des Gespräches keine Parameter (Dienstklasse, Redundanz) geändert werden. Seite 78 Kapitel 5: Untersuchung eines realen Szenarios Die nachfolgenden Tabellen zeigen die Ergebnisse des Optimierungsalgorithmus für die beiden Anwender. Neben der Utility und dem Preis werden die optimalen Werte für die normierte Bandbreite und die Redundanz (h = n-k) angegeben. Dienstklasse Best Effort Controlled Load Guaranteed Rate Utility/Preis 6971,29 2990,17 5848,77 Utility 4,1392 4,5273 4,16725 Preis 3,6 Pf/min 9 Pf/min 4,2 Pf/min Bn 0,19 0,19 0,19 n 10 5 6 Tabelle 19 : Optimierung für Anwender 1 Für Anwender 1 ist also der Best Effort Dienst am besten, hier ergibt sich das beste UtilityPreis-Verhältnis. Der Best Effort Dienst hat zwar die geringste Utility, doch auch dieser Wert liegt noch weit über dem vom Anwender geforderten (umin = 3). Der Preis pro Minute ist bei Best Effort am günstigsten, daher resultiert auch das beste Utility-Preis-Verhältnis. Außerdem liegt der Preis gerade unterhalb des vom Anwender festgelegten maximalen Preises (pmax = 4 Pf/min). Die geforderte Qualität läßt sich bei Best Effort nur durch den maximalen Einsatz von FEC erreichen (n = 10). Deshalb ist die entstehende Verzögerung beim Best Effort Dienst am größten. Der Optimierungsalgorithmus berücksichtigt die durch FEC auftretende Verzögerung allerdings nicht. Der Einsatz von FEC wirkt sich also nicht negativ auf das Optimierungsergebnis aus. Hätte der Anwender sich zum Beispiel für den Controlled Load Dienst entschieden, müßte er für eine nur geringfügig bessere Qualität ca. 5 Pfenning mehr pro Minute zahlen. In diesem Fall wären alleine die Mehrkosten teuerer als der maximale Preis, den der Benutzer zahlen will. Allerdings entsteht beim Controlled Load Dienst keine zusätzliche Verzögerung, da auf den Einsatz von FEC verzichtet werden kann. Dienstklasse Best Effort Controlled Load Guaranteed Rate Utility/Preis 1558,29 1203,1 1914,95 Utility 4,86965 4,79362 4,78737 Preis 18,6 Pf/min 23,8 Pf/min 15 Pf/min Bn 1 0,5 0,5 n 10 5 8 Tabelle 20 : Optimierung für Anwender 2 Der Anwender 2 will eine wesentlich bessere Qualität haben und ist auch bereit, dafür einen entsprechend höheren Preis zu bezahlen. Das beste Utility-Preis-Verhältnis ergibt sich hier bei dem Guaranteed Rate Dienst. Der Preis pro Minute ist deutlich günstiger als beim Best Effort und beim Controlled Load Dienst. Der Best Effort Dienst ist hier relativ teuer, da neben der maximalen FEC auch mit höherer Bandbreite übertragen werden muß, um die geforderte Mindestqualität (umin = 4,75) zu erreichen. Der maximal vom Anwender bezahlte Preis pro Minute liegt hier oberhalb des Preises aller Dienste. Beim Controlled Load Dienst entsteht wieder keine zusätzliche Verzögerung, weil keine FEC eingesetzt werden muß. Legt der Benutzer großen Wert auf eine geringe Verzögerung, wird er sich vermutlich für den Controlled Load Dienst entscheiden, obwohl dieser 60% teurer als der Guaranteed Rate Dienst ist. Seite 79 Kapitel 5: Untersuchung eines realen Szenarios Seite 80 Kapitel 6: Zusammenfassung und Ausblick 6 Zusammenfassung und Ausblick Es ist abzusehen, daß in den nächsten Jahren immer mehr (interaktive) Multimedia-Dienste in paketvermittelten Netzten (insbesondere dem Internet) eingesetzt werden. Anwendungen wie beispielsweise die Internet-Telefonie oder Audio/Video-Konferenzen gewinnen immer mehr an Bedeutung. Um die nötige Dienstqualität im Netz bereitzustellen, gibt es bereits entsprechende Mechanismen (Intserv/Diffserv). Da Netzressourcen nicht unbegrenzt vorhanden sind, muß der Anwender für eine garantierte Dienstqualität einen angemessenen Preis bezahlen. Es muß also ein Marktmechanismus installiert werden. Die denkbare Bandbreite reicht dabei von Dienstklassen, die zu festen Preisen angeboten werden, bis hin zu einem dynamischen Angebot-Nachfrage-Modell. Je komplexer das Preismodell wird, desto geringer wird allerdings die Akzeptanz durch den Kunden. Kein Kunde wird einen Dienst kaufen, bei dem er nicht von vornherein die anfallenden Kosten abschätzen kann. Die Tatsache, daß der Kunde selbst auf die Dienstqualität einwirken kann (zum Beispiel durch Vorwärtsfehlerkorrektur) erhöht die Komplexität zusätzlich. Die Akzeptanz des Kunden wird deutlich erhöht, wenn er bereits vor der Dienstnutzung die entstehenden Kosten berechnen kann. Der Kunde kann dann den für ihn günstigsten Dienst auswählen. Wenn die Zahl der angebotenen Dienste groß ist, muß diese Auswahl automatisiert werden. Der Anwender legt bestimmte Kriterien fest, anhand derer der für ihn beste Dienst ausgewählt wird. Im Rahmen dieser Arbeit wird ein Protokoll definiert, daß die Übertragung aller relevanter Informationen über einen angebotenen Dienst ermöglicht. Das Protokoll wurde Charging Information Protokoll (CIP) genannt. Das Protokoll läuft zwischen einem Server des Dienstanbieters und einem Client auf dem Rechner des Anwenders. Insbesondere wurde die Darstellung und Übertragung von Tarifformeln untersucht. Hierfür wurde eine geeignete Sprache, die Tariff Formula Language (TFL), entworfen. Es wurde ein Prototyp in C++ implementiert, der die wesentlichen Funktionen des Protokolls enthält. Um die automatische Dienstauswahl zu ermöglichen, wurde ein Algorithmus entwickelt, der den für den Benutzer preiswertesten Dienst auswählt. Der Benutzer gibt bestimmte Parameter wie zum Beispiel die gewünschte Qualität vor und der Algorithmus bestimmt unter Beachtung dieser Randbedingungen die für den Benutzer günstigste Dienstklasse. Der Algorithmus berücksichtigt in der ersten Stufe den Tarif und die subjektiv erreichbare Qualität (Utility). In der zweiten Stufe berücksichtigt der Algorithmus zusätzlich den Einsatz von Vorwärtsfehlerkorrektur durch den Benutzer. Der Algorithmus wurde in C++ implementiert und in den CIP Client integriert. Um den Einfluß von Vorwärtsfehlerkorrektur bei verschiedenen MultimediaAnwendungen zu untersuchen, wurde ein System entwickelt, das bereits generierte Medienströme mit Vorwärtsfehlerkorrektur schützt. Das System basiert auf einem RTP Gateway, das für einen Strom von RTP Paketen zusätzliche Redundanzpakete erzeugt. Bei der Redundanzerzeugung wurde auf die bewährten Reed-Solomon-Codes zurückgegriffen. Das RTP Gateway läßt sich in verschiedenen Szenarien mit bereits vorhandenen Multimedia-Anwendungen flexibel einsetzen. Das RTP Gateway wurde als Prototyp in C++ implementiert. Bei den Untersuchungen zur Übertragungsqualität wurden sowohl simulierte Verluste als auch eine reale Übertragungsstrecke eingesetzt. Dabei hat sich gezeigt, daß die in der Realität erreichbare Verbesserung zwar unterhalb der theoretisch berechneten liegt, aber dennoch einen deutlichen Gewinn für die Übertragungsqualität bedeutet. Seite 81 Kapitel 6: Zusammenfassung und Ausblick Es ist abzusehen, daß in den nächsten Jahren Systeme zur Dienstauswahl entwickelt und bei Dienstanbietern (Internet Service Providern) installiert werden. Diese Systeme werden ab einer gewissen Ausbaustufe auch über große Teile der im Rahmen dieser Arbeit entwickelten Funktionalität verfügen. Das hier implementierte System basiert auf grundsätzlichen Überlegungen und Ideen, die sich auf andere Produkte übertragen lassen. Die realisierten Komponenten stellen den Prototyp einer vollständigen Lösung dar. Die bei der Entwicklung des Prototypen gewonnenen Erfahrungen sind außerdem sehr hilfreich für den Aufbau eines vollständigen Systems. Seite 82 Kapitel 7: Anhang 7 Anhang 7.1 Verwendete Notation Alle Definitionen in dieser Diplomarbeit werden mit Hilfe der (Backus Nauer Form) BNF definiert. Terminalsymbole, also Symbole die nicht weiter aufgelöst werden können, sind in Anführungszeichen oder in Großbuchstaben dargestellt. Nichtterminalsymbole werden mit Kleinbuchstaben dargestellt. Es werden die unter C üblichen \-Escape Codes verwendet. Die grundlegenden Terminalsymbole sind: Symbol LEER ZIFFER ZAHL ZEICHEN WS Bedeutung Das leere Wort Eine einzelne Ziffer Reelle Zahl ASCII 8-bit Zeichen White Space Tabelle 21 : Grundlegende Terminalsymbole 7.2 CIP Protokollablauf C->S: REGISTER cip:@farpoint.cs.tu-berlin.de:4000 CIP/0.1 From: cip:[email protected]:4000 Transaction-ID: 2350908038:[email protected] Mode: push S->C: CIP/0.1 200 OK From: cip:@farpoint.cs.tu-berlin.de:4000 Transaction-ID: 2350908038:[email protected] Update-Frequency: 20 S->C: INFO cip:[email protected]:4000 CIP/0.1 From: cip:@farpoint.cs.tu-berlin.de:4000 Transaction-ID: 745851385:@farpoint.cs.tu-berlin.de Count: 3 Iseq: 46456 Service: id="10", name="best effort" Vendor: id="23", name="NEW-TEL INC." Currency: DM Parameter: D="0.0002" Formula: D*r*t Guarantees: loss="0.25", delay="-1", jitter="-1" S->C: INFO cip:[email protected]:4000 CIP/0.1 From: cip:@farpoint.cs.tu-berlin.de:4000 Transaction-ID: 745851385:@farpoint.cs.tu-berlin.de Count: 3 Iseq: 46457 Service: id="11", name="controlled load" Seite 83 Kapitel 7: Anhang Vendor: id="23", name="NEW-TEL INC." Currency: DM Parameter: A="0.001", C="0.0004", EE="0.05" Formula: (A+C*EE)*r*t Guarantees: loss="1e-05", delay="-1", jitter="-1" Reservation: RSVP/IntServ S->C: INFO cip:[email protected]:4000 CIP/0.1 From: cip:@farpoint.cs.tu-berlin.de:4000 Transaction-ID: 745851385:@farpoint.cs.tu-berlin.de Count: 3 Iseq: 46458 Service: id="12", name="guaranteed rate" Vendor: id="23", name="NEW-TEL INC." Currency: DM Parameter: C="0.0004" Formula: C*r*t Guarantees: loss="0.05", delay="-1", jitter="-1" Reservation: RSVP/IntServ C->S: CIP/0.1 200 OK From: cip:[email protected]:4000 Transaction-ID: 745851385:@farpoint.cs.tu-berlin.de Iseq: 46456 46457 46458 C->S: SELECT cip:@farpoint.cs.tu-berlin.de:4000 CIP/0.1 From: cip:[email protected]:4000 Transaction-ID: 2432299901:[email protected] Service: id="10", name="best effort" Endpoint: darkstar.cs.tu-berlin.de:5000 S->C: CIP/0.1 200 OK From: cip:@farpoint.cs.tu-berlin.de:4000 Transaction-ID: 2432299901:[email protected] C->S: CANCEL cip:@farpoint.cs.tu-berlin.de:4000 CIP/0.1 From: cip:[email protected]:4000 Transaction-ID: 3273410552:[email protected] S->C: CIP/0.1 200 OK From: cip:@farpoint.cs.tu-berlin.de:4000 Transaction-ID: 3273410552:[email protected] 7.3 TFL Tarifformeln Hier werden die Tarifformeln, die in Abbildung 7 benutzt werden, beschrieben: Der erste Tarif ist ein zeit- und volumenabhängiger Tarif (Basisformel). p = sc + Seite 84 v t ⋅ p v + ⋅ pt uv ut Kapitel 7: Anhang TFL: p = sc + (v/vu)*pv + (t/tu)*pt Der zweite Tarif ist ein volumenabhängiger Tarif. Die Wurzel über das gemessene Volumen bewirkt eine Art Rabatt, je größer das Volumen wird. p = sc + v uv ⋅ pv TFL: p = sc + (sqrt(v)/vu)*pv Der dritte Tarif ist zeit- und volumenabhängig, nach 20 s und nach 40 s wird ein Rabatt gewährt. Diese Zeitkonstanten wurden hier so klein gewählt, um den Rabatt schnell sichtbar werden zu lassen. In der Realität könnte man zum Beispiel einen Rabatt nach zehn Minuten gewähren und einen zusätzlichen Rabatt nach 20 Minuten. p = sc + (min{t ,20} + max{min{t − 20,20},0} ⋅ 0,4 + max{t − 40,0} ⋅ 0,1) v ⋅ pt ⋅ pv + uv ut TFL: p = sc + (v/vu)*pv + ((min(t,20)+max(min(t-20,20),0)*0.4+max(t-40,0)*0.1)/tu)*pt 7.4 Meßwerte Verlustrate 0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 1,0 Ohne FEC 0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 1,0 RS 10/5 - Theorie 0 8,9092E-05 0,00391629 0,0296426 0,10662707 0,25 0,44005939 0,63083394 0,78433485 0,89994219 1,0 Tabelle 22 : RS 10/5 – Theorie RS 10/5 – Unabhängige Verluste Verlustrate Effektive Verlustrate 0 0 0,10052 0,00004 0,19778 0,00304 0,29908 0,02932 0,3968 0,10526 0,50344 0,26286 0,59806 0,43518 RS 10/5 – Burstverluste Verlustrate Mittlere Burstlänge 0 0 0,09826667 2 0,19610417 2 0,29385417 2,5 0,40102083 3 0,49266667 3,5 0,59679167 4,5 Effektive Verlustrate 0 0,00122222 0,0134375 0,051375 0,1545 0,271875 0,44322917 Seite 85 Kapitel 7: Anhang 0,6975 0,8 0,9 1,0 0,62382 0,78433 0,89994 1,0 0,7 0,8 0,9 1,0 ohne Messung 0,63083 ohne Messung 0,78433 ohne Messung 0,89994 1,0 Tabelle 23: RS 10/5 - Simulierte Verluste RS 10/5 – Silence Detection Verlustrate Effektive Verlustrate 0 0 0,09757143 0,001 0,20040816 0,00769388 0,2982449 0,03538776 0,39836735 0,11295918 0,49767347 0,26146939 0,59361224 0,44140816 0,7 0,63083 0,8 0,7843 0,9 0,8999 1,0 1,0 RS 10/5 – Reale Strecke Verlustrate Effektive Verlustrate 0 0 0,14526471 0,00935294 0,23275172 0,03098621 Tabelle 24: RS 10/5 - Silence Detection & Reale Strecke 7.5 Man Pages 7.5.1 CIP Client Der CIP Client wird mit den folgenden Parametern gestartet: cip_client -s <server addr>:<port> -u <pull interval> -U <util def> -C <constraint def> server addr port pull interval util def Adresse des CIP Servers (Name oder IP-Nummer) Portnummer des CIP Servers Der Client fordert die Dienstklasseninformationen in regelmäßigen Abständen beim Server an (pull mode). Wird diese Option nicht angegeben, sendet der CIP Server die Informationen mit seinem Update Intervall (push mode). Definition der angewendeten Utility-Funktion. Die ASCII Datei hat das folgende Format: <param1>=<ausdruck1> # <kommentar> .... <paramN>=<ausdruckN> u=<utility funktion> Alle Ausdrücke müssen in TFL Syntax angegeben werden. constraint def Definition der Randbedingungen des Benutzers. Die ASCII Datei hat das folgende Format: <umin> <pmax> Seite 86 Kapitel 7: Anhang <k> <nmax> <bmax> Kommentare werden mit einem # am Anfang der Zeile eingeleitet. Bmax ist die maximale Banbreite in bytes/s, also die Bandbreite bei bn=1. Beispiel: cip_client -s farpoint:4000 -U ../opt/functions/c5_util.txt -C usr_con/c5_usr1.txt 7.5.2 CIP Server Der CIP Server wird mit den folgenden Parametern gestartet: cip_server -s <service descr> -u <update freq> -p <port> service descr Diese ASCII Datei enthält die angebotenen Dienstklassen. Das Format entspricht dem bei den CIP INFO Nachrichten verwendeten. Kommentare werden mit einem # am Anfang der Zeile eingeleitet. update freq Das Intervall, in dem der CIP Server INFO Nachrichten an die Clients schickt (push mode). port Portnummmer des CIP Servers. Beispiel: cip_server -s serv_descr/c5_demo.txt -u 20 -p 4000 7.5.3 RS Performance Messung Mit dem Programm rs_test kann die Performance des RS Kodierers ermittelt werden: rs_test [-p error-prob] [-s packet-size] [-k k-value] [-n n-value] error-prob packet-size k-value n-value Die Paket-Verlustrate im Netz. Die Paketgröße in bytes. K N Beispiel: rs_test -p 0.1 -s 1024 -k 5 -n 10 Reed-Solomon Code is (10,5) using 8 bit symbols Enng time: 1.464ms Symbol Errors: 1024 Packet errors: 1 Lost Packets Network Packet Index: 1 Decoding time: 0.403ms Error Correction successfull Das Programm zeigt die Kodier- und Dekodierzeit sowie die Anzahl der verlorengegangenen Pakete und deren Index an. 7.5.4 Optimierungsalgorithmus Der Optimierungsalgorithmus kann mit dem Programm opt_test getestet werden: opt_test -T <tariff file> -U <utility file> -p <max price> -u <min utility> -l <loss prob> -k <K> -n <max N> -b <max bandw> -f tariff file Diese ASCII Datei enthält den zu verwendenden Tarif und Seite 87 Kapitel 7: Anhang hat das folgende Format: <param1>=<ausdruck1> # <kommentar> .... <paramN>=<ausdruckN> p=<preis funktion> Alle Ausdrücke müssen in TFL Syntax angegeben werden. utility file Diese ASCII Datei enthält die Definition der UtilityFunktion. Sie hat das gleiche Format wie in 7.5.1 beschrieben. max price Der maximal zu zahlende Preis. min utility Die minimale Qualität. loss prob Die Paket-Verlustrate im Netz. K K max N Der maximale Wert für N. max bandw Die maximale Bandbreite in bytes/s, d.h. die Bandbreite bei bn=1. -f Wenn dieser Schalter gesetzt ist, wird die Optimierung mit der Downhill Simplex Methode durchgeführt. Anderenfalls wird der Brute Force Algorithmus verwendet. Die Downhill Simplex Methode ist wesentlich schneller, liefert aber nicht immer das korrekte Ergebnis (globales Maximum). Beispiel: opt_test -T functions/c5_be.txt -U functions/c5_util.txt -p 1 -u 4 -l 0.1 -k 5 -n 10 -b 8000 time: 1.95365 eval: 606 bn=0.19, n=7 : upr=10018, util=4.16372, price=0.000415625 Das Programm liefert außerdem die Rechenzeit (time) und die Anzahl der Funktionsaufrufe (eval). 7.5.5 RTP Gateway Das RTP Gateway wird mit den folgenden Parametern gestartet: rtp_gw -l <address>:<port>/<ttl> -r <address>:<port>/<ttl> -c <ctrl port> -n <number> -k <number> -l <adress>:<port> <ttl> -r <address>:<port> <ttl> Seite 88 Die Adresse und Portnummer des lokalen Rechners. Die Adresse ist entweder der Name oder die IPNummer. Die TTL bei einer Multicastadresse. Die Adresse und Portnummer des Gateways auf der anderen Seite (remote). Die Adresse ist entweder der Name oder die IP-Nummer. Die TTL bei einer Multicastadresse. Kapitel 7: Anhang ctrl port Der Port auf dem das Gateway Kontroll Nachrichten sendet oder empfängt. n Der Startwert für N (bei allen SSRC) k Der Startwert für K (bei allen SSRC) Beispiel: rtp_gw -l rockmaster:4000/1 -r winnie:5000/4 -c 6000 -n 10 -k 5 In diesem Beispiel ist rockmaster der lokale Rechner auf dem die Audio/Video Anwendung läuft. Die mit FEC geschützten Medienpakete werden an das entfernte Gateway auf winnie gesendet. Das Gateway wird mit dem Programm rtp_gw_ctrl kontrolliert: rtp_gw_ctrl -c <adress>:<port> -s <ssrc> -n <number> -k <number> -c <address>:<port> Adresse und Portnummer des zu kontrollierenden Gateways. Die Adresse ist entweder der Name oder die IP-Nummer. Die Portnummer muß beim Gateway mit der -c Option angegeben werden. ssrc Die SSRC Nummer deren RS Parameter geändert werden sollen. Das Gateway liefert die entsprechenden QoS Informationen für alle bekannten SSRC. n N k K Beispiel: rtp_gw_ctrl –c winnie:6000 –s 435896984 –n 10 –k 5 Wenn nur die QoS Informationen ausgelesen und die RS Parameter nicht geändert werden sollen, kann für n und der k der gleiche (beliebige) Wert angegeben werden. Seite 89 Kapitel 7: Anhang Seite 90 Kapitel 8: Literaturverzeichnis 8 Literaturverzeichnis [BeYF98] Y. Bernet, R. Yavatkar, P. Ford, F. Baker, L. Zhang: „A Framework for Endto-End QoS Combining RSVP/Intserv and Differentiated Services“, IETF Internet Draft, <draft-bernet-intdiff-00.txt> (March, 1998) [Bier92] Ernst W. Biersack: „A Simulation Study of Forward Error Correction in ATM Networks“, In Proceedings of SIGCOMM 92 (1992) [Bolo93] Jean-Chrysostome Bolot: „Characterizing End-to-End Packet Delay and Loss in the Internet“, Journal of High-Speed Networks, vol. 2, no. 3, pp. 305-323 (December 1993) [BoFT98] Jean Bolot, Sacha Fosse-Parisis, Don Towsley: „Adaptive FEC-Based Error Control for Interactive Audio in the Internet“, to appear in IEEE Infocom ’99 (June 1998) [BrMR98] Brownlee, Mills, Ruth: „Traffic Flow Measurement: Architecture“, IETF Internet Draft, <draft-ietf-rtfm-architecture-04.txt> (September 1998) [Brow98] N. Brownlee: „Traffic Flow Measurement: Meter MIB“, IETF Internet Draft, <draft-ietf-rtfm-meter-mib-06.txt>, work in progress (September 1998) [CAN_D5] CANCAN AC014 Consortium: ATM Charging Schemes, ACTS Project AC014 – CANCAN: „Contract Negotiation and Charging in ATM Networks“, Deliverable D5 (Oktober 1996) [CaHS98] G. Carle, F. Hartanto, M. Smirnov, T. Zseby: „Charging and Acounting Architecture for QoS-enhanced IP services“, GMD FOKUS (1998) [CaMM98] Massimiliano Canosa, Martino De Marco, Alessandro Maiocchi: „Traffic accounting mechanism for Internet Integrated Services“, CEFRIEL, Politecnico di Milano (1998) [CaRu98] Pat R. Calhoun, Allan C. Rubens: „DIAMETER Base Protocol“, IETF Internet Draft, <draft-calhoun-diameter-07.txt> (November 1998) [CaSZ98] Georg Carle, Michael Smirnov, Tanja Zseby: „Charging and Acounting Architecture for IP Multicast Integrated Services over ATM“, 4th International Symposium on Interworking (Interworking ’98), Ottawa, Canada (Juli 1998) [CaZW98] Georg Carle, Tanja Zseby, Adam Wolisz: „Lastabhängige Tarifierung von IP Multicast-Diensten mit Dienstgüteunterstützung“, GMD FOKUS (1998) [Clark96] David D. Clark: "Combining Sender and Receiver Payments in the Internet", Telecommunications Research Policy Conference, M.I.T. (Oktober 1996) [ETSI98] H. Orlamünder (Editor): "Parameters and Mechanisms for Charging in IP based Networks [Network Aspects], TR/NA-080301 V1.0.4 (1998-06), ETSI Working Group NA8 Technical Document (Juni 1998) Seite 91 Kapitel 8: Literaturverzeichnis [GGPR96] Leonadis Georgiadis, Roch Guerin, V. Peris, R. Rajan: „Efficient Support of Delay and Rate Guarantees in an Internet“, Proceedings of ACM SIGCOMM ’96, Seiten 106-116 (August 1996) [GrSt85] John G. Gruber, Leo Strawczynski: „Subjective Effects of Variable Delay and Speech Clipping in Dynamically Managed Voice Systems“, IEEE Transactions on Communications, Vol. COM-33, No. 8 (August 1985) [GuCW98] C. Guilemot, P. Christ, S. Wesner: „RTP Generic Payload with Scaleable & Flexible Error Resiliency“, IETF Internet Draft, draft-guillemot-genrtp-00.txt (November 1998) [HaCB98] M. Handley, J. Crowcroft, C. Bormann, J. Ott: „The Internet Multimedia Conferencing Architecture“, IETF Internet Draft, <draft-ietf-mmusic-confarch00.txt> (January 1998) [HaSS98] Handley, Schulzrinne, Schooler, Rosenberg: „SIP: Session Initiation Protocol“, IETF Internet Draft, draft-ietf-mmusic-sip-07.txt (July 1998) [HSE97] Shai Herzog, Scott Shenker and Deborah Estrin: „Sharing the Cost of Multicast Trees: An Axiomatic Analysis“, IEEE/ACM Transactions on Networking, 5(6):847-860 (Dezember 1997) [KSWS99] Martin Karsten, Jens Schmitt, Lars Wolf and Ralf Steinmetz: „Cost and Price Calculation for Internet Integrated Services“, KiVS ’99 (Februar 1999) [LoLe98] Nguyen Tuong Long Le: „Charging and Acounting Protocol for IP Multicast over ATM with QoS Support“, Department of Telecommunications Engineering, Technical University of Berlin (August, 1998) [McEn97] A Techno-Economic Analysis of Selected ATM Charging Schemes of Aggregate LAN Interconnect, IEEE Colloquium on "Charging for ATM", London, U.K. (November 1997) [NiBl98] K. Nichols, S. Blake: „Differentiated Services Operational Model and Definitions“, IETF Internet Draft, draft-nichols-dsopdef-00.txt (Februar 1998) [NoBT97] Jörg Nonnenmacher, Ernst Biersack, Don Towsley: „Parity-Based Loss Recovery for Reliable Multicast Transmission“, Institut Eurecom/University of Massachusetts (October 1997) [Noll96] Peter Noll: „Nachrichtenübertragung I“, Institut für Fernmeldetechnik, Technische Universität Berlin (1996) [PaWa98] Kihong Park, Wei Wang: „AFEC: An Adaptive Forward Error Correction Protocol for End-to-End Transport of Real-Time Traffic“, Proc. International Conference on Computer Communications and Networks (1998) Seite 92 Kapitel 8: Literaturverzeichnis [PFTV88] William H. Press, Brian P. Flannery, Saul A. Teukolsky, William T. Vetterling: „Numerical Recipes in C – The Art of Scientific Computing“, Cambridge University Press, Cambridge (1988) [ReIz97] D. Reininger, R. Izmailov: „Soft Quality of Service with VBR+ Video“, International Workshop on Audio-Visual Services over Packet Networks, AVSPN ’97, Aberdeen, Scotland (September 1997) [ReRO98] D. Reininger, D. Raychaudhuri, M. Ott: „Market Based Bandwidth Allocation Policies for QoS Control in Broadband Networks“, C&C Research Laboratories, NEC USA (1998) [Rett97] Charles T. Retter: „An Intuitive Introduction to Reed-Solomon Codes“, http://homepage.arl.mil/~retter/coding.html (1997) [RFC1272] C.Mills, D.Hirsh, G. Ruth: „Internet Accounting: Background“, RFC 1272, IETF (November 1991) [RFC1633] R. Braden, D. Clark, S. Shenker: „Integrated Services in the Internet Architecture: An Overview“, RFC 1633, IETF (Juni 1994) [RFC1738] T. Berners-Lee, L. Masinter, M. McCahill: „Uniform resource locators (URL)“, RFC 1738, IETF (Dezember 1994) [RFC1889] H. Schulzrinne, S. Casner, R. Frederick, V. Jacobson: „RTP: A Transport Protocol for Real-Time Applications“, RFC 1889, IETF (Januar 1996) [RFC1890] H. Schulzrinne: „RTP Profile for Audio and Video Conference with Minimal Control“, RFC 1890, IETF (Januar 1996) [RFC2063] N. Brownlee, C. Mills,, G. Ruth: „Traffic Flow Measurement: Architecture“, RFC 2063, IETF (Januar 1997) [RFC2198] C. Perlins, I. Kouvelas et al.: „RTP Payload for Redundant Audio Data“, RFC 2198, IETF (September 1997) [RFC2205] R. Braden, L. Zhang, S. Berson, S. Herzog and S. Jamin: „Resource Reservation Protocol (RSVP), RFC 2205, IETF (September 1997) [RiRi98] Martyn Riley, Iain Richardson: „An Introduction to Reed-Solomon codes: Principles, architecture and implementation“, 4i2i Communications Ltd., http://www.4i2i.com (September 1998) [Rizzo97] Luigi Rizzo: "Effective Erasure Codes for Reliable Computer Communication Protocols", ACM Computer Communication Review, Volume 27, pp. 24-36 (April 1997) [RöCa97] Stephan Röösli, Georg Carle: „Multicast Error Control for Audio-Visual Services (MECAVS), Parameters & Module Configuration“, Institut Eurecom (September 1997) Seite 93 Kapitel 8: Literaturverzeichnis [RoSc98] J. Rosenberg, H. Schulzrinne: „An RTP Payload Format for Generic Forward Error Correction“, IETF Internet Draft, draft-ietf-avt-fec-04.txt (November 1998) [RoSc98-2] J. Rosenberg, H. Schulzrinne: „An RTP Payload Format for Reed Solomon Codes“, IETF Internet Draft, draft-ietf-avt-reedsolomon.txt (November 1998) [RuKT98] Dan Rubenstein, Jim Kurose, Don Towsley: „Real-Time Reliable Multicast Using Proactive Forward Error Correction“, Technical Report 98-19, Department of Computer Sciences, University of Massachusetts (March 1998) [Ryan98] William E. Ryan: „A Turbo Code Tutorial“, New Mexico State University, LasCruces, http://www.ee.virginia.edu/CSL/turbo_codes/overview.html (Juni 1998) [San98] H. Sannek: „Adaptive Loss Concealment for Internet Telephony Applications“, Proceedings INET ’98, Geneva/Switzerland (Juli 1998) [SaCa98] H. Sannek: „Predictive Loss Pattern Queue Managment for Internet Routers“, Proceedings SPIE Vol. 3529A, Boston, MA (November 1998) [WaKS97] D. Walker, F. P. Kelly, J. Solomon: „Tariffing in the New IP/ATM Environment“, Telecommunications Policy, Volume 21 pp. 283-295 (Mai 1997) Seite 94