Title: IN0010_GRNVS / GRNVS: Kapitel 4: Transportschicht
On every note of this deck, unless a note says otherwise:
Title: IN0010_GRNVS::GRNVS: Kapitel 4: Transportschicht
Logo: tum_logo.png

Front: Was ist sind die wesentlichen Aufgaben der Transportschicht?
Back: - Multiplexing von Datenströmen unterschiedlicher Anwendungen.
- Bereitstellung verbundsloser und verbindungsorientierter Transportmechanismen
- Stau- und Flusskontrolle

Front: Welche Art von Transportdiensten haben wir kennengelernt?
Back: - Verbindungslos
- Verbindungsorientiert

Front: Was zeichnet einen verbindungslosen Transportdienst aus?
Back: - Segmente sind aus Sicht der Transportschicht voneinander unabhängig
- Keine Sequenznummern
- Keine Übertragungswiederholung
- Kein Reordering von Segmenten

Front: Was zeichnet einen verbindungsorientierten Transportdienst aus?
Back: - Übertragungswiederholung bei Fehlern
- Garantie der richtigen Reihenfolge einzelner Segmente

Front: Unterscheide Stau- und Flusskontrolle
Back: - Staukontrolle (Congestion Control): Reaktion auf drohende Überlast im Netz
- Flusskontrolle (Flow Control): Laststeuerung durch den Empfänger

Front: Warum werden sendto() und recvfrom() für verbindungslose Sockets benötigt?
Back: Es werden Adressangaben benötigt.

Front: Was sind die Mindestanforderungen an den Header eines verbindungslosen Transportprotokols?
Back: - Quell- und Zielport
- Längenangabe der Nutzdaten

Front: Mit welchem Präprozessormakro werden verbindungslose POSIX-Sockets identifiziert?
Back: SOCK_DGRAM, wobei DGRAM für **Datagram* steht.

Front: Was sind Vorteile von UDP?
Back: - Geringer Overhead
- Keine Verzögerung durch Verbindungsaufbau, Retransmits und ReorderingVorteile
- Keine Beeinflussung der Datenrate durch Fluss- und Staukontrollmechanismen

Front: Was sind Nachteile von UDP?
Back: - Kein Zusicherung von Dienstqualität
- Out-of-Order Delivery
- Keine Fluss- oder Staukontrolle

Front: Was ist die grundlegende Idee einer verbindungsorientierten Übertragung?
Back: Linear durchnummerierte Segemnete mittels Sequenznummern im Protokolheader.

Front: Was ermöglichen Sequenznummern?
Back: - Bestätigung erfolgreich übertragener Segmente
- Identifikation fehlender Segmente
- erneutes Anfordern fehlender Segmente
- Zusammensetzen der Segmente in richtiger Reihenfolge

Front: Was ist die Voraussetzung für die Verwendung von Sequenznummern?
Back: Sender und Empfänger müssen sich synchronisieren und Zustand halten.

Front: Welchen Einfluss können Fenstergrößen beim Sliding-Window-Verfahren haben?
Back: - Empfänger kann die Datenrate steuern (Flusskontrolle)
- Anpassung an die verfügbare Datenrate auf dem Übertragungspfad (Staukontrolle)

Front: Welche zwei Möglichkeiten gibt es beim Sliding-Window-Verfahren, um mit Segmentverlusten umzugehen?
Back: - Go-Back-N:
- Selective-Repeat:

Front: Wie funktioniert Go-Back-N?
Back: - Akzeptiert stets nur die nächste erwartete Sequenznummer
- Alle anderen Segmente werden verworfen

Front: Wie funktioniert Selective-Repeat?
Back: - Akzeptiert alle Sequenznummern, die in das aktuelle Empfangsfenster fallen
- Diese müssen gepuffert werden, bis fehlende Segmente erneut übertragen wurden

Front: Warum muss das Empfangsfenster bei Selective Repeat mindestens so groß sein, wie das Sendefenster?
Back: Der Empfänger könnte sonst u.U. Segmente verwerfen, die nicht in der richtigen Reihenfolge eintreffen. Infolge der zu geringen Größe fallen diese nicht mehr ins Empfangsfenster.

Front: Was ist der Unterschied zwischen Empfangsfenster und Empfangspuffer?
Back: Das Empfangsfenster ist eine Teilmenge des Sequenznummernraums. Alle eintreffenden Segmente mit Sequenznummern aus dieser Teilmenge werden akzeptiert.
Der Empfangspuffer ist nur der allozierte Speicherbereich zum zwischenspeichern der empfangenen Nutzdaten.

Front: Was muss für das Sendefenster bei Go-Back-N stets gelten?
Back: [$$]w_s \leq N - 1[/$$]

Front: Was muss für das Empfangsfenster bei Go-Back-N gelten?
Back: Da nur das nächste erwartete Segment akzeptiert wird, reicht ein Empfangsfenster der Größe [$]w_r = 1[/$] aus.

Front: Was muss für das Sendefenster bei Selective-Repeat stets gelten?
Back: [$$]w_s \leq \left\lfloor \frac{N}{2} \right\rfloor[/$$]

Front: Was muss für das Empfangsfenster bei Selective-Repeat stets gelten?
Back: [$$]w_s \leq w_r \leq \left\lfloor \frac{N}{2} \right\rfloor[/$$]

Front: Wie wird der TCP Handshake auch bezeichnet?
Back: 3-Way-Handshake

Front: Wofür ist das Offset Feld im TCP Header da?
Back: Gibt Länge des Headers in Vielfachen von 4B an.

Front: Wofür wird das ACK-Flag verwendet?
Back: Ist das Flag gesetzt, handelt es sich um eine Empfangsbestätigung.

Front: Kann eine Empfangsbestätigung in TCP auch mit weiteren Nutzdaten kombiniert werden?
Back: Ja. Dabei wird ACK und die Acknowledgement Number entsprechend gesetzt.

Front: Was gibt die Acknowledgement-Number bei TCP an?
Back: Das nächste erwartete Byte.

Front: Wann ist das PSH-Flag sinnvoll?
Back: Für interaktive Anwendungen.

Front: Welche Bedeutung hat ein gesetztes PSH flag?
Back: Sende- und empfangsseitige Puffer des TCP-Stacks werden umgangen.

Front: Wann wird das RST-Flag gesetzt?
Back: Bei Abbruch einer TCP-Verbindung ohne ordnungsgemäßen Verbindungsabbau.

Front: Welche Besonderheit haben das SYN und FINflag?
Back: Ein gesetztes SYN/FIN-Flag inkrementiert Sequenz- und Bestätigungsnummern um 1, obwohl keien Nutzdaten transportiert werden.

Front: Was ist das Receive Window Feld bei TCP?
Back: Größe des aktuellen Empfangsfenster in Byte

Front: Was gibt die MSS an?
Back: Maximale Größe eines TCP-Segments (Nutzdaten ohne TCP-Header) an.

Front: Wie sollte die MSS gewählt werden?
Back: MSS sollte so gewählt werden, dass keine IP-Fragmentierung beim Senden stattfindet.

Front: Was ist die maximale MSS bei folgender Konfiguration, sodass keine Fragmentierung auftritt?
- MTU: 1500B
- IPv4-Header: 20B
- TCP-Header: 20B
Back: 1500B - 20B - 20B = 1460B

Front: Was ist die maximale MSS bei folgender Konfiguration, sodass keine Fragmentierung auftritt?
- MTU: 1500B
- PPPoE-Header: 8B
- IPv4-Header: 20B
- TCP-Header: 20B
Back: 1500B - 8B - 20B - 20B = 1452B

Front: Wie wird die Flusskontrolle bei TCP realisiert?
Back: - Empfänger teilt dem Sender über das Receive Window Feld die aktuelle Größe des Empfangsfensters mit
- Sender interpretiert dies als die maximale Anzahl an Bytes, die ohne ein ACK übertragen werden dürfen

Front: Wie kann bei TCP die Übertragungsrate des Senders gedrosselt werden?
Back: Indem der Empfänger das Receive Window (im nächsten ACK) herabsetzt.

Front: Ist das Staukontrollfenster im TCP Header zu finden?
Back: Nein. Das Staukontrollfenster wird intern von Sender verwaltet.

Front: Wann wird das Staukontrollfenster vergrößert?
Back: Solange Daten verlustfrei übertragen werden.

Front: Wann wird das Staukontrollfenster verkleinert?
Back: Wenn Verluste bei der Übertragung auftreten.

Front: Was gilt für das tatsächliche Sendefenster?
Back: [$]w_s = \min{ w_c, w_r}[/$]

Front: Zwischen welchen zwei Phasen der Staukontrolle wird bei TCP grundsätzlich unterschieden?
Back: 1. Slow-Start
2. Congestion Avoidance

Front: Was passiert in der Slow-Start Phase bei der TCP Staukontrolle?
Back: - Für jedes bestätigte Segment wird das Congestion Window um eine MSS vergrößert.
- Bis Congestion Threshold erreicht ist.

Front: Warum wächst das Congestion Window in der Slow-Start Phase expoentiell?
Back: Wenn wir das Congestion Window (cwnd) als k * MSS betrachten und für jedes bestätigte Segment das cwnd um eine MSS vergrößern, wird cwnd nach jedem RTT verdoppelt.
[$$]W_c = 2^n * W_c0[/$$], wobei [$]n[/$] die Anzahl an RTs ist.

Front: Wer setzt den initialen Slow-Start Threshold (sstresh)?
Back: Der sstresh ist Abhängig von der TCP Implementierung, wird aber meistens zu einem großen vorgegebenen Wert, oder dem receive window des Empfängers gesetzt.

Front: Beschreibe die Congestion Avoidance Phase bei TCP!
Back: Für jedes bestätigte Segment wird das cwnd jediglich um (1/cwnd) MSS vergrößert. Nach einer RTT als um genau eine MSS.
Damit ein lineares Wachstum.

Front: Welche zusätzlichen Funktionen hat TCP Reno?
Back: - 3 duplizierte Bestätigungen (Duplicate ACKs)
- Timeout

Front: Was versteht man unter "3 duplizierte Bestätigungen" bei TCP Reno
Back: Wenn drei duplizierte Bestätigungen vom Empfänger gesendet werden:
1. Setze sstresh auf cwnd/2
2. Reduziere cwnd auf sstresh
3. Beginne mit Congestion Avoidance Phase

Front: Was versteht man unter der "Timeout" bei TCP Reno
Back: Wenn ein Timeout beim Senden auftritt:
1. Setze sstresh auf cwnd/2
2. Setze cwnd = 1 MSS
3. Beginne mit neuem Slow Start

Front: Wie groß muss das Sendefenster (gemessen in Byte) gewählt werden, damit kontinuierlich gesendet werden kann?
Back: Das erste ACK kann frühestens nach einer RTT eintreffen.
[$$]w_s \geq \text{RTT} \cdot r[/$$], wobei r die Bitrate.

Front: Müssen IP-Adressen immer eindeutig sein?
Back: Nein. z.B. wenn
- Kommunikation zum Internet nicht bestehen muss (isoliertes Internet) oder
- die nicht eindeutigen privaten IP-Adressen auf geeignete Weise in öffentliche Adressen übersetzt werden

Front: Definiere NAT.
Back: Network Address Translation sind Techniken zur Übersetzung von [$]N \geq 1[/$] auf [$]M \geq 1[/$] andere IP-Adressen.

Front: Wie funktioniert die Übersetzung von N privaten und M öffentlichen IP-Adressen bei [$]N \leq M[/$]?
Back: Jeder privaten IP-Adresse wird mind. eine öffentliche IP-Adresse zugeordnet.

Front: Wie funktioniert die Übersetzung von N privaten und M öffentlichen IP-Adressen bei [$]N > M[/$]?
Back: Port-Multiplexing. Wir assoziieren öffentliche Ports mit einer privaten IP-Adresse und einem privaten Port (muss nicht gleich sein).

Front: Was sind die vier privaten Adressbereiche bei IPv4?
Back: - 10.0.0.0/8
- 172.16.0.0/12
- 169.254.0.0/16
- 192.168.0.0/16

Front: Wie viele Einträge kann eine NAT-Tabelle fassen?
Back: 2^16 pro Transportprotokoll (TCP und UDP) und pro globaler IP-Adresse.

Front: Was ist, wenn das Transportprotokoll keine Portnummern hat oder IP-Pakete ohne TCP-/UDP-Header verschickt werden, z. B. ICMP?
Back: Die ICMP-ID kann anstelle der Portnummern genutzt werden.

Front: Was repräsentiert struct in_addr?
Back: Eine IPv4-Adresse in Network Byte Order.

Front: Wie kann eine struct sock_addr_in local; Instanz konfiguriert werden, damit von allen lokal konfigurierten Interfaces empfangen werden kann?
Back: local.sin_addr.s_addr = htonl(INADDR_ANY);

Front: Was macht socket(AF_INET ,SOCK_DGRAM ,IPPROTO_UDP)?
Back: Es wird ein neuer Socket vom Typ:
- AF_INET: IPv4 Socket
- SOCK_DGRAM: Datagram-oriented Socket
- IPPROTO_UDP: UDP

Front: Was macht bind()?
Back: Assoziiert einen File Descriptor mit den zugehörigen Adressinformationen (Meistens Adresse und Port).

Front: Welche Möglichkeiten gibt es bei Linux, einen Socket zu überwachen?
Back: - read() auf dem Socket
- select() oder pselect()
- epoll()

Front: Was ist das Problem von read()?
Back: read() blockiert, solange bis etwas kommt.

Front: Wie funktioniert select()?
Back: 1. Alle zu überwachenden File Descriptors kommen in fd_sets
2. select() wird mit diesen Sets aufgerufen.
3. Passiert etwas, modifiziert select() die fd_sets, so dass es genau die FDs enthält, die bereit sind
4. Rückgabewert ist die Anzahl bereitgewordener FDs oder -1 und errno gesetzt.

Front: Warum gibt es epoll()?
Back: Bei einer großen Anzahl von FDs wird select() ggf. ineffizient.

Front: Gegeben fd_set rfds, rfd; wie kann rfds mit 0 intialisiert werden?
Back: FD_ZERO(&rfds

Front: Gegeben fd_set rfds, rfd; wie kann ein FD zu rfds hinzugefügt werden?
Back: FD_SET(fd, &rfds);

Front: Wie werden FD sets typischerweise Implementierung?
Back: Als Bitvektoren.

Front: Wie muss das erste Argument nfds bei select() gesetzt werden, wenn wir zwei FDs (4 und 17) in einem FD set haben?
Back: nfds = max(4, 17) + 1, da select() alle FDs von 0 bis nfds - 1 inspiziert.

Front: Welches Problem entsteht, wenn wir read()oder recv() auf verbindungslosen Sockets verwenden?
Back: Wir werden so nie erfahren, wer uns etwas geschickt hat. Dafür gibt es sendto() und recvfrom().

Front: Wie unterscheiden sich recvfrom() und recv()?
Back: Wir können recvfrom() einen Pointer zu einem Speicherbereich der Größe sizeof(struct sockaddr_in) übergeben, um Information über den Sender zu bekommen (hier IPv4).

Front: Wofür wird connect() bei einem verbindungsorientierten Socket benutzt?
Back: Verbinden mit einem entfernten Host.

Front: Was macht ein Aufruf zu listen() bei einem verbindungsorientierten Socket?
Back: Markiert den Socket als passiv. Socket versendet keine Daten, sondern erwartet eingehende Verbindungen.

Front: Warum sind bei verbindungsorientierten Sockets recv() und send() read() und write() zu bevorzugen?
Back: Hier werden bestimmte Ausnahmen wie eine abgebrochene Verbindung sinnvoll signalisiert.

Front: Was sind Einschränkungen der vorgestellten UDP-Chat Codedemo?
Back: - Nur 1:1 Chats
- Fremde können einem der beiden Chatpartner ebenfalls Nachrichten senden (antworten aber nicht möglich)

Front: Was ist bei dem UDP-basierten IRC möglich?
Back: - N:N chats
- Zusammenarbeit mit den unmodifizierten UDP-Chat Clients.