Zusammenfassung

  • RFC 3388 gab SDP-Medienzeilen lokale Identitäten und verband sie zu ausführbaren Beziehungen, ließ diese Beziehungen aber nur mit vollständigen und über Offer/Answer stabilen Namen gelten.
  • Die Antwort war ein Annahmebeleg: Sie durfte dieselbe Mitgliedschaft oder eine Teilmenge zurückgeben, jedoch weder abgelehnte Zeilen behalten noch ohne neuen Offer eine eigene Gruppe beginnen.

Ein Offer beschreibt drei Medienzeilen als Gruppe. Der Answerer lehnt eine davon mit Port null ab. Er kann die beiden übrigen Namen als Teilmenge zurückgeben. Lässt er jedoch den Namen der abgelehnten Zeile stehen, behauptet die Antwort eine Beziehung zu einem Medium, das für diese Sitzung gerade nicht angenommen wurde.

RFC 3388 verlangte deshalb, abgelehnte Mitglieder aus der zurückgesandten Gruppe zu entfernen. Maßgeblich für die Sitzung war nicht allein der Wunsch im Offer, sondern die Mitgliedschaft, die der Answer bestätigte. Das Protokoll behandelte Beziehungen wie Handlungen, für die ein positiver Beleg nötig war.

Der Answerer durfte umgekehrt keine neue Gruppierungsanforderung in seine Antwort schreiben. Nach einem Offer und einem Answer fehlte eine weitere Nachricht, in der der ursprüngliche Offerer diese neue Beziehung bestätigen konnte. Wollte der Answerer sie einführen, musste er später selbst ein neues Offer senden. Die Regel privilegierte nicht eine Seite; sie band Ausführung an eine Nachrichtensequenz mit beobachtbarer Zustimmung.

Das im Dezember 2002 auf dem Standards Track veröffentlichte RFC 3388 schloss damit eine Lücke im Session Description Protocol. SDP konnte mehrere m=-Zeilen für Audio, Video oder andere Medien aufzählen. Es konnte jedoch nicht standardisiert ausdrücken, welche davon gemeinsam wiedergegeben werden sollten oder welche Ziele zusammen eine logische Medieninstanz bildeten.

Die Erweiterung fügte eine Identität und eine Beziehung hinzu. a=mid gab jeder Medienzeile einen innerhalb der Sitzungsbeschreibung eindeutigen Token. a=group führte solche Tokens unter einer registrierten Semantik zusammen. Die ersten Semantiken waren LS für Lippensynchronisation und FID für Flow Identification.

LS war keine bloße Beschreibung. Die Anwendung sollte den ursprünglichen zeitlichen Zusammenhang wiederherstellen und die Wiedergabe synchronisieren. Bei RTP konnten RTCP-Informationen unterschiedliche Zeitstempel auf eine gemeinsame Uhr beziehen; andere Transporte brauchten einen eigenen Mechanismus. Die Gruppe bezeichnete die Pflicht, lieferte aber keine Uhrenmessung und bewies nicht die beim Nutzer erreichte Synchronität.

FID wirkte auf die Übertragung. Ein mobiles Endgerät konnte für verschiedene Codecs unterschiedliche Ports und Funk-Bearer benötigen. DTMF-Ereignisse konnten an einen Anwendungsserver gehen, während Sprache ein anderes Gerät erreichte. Unterstützten mehrere Gruppenmitglieder den aktiven Codec, musste der Sender Kopien an die entsprechenden RTP-Sitzungen schicken.

Damit wurde eine Mitgliedschaft zur Weiterleitungsanweisung. Ein manipuliertes Gruppenattribut konnte Kopien an ein beliebiges Ziel lenken, warnte der Sicherheitsabschnitt. Signalisierungsintegrität schützte also nicht nur die Lesbarkeit eines Dokuments, sondern die Autorität der darin beschriebenen Kanten.

Diese Autorität verlangte einen geschlossenen Namensraum. Jeder mid musste eindeutig sein. Verwies eine Gruppe auf einen unbekannten Token, wurde die gesamte Gruppenzeile ignoriert. Und sobald eine Beschreibung irgendeine Gruppierung nutzte, musste jede m=-Zeile einen mid tragen, selbst wenn sie keiner bestimmten Gruppe angehörte.

Eine unbenannte Zeile konnte tatsächlich unabhängig sein. Sie konnte aber ebenso aus einer abgeschnittenen Beschreibung, einem Generatorfehler oder einem verlorenen Join-Schlüssel stammen. Der Empfänger konnte diese Entstehungsgeschichten aus dem Rest nicht unterscheiden. Deshalb setzte ein einziges fehlendes Label alle Gruppen außer Kraft. Die Basismedien blieben nutzbar; nur die unvollständige Beziehungsstruktur verlor ihre Wirkung.

Offer/Answer verlangte außerdem Stabilität. RFC 3264 ordnete die erste m=-Zeile des Offers der ersten im Answer zu, danach die zweite der zweiten. mid ersetzte diese ordinale Identität nicht. Der Name einer Antwortposition musste zum Namen der entsprechenden Offer-Position passen. Wurde er geändert, waren sämtliche mid- und group-Attribute zu ignorieren.

Das verhinderte eine scheinbar hilfreiche Reparatur. Vertauschte Namen konnten wie ein offensichtlicher Fehler aussehen. Würde die Anwendung ihnen folgen, schriebe sie jedoch die durch die Zeilenposition ausgehandelte Zuordnung um. Würde sie die Positionen behalten und trotzdem gruppieren, nähme sie widersprüchliche Beziehungen an. Das RFC erhielt die ältere Verhandlung und entzog der Zusatzschicht die Autorität.

Auch unbekannte Gegenstellen blieben sichtbar. RFC 3388 definierte keinen SIP-Require-Header. Ein Teilnehmer, der group und mid nicht kannte, durfte die Attribute nach den normalen SDP-Regeln ignorieren. Er konnte FID-Mitglieder als unabhängige Ströme behandeln, als Mixer arbeiten, die Sitzung ablehnen oder einen einfacheren neuen Versuch auslösen.

Ein erfolgreicher SIP-Dialog belegte daher nur, dass die Grundsitzung zustande gekommen war. Er war keine Quittung dafür, dass LS oder FID verstanden und ausgeführt wurden. Kompatibilität bedeutete Fortsetzbarkeit, nicht semantische Gewissheit.

Das ursprüngliche RFC ließ eine Medienzeile an Gruppen unterschiedlicher Semantik teilnehmen, aber nicht an mehreren Gruppen derselben Semantik. RFC 5888 ersetzte RFC 3388 später und hob diese Beschränkung nach Implementierungserfahrung auf. Das war eine wichtige Trennung: vollständige Identität blieb Sicherheits- und Konsistenzvoraussetzung; eine zu enge Kardinalität war es nicht.

Lu Hengs Running-Code Primacy erklärt die passende Reichweite der gemeinsamen Regel. Eindeutigkeit, vollständige Abdeckung, existierende Referenzen, stabile Zuordnung und bestätigte Teilmengen lassen sich deterministisch an jedem Endpunkt prüfen. Das gemeinsame Protokoll musste weder die interne Medienarchitektur noch den Synchronisationsalgorithmus oder die Fallback-Politik zentral festlegen.

Minimum Initial Specification ergänzt diese Arbeitsteilung. Der Standard sollte Join-Key, registrierte Bedeutung und Annahmegrenze koordinieren. Uhrenrückgewinnung, Codec-Verarbeitung und spätere Produktentscheidungen konnten lokal bleiben. Ein Register vereinheitlichte Begriffe, ohne zur Quelle der Laufzeitwahrheit zu werden.

Historisch machte RFC 3388 damit einen Unterschied sichtbar, der in vielen Systemen verloren geht: gültige Einzelbeschreibungen ergeben noch keine gültige Beziehungsstruktur. Die Medienzeilen konnten einzeln korrekt sein, während die Beziehung nicht ausgeführt werden durfte. Eine Teilmenge durfte gelten, wenn sie positiv bestätigt war. Eine plausible Ergänzung durfte es nicht.

Ein fehlendes Label annullierte jede Gruppe, weil das Nichtausführen der Beziehung weniger Schaden anrichtete als eine richtige Anweisung auf das falsche Medium. Identität und Annahme waren nicht Metadaten nach der Entscheidung. Sie waren die Bedingungen, unter denen die Entscheidung überhaupt handeln durfte.

Quellen