# Stream Control Transmission Protocol

Stream Control Transmission Protocol (SCTP) es un protocolo de comunicación de capa de transporte que fue definido por el grupo SIGTRAN de IETF en el año 2000. El protocolo está especificado en la RFC 2960, y la RFC 3286 brinda una introducción al mismo.
SCTP es una alternativa a los protocolos de transporte TCP y UDP pues provee confiabilidad, control de flujo y secuenciación como TCP. Sin embargo, SCTP opcionalmente permite el envío de mensajes fuera de orden y a diferencia de TCP, SCTP es un protocolo orientado al mensaje (similar al envío de datagramas UDP).
Las ventajas de SCTP son:
* Capacidad de Multihoming, en la cual uno (o dos) de los extremos de una asociación (conexión) pueden tener más de una dirección IP. Esto permite reaccionar en forma transparente ante fallos en la red.
* Entrega de los datos en trozos que forman parte de flujos independientes y paralelos —eliminando así el problema de head of the line blocking que sufre TCP.
* Es capaz de seleccionar y monitorizar caminos, seleccionando un camino "primario" y verificando constantemente la conectividad de cada uno de los caminos alternativos.
* Mecanismos de validación y asentimiento como protección ante ataques por inundación, proveyendo notificación de trozos de datos duplicados o perdidos.
SCTP fue diseñado inicialmente por el grupo Sigtran para transportar señalización telefónica SS7 sobre IP. La intención fue la de proveer en IP de algunas de las características de confiabilidad de SS7. Por su versatilidad luego se ha propuesto utilizarlo en otras áreas, como por ejemplo para transportar mensajes de los protocolos DIAMETER o SIP. Al igual que TCP, SCTP tiene un mecanismo de Fast Retransmit el cual consiste en optimizar el rendimiento ante pérdidas aisladas.

## Características

SCTP es una alternativa a los protocolos de transporte TCP y UDP pues provee confiabilidad, control de flujo y secuenciación como TCP. Sin embargo, SCTP opcionalmente permite el envío de mensajes fuera de orden y a diferencia de TCP, STCP es un protocolo orientado al mensaje (similar al envío de datagramas UDP).
* Soporte de multihoming.
* Soporte de multistreaming.
* Orientado a la conexión.
* Delimitadores de mensajes.
Provee servicio de mensaje no ordenados y confiables (Ordering) Mecanismos de validación y asentimiento como protección ante ataques por inundación, proveyendo notificación de trozos de datos duplicados o perdidos. Entrega de los datos en trozos que forman parte de flujos independientes y paralelos —eliminando así el problema de head of the line blocking que sufre TCP.

## Estructura del paquete

Los paquetes SCTP tienen una estructura básica más simple que los paquetes TCP. Cada uno consiste en dos secciones básicas: La cabecera común, que ocupa los primeros 12 bytes y está resaltado en azul, y Los fragmentos de datos, que ocupan la parte restante del paquete. El primer fragmento se resalta en verde, y el último de N trozos se resalta en rojo. Cada fragmento tiene un identificador de tipo que es un byte de largo rendimiento, como máximo, 255 tipos diferentes trozo. RFC 4960 define una lista de tipos de trozo y actualmente hay 15 tipos definidos. El resto de la porción es de una longitud de dos bytes y los datos. Si el trozo no forma un múltiplo de 4 bytes a continuación, se rellena con ceros implícitamente que no están incluidos en la longitud trozo.establece una conexión desde un punto de entrada hacia el dispositivo de entrega.
| Bits | 0–7 | 0–7 | 0–7 | 0–7 | 0–7 | 0–7 | 0–7 | 0–7 | 8–15 | 8–15 | 8–15 | 8–15 | 8–15 | 8–15 | 8–15 | 8–15 | 16–23 | 16–23 | 16–23 | 16–23 | 16–23 | 16–23 | 16–23 | 16–23 | 24–31 | 24–31 | 24–31 | 24–31 | 24–31 | 24–31 | 24–31 | 24–31 |
| +0 | Source port | Source port | Source port | Source port | Source port | Source port | Source port | Source port | Source port | Source port | Source port | Source port | Source port | Source port | Source port | Source port | Destination port | Destination port | Destination port | Destination port | Destination port | Destination port | Destination port | Destination port | Destination port | Destination port | Destination port | Destination port | Destination port | Destination port | Destination port | Destination port |
| 32 | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag | Verification tag |
| 64 | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum |
| 96 | Chunk 1 type | Chunk 1 type | Chunk 1 type | Chunk 1 type | Chunk 1 type | Chunk 1 type | Chunk 1 type | Chunk 1 type | Chunk 1 flags | Chunk 1 flags | Chunk 1 flags | Chunk 1 flags | Chunk 1 flags | Chunk 1 flags | Chunk 1 flags | Chunk 1 flags | Chunk 1 length | Chunk 1 length | Chunk 1 length | Chunk 1 length | Chunk 1 length | Chunk 1 length | Chunk 1 length | Chunk 1 length | Chunk 1 length | Chunk 1 length | Chunk 1 length | Chunk 1 length | Chunk 1 length | Chunk 1 length | Chunk 1 length | Chunk 1 length |
| 128 | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data | Chunk 1 data |
| … | Chunk N type | Chunk N type | Chunk N type | Chunk N type | Chunk N type | Chunk N type | Chunk N type | Chunk N type | Chunk N flags | Chunk N flags | Chunk N flags | Chunk N flags | Chunk N flags | Chunk N flags | Chunk N flags | Chunk N flags | Chunk N length | Chunk N length | Chunk N length | Chunk N length | Chunk N length | Chunk N length | Chunk N length | Chunk N length | Chunk N length | Chunk N length | Chunk N length | Chunk N length | Chunk N length | Chunk N length | Chunk N length | Chunk N length |
| … | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data | Chunk N data |

## Motivaciones

TCP ha proporcionado el principal medio para transferir datos de forma fiable a través de Internet, sin embargo TCP ha impuesto limitaciones en varias aplicaciones. Desde RFC 4960: TCP proporciona transferencia de datos fiable y riguroso orden de entrega de transmisión de datos. Algunas aplicaciones necesitan una transferencia fiable y sin mantenimiento secuencia, mientras que otros estarán satisfechos con el orden parcial de los datos. En ambos casos, el jefe de bloqueo de línea ofrecidos por TCP provoca retrasos innecesarios. La naturaleza orientado a flujo de TCP es a menudo una molestia. Las solicitudes deberán añadir su propio récord marcado para delinear sus mensajes, y deben hacer uso explícito de la instalación de empuje para asegurar que el mensaje completo se transfiere en un tiempo razonable. El alcance limitado de sockets TCP complica la tarea de proporcionar la capacidad de transferencia de datos de alta disponibilidad con hosts multitarjeta. TCP es relativamente vulnerable a los ataques de denegación de servicio, tales como ataques SYN.

## Seguridad

Aunque el cifrado no era parte del diseño original SCTP SCTP fue diseñado con características para mejorar la seguridad, tales como 4-way handshake para proteger contra ataques de inundación SYN, y grandes "cookies" para la verificación de la asociación y la autenticidad. La fiabilidad fue también un aspecto clave del diseño de la seguridad de SCTP. Multihoming permite una asociación para permanecer abierta incluso cuando algunas de las rutas y las interfaces están abajo. Esto es de particular importancia para SIGTRAN, ya que transporta SS7 sobre una red IP usando SCTP, y requiere de una fuerte capacidad de recuperación durante los cortes de enlace para mantener el servicio de telecomunicaciones, incluso cuando están soportando anomalías en la red. SCTP es a veces un buen candidato de huellas dactilares. Algunos sistemas operativos habilitan por defecto el soporte de SCTP y, ya que no es tan conocido como TCP o UDP, a veces se pasa por alto en las configuraciones de firewall y de detección de intrusión, lo que a menudo permite sondear el tráfico.

## Diferencias entre SCTP y TCP

* SCTP utiliza cookies durante el four-way handshake evitando ataques SYN flooding.
* SCTP permite la transferencia multihoming y multistream.
* SCTP permite el envío de datos fuera de orden.
* SCTP no permite el cierre en un solo sentido.

## Implementaciones

SCTP está implementado en los siguientes sistemas operativos:
* Linux 2.4 y 2.6
* Sun Solaris 10
* FreeBSD de forma nativa desde 7.0 RELEASE
* QNX Neutrino Realtime OS
SCTP está implementado en:
* http://spot-on.sf.net - P2P library
* http://goldbug.sf.net - Instant Messenger

## RFCs

* RFC 4460 Stream Control Transmission Protocol (SCTP) Specification Errata and Issues
* RFC 3873 Stream Control Transmission Protocol (SCTP) Management Information Base (MIB)
* RFC 3758 Stream Control Transmission Protocol (SCTP) Partial Reliability Extension
* RFC 3554 On the Use of Stream Control Transmission Protocol (SCTP) with IPsec
* RFC 3436 Transport Layer Security over Stream Control Transmission Protocol
* RFC 3309 Stream Control Transmission Protocol (SCTP) Checksum Change
* RFC 3286 An Introduction to the Stream Control Transmission Protocol
* RFC 3257 Stream Control Transmission Protocol Applicability Statement
* RFC 2960 Stream Control Transmission Protocol