KLAUSUR 2010.Oktober.04 (inkl. Lösungsversuch)

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

KLAUSUR 2010.Oktober.04 (inkl. Lösungsversuch)
Hier die “Lösung” für die Klausur vom Oktober 2010. Keine Garantie auf Richtigkeit.

1. Allgemeine Fragen
a) QoS = Quality-of-Service (Dienstgüte)
b) 192.168.20.5/16 ??
c) simplex / halbduplex / (voll)duplex
d) P2P = Peer-To-Peer
Grundidee: Inhalt nicht nur von zentralem Server, sondern auch von anderen Peers
Anwendungsgebiet: Filesharing
Eigenschaft: Peers kommunizieren direkt mittels TCP oder UDP
Beispiel: Napster, eDonkey, Gnutella
e) Transfer der Rahmen zwischen Knoten über Links
f) Flusskontrolle: Empfänger kontrolliert Sender, damit Empfänger nicht überlastet wird
Überlastkontrolle: Netz kontrolliert Sender, damit Netz nicht überlastet wird
g) Modulation: Änderung von Parametern (Amplitude, Frequenz,…) eines Trägersignals durch ein modulierendes/aufgeprägtes
Signal. Einzuordnen auf der physikalisch Schicht.
Modulationsarten:
- Analog-Analog-Wandlung: z.B. Fernsehsignal
- Digital-Analog-Wandlung: z.B. Daten über Funkkanal
- Analog-Digital-Wandlung: z.B. Sprache
h) d = d_proc + d_queue + d_trans + d_prop
d_proc = d_queue = 0
d_trans = L / R = 0.1s
d_prop = l / v = 0.1s
=> d = 0.2s

2. Socket-Programmierung

import java.io.*; 
import java.net.*;

class Pop3 extends Base {
     final String CRLF = "\r\n";
	
     void init() throws Exception {
          socket = new Socket(POP3_SERVER,110);
          in  = new BufferedReader(new InputStreamReader(socket.getInputStream()));
          out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
          authOK = authentificate();
     } //Ende init()

     boolean authentificate() throws Exception {
          if(!in.readLine().startsWith("+OK")) {
               return false;
          }
          out.write("user " + USER + CRLF);
          out.flush();
          if(!in.readLine().startsWith("+OK")) {
               return false;
          }
          out.write("pass " + PASSWORD + CRLF);
          out.flush();
          if(!in.readLine().startsWith("+OK")) {
               return false;
          }
          return true;
     } //Ende authentificate()

     void test() throws Exception {
          if(authOK == true){
               print(countMails());
          } else {
               end();
          }
   } //Ende test()

     int countMails() throws Exception {
          out.write("list" + CRLF);
          out.flush();
          int ret = 0;
          while(!in.readLine().startsWith(".")) ret++;
          return ret;
     } //Ende countMails()

} //Ende Pop3

3. POP3-Leistungsanalyse
noch nicht bearbeitet

4. Routingverfahren
siehe hier: https://fsi.informatik.uni-erlangen.de/forum/thread/7624-Forward-Search-Algorithmus

Attachment:
klausur-SS10.pdf: https://fsi.cs.fau.de/unb-attachments/post_85004/klausur-SS10.pdf


eine kurze aber ziemlich dringende frage: warum hast du das mit der modulation beantwortet? bzw. müssen wir das können? ich dachte der stoff gilt nur bis zur sicherungsschicht…?


das wird wohl nicht dran kommen.

hier meine loesung. absolut keine garantie auf richtigkeit.

Hier
(Das Forum erlaubt nicht mehr als 500kB)


Du musst für jedes Ack das CW um eins erhöhen, so das du beim 1. Fenster ein CW von 4MSS hast, somit kannst du 4 Pakete verschicken


muss man eigentlich die zwischenwerte von CW mitnotieren? wenn sich zb das Congestion Window von 2 auf 4 vergrößert, gibt es ja dazwischen kurz einen zwischenwert von 3. das tut zwar beim senden nichts zur sache, da es auf 4 erhöht wird bevor man mit den 3 fertig ist, aber rein formal müsste es diesen zustand eigentlich geben, oder?


wenn verlangt ist, dass nach jedem Paket die aktuelle CW angeben werden muss, dann muss man halt auch die Zwischenstufen angeben


Folgende Fragen:

  • kumulative acks: muss man, wenn das cw = 4 ist und der server 4 pakete schickt, auch mit 4 acks antworten? ich dachte “kumulativ” heißt, dass mit einem ack 4 bestätigt werden?

C: SYN
S: SYN ACK
C: ACK (CW = 1)
S: “+OK SERVER READY” ACK
C: “USER user” ACK (CW = 2)
S: “+OK” ACK
C: “PASS geheim” ACK (CW = 3)
S: “+OK” ACK
C: “RET 1” ACK (CW = 4)
S: 1500 BYTES ACK
S: 1500 BYTES ACK
S: 1500 BYTES ACK
S: 1500 BYTES ACK
C: ACK
C: ACK
C: ACK
C: ACK (CW = 8)
S: 1500 BYTES ACK
S: 1500 BYTES ACK
C: ACK
C: “QUIT” ACK (CW = 10)
S: “+OK” ACK
C: FIN
S: ACK
S: FIN
C: ACK

wär sehr nett wenn sich das mal jemand anschauen könnte. wir sind uns nämlich nicht sicher ob das so korrekt ist… :slight_smile:


wo genau beginnt denn hier der slow start? dachte das CW wuerde sich so verhalten: 1 → 2 → 4 → 8 … bis zum ersten Verlustereignis. Oder ist das eine Spezifikation von POP3?


Du bekommst +1 CW für jedes ACK während es keine Fehler gibt. Der Slow-Start „beginnt nach 2RTT“, also hier mit Anfang der 4. Zeile (1. +OK)

Anfangs hast du ja nur „leere“ Pakete ohne Daten und schickst diese hin und wartest auf ein +OK. Währendessen kannst du ja nicht weiteres Zeug schicken, obwohl das Fenster groß genug wäre.

Quelle: Wikipedia, TCP, 2. Absatz


ich vermute auch der Befehl STAT geht, oder?

int countMails() throws Exception {
		out.write("STAT " + CLRF);
		out.flush(); // fuer was brauch ich das? hab ich aus dem anderen code uebernommen
		String tmp = in.readLine();
		StringTokenizer tok = new StringTokenizer(tmp);
		int num = -1;
		if (tok.nextToken() == "+OK"){
			num = Integer.parseInt(tok.nextToken());
		}
		return num;
}

Und zweite Frage:
Muessen Befehle an den POP3 Server nicht immer in capslock geschrieben werden?