Beleg Renchernernetze
Es sollten alle geforderten features implementiert sein.
Features
- Stop and Wait
- Go Back N
- Fortschrittsanzeige
- Anpassung an RundTripTime
- Unterstützung von Megereren verbindungen gleichzeitig (server)
- Anpassung der Packetgrößen (nur Dateifragmente) an die MTU
- Zusatzproxy im Netzwerkfehler zu simulieren
- Überprüfung der Eingaben
- Direktes verwerfen von Packeten (testübertragung)
- Überlauf der Sequenznummer (nicht explizit getestet aber konnte dateien mit mehr aus 100mb fehlerfrei übertragen)
- Crc32 Prüfung (start und ende)
Tests
- Funktion Ihres Clients + Server ohne Fehlersimulation
- Funktion Ihres Clients + Server mit Fehlersimulation
- Funktion Ihres Clients + Server über Hochschulproxy (server nicht erreichbar erwarte jedoch funktion)
- Funktion Ihres Clients + Hochschulserver ohne Fehlersimulation
- Funktion Ihres Clients + Hochschulserver mit Fehlersimulation (server nicht erreichbar erwarte jedoch funktion)
Bekannte Probleme und Verbesserungsideen (optional)
habe ich aus zeitgründen nicht weiter bearbeitet sind aber nach meiner einschätzung nicht relevant
- wenn proxy scheint packete fehlerhaft zu beantworten (feature :-) )
- server hat keine fortschrittsanzeige
- einige implementierungen vorallem clientseitig haben verbesserungspotential
- Server passt sein delay nicht an die aktuelle routrip time an statdessen erhöht er die verzoegerung um bei jedem fehler um einen festgelegten faktor
Anmerkungen zum Protokoll
- Das Protokoll unterstützt keinen abruch des transfers abgesehen von einem timeout
- Die PaketID sollte u.u. 16bit betragen um häufige überläufe zu verhindern und damit fehlerpotenzial (relativ unwichtig)
Verbersserungsvorschläge
- 2 packet ids reservieren 1 für init (z.b. 0) und 1 für abbruch (z.b. 255 bzw. 65535)
- für dateiztansfer kann es auch sinn machen compression zu unterstüzen indem man z.b. die datei erst duch einen Deflate / Inflate stream sendet
Verwendet Bliliotheken
Bibliothek | Webseite | Verwendungszweck | Lizens |
---|---|---|---|
PicoCLI | https://picocli.info/ | habe ich benutzt um die startargumente angenehmer zu handhaben |
Apache 2.0 |
JANSI | https://github.com/fusesource/jansi | Sichert compatibilität zu ANSI auf z.b. PowerShell (aktuell nur Picoli) | Apache 2.0 |
Ktor Networking | https://ktor.io/docs/servers-raw-sockets.html | Anstelle von JavaIO da diese Coroutines unterstützt | Apache 2.0 |
Google Flogger | https://github.com/google/flogger | Logging API | Apache 2.0 |
Logback | https://logback.qos.ch/ | Logging Implementation | MIT |
guava | https://github.com/google/guava | Habe den CRC32 hash von Guava Benutzt | Apache 2.0 |
Kotlin Stdlib + Corotines | https://kotlinlang.org/ | Habe die Coroutines von Kotlin benutzt um die asynchronität zu handhaben sowie features wie timeout etc. die kotlin stdlib ist generell essentiell für eine Kotlin application |
Apache 2.0 |
Hilfsmittel
- IntelliJ IDEA
- Wireschark
- Github COPilot (AI)
- Github
- PlantUML
Eigenständigkeitserklärung
Hiermit erkläre ich, dass ich die vorliegende Arbeit eigenständig verfasst, keine anderen als die angegebenen Quellen und Hilfsmittel verwendet sowie die aus fremden Quellen direkt oder indirekt übernommenen Stellen/Gedanken als solche kenntlich gemacht habe.