Registrieren
x

Log in

Benutzername:

Passwort:
 

oder Registrieren

  Passwort vergessen?



Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
TCP Paper by st4cky
19-07-2010, 03:24 PM
Beitrag #1
TCP Paper by st4cky
+------------------------+
| TCP Paper |
| by st4cky |
+------------------------+

Hallo zusammen hier erzähle ich euch ein bischen was über das TCP Protokoll Smile
Man könnte sich zwar auch einfach den Wikipedia Artikel durchlesen aber manchmal ist es gut mehrere Quellen zu haben.

Inhaltsverzeichnis:
1. Was ist TCP?
2. 3 Wege Handshake
3. Verbindungsabbau



1. Was ist TCP?
---------------

Das TCP Protokoll ist im Gegensatz zum UDP Protokoll verbindungsorientiert d.h. es wird darauf geachtet das keine Pakete verloren gehen
oder besser gesagt das der Empfänger jedes Paket mindestens einmal erhält.
Außerdem unterstützt TCP Ports das ist sinnvoll da so mehrere Programme gleichzeitig im Internet "arbeiten" können.
So können sie z.B. mit ihrem FTP Client ein Tutorial zum HTTP Protokoll herunter laden währen sie gleichzeitig mit ihrem Browser bei Google nach einem Buch über C suchen.
bei unserem Beispiel werden die Ports 21/20 (FTP Kontrolle und Daten) und 80 (für das HTTP Protokoll) benutzt die Ports von 1-1024 sind so genannte "well known ports" und werden zentral vergeben. Man kann natürlich auch auf Port 55555 auf einen Webserver zugreifen aber das währe etwas ungewöhnlich und wird wohl eher nicht klappen da bei Webservern meist nur der Port 80 offen ist.
insgesamt gibt es 65536 verschiedene Ports die im Prinzip alle eine Verbindung aufbauen/annehmen könnten, was in der Praxis aber eher nicht vorkommt.
so das ist es eigentlich wofür das TCP Protokoll zuständig ist.
an dieser stelle möchte ich gerne noch einen TCP Header einfügen:

DAS TCP PROTOKOLL:
--------------------------------------------------------
| IP Header |
--------------------------------------------------------
| Quell Port | Ziel Port |
--------------------------------------------------------
| Sequence Nummer |
--------------------------------------------------------
| Acknowledgement Nummer |
--------------------------------------------------------
| Data Offset | Reserviert(meist == 0)| Flags | Window |
--------------------------------------------------------
| Checksumme | Urgent Pointer |
--------------------------------------------------------
| Optionen |
--------------------------------------------------------
| Nutzlast (hier kommt dann meist der nächste Header) |

2. 3 Wege Handshake
-------------------
Der drei Wege Handshake hat seinen Namen bekommen da er in 3 Schritten eine Verbindung aufbaut.
Eine Verbindung aufzubauen ist nötig da so keine Pakete verloren gehen.
So wie wird jetzt eine Verbindung aufgebaut?
Der Client Rechner (also der Rechner der eine Verbindung zum Server aufbaut schickt ein Packet mit einem
gesetztem SYN Flag und einer Sequence Number an den Server das SYN Flag ist unter Flags zu finden (in unserem Header)
hier sind alle Flags die im TCP Header gesetzt werden können:
-------------------------------
|URG||ACK||PUSH||RST||SYN||FIN|
-------------------------------
was passiert jetzt?
Nachdem der Server vom Client das Paket mit gesetztem SYN Flag und einer Seq. Nummer bekommen hat schickt er ein Paket mit
gesetztem SYN und ACK Flag zurück die SYN Nummer enthält eine beliebige Zahl und die ACK Nummer ist die SYN Nummer des empfangenem Pakets + 1 so der Letzte Schritt des Verbindungsaufbaus besteht jetzt darin dass der Client auch ein Paket mit
einem gesetztem ACK und SYN Flag verschickt wobei hier wieder eins zu jeder Nummer Addiert wird.
und genau so sieht das dann auch bei der Datenübertragung aus das SYN Flag ist immer die Nummer die für das Paket steht und
das ACK Flag bestätigt immer ein Paket das empfangen wurde indem es eins zu der SYN Nummer hinzu addiert.
hier nochmal ein kleine Schaubild zum Drei-Wege-Handshake:
SYN + SYN = x
Client --------------------------------------> Server
SYN+ACK und SYN = y ACK = x++
Client <-------------------------------------- Server
SYN+ACK und SYN = x++ ACK = y++
Client --------------------------------------> Server

nach diesen 3 Schritten kommt der Datenaustausch der eigentlich auch nur bei jedem Paket x + 1 und y + 1 hat
wenn jetzt ein Paket verloren geht wird es am anderem Ende bemerkt da eine Lücke in der Zahlenreihe entsteht.
Passiert das fordert ein Verbindungspartner den anderen auf das Paket nochmal zu schicken.
Wenn ein Paket doppelt empfangen wurde wird es einfach verworfen.


Verbindungsabbau
----------------
Wenn jetzt jetzt der Client oder Server die Verbindung schließen möchte läuft das so ähnlich wie bei dem Aufbau einer Verbindung ab.

Das ganze läuft dann so ab:
Der Partner der die Verbindung beenden möchte verschickt ein Paket mit gesetztem FIN Flag und einer SEQ-Nummer an sein gegenüber.
Ab hier gibt es dann 2 Möglichkeiten:
Entweder es wird ein Paket mit einem ACK Flag und einer ACK Nummer (y++) zurück geschickt und dann sofort ein Paket mit einem FIN Flag hinterher geschoben, oder das wird beides in einem Paket erledigt.
Der letzte Schritt ist dann noch die Bestätigung des Paketes mit dem FIN Flags und dann ist die TCP Verbindung abgebaut.

hier nochmal ein Bildchen:
(der Client beendet die Verbindung)
FIN SEQ-NUMMER = x
Client --------------------------------------------> Server
FIN SEQ-NUMMER = y ACK ACK-NUMMER = x++
Client <-------------------------------------------- Server
ACK ACK_NUMMER = y++
Client --------------------------------------------> Server

so das war es dann auch schon...
------------------------------------------

MFG st4cky[/code]
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste

Kontakt   Anti-Hack - Gemeinsam gegen DDoS, Spam und Hacker   Nach oben   Zum Inhalt   Archiv-Modus   RSS-Synchronisation   Impressum