|
|
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) |
Zeile 8: |
Zeile 8: |
| |- | | |- |
| | Header || Steuerung der Kommunikation | | | Header || Steuerung der Kommunikation |
| * Typische Header eine Größe: 20 Byte (Ohne Nutzung des Options-Felds) | | * Typische Header-Größe: 20 Byte (Ohne Nutzung des Options-Felds) |
| |- | | |- |
| | Payload || Nutzlast | | | Payload || Nutzlast |
Zeile 77: |
Zeile 77: |
| Werte werden in der [[Byte-Reihenfolge]] [[Big-Endian]] angegeben | | Werte werden in der [[Byte-Reihenfolge]] [[Big-Endian]] angegeben |
|
| |
|
| === Felder des TCP-Header ===
| | == Felder des TCP-Header == |
| {| class="wikitable options" | | {| class="wikitable options" |
| ! Feld !! Funktion !! Größe | | ! Feld !! Funktion !! Größe |
Zeile 136: |
Zeile 136: |
| |} | | |} |
|
| |
|
| ==== TCP-Flags ====
| | == TCP-Flags == |
| {| class="wikitable options" | | {| class="wikitable options" |
| ! Feld !! Funktion !! Größe | | ! Feld !! Funktion !! Größe |
Zeile 187: |
Zeile 187: |
| |----- | | |----- |
| |} | | |} |
|
| |
| ==== Flags ====
| |
| * Sechs 1-Bit-Felder zur Steuerung der Verbindung
| |
| * URG
| |
| * Urgent: Der Urgent-Pointer wird verwand
| |
| * ACK
| |
| * Achnowledgement: Die Bestätigung ist gültig
| |
| * PSH
| |
| * Push: Daten werden beim Empfänger nicht gepuffert
| |
| * RST
| |
| * Reset: Verbindung wird zurückgesetzt (Ungültiges Segment, Hostabsturz oder Verbindungsablehnung)
| |
| * SYN
| |
| * Synchronise Sequenze Number: Verbindungsaufbau
| |
| * FIN
| |
| * Finish: Verbindungsabbau
| |
|
| |
| == Aufbau des TCP-Headers ==
| |
| === Erläuterung ===
| |
| [[Datei:TCP Header.svg|mini|Abb. 5: Aufbau des TCP-Headers]]
| |
|
| |
| ; {{lang|en|''Source Port''}} (Quellport) (2 Byte)
| |
| : Gibt die ''Portnummer'' auf der Senderseite an.
| |
| ; {{lang|en|''Destination Port''}} (Zielport) (2 Byte)
| |
| : Gibt die ''Portnummer'' auf der Empfängerseite an.
| |
| ; {{lang|en|''Sequence Number''}} (4 Byte)
| |
| : ''[[Sequenznummer]]'' des ersten Daten-[[Oktett (Informatik)|Oktetts]] (''Byte'') dieses TCP-Pakets oder die ''Initialisierungs-Sequenznummer'' falls das SYN-Flag gesetzt ist. Nach der Datenübertragung dient sie zur Sortierung der TCP-Segmente, da diese in unterschiedlicher Reihenfolge beim Empfänger ankommen können.
| |
| ; {{lang|en|''Acknowledgement Number''}} (Quittierungsnummer) (4 Byte)
| |
| : Sie gibt die ''[[Sequenznummer]]'' an, die der Absender dieses TCP-Segmentes als Nächstes erwartet. ''Sie ist nur gültig, falls das [[ACK (Signal)|ACK-Flag]] gesetzt ist.''
| |
| ; {{lang|en|''Data Offset''}} (4 Bit)
| |
| : ''Länge des TCP-Headers'' in 32-Bit-Blöcken – ohne die Nutzdaten (''Payload''). Hiermit wird die Startadresse der Nutzdaten angezeigt.
| |
| ; Reserved (4 Bit)
| |
| : Das ''Reserved''-Feld ist für zukünftige Verwendungen reserviert. Alle Bit müssen null sein.
| |
| ; Control-[[Flag (Informatik)|Flags]] (8 Bit)
| |
| : Sind zweiwertige Variablen mit den möglichen Zuständen ''gesetzt'' und ''nicht gesetzt'', die zur Kennzeichnung bestimmter für die Kommunikation und Weiterverarbeitung der Daten wichtiger Zustände benötigt werden. Im Folgenden werden die Flags des TCP-Headers und die von ihrem Zustand abhängigen, auszuführenden Aktionen beschrieben.
| |
| :; CWR und ECE
| |
| :: sind zwei Flags, die für [[Explicit Congestion Notification]] (ECN) benötigt werden. Mit gesetztem ECE-Bit (ECN-Echo) teilt der Empfänger dem Sender mit, dass das Netzwerk überlastet ist und die Senderate reduziert werden muss. Hat der Sender das getan, teilt er dies dem Empfänger durch Setzen des CWR-Bit (''{{lang|en|Congestion Window Reduced}}'') mit.
| |
| :; URG
| |
| :: Ist das Urgent-Flag ''(urgent = dringend)'' gesetzt, so werden die Daten nach dem Header sofort von der Anwendung bearbeitet. Dabei unterbricht die Anwendung die Verarbeitung der Daten des aktuellen TCP-Segments und liest alle Bytes nach dem Header bis zu dem Byte, auf das das ''Urgent-[[Zeiger (Informatik)|Pointer]]''-Feld zeigt, aus. Dieses Verfahren ist fern verwandt mit einem [[Softwareinterrupt]]. Dieses Flag kann zum Beispiel verwendet werden, um eine Anwendung auf dem Empfänger abzubrechen. Das Verfahren wird nur äußerst selten benutzt, Beispiele sind die bevorzugte Behandlung von CTRL-C (Abbruch) bei einer Terminalverbindung über [[Remote login|rlogin]] oder [[telnet]].
| |
| :: In der Regel wird dieses Flag nicht ausgewertet.
| |
| :; ACK
| |
| :: Das ''Acknowledgment''-Flag hat in Verbindung mit der ''Acknowledgment''-Nummer die Aufgabe, den Empfang von TCP-Segmenten beim Datentransfer zu bestätigen. Die ''Acknowledgment''-Nummer ist nur gültig, wenn das Flag gesetzt ist.
| |
| :; PSH
| |
| :: RFC 1122 und RFC 793 spezifizieren das ''Push''-Flag so, dass bei gesetztem Flag sowohl der ausgehende, als auch der eingehende Puffer übergangen wird. Da man bei TCP keine Datagramme versendet, sondern einen Datenstrom hat, hilft das PSH-Flag, den Strom effizienter zu verarbeiten, da die empfangende Applikation so gezielter aufgeweckt werden kann und nicht bei jedem eintreffenden Datensegment feststellen muss, dass Teile der Daten noch nicht empfangen wurden, die aber nötig wären, um überhaupt weitermachen zu können.
| |
| :: Hilfreich ist dies, wenn man zum Beispiel bei einer [[Telnet]]-Sitzung einen Befehl an den Empfänger senden will. Würde dieser Befehl erst im Puffer zwischengespeichert werden, so würde dieser (stark) verzögert abgearbeitet werden.
| |
| :: Das PSH-Flag kann, abhängig von der TCP-Implementation im Verhalten zu obiger Erklärung abweichen.
| |
| :; RST
| |
| :: Das ''Reset''-Flag wird verwendet, wenn eine Verbindung abgebrochen werden soll. Dies geschieht zum Beispiel bei technischen Problemen oder zur Abweisung unerwünschter Verbindungen (wie etwa nicht geöffneten Ports, hier wird – anders als bei UDP – kein ICMP-Paket mit „Port Unreachable“ verschickt).
| |
| :; SYN
| |
| :: Pakete mit gesetztem SYN-Flag initiieren eine Verbindung. Der Server antwortet normalerweise entweder mit SYN+ACK, wenn er bereit ist, die Verbindung anzunehmen, andernfalls mit RST. Dient der Synchronisation von ''Sequenznummern'' beim Verbindungsaufbau (daher die Bezeichnung SYN).
| |
| :; FIN
| |
| :: Dieses Schlussflag (''finish'') dient zur Freigabe der Verbindung und zeigt an, dass keine Daten mehr vom Sender kommen. Die FIN- und SYN-Flags haben Sequenznummern, damit diese in der richtigen Reihenfolge abgearbeitet werden.
| |
| ; [[RWin|(Receive) Window]] (2 Byte)
| |
| : Ist – nach Multiplikation mit dem [[RWin#TCP Window Scale Option|Fensterskalierungsfaktor]] – die Anzahl der Daten-[[Oktett (Informatik)|Oktetts]] (''Bytes''), beginnend bei dem durch das ''Acknowledgementfeld'' indizierten Daten-Oktett, die der Sender dieses TCP-Pakets bereit ist zu empfangen.
| |
| ; Checksum (2 Byte)
| |
| : Die ''[[Prüfsumme]]'' dient zur Erkennung von Übertragungsfehlern und wird über den TCP-Header, die Daten und einen Pseudo-Header berechnet. Dieser Header besteht aus der Ziel-IP, der Quell-IP, der TCP-Protokollkennung (0x0006) und der Länge des TCP-Headers inkl. Nutzdaten (in Bytes).
| |
| ; {{lang|en|''Urgent Pointer''}} (2 Byte)
| |
| : Zusammen mit der Sequenz-Nummer gibt dieser Wert die Position des ersten Bytes ''nach'' den Urgent-Daten im Datenstrom an. Die Urgent-Daten beginnen sofort nach dem Header. Der Wert ist nur gültig, wenn das URG-Flag gesetzt ist.
| |
| ; Options (0–40 Byte)
| |
| : Das Options-Feld ist unterschiedlich groß und enthält Zusatzinformationen. Die Optionen müssen ein Vielfaches von 32 Bit lang sein. Sind sie das nicht, muss mit Nullbits aufgefüllt werden ({{lang|en|''Padding''}}). Dieses Feld ermöglicht, Verbindungsdaten auszuhandeln, die nicht im TCP-Header enthalten sind, wie zum Beispiel die Maximalgröße des Nutzdatenfeldes.
| |
|
| |
|
| [[Kategorie:TCP]] | | [[Kategorie:TCP]] |
|
| |
| = TMP =
| |
| ==== TCP-Header im Detail ====
| |
| * Sender-Port
| |
| 16-Bit-Adresse des Quell-Sockets
| |
| * Empfänger-Port
| |
| 16-Bit-Adresse des Ziels (Service)
| |
| Endpunkte der TCP-Verbindung
| |
| * Sequenznummer
| |
| 32-Bit-Zahl zur Indentifizierung gesendeter Datensegmente
| |
| * Quittungsnummer (Achnowledgment Number)
| |
| * Gibt an bis zu welchem Byte Daten korrekt empfangen wurden, indem der Empfänger übermittelt, welche Byte als nächstes erwartet wird
| |
| * Länge (Data Offset/Header Length)
| |
| * Länge des TCP-Kopfes in 32Bit-Worten
| |
| * Wegen der variablen Länge des Optionsfeldes notwendig
| |
|
| |
| * Fenstergröße
| |
| * Fenstergröße in Byte ab dem bereits bestätigtem Byte
| |
| * Flusssteuerung
| |
| * wird vom Host je nach Belastung dynamisch festgelegt
| |
| * Prüfsumme über
| |
| * TCP-Paketkopf
| |
| * Daten
| |
| * Teile des IP-Paketkopfes (Pseudo-Header)
| |
| * IP-Quell- und Ziel-Adresse
| |
| * Protokollnummer (06)
| |
| * TCP-Segmentlänge
| |
| * Die Einbeziehung des Pseudo-Headers in die Prüfsumme hilft durch IP falsch zugeteilte Pakete zu erkennen
| |
| * Der TCP-Header im Detail 4
| |
| * Urgent-Zeiger
| |
| * Ergibt zusammen mit der Sequenznummer einen Zeiger auf das Ende von dringenden Daten, die vor den eigentlichen Nutzdaten stehen
| |
| * Wird nur bei gesetztem URG-Flag gelesen
| |
| * Optionen
| |
| * No-Option
| |
| * Maximum Segment Size (MSS)
| |
| * Maximale Anzahl von Nutzdaten die ein Host annehmen will oder kann
| |
| * Wird bei beim Verbindungsaufbau ausgetauscht
| |
| * Der kleinere Wert wird verwandt
| |
| * Default ist 536 Byte
| |
| * End of Option List
| |
| * Füllzeichen
| |
| * auf die nächste 32-Bit-Grenze wird mit Nullen aufgefüllt
| |
| * Nutzdaten
| |
| * Daten höherer Protokolle (z. B. http)
| |
Transmission Control Protocol/Segment
Beschreibung
- Teile eine TCP-Segments
Teil |
Beschreibung
|
Header |
Steuerung der Kommunikation
- Typische Header-Größe: 20 Byte (Ohne Nutzung des Options-Felds)
|
Payload |
Nutzlast
- Zu übertragenden Daten
- Header und Payload der Anwendungsschicht (HTTP, FTP ...)
|
- TCP-Segment
Werte werden in der Byte-Reihenfolge Big-Endian angegeben
Feld |
Funktion |
Größe
|
Source Port (Quellport)
|
Gibt die Portnummer auf der Senderseite an
|
2 Byte
|
Destinations Port (Zielport)
|
Gibt die Portnummer auf der Empfängerseite an.
|
2 Byte
|
Sequence Number
|
Sequenznummer des ersten Daten-Oktett dieses TCP-Segments, dient zur Sortierung Oder die Initialisierungs-Sequenznummer falls das SYN-Flag gesetzt ist
|
4 Byte
|
Acknowledgement Number
|
Gibt die Sequenznummer an, die der Absender dieses TCP-Segments als Nächstes erwartet Sie ist nur gültig, falls das ACK-Flag gesetzt ist.
|
4 Byte
|
Data Offset
|
Gibt die Länge des TCP-Headers in 32-Bit-Blöcken an (ohne Nutzdaten).
- Hiermit wird die Startadresse der Nutzdaten angezeigt.
|
4 Bit
|
Reserved
|
Ist für zukünftige Verwendungen reserviert.
- Alle Bit müssen null sein.
|
4 Bit
|
Control-Flags
|
Zweiwertige Variablen mit den Zuständen gesetzt und nicht gesetzt.
- Kennzeichnung für die wichtigen Zustände der Kommunikation und Weiterverarbeitung der Daten.
|
8 Bit
|
(Receive) Window
|
Ist die Anzahl der Bytes die der Sender dieses TCP-Segments bereit ist zu empfangen.
- Beginnend bei dem durch das Acknowledgementfeld indizierten Daten-Oktett.
|
2 Byte
|
Checksum
|
Dient zur Erkennung von Übertragungsfehlern.
- Wird über den TCP-Header, die Daten und einen Pseudo-Header berechnet.
- Der Header besteht aus Ziel-IP, Quell-IP, TCP-Protokollkennung (0x0006) und der Länge des TCP-Headers inkl. Nutzdaten (in Bytes).
|
2 Byte
|
Urgent Pointer
|
Nur gültig, wenn das URG-Flag gesetzt ist.
- Die Urgent-Daten beginnen sofort nach dem Header
- Zusammen mit der Sequenz-Nummer gibt dieser Wert die Position des ersten Bytes nach den Urgent-Daten an.
|
2 Byte
|
Options
|
Unterschiedlich groß und enthält Zusatzinformationen.
- Müssen ein Vielfaches von 32 Bit lang sein, ansonsten muss mit Nullbits aufefüllt werden (Padding).
- Ermöglicht Verbindungsdaten auszuhandeln, die nicht im TCP-Header enthalten sind, wie z. B. die Maximalgröße des Nutzdatenfeldes.
|
0–40 Byte
|
TCP-Flags
Feld |
Funktion |
Größe
|
ECE-Flag (ECN-Echo)
|
Teilt dem Sender mit, dass das Netzwerk überlastet ist und die Senderate reduziert werden muss.
- Wird für Explicit Congestion Notification (ECN) benötigt
|
1 Bit
|
CRW-Flag (Congestion Window Reduced)
|
Teilt dem Empfänger mit das die Senderate reduziert wurde.
- Wird für Explicit Congestion Notification (ECN) benötigt
|
1 Bit
|
URG-Flag (Urgent)
|
- Die Daten nach dem Header werden sofort von der Anwendung bearbeitet.
- Anwendung unterbricht die Datenverarbeitung des aktuellen TCP-Segments und liest alle Bytes nach dem Header bis zu dem Byte, auf das das Urgent-Pointer -Feld zeigt, aus.
- Kann verwendet werden, um eine Anwendung auf dem Empfänger abzubrechen.
- In der Regel wird dieses Flag nicht ausgewertet.
|
1 Bit
|
ACK-Flag (Acknowledgment)
|
Hat in Verbindung mit der Acknowledgment-Nummer die Aufgabe, den Empfang von TCP-Segmenten bestätigen.
- Die Acknowledgment-Nummer ist nur gültig, wenn das Flag gesetzt ist.
|
1 Bit
|
PSH-Flag (Push)
|
Sowohl der ausgehende, als auch der eingehende Puffer wird übergangen.
- Hilft den Datenstrom von TCP effizienter zu verarbeiten, indem die empfangende Applikation gezielter aufgeweckt werden kann.
- RFC 1122 & RFC 793
|
1 Bit
|
RST-Flag (Reset)
|
Wird verwendet, wenn eine Verbindung abgebrochen werden soll.
- z. B. bei technischen Problemen oder zur Abweisung unerwünschter Verbindungen
- Oder bei nicht geöffneten Ports, es wird kein ICMP-Paket mit „Port Unreachable“ verschickt.
|
1 Bit
|
SYN-Flag (Synchronize)
|
Pakete mit diesem Flag initiieren eine Verbindung.
- Dient der Synchronisation von Sequenznummern beim Verbindungsaufbau.
- Server antwortet normalerweise mit SYN+ACK oder RST.
|
1 Bit
|
FIN-Flag (Finish)
|
Schlussflag, dient zur Freigabe der Verbindung, zeigt an, dass keine Daten vom Sender kommen.
- FIN- und SYN-Flags haben Sequenznummern, damit diese in der richtigen Reihenfolge abgearbeitet werden.
|
1 Bit
|