Das tcp/ip protokoll
TCP/IP
RFC 793/791
PRRU-Referat
Inhalt
1. DAS INTERNET-PROTOKOLL (À IP, RFC 791) 3
1.1 Merkmale von IP 3
1.2 Das Paketformat von IP 3
1.3 Der Aufbau von IP-Paketen 3
2. DAS TRANSMISSION CONTROL PROTOCOL (À TCP, RFC 793) 4
2.
1 Merkmale von TCP 4
2.2 Das Paketformat von TCP 4
2.3 Identifikation von Sender und Empfänger 6
2.4 Aufbau einer TCP-Verbindung 6
2.5 Abbau einer TCP-Verbindung 8
2.6 Der Paketversand 9
3.
QUELLEN 9
1. Das Internet-Protokoll (à IP, RFC 791)
1.1 Merkmale von IP
Das IP-Protokoll stellt auf der Schicht 2 des ISO/OIS-Schichtenmodells den Transport von Datenpaketen zur Verfügung.
Dieser Transport ist
verbindunslos und
nicht abgesichert
Verbindungslos ist der Transport deshalb, weil keine feste Verbindung zwischen Sender und Empfänger besteht. Das IP-Protokoll vergewissert sich vor dem Schicken der Daten nicht ob der Empfänger bereit ist die Daten zu empfangen, sondern via IP schickt eine Internet-Anwendung die Pakete einfach über das Netz. Das erste Paket an den einen, das zweite an den anderen Empfänger und das dritte wieder an den ersten Empfänger.
Eine feste Verbindung wird dazu weder benötigt noch hergestellt.
Nicht abgesichert ist der Transport via IP, weil keine Gewähr übernommen wird, dass das Paket auch beim richtigen Empfänger ankommt. Zwar gibt sich das System die größte Mühe mittels dem Internet Control Message Protocol (à ICMP, RFC 792) Fehler in der Übertragung zu vermeiden bzw. zu melden, allerdings ist augrund des verbindungslosen Zustandes auch nicht gesichert, dass die Fehlermeldung beim richtigen Empfänger ankommt.
1.2 Das Paketformat von IP
4 Bit
4 Bit
4 Bit
4 Bit
4 Bit
4 Bit
4 Bit
4 Bit
Version
HLen
Service Type
Total Length
Identification
Flags
Fragment Offset
Time to live
Protocol
Header Checksum
Source IP Adress
Destination IP Adress
Optionen (variabel)
Padding
1.
3 Der Aufbau von IP-Paketen
Version (4 Bit): Version des IP-Protokolls (derzeit 4)
HLen (4 Bit): Länge des IP-Kopfes in DWords
Service Type (8 Bit): Priorität eines Paketes; Merkmale der Übertragungsweges
Total Length (16 Bit): Gesamtlänge des IP-Paketes (Nutzdaten+Overhead) in Bytes
Identification (16 Bit): Nummerierung der einzelnen Fragmente eines IP-Pakets
Flags (3 Bit)
Fragment Offset (13 Bit): Start der Daten innerhalb eines Fragments
Time to live (8 Bit): Lebensdauer eines Pakets
Protocol (8 Bit): Art des Pakets, das in IP-Paket enthalten ist
Header Checksum (16 Bit): Checksumme über den Kopf des IP-Pakets
Sourced IP Adress (32 Bit):
Destination IP Adress (32 Bit)
Optionen (variable): IP-Optionen
Padding (n*8Bit): Füllbyte, um auf DWord-Länge zu kommen
2. Das Transmission Control Protocol (à TCP, RFC 793)
2.1 Merkmale von TCP
2.1.1 Verbindung von Anwendung zu Anwendung
Die Endpunkte einer TCP-Kommunikation werden durch eine IP-Adresse und eine Portnummer gekennzeichnet. Die IP-Adresse sorgt dafür, dass die Datenpakete zum richtigen Host kommen, die Portnummer wiederum ist dafür Zuständig, dass die Daten am Host zur richtigen Anwendung kommt.
Mit dieser Funktionsweise ist es möglich das mehrere Internet-Anwendungen auf einem Host gleichzeitg meherer TCP-Verbindungen mit anderen Anwendungen auf anderen Hosts zu unterhalten.
2.1.2 Sichere, virtuelle Verbindung
TCP knüpft eine virtuelle Verbindung zwischen den beiden Endpunkten der Verbindung, die mehr einer Telefonverbindung gleicht, als dem „blinden“ Versand von IP-Paketen. Im Rahmen des TCP-Protokolls die beiden Kommunikationspartner Informationen aus um fehlerhaft übertragene oder verloren gegangene Pakete zuerkennen und den Fehler zu beheben.
2.
1.3 Voll Duplex
Die Kommunikation ist in beide Richtungen möglich, d.h. dass beide Partner können gleichzeite Senden und Empfangen.
2.1.
4 Flexible Paketgrößen
Die Übertragung von Daten mittels TCP ist nicht an bestimmte Größen gebunden. Die theoretische Paketgröße liegt im Bereich von einem Byte bis zu mehreren Megabyte.
2.2 Das Paketformat von TCP
4 Bit
4 Bit
4 Bit
4 Bit
4 Bit
4 Bit
4 Bit
4 Bit
Source Port
Destination Port
Seqeuenze Number
Acknowledgment Number
Data Offset
Reserved
Control Bits
Window
Checksumme
Urgent Pointer
Optionen
Padding
Source Port (16 Bit)
Der Port auf Seiten des Absenders, über den der TCP-Strom läuft.
Destination Port (16 Bit)
Der Port auf Seiten des empfängers, an dem der TCP-Strom landet.
Sequence Number (32 Bit)
Sorgt für die richtigte Einordnung des Segments im TCP-Strom.
Mit ihrer Hilfe kann man erkennen, ob ein Segment fehlt.
Acknowledgment Number (32 Bit)
Diese Information teilt der Gegenseite welche Sequence Number als nächstes im TCP-Strom folgt.
Data Offset (4 Bit)
Dieses Feld zeigt die Größe des TCP-Headers in DWORDs (32-Bit-Einheiten) an. Damit kann man ermitteln, wo die eigentlichen Nutzdaten beginnen.
Reserviert (6 Bit)
Dieses Feld ist für zukünftige Nutzung vorbehalten à muß Null sein
Control Bits (6 Bit)
Bezeichnet Inhalt und Aufgabe des TCP-Kopfes
Folgende Einstellungen der Bits sind möglich (von links nach rechts)
URG=1 à Das Segment enthält dringende Daten (urgent data), der Inhalt des Feldes Urgent Pointer ist zu beachten.
ACK=1 à Das Feld enthält ein Acknowledge
PSH=1 à empfangene Daten sofort weitergeben (push)
RST=1 à Verbindung zurücksetzten (reset)
SYN=1 à Verbindungsaufbau und Synchronisation der Sequence-Numbers
FIN=1 à Verbindung schließen
Window (16 Bit)
Anzahl der Bytes, die der Absender bereit ist zu empfangen.
Checksumme (16 Bit)
Checksumme über Header
Urgent Pointer (16 Bit)
Bei TCP-Segmenten, bei denen das URG-Flag gesetzt ist, gibt diese Feld den Offset der ersten „normalen“ Daten an, die sich hinter den dringenden Daten befinden.
Optionen (variable Länge)
TCP definiert hat zur Zeit drei Arten von Optionen:
„End of Option List“ à Wert: 0 (1 Byte)
Dieses Feld zeigt an, das keine weiteren Optionen folgen
„No-Option List“ à Wert: 2 (1 Byte)
Dieses Feld dient zur Trennung zwischen zwei Optionen, z.B damit die nächste Option an der Word-Grenze beginnt.
„Maximum Segment Size“ à Wert: 2 (1 Byte) + Länge: 4 (1 Byte) + Segment (2 Byte)
Hier wird die maximal Segmentgröße angegeben. Dieses Feld wird vorallem beim Verbindungsaufbau benutzt.
Padding (variable Länge)
Füll-Bytes à wird benötigt, damit der TCP-Header immer auf 32-Bit endet.
2.3 Identifikation von Sender und Empfänger
Da die eigentlichen IP-Adressen schon im Kopf des IP-Pakets gespeichert wird, verzichtet man auf eine weiter Speicherung im TCP-Header. Im TCP-Header werden nur die Port-Informationen gespeichert. Aus den IP-Adressen und den Portnummern ist es möglich eine eindeutige Verbindung zwischen Sendern und Empfänger aufzubauen.
2.4 Aufbau einer TCP-Verbindung
Bei der TCP-Verbindung kommt der sogenannte „three-way-handshake“ zum Einsatz.
Das bedeutet, das drei TCP-Segmente nötig sind um eine Verbindung aufzubauen.
Wenn Host A eine Verbindung zu Host B aufbauen will, dann schickt er ein TCP-Paket, indem das SYN-Flag gesetzt ist. Dadurch erkennt Host B, dass jemand eine TCP-Verbindung mit ihm aufbauen will. Weiters ist es nötig, dass am Host B ständig ein Programm wacht, dass einen bestimmten Port überwacht und feststellt, ob jemand auf diesem Port eine Verbindung aufbauen will.
Wie schon erwähnt schickt Host A ein TCP-Paket, in dem das SYN-Flag und das Sequence Number-Feld mit der Sequence Number gesetzt ist. Daten sind in der Regel nicht enthalten.
Ist die Gegenseite zur Verbindungsaufnahme bereit, antwortet sie mit einem TCP-Segment, in dessen Header sowohl das SYN- als auch das ACK-Flag gesetzt ist. Das ACK steht für Acknowledgment, also für Bestätigung des SYN der Gegenseite. Gleichzeitig wird im Acknowledgment Number-Feld die initiale Sequence Nummer plus 1 des Empfängers angegeben. Im Sequence Number-Feld wird die Sequence Number des Empfänger mitgeschickt.
Die abschließende Nachricht vom Sender der Kommunikation dient dazu, um die gewünschte Sequence Number zu bestätigen. Hierzu schickt der Sender beide Sequence-Number (seine und die des Empfängers) plus 1 zurück.
Beispiel: Host A will Verbindung mit Host B aufnehmen
TCP A TCP B
1. CLOSED LISTEN
2. SYN-SENT à <SEQ#=100> à SYN-RECEIVED
<CTL=SYN>
3. ESTABLISHED ß <SEQ#=300><ACK#=101> ß SYN-RECEIVED
<CTL=SYN,ACK>
4. ESTABLISHED à <SEQ#=101><ACK#=301> à ESTABLISHED
<CTL=ACK>
5. ESTABLISHED à <SEQ#=101><ACK#=301> à ESTABLISHED
<CTL=ACK><DATA>
Anfangszustand
Ein Host A ist inaktiv (geschlossen); Host B wartet auf einen Verbindungsaufbau
Verbindungsaufbau von Host A
Host A sendet ein Paket indem das SYN-Flag gesetzt ist und gleichzeitig sendet er seine Sequence Number mit (in dem Beispiel 100).
Host B empfängt das gesendete Paket
Bestätigung von Host B
Host B sendet seinerseits ein Paket, indem sowohl das ACK- als auch das SYN-Flag gesetzt ist.
Zur Bestätigung, dass er die Sequence Number von Host A erhalten hat, schickt er sie im ACK-Feld mit, allerdings um eins erhöht. In „seinem“ Sequence-Feld schickt er die eigene Sequence Number mit (à 300).
Wenn Host A dieses Paket besteht von seiner Seite steht die Verbindung zu Host B.
Nochmalige Bestätigung von A
Damit auch eine Verbindung von B nach A aufgebaut wird, müssem noch ein letzes Mal die beiden Nummern bestätigt werden.
Host A sendet dazu ein Paket mit gesetztem ACK-Flag.
Die Sequence Number ist nun 101, die ACK-Number 301.
Kommt das Paket am Host B an, steht die Verbindung auch zu Host A.
Daten verschicken
Host A schickt zu Host B Daten.
Mögliche Sonderfälle
Beide Host wollen gleichzeitig eine Verbindung aufbauen
Neuaufbau einer „abgestürzten“ Verbindung
Behandlung von halbgeöffnete Verbindungen
2.5 Abbau einer TCP-Verbindung
Um den Verbindungsabbauch zu verstehen, muß man eine wichtige Eigenschaft des TCP-Protokolls vestehen.
Da eine TCP-Verbindung eine „voll duplex“-Verbindung darstellt, besteht eine Verbindung eigentlich aus zwei seperaten Verbindungen.
Einmal von A nach B und zum anderen eine von B nach A. Wenn also „A“ die Verbindung schließen will, ist damit nur die Verbindung von A nach B betroffen.
Die Seite A schickt ein TCP-Paket, indem das FIN-Flag gesetzt ist. Mit Erhalt des Pakets informiert die TCP-Software von B die jeweilige Anwendung, dass die Verbindung geschlossen werden soll und daher keine weiteren Daten verschickt werden können. B bestätigt den Erhalt des FIN-Pakets und wiederholt den gesamten Vorgang von seiner Seite aus. Damit werden beide Teile einer Verbindung geschlossen.
Natürlich werden auch hier laufende Sequence- und Acknowledgements Numbers verschickt.
Beispiel: User schließt Verbindung
TCP A TCP B
1. ESTABLISHED ESTABLISHED
2. (Close)
FIN-WAIT-1 à <SEQ=100><ACK=300> à CLOSE-WAIT
<CTL=FIN,ACK>
3. FIN-WAIT-2 ß <SEQ=300><ACK=101> ß CLOSE-WAIT
<CTL=ACK>
4. (Close)
TIME-WAIT ß <SEQ=300><ACK=101> ß LAST-ACK
<CTL=FIN,ACK>
5.
TIME-WAIT à <SEQ=101><ACK=301> à CLOSED
<CTL=ACK>
LINK CLOSED
Beschreibung:
FIN-WAIT-1
Bedeutet, dass Host A auf ein FIN-Paket von Host-B wartet, oder auf die Bestätigung des von ihm gesendeten FIN-Pakets.
FIN-WAIT-2
Host A wartet auf die Bestätigung des FIN-Pakets
CLOSE-WAIT
Der Host B wartet auf den Verbindungsabbruch durch den User
LAST-ACK
Der Host wartet auf Bestätigung seines FIN-Pakets
TIME-WAIT
Host A wartet eine Zeit damit er sicher sein kann, dass Host B auch seinen Wunsch zum Beenden des Verbindung bekommen hat.
In diesem Fall kann das FIN-Paket an einer beliebigen Stelle des ausgehenden TCP-Stroms stehen. Sobald das FIN-Paket versendet wurde, werden keine weiteren Pakete verschickt. Der Host, der das FIN-Flag verschickt hat (à Host A), wird in den FIN-WAIT 1 Zustand versetzt, dass bedeutet, dass weiterhin ankommende Pakete entgegengenommen werden und alle bisherigen Pakete, inklusive des FIN-Pakets, werden bei Verlust neu verschickt.
Wenn vom anderen Host (à Host B) das FIN-Paket bestätigt hat, sendet er seinerseits ein FIN-Paket, um auch die Verbindung von seiner Seite abzubauen, diese FIN-Paket muß natürlich auch von Host A bestätigt werden.
Zu beachten ist hierbei, dass Host B seinerseite erst ein FIN-Paket senden wird, wenn der User die Verbindung auf seiner Seite schließen will.
Mögliche Sonderfälle
Verbindungsabbruch durch den Remote-Host
Gleichzeitiger Verbindungsabbruch
2.6 Der Paketversand
Nachdem die Verbindung aufgebaut ist besteht der Datenstrom aus dem Austausch von Segmenten. Da natürlich auch einzelne Segmente verloren gehen können, arbeitet TCP mit wiederholten Sendung von verlorenen Segmenten. Außerdem kann es zu doppelten Paketen kommen, auch dieses Problem korrigiert TCP.
Wie schon öfters erwähnt ist die Sequence Number eines der wichtigsten Elemente im TCP-Protokoll.
Sie wird nicht nur beim Verbindungsauf- und abbau verwendet sondern auch bei dem eigentlichen Paketversand. Durch diese Nummer kann bestimmt werden, welche Pakete noch fehlen und damit ist es möglich die Daten korrekt zu übermitteln.
3. Quellen
Internet Intern
TCP/IP Tutorial and Technical Overview (à Internet)
RFC 791 (Request for comments über IP)
RFC 793 (Request for comments über TCP)
Anmerkungen: |
| impressum | datenschutz
© Copyright Artikelpedia.com