MINT lernen

Abituraufgaben: Ein Protokoll implementieren

Zwei Abituraufgaben zur Implementierung von Sender und Empfänger.

Dein Fortschritt:
0 / 0 Aufgaben
1

Den Empfänger verstehen

AFB I–II

Gegeben ist die Empfängerfunktion eines Stop-and-Wait-Protokolls. Rahmen haben das Format #nr;daten$.

def empfangen(rahmen, erwartet, daten):    inhalt = rahmen[1:-1]    nr_text, nutz = inhalt.split(";", 1)    nr = int(nr_text)    if nr == erwartet:        daten.append(nutz)        erwartet = erwartet + 1    return f"ACK{nr}", erwartet
  1. Beschreiben Sie die Arbeitsweise der Funktion.
  2. Stellen Sie in einer Tracetabelle dar, was bei den Rahmen #0;SO$, #1;NN$, #1;NN$, #2;E$ geschieht (Start: erwartet = 0, daten = []).
  3. Entwickeln Sie eine Funktion ist_rahmen(r), die True liefert, wenn r mit # beginnt, mit $ endet, ein Semikolon enthält und vor dem Semikolon nur Ziffern stehen.

Hinweise

Hinweis zu Aufgabe a)
Zeile für Zeile: zerlegen, prüfen, speichern, antworten.
Hinweis zu Aufgabe b)
Spalten: Rahmen, nr, Bedingung, daten, erwartet, Rückgabe.
Hinweis zu Aufgabe c)
startswith, endswith, isdigit().Entwerfen/Entwickeln: Nach vorgegebenen Bedingungen ein Modell oder einen Algorithmus selbstständig planen bzw. erarbeiten.

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

Start- und Endzeichen werden abgeschnitten, der Rest am ersten Semikolon in Nummer und Nutzdaten geteilt. Ist die Nummer die erwartete, werden die Daten angehängt und die erwartete Nummer erhöht. In jedem Fall wird eine Quittung mit der empfangenen Nummer zurückgegeben.

Erwartungshorizont zu Aufgabe b)
Rahmennrnr == erwartetdatenerwartetRückgabe
#0;SO$0wahr['SO']1ACK0
#1;NN$1wahr['SO','NN']2ACK1
#1;NN$1falsch['SO','NN']2ACK1
#2;E$2wahr['SO','NN','E']3ACK2
Erwartungshorizont zu Aufgabe c)
def ist_rahmen(r):    if not (r.startswith("#") and r.endswith("$")):        return False    inhalt = r[1:-1]    if ";" not in inhalt:        return False    nr_text = inhalt.split(";", 1)[0]    return nr_text.isdigit()
2

Ein Sender mit begrenzten Versuchen

AFB II–III

Ein Objekt kanal bietet kanal.schicke(rahmen) und kanal.warte_auf_ack(sekunden); die zweite Methode liefert die empfangene Quittung als Zeichenkette oder None, wenn in der Zeit nichts kam.

  1. Implementieren Sie eine Funktion senden(pakete, kanal) nach Stop-and-Wait, die jedes Paket höchstens fünfmal versucht und False zurückgibt, wenn ein Paket nie bestätigt wird; sonst True.
  2. Schätzen Sie die Dauer für 100 Pakete ab, wenn ein Paket samt Quittung 0,2 s braucht — ohne Verluste und wenn jedes zehnte Paket einmal verloren geht (Timeout 3 s).
  3. Diskutieren Sie die Eignung von Stop-and-Wait für eine Satellitenverbindung, bei der ein Signal 0,25 s für eine Richtung braucht.

Hinweise

Hinweis zu Aufgabe a)
Äußere Schleife über die Pakete, innere über die Versuche.
Hinweis zu Aufgabe b)
Pro Verlust kommt der Timeout dazu.
Hinweis zu Aufgabe c)
Wie viel Zeit vergeht je Paket, und wie viel davon wird gesendet?Diskutieren: Zu einer Problemstellung oder These Argumente (Pro und Contra) gegeneinander abwägen und zu einem begründeten Ergebnis kommen.

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)
def senden(pakete, kanal):    for nr in range(len(pakete)):        bestaetigt = False        versuch = 0        while not bestaetigt and versuch < 5:            kanal.schicke(f"#{nr};{pakete[nr]}$")            antwort = kanal.warte_auf_ack(3)            bestaetigt = antwort == f"ACK{nr}"            versuch = versuch + 1        if not bestaetigt:            return False    return True
Erwartungshorizont zu Aufgabe b)

Ohne Verluste: \(100\cdot0{,}2=20\) s. Mit 10 Verlusten: \(20+10\cdot3=50\) s — der Timeout dominiert.

Erwartungshorizont zu Aufgabe c)

Je Paket vergehen mindestens 0,5 s (hin und zurück), in denen der Sender nichts tut. Selbst bei hoher Datenrate lassen sich höchstens zwei Pakete pro Sekunde übertragen — die Leitung liegt fast immer brach. Besser: mehrere Pakete unterwegs lassen und nummeriert quittieren (Schiebefenster-Verfahren wie bei TCP). Stop-and-Wait eignet sich nur bei kurzen Laufzeiten oder sehr kleinen Datenmengen.