Test: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| Zeile 1: | Zeile 1: | ||
| − | = | + | = Transmission Control Protocol (TCP) = |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | =TCP Header= | + | TCP ist ein verbindungsorientiertes, zuverlässiges Transportprotokoll (RFC 793). Es garantiert die Zustellung der Daten in der korrekten Reihenfolge und regelt die Übertragungsgeschwindigkeit je nach Netzlast. |
| − | {|class="wikitable" style="text-align:center; | + | |
| + | == Adressierung über Ports == | ||
| + | * TCP leitet Daten an die korrekte Applikation weiter. | ||
| + | * Portnummern: 16 Bit (0 bis 65535). | ||
| + | * TCP und UDP nutzen getrennte Adressräume. | ||
| + | * '''Socket:''' Kombination aus IP-Adresse und Portnummer (Kommunikationsendpunkt). | ||
| + | * '''Verbindung:''' Eindeutig identifiziert durch das 5-Tupel {Quell-IP, Quell-Port, Ziel-IP, Ziel-Port, Protokoll}. | ||
| + | |||
| + | === Portbereiche === | ||
| + | * '''Well-known Ports (0 - 1023):''' Reserviert für Standarddienste (z. B. HTTP 80, SSH 22). Zugriff nur durch Root/Administrator. | ||
| + | * '''Registered Ports (1024 - 49151):''' Für spezifische Anwendungen registriert. | ||
| + | * '''Dynamic/Private Ports (49152 - 65535):''' Vom Betriebssystem für kurzzeitige Client-Verbindungen vergeben. | ||
| + | |||
| + | == TCP Header == | ||
| + | |||
| + | {|class="wikitable" style="text-align:center;" | ||
!colspan="32"|32 Bit | !colspan="32"|32 Bit | ||
|- | |- | ||
| − | |colspan="16 | + | |colspan="16"|Source Port || colspan="16"|Destination Port |
| − | |colspan="16 | ||
|- | |- | ||
| − | |colspan="32"|Sequence Number | + | |colspan="32"|Sequence Number (SN) |
|- | |- | ||
| − | |colspan="32"| | + | |colspan="32"|Acknowledgment Number (ACK SN) |
|- | |- | ||
| − | |colspan="4"|Offset | + | |colspan="4"|Offset || colspan="6"|Reserved || colspan="6"|Flags || colspan="16"|Window Size |
| − | |colspan="6"|Reserved | ||
| − | |colspan="6"|Flags | ||
| − | |colspan="16"|Window | ||
|- | |- | ||
| − | |colspan="16"|Checksum | + | |colspan="16"|Checksum || colspan="16"|Urgent Pointer |
| − | |colspan="16"|Urgent Pointer | ||
|- | |- | ||
| − | |colspan=" | + | |colspan="32"|Options (0-40 Byte) & Padding |
| − | |||
|- | |- | ||
| − | |colspan="32" style="background-color:yellow"|Data | + | |colspan="32" style="background-color:yellow"|Data (Payload) |
|} | |} | ||
| + | === Erläuterung der Header-Felder === | ||
| + | * '''Source / Destination Port (je 2 Byte):''' Identifiziert Sender- und Empfängeranwendung. | ||
| + | * '''Sequence Number (4 Byte):''' Zeiger auf die Position im Datenstrom. Bei SYN-Flag: Initial Sequence Number (ISN). Dient der Sortierung beim Empfänger. | ||
| + | * '''Acknowledgment Number (4 Byte):''' Bestätigt den Erhalt aller Bytes bis zu diesem Wert minus eins. Gibt an, welches Byte als Nächstes erwartet wird. (Nur gültig, wenn ACK-Flag gesetzt). | ||
| + | * '''Data Offset (4 Bit):''' Länge des TCP-Headers in 32-Bit-Worten (notwendig wegen variabler Options-Länge). | ||
| + | * '''Window Size (2 Byte):''' Flusssteuerung (Flow Control). Gibt an, wie viele Bytes der Empfänger aktuell noch puffern kann (Sliding Window). | ||
| + | * '''Checksum (2 Byte):''' Fehlererkennung über Header, Daten und IP-Pseudo-Header. | ||
| + | * '''Urgent Pointer (2 Byte):''' Zeigt auf das Ende von Vorrangdaten im Datenstrom (nur bei URG-Flag). | ||
| + | |||
| + | === Control Flags (6 Bit) === | ||
| + | * '''SYN:''' Synchronize – Aufbau einer Verbindung und Abgleich der Sequenznummern. | ||
| + | * '''ACK:''' Acknowledgment – Bestätigung des Empfangs; Acknowledgment Number ist gültig. | ||
| + | * '''FIN:''' Finish – Ordentliches Beenden der Verbindung. | ||
| + | * '''RST:''' Reset – Abrupter Abbruch der Verbindung (Fehlerfall). | ||
| + | * '''PSH:''' Push – Daten sofort an die Anwendung durchreichen, Pufferung umgehen. | ||
| + | * '''URG:''' Urgent – Markiert Daten als besonders dringlich. | ||
| + | |||
| + | == Verbindungssteuerung == | ||
| − | == | + | === Drei-Wege-Handschlag (3-Way-Handshake) === |
| − | + | # Client sendet '''SYN''' (mit zufälliger ISN). | |
| − | + | # Server antwortet mit '''SYN + ACK''' (bestätigt Client-ISN und sendet eigene ISN). | |
| + | # Client bestätigt mit '''ACK'''. | ||
| + | * Der Zustand der Verbindung wechselt auf '''ESTABLISHED'''. | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | = | + | === Verbindungsabbau === |
| − | + | # Eine Seite sendet '''FIN'''. | |
| − | + | # Gegenseite bestätigt mit '''ACK''' und sendet später eigenes '''FIN'''. | |
| − | + | # Initiator bestätigt das letzte '''FIN''' mit '''ACK'''. | |
| − | |||
| − | |||
| − | |||
| − | = | + | === Datenübertragung und Sequenznummern === |
| − | * | + | * Sequenznummern (SN) sind in beiden Richtungen unabhängig. |
| − | *Die | + | * Ein gesetztes SYN- oder FIN-Flag erhöht die SN logisch um 1. |
| − | * | + | * Beispiel: Client sendet 20 Bytes Daten. Die SN erhöht sich von n auf n+20. |
| − | + | * Die Acknowledgment Number (ACK SN) der Gegenseite bestätigt dies durch Rücksendung des Wertes n+20. | |
| − | |||
| − | = | + | == Zuverlässigkeitsmechanismen == |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | === Retransmission (Fehlerkorrektur) === | |
| + | * '''Timeout (RTO):''' Wenn innerhalb einer Zeitspanne kein ACK eintrifft, wird das Segment erneut gesendet. | ||
| + | * '''Fast Retransmit:''' Erhält der Sender drei identische ACKs (Duplicate ACKs), wird das fehlende Segment sofort erneut gesendet, ohne auf den Timeout zu warten. | ||
| + | |||
| + | === Überlaststeuerung (Congestion Control) === | ||
| + | * '''Slow Start:''' TCP beginnt mit einer kleinen Datenmenge und steigert diese exponentiell. | ||
| + | * '''Congestion Avoidance:''' Bei Paketverlust wird die Senderate reduziert, um Netzüberlastung zu vermeiden. | ||
| + | |||
| + | === Maximum Segment Size (MSS) === | ||
| + | * Wichtigste Option im Header. | ||
| + | * Gibt die maximale Größe der Nutzdaten an (meist 1460 Byte), damit das Paket ohne Fragmentierung in einen Ethernet-Frame (1500 Byte MTU) passt. | ||
| + | |||
| + | == Analyse == | ||
| + | In Wireshark lassen sich der Handshake, die gleitenden Fenster (Sliding Window) und die Sequenznummern-Verläufe visualisieren. | ||
[[Datei:tcp12.png|900px]] | [[Datei:tcp12.png|900px]] | ||
| − | |||
| − | |||
| − | |||
[[Datei:wireshark.png]] | [[Datei:wireshark.png]] | ||
Version vom 29. März 2026, 10:49 Uhr
Transmission Control Protocol (TCP)
TCP ist ein verbindungsorientiertes, zuverlässiges Transportprotokoll (RFC 793). Es garantiert die Zustellung der Daten in der korrekten Reihenfolge und regelt die Übertragungsgeschwindigkeit je nach Netzlast.
Adressierung über Ports
- TCP leitet Daten an die korrekte Applikation weiter.
- Portnummern: 16 Bit (0 bis 65535).
- TCP und UDP nutzen getrennte Adressräume.
- Socket: Kombination aus IP-Adresse und Portnummer (Kommunikationsendpunkt).
- Verbindung: Eindeutig identifiziert durch das 5-Tupel {Quell-IP, Quell-Port, Ziel-IP, Ziel-Port, Protokoll}.
Portbereiche
- Well-known Ports (0 - 1023): Reserviert für Standarddienste (z. B. HTTP 80, SSH 22). Zugriff nur durch Root/Administrator.
- Registered Ports (1024 - 49151): Für spezifische Anwendungen registriert.
- Dynamic/Private Ports (49152 - 65535): Vom Betriebssystem für kurzzeitige Client-Verbindungen vergeben.
TCP Header
| 32 Bit | |||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Source Port | Destination Port | ||||||||||||||||||||||||||||||
| Sequence Number (SN) | |||||||||||||||||||||||||||||||
| Acknowledgment Number (ACK SN) | |||||||||||||||||||||||||||||||
| Offset | Reserved | Flags | Window Size | ||||||||||||||||||||||||||||
| Checksum | Urgent Pointer | ||||||||||||||||||||||||||||||
| Options (0-40 Byte) & Padding | |||||||||||||||||||||||||||||||
| Data (Payload) | |||||||||||||||||||||||||||||||
Erläuterung der Header-Felder
- Source / Destination Port (je 2 Byte): Identifiziert Sender- und Empfängeranwendung.
- Sequence Number (4 Byte): Zeiger auf die Position im Datenstrom. Bei SYN-Flag: Initial Sequence Number (ISN). Dient der Sortierung beim Empfänger.
- Acknowledgment Number (4 Byte): Bestätigt den Erhalt aller Bytes bis zu diesem Wert minus eins. Gibt an, welches Byte als Nächstes erwartet wird. (Nur gültig, wenn ACK-Flag gesetzt).
- Data Offset (4 Bit): Länge des TCP-Headers in 32-Bit-Worten (notwendig wegen variabler Options-Länge).
- Window Size (2 Byte): Flusssteuerung (Flow Control). Gibt an, wie viele Bytes der Empfänger aktuell noch puffern kann (Sliding Window).
- Checksum (2 Byte): Fehlererkennung über Header, Daten und IP-Pseudo-Header.
- Urgent Pointer (2 Byte): Zeigt auf das Ende von Vorrangdaten im Datenstrom (nur bei URG-Flag).
Control Flags (6 Bit)
- SYN: Synchronize – Aufbau einer Verbindung und Abgleich der Sequenznummern.
- ACK: Acknowledgment – Bestätigung des Empfangs; Acknowledgment Number ist gültig.
- FIN: Finish – Ordentliches Beenden der Verbindung.
- RST: Reset – Abrupter Abbruch der Verbindung (Fehlerfall).
- PSH: Push – Daten sofort an die Anwendung durchreichen, Pufferung umgehen.
- URG: Urgent – Markiert Daten als besonders dringlich.
Verbindungssteuerung
Drei-Wege-Handschlag (3-Way-Handshake)
- Client sendet SYN (mit zufälliger ISN).
- Server antwortet mit SYN + ACK (bestätigt Client-ISN und sendet eigene ISN).
- Client bestätigt mit ACK.
- Der Zustand der Verbindung wechselt auf ESTABLISHED.
Verbindungsabbau
- Eine Seite sendet FIN.
- Gegenseite bestätigt mit ACK und sendet später eigenes FIN.
- Initiator bestätigt das letzte FIN mit ACK.
Datenübertragung und Sequenznummern
- Sequenznummern (SN) sind in beiden Richtungen unabhängig.
- Ein gesetztes SYN- oder FIN-Flag erhöht die SN logisch um 1.
- Beispiel: Client sendet 20 Bytes Daten. Die SN erhöht sich von n auf n+20.
- Die Acknowledgment Number (ACK SN) der Gegenseite bestätigt dies durch Rücksendung des Wertes n+20.
Zuverlässigkeitsmechanismen
Retransmission (Fehlerkorrektur)
- Timeout (RTO): Wenn innerhalb einer Zeitspanne kein ACK eintrifft, wird das Segment erneut gesendet.
- Fast Retransmit: Erhält der Sender drei identische ACKs (Duplicate ACKs), wird das fehlende Segment sofort erneut gesendet, ohne auf den Timeout zu warten.
Überlaststeuerung (Congestion Control)
- Slow Start: TCP beginnt mit einer kleinen Datenmenge und steigert diese exponentiell.
- Congestion Avoidance: Bei Paketverlust wird die Senderate reduziert, um Netzüberlastung zu vermeiden.
Maximum Segment Size (MSS)
- Wichtigste Option im Header.
- Gibt die maximale Größe der Nutzdaten an (meist 1460 Byte), damit das Paket ohne Fragmentierung in einen Ethernet-Frame (1500 Byte MTU) passt.
Analyse
In Wireshark lassen sich der Handshake, die gleitenden Fenster (Sliding Window) und die Sequenznummern-Verläufe visualisieren.

