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:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user