Zusammenfassung

  • David Cheritons RFC 1045 vom Februar 1988 beschrieb VMTP als experimentelles Transportprotokoll für Anfrage-Antwort-Transaktionen wie entfernte Prozeduraufrufe. Client, eine 32-Bit-Transaktionsnummer und ein Weiterleitungszähler kennzeichneten den Vorgang; Serverzustand erkannte doppelte Anfragen.
  • Bei einer als idempotent markierten Antwort schickte der Client die Anfrage erneut, und der Server erzeugte durch wiederholte Arbeit eine neue Antwort. Bei einem zu bewahrenden Ergebnis musste er eine Kopie behalten oder auf Bestätigung warten. Eine neue Uhrzeit kann nützlicher sein als die alte Antwort aus dem Aktenschrank.

Das Wort „noch einmal“ überspringt gern die wichtigste Frage: Was ist beim ersten Mal bereits passiert? In RFC 1045 entwarf David Cheriton das Versatile Message Transaction Protocol für Anfrage und Antwort über einen unzuverlässigen Datagrammdienst. Entfernte Prozeduraufrufe gehörten zu den vorgesehenen Anwendungen. Ein Server konnte seine Arbeit erledigt haben, während die Antwort als verlorenes Paket endete. Sobald die Anfrage wiederkam, musste VMTP entscheiden, ob die Arbeit wiederholt werden durfte.

Die Entscheidung begann mit einem Aktenzeichen aus drei Teilen. Innerhalb einer Entitätsdomäne identifizierten Client, Transaction und ForwardCount den Vorgang. Die 32-Bit-Transaktionsnummer startete bei Erzeugung des Clients mit einem Zufallswert und stieg normalerweise nach jedem Vorgang. Der vier Bit breite ForwardCount blieb null, solange keine Weiterleitung stattfand. Ein Server führte Zustandsaufzeichnungen pro Client und erkannte dieselben Koordinaten als Duplikat. Die Nummer entschied also darüber, ob ein zweiter Besuch eine neue Aufgabe oder eine verspätete Kopie war.

Auch die Kartei hatte eine Haltbarkeit. Der Server bewahrte den Zustand gewöhnlich noch nach dem Senden einer Antwort auf, um verspätete Anfragekopien abzufangen. Fehlte der Eintrag, konnte er das Verwaltungsmodul des Clients mit Probe nach dessen aktuellem Transaktionsstand fragen. Er konnte eine Anfrage als neu einordnen, wenn seine Aufbewahrung die maximale Paketlebensdauer samt Wiederholungszeit abdeckte und der Server nicht neu gestartet war. Oder er konnte einen nachweislich gefahrlos wiederholbaren Vorgang ausführen. Hinter dem harmlosen Knopf „Erneut versuchen“ standen Fristen, Neustarts und ein Urteil über den Arbeitsinhalt.

Bei der idempotenten Antwort gewann die Uhr. VMTP bewahrte die alte Antwort nicht auf. Der Client sendete die Request erneut; der Server reichte die Anfrage der jüngsten Transaktion an die Anwendung weiter und ließ den Vorgang neu ausführen. Ältere verspätete Anfragen wurden verworfen. Cheriton nannte die Frage nach der aktuellen Uhrzeit: Wer nochmals hinsieht, liefert eine frischere Auskunft als der gewissenhafte Archivar mit dem Antwortzettel von vorhin. Der Weg zum Aktenschrank war hier eine Umleitung in die Vergangenheit.

Für ein Ergebnis, das genau so erhalten bleiben musste, galt die andere Rechnung. VMTP hatte die Antwort aufzubewahren, als echte Kopie oder per Copy-on-Write, oder den Server bis zur Bestätigung aufzuhalten. Das kostet Speicher oder Zeit. Die Uhr kann man erneut ablesen; eine Änderung an einem Konto oder Register darf nicht unbesehen ein zweites Mal stattfinden. Die Bedeutung der Anwendungstätigkeit bestimmte, welche Seite des Schalters zuständig war.

VMTP sparte ebenfalls bei den Paketkosten. Unter geringen Verlusten konnte eine Wiederholung zunächst nur den Steuerblock senden. Fehlende Nutzdaten ließen sich anschließend gezielt anfordern. Eine spätere Anfrage konnte im Protokollsinn ältere Antworten erledigen und Speicher freigeben. Cheriton behandelte Speicherkapazität, übertragene Bytes und erneute Rechenarbeit als gemeinsame Bilanz. Wer an einer Stelle spart, trägt die Kosten an einer anderen.

Die Aktenordner-Uhr-Geschichte hat Witz, weil perfekte Archivarbeit bei einer Uhrzeit zur schlechteren Auskunft führen kann. Ihr Ernst liegt in der anderen Hälfte: Wer eine wirksame Handlung fälschlich als wiederholbar einstuft, lässt sie womöglich zweimal ausführen. VMTP brachte Ordnung in Identität, Duplikate und den jüngsten zulässigen Wiederholungsversuch. Die Anwendung musste wissen, was ihre Arbeit im wirklichen System bewirkte.