SCTP – Stream Control Transmission Protocol
(im Vergleich zu TCP)
HauptseminarvortragRobert Hentsch ([email protected])
23.01.04
Gliederung
● Motivation / Allgemeines
● Multi-Homing
● SCTP-Paketformat
● Multi-Streaming
● Initialisation einer Verbindung
● Shutdown einer Verbindung
● Sicherheitsaspekte
Robert Hentsch ([email protected]) 02
Motivation
● Kleine Übertragungsfehler im Netzwerk --> bei Verwendung von TCP Verzögerungen für alle nachfolgenden Pakete
● Geringe Anzahl möglicher TCP-Sockets --> Bereitstellung hochverfügbarer Dienste mit vielen Verbindungen wird erschwert
● Anfälligkeit TCP's gegenüber DoS-Attacken
●
●
➔ bei der Übertragung von Telekommunikationsdaten über ein IP-Netzwerk wirkt sich das besonders nachteilig aus
➔ Anstoß zur Entwicklung einer Alternative zu TCP --> SCTP
Robert Hentsch ([email protected]) 03
SCTP als Transportprotokoll
IP
UDP TCP SCTP
Prozess 1 Prozess 2 Prozess 3 Applikationsebene
Transportebene
Verbindungsebene
Robert Hentsch ([email protected]) 04
SCTP...
... ist ein IP-Transportprotokoll und existiert parallel zu TCP und UDP.
... garantiert einen fehlerfreien und synchronen Transport von Datenpaketen über ein Netzwerk.
... stellt eine Association zwischen genau zwei Endstellen her, die bis zum Abschluss sämtlicher Datenübertragung Bestand hat.
... ist nicht byte-, sondern nachrichtenorientiert und unterstützt die Fragmentierung großer Nachrichten.
... ist übertragungsraten-adaptiv.
Robert Hentsch ([email protected]) 05
Multi-Homing
NetzwerkEndpoint A Endpoint Z
- Endstellen können jeweils unter verschiedenen Netzwerkadressen (IP's) erreichbar sein
- jede Endstelle wählt einen Pfad als primary path
- dient der besseren Verfügbarkeit
- noch keine Unterstützung für load sharing
*.*.*.001
*.*.*.002
Robert Hentsch ([email protected]) 06
Multi-Homing
NetzwerkEndpoint A Endpoint Z
*.*.*.001
*.*.*.002
/
- Übertragungsfehler --> Neuversand über alternativen Pfad --> Resistenz gegenüber Netzwerkausfällen
- vermehrte Fehler --> Änderung des primary path
- nicht benutzte Pfade werden mittels heartbeats auf Verfügbarkeit überprüft --> kein Zeitverlust durch IP-Routing
Robert Hentsch ([email protected]) 07
SCTP - Paketformat
8 16 24 32
Common Header
Chunk #1
Chunk #n
...
- Größe des Pakets <= MTU (Path MTU Recovery, mehrere Homes!)
- einige Chunks (zB zur Initialisierung oder Shutdown) benötigen seperate Pakete
Robert Hentsch ([email protected]) 08
SCTP Common Header & Chunk Field 8 16 24 32
Source Portnumber Destination Portnumber
Verification Tag
Checksum
Verification Tag --> Schutz vor blinden Angreifern
Checksumme wird über ganzes Paket gebildet:
- standard: Adler-32 (nicht genügend verteilt) - besser: CRC-32
--> Fehlerredundanz
8 16 24 32
Type Chunk Length
Chunk Data
Flags
Robert Hentsch ([email protected]) 09
Typen von Chunks 0 - Payload Data (DATA) 1 - Initiation (INIT) 2 - Initiation Acknowledgement (INIT ACK) 3 - Selective Acknowledgement (SACK) 4 - Heartbeat Request (HEARTBEAT) 5 - Heartbeat Acknowledgement (HEARTBEAT ACK) 6 - Abort (ABORT) 7 - Shutdown (SHUTDOWN)
8 - Shutdown Acknowledgement (SHUTDOWN ACK) 9 - Operation Error (ERROR) 10 - State Cookie (COOKIE ECHO) 11 - Cookie Acknowledgement (COOKIE ACK) 12 - Reserved for Explicit Congestion Notification Echo (ECNE) 13 - Reserved for Congestion Window Reduced (CWR) 14 - Shutdown Complete (SHUTDOWN COMPLETE)
ECNE und CWR werden nicht benutzt
Robert Hentsch ([email protected]) 10
Association vs. Stream
Association
- Verbindung zwischen zwei genau Endpunkten- innerhalb der A. existiert die 32bit-TSN (Transmission Sequence Number)- diese wird beim Aufbau der Verbindung initialisiert und pro gesendetem Chunk inkrementiert- verloren gegangene Chunks werden anhand TSN erkannt
Stream
- unidirektional- ein oder mehrere existieren unabhängig innerhalb einer Association- werden mit der Association angelegt und existieren bis zu deren Shutdown- 16bit-SSN (Stream Sequence Number) existiert analog zur TSN- diese dient zur Markierung der Position eines Chunks innerhalb des S.
Robert Hentsch ([email protected]) 11
Multi-Streaming
Endstelle
- mehrere unabhängige, unidirektionale Streams können über eine Association übertragen werden (zB Webpage: eigener Stream für jedes Datenobjekt)
- Verlust von Nachrichten in einem Stream beeinflusst andere Streams nicht --> Vorteil gegenüber TCP!
- fehlende Chunks werden dem Sender im SACK-Chunk mitgeteilt und wiederholt gesendet
Robert Hentsch ([email protected]) 12
Multi-Streaming
Prozess 1
Prozess 2
Prozess 3
45
234
1
7
8
neues Paket Warteschlangen für die Streams Userprozesse
Robert Hentsch ([email protected]) 13
Payload Data (DATA) 8 16 24 32
0 Chunk LengthFlags UBE
Transmission Sequence Number
Stream Identifier S Stream Seq. Number n
Payload Protocol Identifier
User Data (seq n of Stream S)
U unordered bit (Chunk gehört zu keinem Stream)B beginning fragment bit (erstes Bit einer fragmentierten Nachricht)E ending fragment bit (letztes Bit einer fragmentierten Nachricht)
Robert Hentsch ([email protected]) 14
Selective Acknowledgement (SACK)
8 16 24 32
Type = 3 Chunk LengthFlags
Cumulative TSN Ack
Nr of Gap Ack Blocks = N Nr of Duplicate TSNs = X
Advertised Receiver Window Credit
...
Gap Ack Block #1 Start Gap Ack Block #1 End
Duplicate TSN 1
...
Beispiel
empfangener Stream:TSN={10;11;12;_;14;15;_;17}
-->
Cumultative TSN Ack = 12
Nr of Gap Ack Blocks = 2Nr of Duplicate TSNs = 0
Block #1 Start = 2Block #1 End = 3Block #2 Start = 5Block #2 End = 5
SACK muss in gewissen Intervallen zur anderen Endstelle gesendet werden--> erneutes Senden unbestätigter Chunks
Robert Hentsch ([email protected]) 15
Association Initiation
● Four-way start-up handshake: ähnlich TCP-Erweiterung SYN COOKIE
● Antwort auf INIT: senden eines signierten Cookies
● TCB's (Transmission Control Block) werden erst angelegt, wenn gültiges COOKIE ECHO empfangen wurde
● Anzahl der benötigten Streams wird vereinbart
● IP-Adresslisten für Multi-Homing werden ausgetauscht
● Blind DoS-Attacken werden verhindert
Robert Hentsch ([email protected]) 16
Association Initiation
Endpoint A Endpoint Z
Closed
Cookie wait
Cookie echoed
Established
create TCBsend INIT 1.
2.generate Cookiesend INIT ACK
send COOKIE ECHO
3. 4.
create TCB send COOKIE ACK
5.
Robert Hentsch ([email protected]) 17
Initiation Acknowledgement (INIT ACK) 8 16 24 32
2 Chunk LengthFlags
Initiate Tag
Nr of outbound streams Nr of inbound streams
Advertised Receiver Window Credit
Initial TSN
Optional/Variable-Length Parameters
Variablen: State Cookie (Mandatory) IPv4 Address (Optional)IPv6 Address (Optional) Unrecognized Parameters (Optional)Reserved for ECN Capable (Optional) Host Name Address (Optional)
Robert Hentsch ([email protected]) 18
Termination of Association
- ABORT = ungraceful termination
- eine Endstelle sendet ein ABORT-Chunk mit gültigem Verification Tag --> sofortige Schließung der Verbindung --> kein Paketaustausch mehr
- SHUTDOWN = graceful termination
- vier Zwischenzustände (SHUTDOWN PENDING, SHUTDOWN SENT - SHUTDOWN RECEIVED, SHUTDOWN-ACK SENT)
- „half open“ wird nicht unterstützt
Robert Hentsch ([email protected]) 19
Shutdown of Association
Endpoint A
Endpoint Z
Closed
Established
send queued data
send queued data
send SHUTDOWN
send SHUTDOWN ACK
send SHUTDOWN COMPLETE
Robert Hentsch ([email protected]) 20
Sicherheitsaspekte
Schutz vor:
- Denial of Service Attacken (SYN-flood): --> Verwendung eines signierten Cookies TCBs werden erst nach erfolgreicher Initialisierung permanent angelegt
- „blinden“ Angreifern: --> Verwendung von Verification Tags in den übertragenen Paketen
aber:
- kein Schutz vor „Man in the middle“-Attacken
- keine weiteren eigenen Sicherheitsmaßnahmen --> Verwendung von TLS oder Sicherheit in der Verbindungsschicht mittels IPSec
Robert Hentsch ([email protected]) 21
SCTP Applikationen
● Übertragung von Telekommunikationssignalen über IP-basierte Netzwerke (ITU-T Signaling System No.7)
● SIP (Session Initiation Protocol) over SCTP (für Voice over IP)
● SCSI over SCTP (i-SCSI)
● HTTP over SCTP (siehe www.sctp.org)
Robert Hentsch ([email protected]) 22
SCTP-Links
www.sctp.de enthält Links zu allen relevanten Standards, Tools und eine Userland-Implementation
www.sctp.org Links zur Kernel-Implementation HTTP over SCTP (SCTP-enabled Apache + hacked Mozilla)
www.sourceforge.net/projects/lksctp Linux Kernel SCTP Projekt (ab Kernel 2.5.20)
www.faqs.org/rfcs/rfc2960.html RFC zu SCTP
Robert Hentsch ([email protected]) 23
Association InitializationFour-way start-up handshake: verhindert Blind DoS-Attacken TCB's werden erst angelegt, wenn gültiges COOKIE ECHO empfangen wurde
Endpoint A Endpoint Z
{app sets association with Z} (buil TCB) INIT [I-Tag=Tag_A & other info] (Start T1-init timer) (Enter COOKIE-WAIT state)
(Cancel T1-init timer) COOKIE ECHO [Cookie_Z] (Start T1-init timer) (Enter COOKIE-ECHOED state)
(Cancel T1-init timer, Enter ESTABLISHED state)
{app sends 1st user data; strm 0} ...
(compose temp TCB and Cookie_Z)INIT ACK [Veri Tag=Tag_A, I-Tag=Tag_Z, Cookie_Z, & other info](destroy temp TCB)
(build TCB enter ESTABLISHED state)COOKIE-ACK
Robert Hentsch ([email protected]) 25
Association Initialization
Closed
Cookie wait Cookie echoed
Established
rcv valid COOKIE ECHOcreate TCB / send COOKIE ACK
rcv INITgenerate Cookiesend INIT ACK
create TCBsend INIT
rcv INIT ACKsend COOKIE ECHO
rcv COOKIE ACK
Robert Hentsch ([email protected]) 26
Shutdown of Association
Established Closed
Shutdown pending
Shutdown sent
Shutdown received
Shutdown- ack sent
[SHUTDOWN]check outstanding DATA chunks
rcv SHUTDOWN / check outstanding DATA chunks
no more outstandingsend SHUTDOWN
no more outstandingsend SHUTDOWN ACK
rcv SHUTDOWN COMPLETEdelete TCB
rcv SHUTDOWN ACK send SHUTDOWN COMLETE delete TCB
rcv SHUTDOWN ACKsend SHUTDOWN COMPLETEdelete TCB
rcv SHUTDOWNsend SHUTDOWN ACK
Robert Hentsch ([email protected]) 27