Ein Teil des ganzen Bazens

TCP

TCP (Transmission Control Protocol) ist das verbindungsorientierte Protokoll der Transportschicht. Es stellt eine Verbindung von einem Rechner zu einem anderen her ungeachtet der Zwischenstationen, die die einzelnen Pakete in der darunter liegenden Schicht nehmen müssen.

TCP arbeitet Vollduplex und ist kein Broadcast-Protokoll. Es arbeitet Punkt zu Punkt. Es mact eine Fehlerüberprüfung mittels Prüfsumme und Bestätigungen und regelt den Datenfluss per Flusskontrolle.

Fehlerkontrolle

Jedes Byte wird bei TCP bestätigt. Der Empfänger antwortet immer mit einer Bestätigungsnummer, die auf das nächste erwartete Byte zeigt. Um Spoofing zu erschweren, wird beim Beginn einer Verbindung mit einer zufälligen Nummer begonnen.

ACK = SEQ + Anzahl empfangene Bytes.

Bei TCP muss nicht jedes Paket einzeln bestätigt werden. Durch ein Sliding Window kann der Sender mehere Pakete senden bevor er eine Bestätigung vom Empfänger braucht. Dieser kann mit einem ACK alle auf einmal bestätigen (ACK Delay).

Bei TCP gibt es auch die Möglichkeit nur bestimmte Segmente neu anzufordern (SACK).

Flusskontrolle

TCP arbeitet mit einem dynamischen Sliding Window, dass sich beim Empfänger in erster Linie auf die Größe des vorhandenen Puffers bezieht. Der Empfänger teilt dem Sender regelmäßig mit, wie groß dieser Puffer ist. Ist der Puffer voll darf der Sender nichts mehr senden und muss darauf warten, dass er vom Empfänger Bescheid bekommt, dass wieder etwas frei ist. Um zu vermeiden, dass bei einem Überlasteten Empfänger sehr viele kleine Pakete geschickt werden (Silly Window Syndrom), sendet der Empfänger erst eine Nachricht über seinen zuvor voll gewesenen Puffer, wenn er zu mindestens 25% leer ist oder bis die MSS (Maximum Segement Size) erreicht ist. Dieses verfahren nennt man Silly Window Syndrom Avoidance.

Genauso muss der Sender die Daten, die von der Anwendung kommen nicht unbedingt sofort in kleinen Segmenten losschicken, sondern kann einige Daten sammeln und diese dann gemeinsam losschicken. Ist kein PSH-Flag gesetzt wird solange gewartet bis die MSS erreicht ist oder ein ACK auf ein vorhergehendes Segment angekommen ist.

Dynamische RTO

Durch unterschiedlich schneller Netze in den unteren Schichten ist es bei TCP nicht sinnvoll einen festen Retransmission Timeout zu setzen. Statt dessen wird ständig die aktuelle RTT (Round Trip Time) gemessen und eine gemittelte (smoothed) RTO berechnet:

TS,i = alpha x TS,i-1 + (1 - alpha) x TRTT

TRTT: aktuell gemessen RTT

alpha: Faktor, meißtens 0.9

Daraus wird eine RTO (TR)berechnet:

TR= min(Tmax, max(Tmin, beta x TS,i))

beta: Faktor, z.B. 2

Tmin, Tmax: Unter- und Obergrenze

Überlastüberwachung

TCP ist auch für die Überlastüberwachung zuständig. Um langsam anzutesten, wie viel das Netz verträgt, wird der sogenannte "Slow-Start" angewendet. Gleichzeitig passt der Sender sein Sendefenster dynamisch an um das Netz nicht zu überlasten. Gehen Pakete verloren, wird dies angenommen und das Fenster wird verkleinert und somit langsamer gesendet. Diese Funktion nennt man Congestion Avoidance

TCP Header

Quellport und Zielport

Je 16 Bit für den Quell- und Zielport. So kann die entsprechende Anwendung bei den Rechnern angesteuert werden. Für bestimmte Dienste gibt es von der IANA festgelegte Ports, z.B. HTTP = Port 80.

Sequenznummer

32 Bit für die Sequenznummer. Sie beginnt bei einem zufälligen Wert und erhöht sich jeweils um die Anzahl der gesendeten Bytes.

SEQi = SEQi-1 + Anzahl gesendet Bytes in Segment SEQi-1

Bestätigungsnummer (ACK)

Bei TCP steht hier immer das nächste erwartete Daten-Byte

Header-Length

Die Header-Länge in 32 Bit Worten (4Bit)

Control Flags

  • URG: Das Segement enthält dringende Daten, die sofort weitergeleitet werden sollen. Wo diese dringende Daten sich befinden sagt der Urgent Pointer
  • ACK: Das Segment enthält eine Bestätigungsnummer
  • PSH: Daten sollen nicht gepuffert werden
  • RST: Zum Abbrechen der Verbindung
  • SYN: Zum eingehen einer Verbindung
  • FIN: Zum geordneten Abbauen einer Verbindung

Window Size

16 Bit für die Anzahl der Bytes, die der Empfänger im Puffer frei hat.

Prüfsumme

16 Bit für die Prüfsumme des Headers (die IP wird hier mit eingerechnet)

Urgent-Pointer

Zeiger auf Vorrangdaten in den Nutzdaten

Zusätzliche Optionen

Variable Optionen in nx32 Bit.

Three Way Handshake (Verbindungsaufbau)

Zum Verbindungsaufbau wird in TCP ein Three-Way-Handshake verwendet.

  1. S: SYN, SEQ = 234
  2. E: SYN, ACK 235, SEQ 567
  3. S: ACK 568, SEQ 234

Verbingungsabbau

Zum Abbau einer Verbindung wird bei TCP auch ein Drei-Wege-Handshake angewendet.

  1. A: will abbauen, zuerst Puffer leeren
  2. A: FIN, SEQ = 234, ACK 789
  3. B: ACK 235, SEQ 789
  4. B: Puffer leeren ...
  5. B: ACK 235 FIN, SEQ XYZ