Transmission Control Protocol Einleitung: Da das Internet zu seinen

Werbung
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)
Herunterladen