Zum Inhalt springen

Transmission Control Protocol/Verbindungsaufbau: Unterschied zwischen den Versionen

Aus Foxwiki
K Textersetzung - „„“ durch „"“
K Textersetzung - „““ durch „"“
 
Zeile 17: Zeile 17:
#**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''
#*Wird auch als "Forward Acknowledgement“ bezeichnet
#*Wird auch als "Forward Acknowledgement" bezeichnet
#*Aus Sicherheitsgründen sendet der Client die Sequenznummer des Servers + 1 im ACK-Segment zurück
#*Aus Sicherheitsgründen sendet der Client die Sequenznummer des Servers + 1 im ACK-Segment zurück
# Die Verbindung ist damit aufgebaut
# Die Verbindung ist damit aufgebaut
Zeile 52: Zeile 52:


Der Client bestätigt zuletzt den Erhalt des SYN/ACK-Pakets durch das Senden eines eigenen ACK-Pakets mit der Sequenznummer ''x+1''
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
* 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
* 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
* Die Verbindung ist damit aufgebaut

Aktuelle Version vom 31. März 2025, 22:03 Uhr

Verbindungsaufbau

  • Verbindungswunsch

Bestätigung durch beide Seiten

  • TCP-Verbindungsaufbau Beispiel
Verbindungsaufbau

TCP-Handshake

  1. 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
  2. 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
  3. 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
  4. 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
Abb. 3: TCP-Handshake

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 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