Transmission Control Protocol/Verbindungsaufbau: Unterschied zwischen den Versionen
Erscheinungsbild
K Textersetzung - „““ durch „"“ |
K Textersetzung - „ TCP-“ durch „ TCP-“ |
||
| Zeile 2: | Zeile 2: | ||
* Verbindungswunsch | * Verbindungswunsch | ||
==== Bestätigung durch beide Seiten ==== | ==== Bestätigung durch beide Seiten ==== | ||
* TCP-Verbindungsaufbau Beispiel | * [[TCP]]-Verbindungsaufbau Beispiel | ||
; Verbindungsaufbau | ; Verbindungsaufbau | ||
[[Datei:Tcp-handshake.svg|300px| TCP-Handshake]] | [[Datei:Tcp-handshake.svg|300px| [[TCP]]-Handshake]] | ||
# Der Client sendet dem Server ein ''SYN''-Paket mit einer Sequenznummer ''x'' | # 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 | #*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 | #*Ein Paket, dessen ''SYN-Bit'' im Header gesetzt ist | ||
#*Die Start-Sequenznummer ist eine beliebige zufällige Zahl, abhängig von der TCP-Implementierung | #*Die Start-Sequenznummer ist eine beliebige zufällige Zahl, abhängig von der [[TCP]]-Implementierung | ||
# Der Server empfängt das Paket und antwortet | # 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 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 | #*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 | #**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 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'' | # Der Client bestätigt den Erhalt des SYN/ACK-Pakets durch ein eigenes ACK-Pakets mit der Sequenznummer ''x+1'' | ||
| Zeile 33: | Zeile 33: | ||
* Nach Aufbau ist die Verbindung für beide Kommunikationspartner gleichberechtigt | * 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 | * 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 | * Eine Unterscheidung dieser beiden Rollen in der weiteren Betrachtung keine Bedeutung mehr | ||
; Verbindungsaufbau | ; Verbindungsaufbau | ||
[[Datei:Tcp-handshake.svg|mini|Abb. 3: TCP-Handshake]] | [[Datei:Tcp-handshake.svg|mini|Abb. 3: [[TCP]]-Handshake]] | ||
Der Client, der eine Verbindung aufbauen will, sendet dem Server ein ''SYN''-Paket (von {{enS|''synchronize''}}) mit einer [[Sequenznummer]] ''x'' | Der Client, der eine Verbindung aufbauen will, sendet dem Server ein ''SYN''-Paket (von {{enS|''synchronize''}}) mit einer [[Sequenznummer]] ''x'' | ||
* Die Sequenznummern sind dabei für die Sicherstellung einer vollständigen Übertragung in der richtigen Reihenfolge und ohne Duplikate wichtig | * 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]]) | * 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 | * 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 [[Zufallszahl|zufällig]] sein, um Sicherheitsrisiken zu vermeiden | * Sie sollte jedoch möglichst [[Zufallszahl|zufällig]] sein, um Sicherheitsrisiken zu vermeiden | ||
Der Server (siehe Skizze) empfängt das Paket | 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 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 (Signal)|ACK]] von engl. ''acknowledgement'' ‚Bestätigung‘) | * 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 (Signal)|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 | * 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 | * Zusätzlich sendet er im Gegenzug seine Start-Sequenznummer ''y'', die ebenfalls beliebig und unabhängig von der Start-Sequenznummer des Clients ist | ||
| Zeile 66: | Zeile 66: | ||
|} | |} | ||
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 | 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 | * Daher hat eine Unterscheidung dieser beiden Rollen in der weiteren Betrachtung keine Bedeutung mehr | ||
[[Kategorie:TCP]] | [[Kategorie:TCP]] | ||
Aktuelle Version vom 4. Juli 2026, 11:49 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