Sequenznummer
# Sequenznummer

Sequenznummern werden bei zuverlässigen Netzwerkprotokollen (wie zum Beispiel TCP) verwendet, um eine vollständige Übertragung in der richtigen Reihenfolge und ohne Duplikate (also einen Datenstrom) zu realisieren. Weitere Anwendungen finden Sequenznummern bei Datenbanken und Betriebssystemen zum Absichern von Atomaren Operationen.

Sequenznummern sind eine triviale Form der Logischen Uhr: Sie bietet ein Mittel, mit dem Nachrichten gemäß ihrer Kausalität sortiert werden können. Dabei wird allerdings nur ein Akteur berücksichtigt – ist die Kausalität für das Gesamtsystem aller Kommunikationspartner entscheidend (wie bei manchen Reliable Multicast Protokollen), so müssen komplexere Logische Uhren verwendet werden, wie die Lamport-Uhr oder Vektoruhren.

## Allgemeines Schema

Aus den Sequenznummern der vorangegangenen Pakete weiß der Empfänger, welche Sequenznummer das nächste ankommende Paket haben sollte. Wird eine Nachricht mit niedrigerer Sequenznummer empfangen, so wird diese verworfen, denn sie wurde schon einmal empfangen. Wird eine Nachricht mit höherer Sequenznummer empfangen, so wird diese und alle folgenden Nachrichten mit noch höherer Sequenznummer in einem Zwischenspeicher abgelegt. Erst wenn die Nachricht mit der richtigen Sequenznummer angekommen ist, werden die Nachrichten aus dem Zwischenspeicher verarbeitet.

Kommt innerhalb einer gewissen Zeit keine Nachricht mit der gewünschten Sequenznummer an, so wird der Sender gebeten, diese Nachricht noch einmal zu schicken. Kommt nach einer gewissen Anzahl von Rückfragen die gewünschte Nachricht noch immer nicht an, so bricht die Kommunikation mit einer Fehlermeldung ab.

## Berechnung des Sequenznummernraumes

Da man den Overhead durch die Sequenznummern im Paketkopf gering halten möchte, bestimmt man die Größe des Sequenznummernraumes durch folgende Formel: $2^{n}\geq \left(2MPL+T+A\right)\cdot R$. Erklärung der Parameter:

* n bezeichnet die Zahl der Bits des Sequenznummernraumes
* MPL die Maximum Packet Lifetime in Sekunden
* T die maximale Zeit in der eine Sendewiederholung durchgeführt wird
* A die maximale Zeit bevor der Empfänger nach Erhalt der Daten eine Quittung sendet
* R die maximale Übertragungsrate des Senders (Pakete / Sekunde).
