Zusammenfassung

  • RFC 9693 macht die Vorbelegung zur Messung: Phase 1 erzeugt eine begrenzte Verbindungsmenge im DUT und lässt den Responder die übersetzten Vier-Tupel speichern; Phase 2 misst gegen diesen bekannten Zustand.
  • Ein verlustfreier Lauf beweist ein deklariertes Blackbox-Experiment. Er legt die interne Tabelle nicht offen, bildet Internetverkehr oder TCP nicht automatisch ab und belegt weder Produktionsreserve noch Anwendungskontinuität.

Der Rückweg darf keinen Zustand erfinden

Der Initiator kann in Client-Server-Richtung ein neues Vier-Tupel anbieten. Das DUT legt einen Eintrag an, übersetzt und leitet weiter. Der Responder kann diesen Vorgang nicht spiegeln: Ein Paket mit unbekanntem Tupel gehört zu keiner bestehenden Verbindung und wird in Server-Client-Richtung verworfen.

Deshalb existieren zwei Tabellen. Die connection tracking table des DUT bleibt für den Tester undurchsichtig; Größe, Inhalt und Politik sind unbekannt. Die state table des Responders enthält nur übersetzte Tupel tatsächlich empfangener Frames. Angebot, Vorwärtsempfang, Aufzeichnung und Rückwärtsvalidierung sind vier getrennte Belege.

Eine Angabe wie „eine Million Sessions“ sagt ohne diese Kette nicht, ob eine Million Tupel nur angeboten, weitergeleitet, gespeichert oder in beide Richtungen bestätigt wurden.

Zufall kann Milliarden Zustandsanforderungen erzeugen

RFC 4814 empfiehlt gleichmäßig pseudozufällige Ports, damit günstige Hashmuster ein Gerät nicht besser aussehen lassen. Beim zustandsbehafteten NAT kann jedoch jedes unbekannte Tupel zusätzlich einen neuen Eintrag verlangen.

Schon ein IP-Adresspaar erlaubt mit den breiten RFC-4814-Bereichen 3.170.829.312 Portkombinationen. Adressbereiche multiplizieren den Raum weiter. Unbegrenzte Zufälligkeit kann daher die Tabelle füllen, bevor die beabsichtigte Eigenschaft gemessen wird.

RFC 9693 begrenzt die Bereiche, ohne die Verteilung aufzugeben: ein größerer Quellportbereich von einigen Zehntausend und ein kleinerer Zielportbereich entsprechen der Asymmetrie zwischen ephemeren Clientports und populären Diensten. Die Bereichsgrößen gehören zum Resultat.

Phase 1 baut die Messpopulation

In Phase 1 sendet nur der Initiator. Das DUT übersetzt und erzeugt Verbindungen; der Responder empfängt, speichert die übersetzten Tupel und bleibt still. Damit werden die unsichtbare DUT-Tabelle und das beobachtbare Rückwegverzeichnis parallel gefüllt.

Vor Durchsatz, Latenz, Verlust oder PDV in Phase 2 ist diese Phase zwingend. Ihre Rate soll sicher unter der zuvor bestimmten maximalen Verbindungsaufbaurate liegen, sonst wird die Vorbereitung selbst zum Engpass.

Für den Verbindungsaufbau nutzt jedes Frame ein anderes Tupel, während der UDP-Timeout Phase 1 überdauert: nur neuer Zustand entsteht. Für steady-state forwarding wird die gesamte beabsichtigte Tupelmenge aufgezählt und der Timeout überdeckt beide Phasen samt Lücke: im Messfenster soll weder Zustand entstehen noch verschwinden.

Diese Extreme sind keine Verkehrsvorhersage. Sie trennen Erzeugungskosten von Weiterleitungskosten.

Vorwärtsempfang ist keine Bestandsprüfung

Der Tester kann die interne Tabelle nicht lesen. Selbst vollständiger Empfang in Phase 1 garantiert nicht, dass jede Verbindung erhalten blieb. Die Aufbaurate konnte zu hoch sein, die Kapazität erschöpft oder ein Eintrag ersetzt worden sein.

Der Responder sendet deshalb für jedes gespeicherte Tupel ein Frame zurück, mit einer durch Sicherheitsfaktor reduzierten Rate. Kommen alle an, belegt das den Bestand dieser begrenzten Verbindungspopulation und die Eignung beider Raten.

Ein fehlendes Rückframe hat mehrere mögliche Ursachen: Aufbau- oder Validierungsrate, Kapazität, Ablehnung neuer Einträge, LRU-Ersatz oder Batch-Garbage-Collection. Eine Beobachtung ist keine direkte Innenansicht.

Kapazität wird als Intervall ermittelt

Die Messung beginnt mit sicherem C0 und validiertem R0. Eine exponentielle Suche verdoppelt die Verbindungzahl bis zum Kollaps oder starken Einbruch der Aufbaurate. Danach verengt eine binäre Suche das Intervall bis zum angegebenen Fehler E.

Die Ersatzpolitik verändert die Überlebenden. Ablehnung bewahrt frühe Einträge, LRU späte; Batch-Bereinigung kann weniger Validierungen als die physische Kapazität liefern. Ein präzises N′ ist daher nicht immer die Tabellengröße.

Auch das Löschen wird getrennt gemessen: N Verbindungen laden, eine implementierungsspezifische Out-of-band-Löschung stoppen und N durch die Zeit teilen. Gesamtlöschung und Einzelentfernung können unterschiedlich skalieren.

Reihenfolge, Zeit und CPU sind Ergebnisbestandteile

Round-robin-Schreiben hält die Responder-Tabelle frisch. Pseudozufälliges Lesen folgt RFC 4814; round robin ist billiger. Auf- oder absteigende Reihenfolgen können eigene Versuche sein, weil Hash, Cache und Ersatz darauf reagieren.

Timeouts, Phasendauer, Lücke, aktive Kerne, hashsize, nf_conntrack_max, Hardware, NIC, Betriebssystem, Kernel und Implementierungsversion müssen offengelegt werden. Wiederholungen, Median, erstes und 99. Perzentil sowie Suchfehler geben dem Wert seine Genauigkeit.

UDP begrenzt die Aussage

UDP ermöglicht konstante Frame-Raten ohne TCP-Stau- und Flusskontrolle oder Handshake. Implementierungen können UDP und TCP trotzdem verschieden behandeln. RFC 9693 warnt davor und verweist für HTTP/HTTPS auf RFC 9411.

Verlustfreiheit belegt somit nur eine Kombination aus DUT, Build, Konfiguration, Tupelpopulation, Reihenfolge, Timeout, Richtung, Rate und CPU-Zuteilung. Sie belegt weder versteckten Tabelleninhalt noch reale Verkehrsverteilung, TCP, operative Reserve oder Anwendungsabschluss.

Die Spezifikation gibt eine gemeinsame Grammatik, laufender Code die Beobachtung. Nutzbar wird die Zahl erst durch die erhaltene Beweiskette.

Quellen