test: F3 acceptance — the classroom classics on FILIUS' examples against Java

A web page by its DNS name (internetwork_komplett), an e-mail between two
networks through NAT and MX relay (Internet_Komplett_..._DE), a file found
and fetched with Gnutella across a router (zwei_rechnernetze_komplett):
ExampleRun records frames, tables, program lines and end states; the core
plays the same calls and matches card by card. Equal RIP ties take Java's
choice, RIP beacons are left out, the search's two connections compared
flow by flow. Also: a core test that an equal RIP route from another router
neither replaces nor refreshes the route, and nine stale type errors in
core tests fixed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-03 08:01:32 +00:00
co-authored by Claude Opus 5.5
parent ce5b10c1f3
commit 49b8fe715e
16 changed files with 159639 additions and 46 deletions
+66
View File
@@ -996,3 +996,69 @@ Weitere Abläufe von `TerminalRun` auf `terminal-net`. Gemessen (02.10.2026):
Tabelle (Uhrzeit, Protokoll, Quelle > Ziel, Kommentar), alle 100 ms;
Zeilenumbrüche werden zu zwei Leerzeichen; Strg+C beendet es nach dem
nächsten Blick. Ein während dessen getippter Befehl wartet bis danach.
## Unterrichtsklassiker (Abnahme F3)
`ExampleRun` hat drei weitere Abläufe auf Beispielen von Filius. Was jedes
Programm seinem Fenster meldet, steht unter `programs` (Zeit, Programm,
Text; ein Aufruf des Ablaufs als `call …`), wo die Programme enden unter
`end`:
* `web` (internetwork_komplett): Notebook 1.10 tippt `www.filius.de` in
seinen Browser. Der Name wird bei DNS-Server 2.10 im anderen Netz
erfragt, die Seite samt Bild kommt von Webserver 5.10 zwei Router weiter.
* `email` (Internet_Komplett_…_DE): Wenn die DHCP-Clients ihre Adressen
haben (8 s), schreibt herbert@gmx.de (das erste Notebook, im Schulnetz
hinter der Firewall) an frimp@webmail.de. mail.gmx.de reicht die Mail an
mail.webmail.de im anderen Netz weiter, bei 22 s holt frimp (Notebook#2)
ab.
* `gnutella` (zwei_rechnernetze_komplett): Filius' Gnutella-Programm auf
Notebook 1.10, Notebook 1.11 und DNS-Server 2.10 (der „Lied der
Woche.txt“ teilt), je höchstens drei Teilnehmer. 1.10 tritt bei 2.10 bei,
dann 1.11 bei 1.10: Der Ping geht über 1.10 weiter zu 2.10, der Pong auf
demselben Weg zurück. 1.10 sucht „woche“ (2.10 reicht die Query an 1.11
weiter) und holt den Treffer über den Router.
Aufnahmelängen 12 s (`web`), 40 s (`email`), 26 s (`gnutella`): Das Ende
liegt jeweils, wo nichts mehr geschieht. Bei 34 s fiel Javas letzter Abbau
einer Verbindung knapp hinter das Ende, bei 14 s ein wiederholtes SYN.
Gemessen (03.10.2026):
* Die Datei hält die Konten der E-Mail-Programme nur in der älteren
`kontoListe`, die Filius 2.14 nicht mehr liest: Nach dem Laden hat Java
kein Konto. Der Leser übernimmt sie (`importEmail.ts`). Das Orakel trägt
sie so ein, wie man sie im Kontodialog eintippt, mit den Werten der
Liste.
* Notebook 1.11 in zwei_rechnernetze hat kein Gateway (mit Absicht im
Beispiel). Lernt es über einen Pong einen Teilnehmer im anderen Netz,
bleibt in Java der Thread jeder Verbindung dorthin in
`TCPSocket.verbinden` hängen: kein SYN auf der Leitung, keine Meldung, ein
Download kommt nie an. Der Ablauf lässt darum 1.10 suchen.
* Jeder TCP-Socket zieht beim Anlegen die nächste Anfangsnummer (ein
gemeinsamer Zähler). Ein Server legt seinen ersten lauschenden Socket beim
Start in seinem eigenen Thread an (`ServerAnwendung.annehmenVerbindungen`):
Welcher Server eines Beispiels welche Nummer zieht, entscheidet der Takt
der Threads. Verglichen wird unterhalb der Millionen.
* Eine Suche geht zugleich an beide Teilnehmer von 1.10. An seiner Karte
kommen die Frames der zwei Verbindungen in beliebiger Folge, einige zehn
Millisekunden auseinander (in einer Aufnahme vertauscht, in der nächsten
nicht).
* 2.10 reicht die Query an 1.11 weiter, das ohne Gateway nicht antworten
kann: Java schickt das SYN einmal und gibt nach einer Wartezeit auf (wie
in `closedPort` von `TcpRun`); 1.11 seinerseits erreicht 2.10 gar nicht
(s. o., kein Frame).
* **Gleich lange RIP-Wege, gemessen**: Router #3 erreicht das Schulnetz
(42.0.0.0) über Router `""` oder über #2, je zwei Sprünge. Jede Antwort
an die Schule läuft dort durch, die des DNS 8.8.8.8 wie die von webmail.
In beiden ruhigen Aufnahmen nahm Java #2, der Kern `""` (die zuerst
gehörte Route); über #2 kosten zwei neue ARP-Suchen rund 270 ms. Der Test
gibt dem Kern Javas Wahl, wie eine von Java gezogene Zufallszahl, und nur
bei gleicher Länge.
* RIP-Beacons kommen alle 30 s nach Zufallspausen, so viele, wie ein Router
seit dem Start gezogen hat (s. RIP oben); verglichen werden in den
Klassikern die Frames der Programme, RIP nicht.
* Java fällt an jedem Verbindungsaufbau um einen Blick (rund 80 ms) zurück,
dazwischen um wenige Millisekunden je Sekunde: In der E-Mail-Geschichte
folgt die Weitergabe gmx → webmail auf herberts Verbindung, ihre Frames
liegen bis zu 272 ms hinter dem Kern.