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. Das allgemeine Schema ist folgendes:
- Der Empfänger "weiß", welche Sequenznummer als nächstes ankommen sollte.
- Wird eine Nachricht mit zu niedriger Sequenznummer empfangen, so wird diese verworfen (denn sie wurde schon einmal empfangen)
- Wird eine Nachricht mit zu hoher Sequenznummer empfangen, so wird diese und alle folgenden Nachrichten in einem Zwischenspeicher abgelegt. Erst wenn die "richtige" Nachricht angekommen ist, werden die Nachrichten aus dem Zwischenspeicher weiter 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 giwissen Anzahl von Rückfragen die gewünschte Nachricht noch immer nicht an, so bricht die Kommunikation mit einer Fehlermeldung ab.
Da man den Overhead durch die Sequenznummern im Paketkopf gering halten möchte, bestimmt man die Größe des Sequenznummernraumes durch folgende Formel: .
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).
Sequenznummern sind eine triviale Form der Logischen Uhr: sie bietet ein Mittel, mit dem Nachrichten gemäss 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 entscheident (wie bei manchen Reliable Multicast Protokollen), so müssen komplexere Logische Uhren verwendet werden, wie die Lamport-Uhr oder Vektoruhren.