feat(core): the packet capture's table after Java's Lauscher, measured against Java's own tables

captureRows.ts builds Java's rows per frame (Lauscher.datenVorbereiten):
Ethernet; ARP, ICMP or IP; TCP or UDP; the data with Java's protocol
recognition; with addresses and ports or ports only. The comment stays
structured; captureCommentText says it with given words and numbers.

ScenarioNetwork writes Java's finished tables per card (Lauscher.getDaten,
German locale); all runtime runs are recorded again, NatRun has ttlOut.
expectSameCaptures compares both views for every frame. Fixed where the
engine differed: an ARP request's target MAC is the broadcast address,
an ICMP error's identifier and sequence number are 0 (RFC 792), and host
unreachable from a router carries the packet as forwarded. Not taken:
Java's lower-case broadcast address in a reply to 0.0.0.0, and the typo
'Exeeded'. RIP keeps its recordings: Java's staggered router start now
gives a different startup on this machine.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-01 15:11:05 +00:00
co-authored by Claude Opus 5.5
parent 0a34f3a4c4
commit 21a404693c
55 changed files with 37423 additions and 1321 deletions
+30
View File
@@ -476,3 +476,33 @@ Javas Switch prüft seine Tabelle einmal je Sekunde ab dem Start
nach der Lernzeit; der Kern genau bei ihr. Das ist gewollt und wird nicht
gemessen: Wo Java nur in einem Takt nachsieht, macht der Kern es genauer
(Entscheidung 01.10.2026; dasselbe für die NAT-Einträge des Heimrouters).
## Tabelle des Mitschnitts
Seit F2.8b schreibt `ScenarioNetwork.writeFrames` neben den Frames Javas
fertige Tabelle jeder Karte (`Lauscher.getDaten`): `rows` mit Adresse:Port
(das Fenster „Datenaustausch"), `layeredRows` nur mit Ports (die
Schichtenansicht); je Zeile Nummer, Quelle, Ziel, Protokoll, Schicht,
Bemerkung, ohne die Uhrzeit. Java läuft dabei mit `Locale.GERMANY`
(`Information.getLocaleOrDefault`): deutsche Wörter, Tausenderpunkte. Alle
Laufzeit-Läufe sind dafür neu aufgenommen (bis auf `dhcp-lan`, s. oben);
`NatRun` hat den Ablauf `ttlOut` (Ping mit TTL 1 aus dem LAN: der Heimrouter
meldet „Zeit überschritten").
Gemessen (01.10.2026), wo der Kern abwich:
* Eine ARP-Anfrage trägt als Ziel-MAC `FF:FF:FF:FF:FF:FF`
(`ARP.sendeARPBroadcast`), der Kern trug Nullen (wie Swift).
* Eine ICMP-Fehlermeldung trägt Identifier und Sequenznummer 0, der Kern
kopierte die des Echos (wie Swift).
* „Host nicht erreichbar" vom Router trägt das Paket mit gesenkter TTL (wie
er es weitergeleitet hat), der Kern das angekommene.
Bewusst nicht übernommen: Javas Antwort an `0.0.0.0` schreibt die
Broadcast-Adresse klein (`ARP.sendArpReply`), der Kern immer groß; „ICMP
Time Exeeded" ist ein Tippfehler.
RIP: Der Anlauf entscheidet, wie viele Zufallspausen jeder Router zieht
(jede Nachricht zieht eine), und der hängt an Javas Startreihenfolge. Eine
Aufnahme, deren Anlauf von dem des Kerns (alle Router zugleich) abweicht,
liegt danach in allen Zeiten daneben; das Werkzeug wird dann wiederholt.