Transmission Control Protocol Einleitung: müssen. Durch Erhalt einer Quittung rutsch das Fenster weiter und kann weitersenden, wobei durch gleichzeitiges Senden und Quittieren ein Parallelismus erreicht wird, der einen hohen Datendurchsatz erreicht. Der TCP-Header: Da das Internet zu seinen Anfängen und auch heute noch ein unzuverlässiger Netzverbund Die Abbildung zeigt ein Segment , welches immer mit einem 20-byte-Header beginnt (IPist, wurde das verbindungsorientierte (verbindungslos -> UDP) Protokoll TCP entwickelt, Header), gefolgt von einem weiteren 20-byte-Header (TCP-Header). Segmente ohne Daten um mit den verschiedenen Anforderungen fertig zu werden. TCP ist formell in RFC 793 sind zulässig und werden als Bestätigungen benutzt. Im Folgenden werden die einzelnen definiert und einige Erweiterungen und Fehlerbehebungen in RFC 1122 und 1323. Felder des TCP-Headers beschrieben. Die Idee von TCP ist, einen Datenstrom zu erzeugen, der von TCP verwaltet und – Source Port / Destination Port: Identifizieren die lokalen Endpunkte der Verbindung überwacht wird. Dazu nimmt TCP Benutzerdatenströme von lokalen Prozessen entgegen durch Portnummern. und teilt sie in maximal 64 Kbyte große Stücke auf und sendet jedes Stück als getrenntes IP-Datengramm. Kommen diese an einem Rechner an, werden sie an TCP weitergegeben, – Sequenz Number / Acknowledgement Number: Jeweils ein 32-bit-Wort, das die das die Stücke wieder zusammensetzt. Stellung der Daten in der Verbindung angibt in Senderichtung, und die Quittungsnummer, die die Anzahl von Bytes angibt, die empfangen wurden. Da IP keine Sicherheit gewährt, das seine Pakete in richtiger Reihenfolge oder überhaupt ankommen, muss TCP die Fähigkeit besitzen, mit diesen Problemen fertig zu werden und – TCP-Header-Length/Offset: Bezeichnet den Anfang der Daten im Segment, gemessen eine Sicherheit bieten, die IP bisher nicht bereitstellen kann. Dieses wird durch die in 32-bit-Wörtern, welche die Header-Länge in Worten sind. Diese Information ist Implementierung von Bestätigungen und Timern sichergestellt. Auf jedes Byte folgt eine erforderlich, da das Options-Feld eine variable Länge hat. Bestätigung (ACK) der anderen Seite, so dass TCP genau weiss, welche Daten auf der anderen Seite angekommen sind und welche erneut gesendet werden müssen. Wurde ein – Reserved: Das Feld ist 6-bit lang und wird nicht benutzt. Das es das Feld immer noch gibt, belegt es, wie gut TCP ausgelegt ist. Paket gesendet, startet TCP jedesmal einen Timer. Wenn keine Bestätigung eingegangen ist, bevor der Timer abgelaufen ist, versendet TCP das Paket erneut . Mit diesen ACK's – Es folgen sechs 1-Bit-Flags: verhindert TCP, dass Pakete verloren gehen und ein sicherer Datentransport gewährleistet - URG: Wenn gesetzt, wird angedeutet, dass wichtige Daten folgen. wird. - ACK: Auf 1 gesetzt bedeutet ACK, dass die Bestätigungsnummer gültig ist. Auf 0 enthält das Segment keine Bestätigung und ACK wird ignoriert. Portnummern: - PSH: Ist das Bit gesetzt, werden PUSH-Daten bezeichnet, die der Anwendung des Wichtig ist, dass TCP und UDP verschiedene Adressräume haben,d.h. Die gleiche Empfängers sofort zugestellt werden sollen. Portnummer ist trotzdem nicht die gleiche Adresse. Der Gültikgeitsbereich einer - RST: Wird benutzt, um eine Verbindung zurückzusetzen, oder einen Portnummer ist auf einen Host beschränkt. Netzwerknummer, Host-ID und Portnummer Verbindungswunsch abzuweisen. spezifieren zusammen eine Kommunikationsendpunkt, auch Socket genannt. Diese Socktnummern identifizieren Quelle und Ziel einer Verbindung. - SYN: Das SYN-Bit wird benutzt, um eine Verbindung aufzubauen. Die Verbindungsanfrage hat SYN=1 und ACK=0, um zu bezeichnen, dass das Feld keine Es gibt sogenannte „well-known port numbers“, die Diensten fest zugewiesen sind und die weiteren Bestätigungen enthält. Die Antwort hat SYN=1 und ACK=1, was im unter den Portnummern von 0 – 1023 zu finden sind. Ausserdem gibt es die registered Gesamten soviel bedeutet wie Connection Request und Connection Accepted. Ports von 1024 – 49151 und die dynamischen Ports von 49152 – 65535. - FIN: Das Fin-Bit bezeichnet einseitig das Verbindungsende. Das heisst, die Sliding Window: Verbindung wird von einer Seite geschlossen und die andere kann so lange Durch das Prinzip des Sliding-Window wird TCP überhaupt erst effizient und kann seinen weitersenden, bis sie Ihrerseits das FIN-Bit sendet. (SYN und FIN haben erwünschten Datenstrom realisieren. Jede Seite einer Verbindung darf die Anzahl an Bytes Folgenummern, so dass sie auf jeden Fall in der richtigen Reihenfolge verarbeitet senden, die im Fenster angeben ist, ohne auf eine Quittung von der anderen Seite warten zu werden). – Window: Das Feld ist ein Fenster mit variabler Größe, die bezeichnet, wie viele Bytes ab dem bestätigten Byte gesendet werden können (0 bedeutet Sendepause). – Checksum: Bietet die Zuverlässigkeit von TCP, indem es den Header, die Daten und den konzeptionellen Pseudo-Header mit einem bestimmten Algorithmus überprüft. – Urgent Pointer: Zusammen mit der Sequenz Number ergibt URG auf 1 gesetzt einen Pointer, der auf ein Datenbit zeigt, welches das Ende eines Nachrichtenabschnitts sein soll und dem wichtige Daten folgen, die möglichst gleich von der empfangenen Instanz gelesen werden sollten. Diese Funktion wird als Urgent Data bezeichnet. Host A Host B Send SYN seq=x Receive SYN segment Send SYN seq=y, ACK x+1 Receive SYN + ACK segment Send ACK y+1 Receive ACK segment Options: Gibt die maximale Größe der TCP-Nutzdaten an, die jede Seite verarbeiten kann. Diese werden verglichen und die kleinere Zahl gewinnt, damit beide Seiten alles Verbindungsabbau: bearbeiten können. Beim Verbindungsabbau sind nicht drei sondern vier Segmente nötig und daher wird der – Füllzeichen/Padding: Wenn das Feld Optionen gültig ist, wird mit Hilfe von Verbindungsabbau auch „modified three way handshake“ genannt. Füllzeichen sicher gestellt, dass die Daten an einer Position, deren Bitzahl ein – Vielfaches von 32 ist, beginnen, damit das Feld Offset den Beginn des Datenfeldes korrekt angeben kann. Headerabbildung siehe letzte Seite! Verbindungsaufbau: Wenn Host A die Verbindung beenden möchte, verschickt er ein Segment indem das FINFlag gesetzt ist. Host B sendet ein Bestätigungssegment mit gesetztem ACK- Flag. Analog zum Verbindungsaufbau wird auch hier die Sequence number des vorherigen Segments um 1 erhöht. Die Verbindung ist nun „half- close“, d.h. Daten von Host B können noch an Host A fließen. Der Verbindungsaufbau wird auch „three way handshake“ genannt, da drei Segmente benötigt werden um eine Verbindung aufzubauen. (s. Grafik) Wenn Host B nun die Verbindung auch abbauen möchte wird wie im ersten Schritt ein Segment verschickt mit gesetzten FIN- Flag. Host A bestätigt den Verbindungsabbau mit dem letzten Segment indem das ACK- Flag gesetzt ist. Host A initiiert den Verbindungsaufbau. Es wird ein Segment an Host B geschickt, indem Die Verbindung ist nun vollkommen abgebaut. das SYN- Flag gesetzt ist. Zusätzlich wir eine „Sequence number“ ermittelt (Wert beliebig). Host B bestätigt den Erhalt des Segments, indem ein Segment verschickt wird mit gesetztem ACK- Flag. Die Sequence number des vorherigen Segments wird um 1 erhöht, damit Host A die Bestätigung eindeutig zuordnen kann. Im gleichen Segment wird auch das SYN- Flag gesetzt, was bedeutet dass der Verbindungsaufbau fortgesetzt werden soll. Dieser Vorgang wird „piggy backing“ genannt. Das letzte Segment ist wiederum eine Bestätigung. Es wird von Host A verschickt und nur das ACK- Flag gesetzt. Die Verbindung ist hergestellt und Daten können ausgetauscht werden. Hier ist keine Reihenfolge festgelegt. Host A Host B Send FIN seq=x Receive FIN segment Send ACK x+1 Receive ACK segment Send FIN seq=y Receive FIN Send ACK y+1 Receive ACK segment Was passiert bei einem Verbindungsabbruch? Ein Verbindungsabbruch kann mehrere Gründe haben. Ein Nutzer kann z.B. seinen Rechner einfach ausschalten ohne ihn beim Server abzumelden oder es kann ein Netzwerkkabel entfernt werden. Bei einem Verbindungsabbruch gehen angeforderte Daten verloren. Zustandsgraph: Bei der obigen Grafik handelt es sich um den TCP- Zustandsgraphen. Hier werden alle Schritte des Verbindungsauf- und ab- baus illustriert. Beim Verbindungsabbau ist folgendes zu erläutern: Nachdem Host B ein FIN- Segment an Host A gesendet hat ist Host B im LAST_ACK Zustand und wartet auf ein ACK- Segemnt von Host A. Host A ist im FIN_WAIT_2 Zustand (half-close) erhält das FIN- Segment von Host B und sendet ein ACK- Segment. Host A ist nun im TIME_WAIT Zustand. Wichtig: im TIME_WAIT Zustand verweilt Host A maximal 240sec (2MSL), falls sein ACK- Segment verloren geht sendet Host B ein erneutes FIN- Segment, was auf jeden Fall während der 240sec. bei Host A angekommen ist und dieser wiederum ein ACK- Segment versenden kann. Sollte kein erneutes FIN- Segment bei Host A eintreffen wird die Verbindung geschlossen. closed listen Keep- Alive Timer od. Segment: Syn_RCV Syn_SENT Um zu überprüfen ob eine erfolgreiche Kommunikation mit einem Host möglich ist, schickt der Server in regelmäßigen Abständen (i.d.R. 90sec.) sogenannte „Keep- Alive Segmente“. Diese müssen von dem verbundenen Host bestätigt werden. Werden sie nach einigen Wiederholungen nicht bestätigt, wird die TCP- Verbindung zurückgesetzt. Established Close_Wait Quellen: TCP/IP Illustrated - R. Stevens TCP/IP – Kevin Washburn, Jim Evans Fin_Wait1 Fin_Wait2 Last_ACK Time_Wait (2MSL)