0% encontró este documento útil (0 votos)
51 vistas8 páginas

Asociación y características del protocolo SCTP

El documento describe las características principales del protocolo SCTP. SCTP proporciona transferencia de datos confiable con control de flujo y soporte para multistreaming y multihoming. Las características clave incluyen la comunicación mediante asociaciones entre endpoints, el uso de chunks para transmitir datos y mensajes de control, y la capacidad de enviar datos de forma ordenada o fuera de orden a través de múltiples streams.

Cargado por

Santiago Cuenca
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
51 vistas8 páginas

Asociación y características del protocolo SCTP

El documento describe las características principales del protocolo SCTP. SCTP proporciona transferencia de datos confiable con control de flujo y soporte para multistreaming y multihoming. Las características clave incluyen la comunicación mediante asociaciones entre endpoints, el uso de chunks para transmitir datos y mensajes de control, y la capacidad de enviar datos de forma ordenada o fuera de orden a través de múltiples streams.

Cargado por

Santiago Cuenca
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Características de SCTP

„ Transferencia de datos „ Soporte Multistream


confiable con ACK
selectivo (SACK) „ Soporte Multihoming
„ Control de flujo „ Prevención contra
ataques SYN flood
SCTP „ Delimitadores de
Mensajes
(cookies)
Stream Control Transmission Protocol
„ PMTU y fragmentación de „ Escalable
mensajes
„ Opción de envío de datos
fuera de orden
Ing. Agustín Eijo <agu@[Link]>
Universidad Tecnológica Nacional Facultad Regional La Plata

Basado en: SCTP A detailed overview of the protocol and a examination of the socket API
[Link]

Asociaciones y Endpoints Asociación SCTP

„ Dos conceptos fundamentales de SCTP: „ En TCP, la comunicación es denominada “conexión”


… Endpoints (extremos de la comunicación)
… Asociación (relación en la comunicación) „ En SCTP, esto es llamado “Asociación” dado que es un
concepto más fuerte que una simple conexión (ej.
multihoming)
„ Un SCTP endpoint puede ser representado como una
lista de direcciones con un mismo puerto, ejemplo:
„ Una Asociación SCTP puede ser representada como un
… endpoint = [[Link], [Link] : 80]
par de SCTP endpoints:
… as = { [[Link] : 2223], [[Link], [Link] :
80]}

Asociación SCTP Asociación SCTP

„ SCTP como TCP es orientado a la conexión. „ Una asociación SCTP provee transferencia de datos
confiable de mensajes
„ Durante el establecimiento de la asociación ambos
extremos intercambian: „ El envío de mensajes puede ser ordenado o fuera de
… En TCP 3-way handshake orden
(SYN, SYN/ACK, ACK) … En el envío ordenado a cada mensaje se le asigna un

… En SCTP 4-way handshake


stream sequence number (SSN)
… En el envío fuera de orden los mensajes no tienen
(INIT, INIT-ACK, COOKIE-ECHO, COOKIE-ACK)
SSN

1
Multistream Multihoming

Endpoint-1
Sd-queue Ro-queue Endpoint-2

NI-1 NI-2
NI-1 NI-2

IP Network

Ro-queue Sd-queue

IP Network

Mensajes SCTP SCTP Common Header

„ Los mensajes SCTP tienen un header común seguido de Source Port Destination Port
uno o mas chunks
Verification Tag

IP Header CRC-32c Checksum

„ Source and Destination Port: números de port (16-bit)


SCTP Common Header
„ Verification Tag: valor aleatorio de 32-bit elegido por cada
endpoint durante el establecimiento de la asociación
Chunk 1 … Permite diferenciar dos asociaciones consecutivas.
… Mecanismo de detección de ataques.
... „ CRC32c Checksum: 32-bit Checksum cubre todo el
mensaje SCTP (common header y todos los chunks)
Chunk N Mucho más robusto que el checksum de TCP

SCTP Chunks Tipos de Chunk

Chunk Type Chunk Flags Chunk Length „ Hay 20 tipos de chunk actualmente definidos en SCTP
(Incluyendo non-RFC/Internet Draft extensions):
Chunk Data … (1) DATA (0x00)
… (2) INITIATION [INIT] (0x01)
… (3) INITIATION-ACKNOWLEDGMENT [INIT-ACK] (0x02)
… (4) SELECTIVE-ACKNOWLEDGMENT [SACK] (0x03)
„ Chunk Type: 8-bit indica tipo de chunk. … (5) HEARTBEAT (0x04)
„ Chunk Flags: 8-bit flags, definidos por tipo de chunk. … (6) HEARTBEAT-ACKNOWLEDGMENT [HEARTBEAT-
„ Chunk Length: 16-bit longitud en bytes, incluyendo chunk ACK] (0x05)
type, chunk flags, y chunk length. … (7) ABORT (0x06)
… (8) SHUTDOWN (0x07)

2
Tipos de Chunk Tipos de Chunk (Extensiones)

… (9) SHUTDOWN-ACKNOWLEGMENT [SHUTDOWN- „ PR-SCTP - RFC 3758


ACK] (0x08)
… (16) FORWARD-TSN (0xC0)
… (10) OPERATIONAL-ERROR [ERROR] (0x09)
„ ADD-IP draft
… (11) COOKIE-ECHO (0x0A)
… (17) ADDRESS-CONFIGURATION [ASCONF] (0xC1)
… (12) COOKIE-ACKNOWLEDGMENT [COOKIE-ACK]
… (18) ADDRESS-CONFIGURATION-ACKNOWLEDGMENT
(0x0B)
[ASCONF-ACK] (0x80)
… (13) EXPLICIT CONGESTION NOTIFICATION ECHO
„ Packet-Drop draft
[ECNE] (0x0C)
… (19) SCTP-PACKET-DROP-REPORT [PKT-DROP] (0x81)
… (14) CONGESTION WINDOW REDUCE [CWR] (0x0D)
… (15) SHUTDOWN-COMPLETE (0x0E) „ Authentication draft
… (20) AUTHENTICATION [AUTH] (0x82) - about to undergo
drastic changes and will probably add 2-3 chunks.

Formato de los parámetros Establecimiento de una asociación

Parameter Type (16 bit) Longitud (16 bit)


„ SCTP usa 4-way handshake para establecer una
asociación.

Type = 0x0033 Length = 8


„ El extremo que realiza la apertura activa envía un INIT
4 Octets of Data chunk.

„ El envío de INIT incluye varios parámetros ejemplos:


… Direcciones IPv4 e IPv6
… Soporte de extensiones como PR-SCTP (Partial
Reliability)
Datos de longitud variable

Asociación completa Enviando INIT

Endpoint A Endpoint Z
„ Dos importantes valores son enviados al enviar un INIT e
INIT
INIT-ACK:
INIT-ACK
Association … Verification Tag (V-Tag) valor que se utilizará en todos
Association COOKIE-ECHO * Is Up los envíos (ubicado en el campo initiate tag)
Is Up
* COOKIE-ACK
… Initial TSN provee el punto de inicio (transport
secuence space TSN)

* -- pueden ser incluidos datos de usuario

3
INIT Chunk Recibiendo INIT

Type=1 Flags=0 Length=variable „ Initiation Tag: valor aleatorio de 32-bit

Initiation Tag „ Receiver Window Credit: valor inicial de „ El receptor del INIT valida que exista una aplicación
rwnd usado para el control de flujo escuchando. Y en caso de no existir envía un ABORT
Receiver window credit
hacia el origen.
„ # of Outbound Streams: número de
# Out Streams Max # In Streams
streams que desea enviar el origen
Initial TSN
„ Se realiza un chequeo y validación, enviando un INIT ACK
„ Max # of Inbound Streams: numero máximo sin guardar estado, esto previene ataques tipo TCP SYN.
de stream que el origen puede recibir

Optional/Variable length parameters „ Initial TSN: valor aleatorio de 32-bit TSN „ En el INIT-ACK, el receptor responde incluyendo varios
número inicial de secuencia parámetros como hizo el origen al enviar el INIT
incluyendo uno importante state cookie.

INIT-ACK Chunk State cookie

Type=2 Flags=0 Length=variable „ Initiation Tag: valor aleatorio de 32-bit „ El parámetro state cookie:

Initiation Tag „ Receiver Window Credit: valor inicial de


rwnd usado para el control de flujo … Es firmado (generalmente con MD5 o SHA-1)
Receiver window credit
„ # of Outbound Streams: número de
# Out Streams Max # In Streams streams que desea enviar el origen … Cubre todos los parámetros necesarios para el
Initial TSN establecimiento de una asociación (generalmente INIT
„ Max # of Inbound Streams: numero máximo
de stream que el origen puede recibir completo y algunas partes de INIT-ACK)

Optional/Variable length parameters „ Initial TSN: valor aleatorio de 32-bit TSN


número inicial de secuencia … Depende de la implementación, pero debe incluir el
timestamp

Cookie Echo y Cookie Ack Chunk Asociación completa

Type=a Flags=0 Length=variable Endpoint A Endpoint Z

Type=b Flags=0 Length=4 INIT


State Cookie from INIT-ACK

INIT-ACK
Association
Cookie-Echo Cookie-ACK Association * Is Up
COOKIE-ECHO
Is Up
„ Cookie-Echo y Cookie-ACK son chunks simples, pero * COOKIE-ACK

ayudan a prevenir ataques

„ Ambos permiten ser enviados junto a otros chunks, como


DATA chunk * -- pueden ser incluidos datos de usuario

4
Recibiendo y enviando Mensajes Retransmisión
„ El envío de mensajes se realiza con las funciones
sndmsg() o sctp_sndmsg() „ Por cada DATA chunk enviado el receptor debe enviar un
SACK chunk.
„ Un simple rcvmsg() o sctp_rcvmsg() NUNCA devolverá
mas de un mensaje
„ En caso de no recibir el SACK Chunk en el tiempo
establecido RTO (Retransmission Time Out) el origen
„ Cuando se recibe un mensaje SCTP se deben procesar puede retransmitir el DATA Chunk.
primero los chunks de control.

„ Los chunks de datos deben ser entregados a la „ SCTP mantiene estadísticamente el RTT (Round Trip Time)
aplicación. para cada asociación.

„ Si un mensaje es fragmentado debe retenerse hasta estar


completo.

DATA Chunk Campos DATA Chunk


Type=0x00 Flags=UBE Length=variable

TSN Value
„ TSN: número de secuencia utilizado para ordenar y
Stream Identifier Stream Sequence Num
reensamblar y retransmitir
Payload Protocol Identifier
„ Stream Identifier: número de stream para los datos
Variable Length User Data „ Stream Sequence Number: identifica el mensaje dentro del
stream
„ Payload Protocol Identifier: identificador del protocolo de
„ Flags Bits ‘UBE’
la capa superior
… U – Datos fuera de orden „ User Data: mensaje
… B – Comienzo de mensaje fragmentado
… E – Fin de mensaje fragmentado
„ Un mensaje completo debe tener los flags B y E bits activados

SACK Chunk SACK Chunk Example

„ Cumulative TSN Acknowledgment: el


Type=3 Flags=0 Length=variable mayor TSN consecutivo recibido

Cumulative TSN Type=3 Flags=0 Length=variable


„ Receiver Window Credit: valor actual de la
Receiver window credit ventana del receptor Cum Ack=109965
Num of Fragments=N Num of Dup=M „ # of Fragments: cantidad de bloques rwnd = 64200
faltantes
Gap Ack Blk #1 start Gap Ack Blk #1 end Num of Fragments=2 Num of Dup=2
Gap Ack Blk #N start Gap Ack Blk #N end „ # of Duplicates: cantidad de bloques Gap start = 2 Gap end = 5
duplicados
Duplicate TSN #1 Gap start = 7 Gap end = 9
„ Gap Ack Block Start / End TSN offset:
Duplicate TSN #M Duplicate TSN = 109963
comienzo y fin consecutivo de bloques
faltantes relativo al TSN
Duplicate TSN = 109964
„ Duplicate TSN: TSN de bloque duplicado

5
Que hacer cuando no se puede enviar Transferencia de mensajes grandes
un mensaje completo?

„ Los mensajes deben dividirse en múltiples partes Endpoint A Endpoint Z


llamadas fragmentos.
3800
octets
„ Todos los fragmentos deben utilizar el mismo Stream
Identifier (SID) y Stream Sequence Number (SSN). PMTU=512 octets
SCTP SCTP
„ Cada fragmento usa un único TSN y los flags apropiados
para identificar si es el primero, ultimo, medio. TSN 1*

* - B bit set to 1

Transferencia de mensajes grandes Transferencia de mensajes grandes

Endpoint A Endpoint Z Endpoint A Endpoint Z

3800
octets

PMTU=512 octets PMTU=512 octets


SCTP SCTP SCTP SCTP
TSN 1*
TSN 2
TSN 9+ TSN 8 TSN 7 TSN 6 TSN 3
TSN 4
TSN 5

* - B bit set to 1
+ - E bit set to 1

Control de flujo Control de Flujo

„ Como en TCP, la ventana de congestión (cwnd) y el „ Para evitar la congestión se utiliza la técnica Additive
tamaño de ventana recibida (rwnd) se utilizan para el Increase Multiplicative Decrease (AIMD) cómo en TCP.
control de envío de datos.
„ El origen no debe transmitir mas que rwnd. „ Básicamente consiste en el incremento lento de cwnd, al
„ Si el receptor indica rwnd en 0, el orígen debe detener el detectar una pérdida de datos se decrementa cwnd
envío de datos, sin embargo puede enviar mensajes rápidamente.
esperando una actualización de rwnd

6
Orden y Streams Cierre de una Asociación

„ SCTP permite el envío de datos en orden o fuera de orden.


„ SCTP utiliza 3-way handshake para cerrar una asociación.
… En el envío fuera de orden los datos deben ser pasados
inmediatamente a la aplicación.
„ A diferencia de TCP, SCTP NO soporta el cierre de un
… En el envío de datos en orden los mensajes deben ser único extremo.
retenidos para ser entregados a la aplicación en orden.

„ El origen indica en las funciones sndmsg() o


sctp_sndmsg() que stream utilizar.

The Shutdown Handshake Shutdown Chunks

Type=7 Flags=0 Length=8


Endpoint-A Endpoint-Z
Cumulative TSN
1 close()
SHUTDOWN
2
SHUTDOWN
3 Type=8 Flags=0 Length=4
4 SHUTDOWN-ACK
WN-ACK
SHUTDO
5
SHUTDOWN-COMPLET Type=14 Flags=T Length=4
E 6
SHUTDOWN-COMPLETE

ABORT Chunk Extensiones de SCTP

„ Otro mecanismo de cierre es mediante la utilización de


ABORT chunks. „ SCTP, como hemos visto es un protocolo fácilmente
extensible.
„ Cuando una aplicación realiza un cierre anormal
inmediatamente es enviado un ABORT chunk. „ Para extender el protocolo nuevos tipos de chunk o
parámetros pueden ser agregados en nuevas RFC's.

7
Extensión PR-SCTP Diferencias entre SCTP y TCP

„ SCTP utiliza four-way handshake para establecer una


asociación. TCP utiliza three-way handshake para
„ Partial Reliability SCTP permite omitir la retransmisión de establecer una conexión.
mensajes al no recibir el acknowledged.
„ Sin embargo, en SCTP puede enviarse datos en el tercer
„ Ambos extremos deben soportar la extensión esto se y cuarto mensaje de la asociación haciendo mas rápido
índica durante el establecimiento de la asociación. el comienzo de transmisión en relación a TCP.

„ Normalmente se establece un timer esperando el „ SCTP utiliza cookies durante el four-way handshake
acknowledged, cuando este tiempo expira el mensaje no evitando ataques SYN flooding.
es retransmitido.
„ SCTP permite la transferencia multihoming y
multistream.

Diferencias entre SCTP y TCP Socket API

„ SCTP envía mensajes , no “byte stream”


… Una aplicación TCP debe definir sus propios int sd, newfd, sosz;
Nota: 0 implica IPPROTO_TCP
delimitadores de mensajes. struct sockaddr_in6 sin6;
sosz = sizeof(sin6);
sd = socket(PF_INET6, SOCK_STREAM, 0);
„ SCTP permite el envío de datos fuera de orden.
sd = socket(PF_INET6, SOCK_STREAM, IPPROTO_SCTP);
listen(sd, 1);
„ SCTP utiliza ACK selectivos en lugar de acumulativo while (1) {
como TCP. newfd = accept(sd, (struct sockaddr *)&sin6, &sosz)
do_child_stuff(newfd, &sin6, sosz);
„ SCTP no permite el cierre en un solo sentido. }

Ejemplo de servidor Referencias


„ [Link]
int sd, newfd, sosz, msg_flags;
struct sockaddr_in6 sin6;
struct sndrcvinfo snd_rcv; „ RFC 2960 - Stream Control Transmission Protocol.
char buf[8000];
sosz = sizeof(sin6); „ RFC 3286 - An Introduction to SCTP.
sd = socket(AF_INET6, SOCK_SEQPKT, IPPROTO_SCTP);
listen(sd, 1);
„ RFC 3578 - Partial Reliability.
while (1) {
len = sctp_recvmsg(sd, buf, sizeof(buf), (sockaddr *)&sin6, &sosz,
&snd_rcv, &msg_flags); „ RFC 3257 - Stream Control Transmission Protocol
do_child_stuff(newfd, buf, len, &sin6, &snd_rcv, msg_flags); Applicability Statement.
}

También podría gustarte