Transmission Control Protocol/Verbindungsaufbau: Unterschied zwischen den Versionen
Aus Foxwiki
K Textersetzung - „ TCP-“ durch „ TCP-“ |
K Textersetzung - „wikitable“ durch „table table-striped table-hover“ |
||
| Zeile 23: | Zeile 23: | ||
''' Verbindungsaufbau Beispiel ''' | ''' Verbindungsaufbau Beispiel ''' | ||
{| class=" | {| class="table table-striped table-hover" | ||
|- | |- | ||
|width="60px"| 1. || SYN-SENT ||width="60px"| → || <SEQ=100><CTL=SYN> ||width="60px"| → || SYN-RECEIVED | |width="60px"| 1. || SYN-SENT ||width="60px"| → || <SEQ=100><CTL=SYN> ||width="60px"| → || SYN-RECEIVED | ||
Aktuelle Version vom 29. Juli 2026, 11:02 Uhr
Verbindungsaufbau
- Verbindungswunsch
Bestätigung durch beide Seiten
- TCP-Verbindungsaufbau Beispiel
- Verbindungsaufbau
- Der Client sendet dem Server ein SYN-Paket mit einer Sequenznummer x
- Die Sequenznummern sind für die Sicherstellung einer vollständigen Übertragung in der richtigen Reihenfolge und ohne Duplikate wichtig
- Ein Paket, dessen SYN-Bit im Header gesetzt ist
- Die Start-Sequenznummer ist eine beliebige zufällige Zahl, abhängig von der TCP-Implementierung
- Der Server empfängt das Paket und antwortet
- Port geschlossen, antwortet er mit einem TCP-RST, ein Signal, dass keine Verbindung aufgebaut werden kann
- Port geöffnet, bestätigt er den Erhalt des ersten SYN-Pakets und stimmt dem Verbindungsaufbau zu, indem er ein SYN/ACK-Paket zurückschickt
- Ein Paket, mit ACK-Flag im TCP-Header, welche die Sequenznummer x+1 des SYN-Pakets im Header enthält
- Der Server sendet im Gegenzug seine Start-Sequenznummer y, diese ist unabhängig von der Start-Sequenznummer des Clients
- Der Client bestätigt den Erhalt des SYN/ACK-Pakets durch ein eigenes ACK-Pakets mit der Sequenznummer x+1
- Wird auch als "Forward Acknowledgement" bezeichnet
- Aus Sicherheitsgründen sendet der Client die Sequenznummer des Servers + 1 im ACK-Segment zurück
- Die Verbindung ist damit aufgebaut
Verbindungsaufbau Beispiel
| 1. | SYN-SENT | → | <SEQ=100><CTL=SYN> | → | SYN-RECEIVED |
| 2. | SYN/ACK-RECEIVED | ← | <SEQ=300><ACK=101><CTL=SYN,ACK> | ← | SYN/ACK-SENT |
| 3. | ACK-SENT | → | <SEQ=101><ACK=301><CTL=ACK> | → | ESTABLISHED |
- Nach Aufbau ist die Verbindung für beide Kommunikationspartner gleichberechtigt
- Man kann einer bestehenden Verbindung auf TCP-Ebene nicht ansehen, wer der Server und wer der Client ist
- Eine Unterscheidung dieser beiden Rollen in der weiteren Betrachtung keine Bedeutung mehr
- Verbindungsaufbau
Der Client, der eine Verbindung aufbauen will, sendet dem Server ein SYN-Paket (von ) mit einer Sequenznummer x
- Die Sequenznummern sind dabei für die Sicherstellung einer vollständigen Übertragung in der richtigen Reihenfolge und ohne Duplikate wichtig
- Es handelt sich also um ein Paket, dessen SYN-Bit im Paketkopf gesetzt ist (siehe [[#Aufbau des TCP-Headers|TCP-Header]])
- Die Start-Sequenznummer (auch Initial Sequence Number (ISN) genannt) ist eine beliebige Zahl, deren Generierung von der jeweiligen TCP-Implementierung abhängig ist
- Sie sollte jedoch möglichst zufällig sein, um Sicherheitsrisiken zu vermeiden
Der Server (siehe Skizze) empfängt das Paket
- Ist der Port geschlossen, antwortet er mit einem TCP-RST, um zu signalisieren, dass keine Verbindung aufgebaut werden kann
- Ist der Port geöffnet, bestätigt er den Erhalt des ersten SYN-Pakets und stimmt dem Verbindungsaufbau zu, indem er ein SYN/ACK-Paket zurückschickt (ACK von engl. acknowledgement ‚Bestätigung‘)
- Das gesetzte ACK-Flag im TCP-Header kennzeichnet diese Pakete, welche die Sequenznummer x+1 des SYN-Pakets im Header enthalten
- Zusätzlich sendet er im Gegenzug seine Start-Sequenznummer y, die ebenfalls beliebig und unabhängig von der Start-Sequenznummer des Clients ist
Der Client bestätigt zuletzt den Erhalt des SYN/ACK-Pakets durch das Senden eines eigenen ACK-Pakets mit der Sequenznummer x+1
- Dieser Vorgang wird auch als "Forward Acknowledgement" bezeichnet
- Aus Sicherheitsgründen sendet der Client den Wert y+1 (die Sequenznummer des Servers + 1) im ACK-Segment zurück
- Die Verbindung ist damit aufgebaut
- Im folgenden Beispiel wird der Vorgang abstrakt dargestellt:
| 1. | SYN-SENT | → | <SEQ=100><CTL=SYN> | → | SYN-RECEIVED |
| 2. | SYN/ACK-RECEIVED | ← | <SEQ=300><ACK=101><CTL=SYN,ACK> | ← | SYN/ACK-SENT |
| 3. | ACK-SENT | → | <SEQ=101><ACK=301><CTL=ACK> | → | ESTABLISHED |
Einmal aufgebaut, ist die Verbindung für beide Kommunikationspartner gleichberechtigt, man kann einer bestehenden Verbindung auf TCP-Ebene nicht ansehen, wer der Server und wer der Client ist
- Daher hat eine Unterscheidung dieser beiden Rollen in der weiteren Betrachtung keine Bedeutung mehr