Transmission Control Protocol/Verbindungsaufbau

Aus Foxwiki
Version vom 28. Januar 2024, 13:03 Uhr von Dirkwagner (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „=== Verbindungsaufbau === * Verbindungswunsch ==== Bestätigung durch beide Seiten ==== * TCP-Verbindungsaufbau Beispiel ; Verbindungsaufbau 300px| TCP-Handshake # 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 gesetz…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

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