Übung 12, Aufgabe 44 (Leitungssimulation)

Im Folgenden werden die Java-Klassen, welche Sie für die Lösung der Aufgabe verwenden dürfen, im Einzelnen beschrieben und zum Herunterladen angeboten.

Korrekturen Aufgabenblatt 12
Bitte beachten Sie folgende geänderte Aufgabenstellung:
Aufgabe 44.b) Bestimmen Sie den Durchsatz für das Senden der Text-Datei
TestFile.txt mit folgenden Parametern:
  • java Pipe <BER> 5 10 debug
    Mit BER = { 3.5, 3.75, 4.0, 5.0 }
  • cat TestFile.txt | java SlidingWindowSender 5 3000 <PacketSize>
    Mit PacketSize = { 50, 100 }

1. Installation

1.1 Hilfsklassen

Folgende Klassen werden sowohl von SlidingWindowSender.java als auch von Pipe.java (und evtl. sogar von Ihrer eigenen Empfänger-Implementation!) verwendet. Bitte laden Sie sich die Klassen einzeln herunter und compilieren Sie sie mit javac *.java:

1.2 Die Senderseite: SlidingWindowSender.java

Bitte laden Sie sich die folgenden Klassen herunter und compilieren Sie sie mit javac *.java:

Nun sollten Sie in der Lage sein, den SlidingWindowSender aufzurufen, z.B. mit:

> java SlidingWindowSender -h
Usage: java SlidingWindowSender <bufsize> <timeout> <packetSize> [debug]
  <bufsize>     : send-window size. Default is 5
  <timeout>     : timeout for retransmission (in ms). Default is 2000 ms
  <packetSize>  : packetsize in bytes. Default is 100 bytes

1.3 Die Leitungssimulation: Pipe.java

Bitte laden Sie sich die folgenden Klassen herunter und compilieren Sie sie mit javac *.java:

Nun sollten Sie in der Lage sein, das Leitungssimulationsprogramm aufzurufen, z.B. mit:

> java Pipe -h
<BER>      : Negative Log. of BitErrorRate (i.e. 10^-i). Default is 3.5
<minDelay> : best case delay (in ms). Default is 100
<maxDelay> : worst case delay (in ms). Default is 1000

1.4 Die Empfängerseite: ?.java

Diese Klasse müssen Sie schon selber schreiben :-) Sie können sich aber, wenn Ihnen Ihre eigene Implementation des Ringpuffers aus Aufgabe 36 nicht gefällt, hier eine Beispielimplementation herunterladen:

2. Benutzung der Leitungssimulation

Nachdem Sie Ihre Empfängerklasse fehlerfrei kompiliert haben und diese wie in der Aufgabe angegeben auf Port 5555 "lauscht", sollten Sie mittels der in Aufgabe 44 a) beschriebenen Vorgehensweise eine Simulation starten können.

Die einzelnen Parameter der beiden Klassen SlidingWindowSender und Pipe sind nachfolgend noch einmal im Detail erklärt. Beachten Sie bitte, dass aufgrund des einfachen Formats der Parameterliste diese nur in der angegebenen Reihenfolge angegeben werden können! Sie können aber Parameter am Ende weglassen, diese werden dann mit ihrem Default Wert initialisiert (den Defaultwert kann man sich bei Aufruf mit -h anzeigen lassen.)

2.1 Der Sender

<bufsize>
Die Puffergrösse des Sendefensters. Da für jeden Pufferplatz ein eigener Thread gestartet wird, der die (asynchrone) Verwaltung dieses Platzes übernimmt, sollten nicht beliebig grosse Sendefenster gewählt werden. Die Implementation beschränkt deshalb die Grösse des Sendfensters auf 25 Plätze.
<timeout>
Die Wartezeit in Millisekunden, bevor ein versendetes Paket welches noch nicht bestätigt wurde, nochmal versendet wird. Wählen Sie diesen Parameter in Abstimmung mit den minDelay/maxDelay Parametern der Leitung.
<packetSize>
Die Paketgrösse in Bytes. Je grösser ein Paket ist, desto wahrscheinlicher ist (in Abhängigkeit vom BER Parameter der Leitung), dass ein Paket aufgrund eines Bitfehlers unbrauchbar wird (damit also praktisch verloren geht). Beachten Sie, dass die Paketgrösse in Bytes angegeben wird, die Fehlerrate (in Pipe.java) aber in "Fehler pro Bits" angegeben wird!

2.2 Die Leitung

<BER>
Der negative Logarithmus der Bit-Fehlerrate (Bit-Error-Rate, BER). Der Default Wert von 3.5 steht also f¨r eine Fehlerrate von
BER = 1/(10^(-3.5)) = 1/3160
also 1 Fehler pro 3160 Bits oder 1 Fehler pro 395 Bytes. Ein Koaxial-Kabel hat normalerweise eine BER von 10^-8, ein einfacher Kupferdraht 10^-4, Glasfasernetze bis zu 10^-10.
<minDelay>
Die minimale Leitungsverzögerung (in Millisekunden), bedingt durch (simulierte) Distanz der Leitung und Ausbreitungsgeschwindigkeit des Signals.
<maxDelay>
Die maximale Verzögerung in Millisekunden.

3. Beispieldateien

Als InFile.txt der Aufgabe 44 a) können Sie den Quelltext ihrer Ringpuffer Implementation nehmen (zum Beispiel). Als Testfile für Aufgabe 44 b) verwenden sie jedoch bitte das vorliegende TestFile.txt, damit vergleichbare Messungen möglich werden.

Bei Fragen & Problemen

Die Programme wurden auf SunOS5.6/Java1.1.8 und Linux2.2.11/Java1.2 getestet. Es sollte daher auf den meisten Maschinen im Institut laufen. Falls es doch Probleme gibt, oder irgendwelche Fragen offen geblieben sind, bitte Email an langhein@inf.ethz.ch! Viel Erfolg!


Last Update: Thu Jan 27 17:45:33 MET 2000 ml