SCTP: el protocolo de transporte fiable y basado en mensajes
La familia de protocolos de Internet es la base de la comunicación de sistemas en redes como Internet. Sus más de 500 protocolos diferentes tienen, en su mayor parte, roles muy distintos, pero algunos también tienen más o menos la misma función. Así, por ejemplo, tanto el TCP (Transmission Control Protocol) como el UDP (User Datagram Protocol) definen de qué manera intercambian los datos los usuarios de red. Mientras que el TCP necesita para ello una conexión preexistente, el UDP permite la transferencia de datos sin conexión. Con el protocolo SCTP (stream control transmission protocol), la IETF (Internet Engineering Task Force) lanzó en el 2000 un nuevo protocolo que combina las características del TCP y del UDP.
¿Qué es SCTP?
El stream control transmission protocol o SCTP es un protocolo de red fiable de la familia de protocolos de Internet, diseñado por el grupo de trabajo Signaling Transport (SIGTRAN) de la IETF. En el año 2000, se definió una primera versión del protocolo en la publicación RFC 2960 y, 7 años más tarde, la IETF publicó en la RFC 4960 una variante más avanzada. El protocolo SCTP se describe en estos estándares, principalmente, como un protocolo que sirve para reproducir la infraestructura de telefonía en redes IP. También se usa, sin embargo, en otros ámbitos. Por ejemplo, en el Reliable Server Pooling (gestión de grupos de servidores para la distribución de cargas).
El SCTP (stream control transmission protocol) es un protocolo fiable de la familia de protocolos de Internet que permite la transmisión de mensajes de telecomunicación a través de redes IP. Reúne diversas características de dos protocolos también encargados de la transferencia de datos: el TCP (orientado a la conexión) y el UDP (sin conexión). Además, contiene, entre otras cosas, mecanismos para controlar la congestión y mejorar la tolerancia de fallos en el envío de paquetes. Gracias a su gran flexibilidad, el SCTP también se usa para otros fines (por ejemplo, para controlar y administrar grupos de servidores).
¿Por qué se caracteriza el protocolo SCTP?
El SCTP usa normalmente la dirección IP como base, pero en principio puede usarse sobre cualquier otro servicio de mensajería sin conexión. El transporte de paquetes se caracteriza en este caso por los siguientes aspectos:
- Transmisión con confirmación de datos de usuario (sin fallos ni duplicados)
- Fragmentación de datos para poder ajustarse al tamaño máximo de paquete de la ruta de red
- Entrega secuenciada de mensajes de usuario dentro de múltiples corrientes de datos (multistreaming), incluyendo la opción de determinar el orden de dichos mensajes
- Agrupación (opcional) de varios mensajes de usuario en un solo paquete SCTP (chunk bundling)
- Tolerancia de fallos a nivel de red gracias al multihoming (host con varias direcciones de red válidas) de uno o de ambos participantes en la comunicación
El stream control transmission protocol tiene como principal objetivo la fiabilidad y seguridad de la transmisión de datos. No es preciso regular el orden de forma estricta, pero en principio es posible hacerlo en cualquier momento. De esta manera, con el SCTP solo es necesario mantener un proceso estable en la transmisión de paquetes si la aplicación que accede lo requiere. Para ello, los datos enviados que se pueden repartir en varias corrientes se agrupan por paquetes, no por bytes. Esto es especialmente útil en servicios basados en mensajes.
Dicha seguridad se consigue mediante un handshake de cuatro vías (autenticación recíproca, incluyendo el establecimiento de la conexión) entre el emisor y el receptor, sin el cual la transferencia de datos mediante el SCTP no sería posible. Además, la cabecera contiene una etiqueta de verificación y un campo opcional de suma de comprobación.
¿Cómo funcionan las funciones concretas del protocolo SCTP?
Para aclarar el funcionamiento del transporte de datos mediante el stream control transmission protocol, te explicamos detalladamente las funciones más importantes del SCTP, desde el handshake de cuatro vías hasta el envío de los paquetes, pasando por la fragmentación.
Conexión y desconexión en SCTP
Al igual que el TCP, el SCTP es también un protocolo orientado a la conexión que requiere una conexión existente entre el cliente y el servidor para poder intercambiar paquetes. Para establecer tal conexión, ambas partes realizan un llamado handshake de cuatro vías, iniciado por el cliente con una petición INIT. El servidor responde a esta petición con un mensaje tipo INIT-ACK que contiene, además de la confirmación, una cookie que identifica de forma inequívoca la conexión propuesta. El cliente, a su vez, envía esta cookie integrada en una petición COOKIE-ECHO de vuelta al servidor. Este, entonces, concluye el establecimiento de la conexión con un mensaje tipo COOKIE-ACK.
En cuanto acaba la transmisión, la aplicación / el usuario puede cerrar las conexiones SCTP. Sin embargo, también puede que se interrumpan antes de tiempo como resultado de un fallo. Además, es posible finalizar la conexión en cualquier momento mediante una petición. En cualquiera de los casos, la transferencia de datos se para totalmente en cuanto uno de los participantes interrumpe la conexión.
Transmisión secuenciada en streams (corrientes de datos)
El término stream designa, en el ámbito del SCTP, una secuencia de datos de usuario que se intercambia entre el servidor y el cliente. Una única conexión SCTP da cabida a tantos streams como se quiera, pudiendo el usuario especificar el número exacto al establecer la conexión. Mientras que el orden de los datos dentro de una corriente se mantiene de forma estricta, en la distribución de los distintos streams no hay ninguna jerarquía ni relaciones concretas de dependencia. Por ello, si se dan problemas en la transmisión de la corriente de datos, estos no afectarán a la transmisión de las otras corrientes. Además, hay un mecanismo que permite eludir la transmisión secuenciada y enviar paquetes de mensajes prioritarios.
Mientras que los streams en SCTP siempre marcan una secuencia de datos de usuario, en el TCP cada stream representa una secuencia concreta de bytes.
Fragmentación de los datos de usuario
El SCTP ofrece la posibilidad de fragmentar paquetes para poder mantener siempre una PMTU (Path Maximum Transmission Unit) determinada, es decir, el tamaño máximo de paquete que puede ser transferido por la ruta de conexión en concreto. En el momento de la entrega, los diversos fragmentos se vuelven a unir y llegan hasta el usuario como un mensaje unificado. En comparación con la fragmentación a nivel de red (llevada a cabo por el protocolo IP) esta fragmentación en la capa de transporte tiene muchas ventajas. Así, por ejemplo, se reduce la carga de los routers responsables de la fragmentación de los paquetes IP. También se evita el problema de tener que enviar de nuevo mensajes completos cuando se pierde en la red un solo fragmento.
Confirmación de paquete y control de sobrecarga
El stream control transmission protocol marca todos los fragmentos de datos y los mensajes enteros con un llamado transmission sequence number (número de secuencia de transmisión). Para cada uno de estos números de secuencia, el emisor espera un mensaje de confirmación del receptor. Si dicho mensaje no se recibe en un período de tiempo concreto, el paquete en cuestión se envía de nuevo. Para garantizar esta fiabilidad de entrega independientemente de la transmisión secuenciada, el receptor confirma que ha recibido un transmission sequence number incluso cuando hay huecos en la secuencia de transmisión. Para que la transmisión no solo sea fiable, sino también lo más rápida posible, el SCTP recurre a algoritmos de control de congestión similares a los del TCP. Esos algoritmos regulan el envío para que no haya atascos de paquetes que puedan sobrecargar el host.
Chunk bundling (agrupación de varios mensajes en un solo paquete SCTP)
El protocolo SCTP permite agrupar diversos mensajes en un solo paquete. De este modo, se pueden enviar múltiples informaciones de control o datos de usuario, llamados también chunks (pedazos) en el estándar SCTP, con una misma cabecera común. El mecanismo del chunk bundling se encarga tanto de ensamblar los paquetes enteros como de separarlos del lado del receptor.
Validación de paquetes
En el establecimiento de la conexión SCTP, ambos puntos terminales acuerdan una etiqueta de verificación que debe aparecer durante toda la transmisión en las cabeceras de los paquetes enviados. Si una de las partes recibe un paquete sin dicha etiqueta, lo descarta de inmediato. Así, el protocolo ofrece protección frente al acceso de terceros y evita, además, que puedan seguir llegando paquetes de conexiones anteriores.
Para proteger aún más los datos, el emisor tiene la posibilidad de ampliar la cabecera con una suma de comprobación tipo CRC32C. Con este fin, el protocolo tiene disponible un campo opcional de 32 bits.
Control de ruta
Puesto que el SCTP permite la transferencia multihoming, los usuarios pueden introducir grupos enteros de direcciones que pueden ser usadas como destinos potenciales de los paquetes enviados. Si se han introducido múltiples direcciones, el protocolo recurre por defecto a la ruta de conexión primaria. Si esta ruta no está disponible, se reenvía a las direcciones alternativas para poder retomar la transmisión sin interrupciones. Para poder ofrecer este servicio, el streaming control transmission protocol ha implementado una función de control de ruta que accede a las direcciones introducidas. Además, dicha función supervisa la disponibilidad de todas las rutas de dirección introducidas. Para ello, envía los llamados heartbeats (señales de control) regularmente.
El control de ruta y la validación de paquetes siempre se realizan al mismo tiempo.
¿Qué es el protocolo SCTP?
Como protocolo de la capa de transporte, el SCTP rivaliza sobre todo con los mencionados protocolos TCP y UDP. Sin embargo, basta con hacer un repaso de las funciones implementadas y las características del SCTP para ver que no se trata de protocolos sustitutivos, sino que más bien se combinan entre ellos. ¿En qué aspectos se parece el stream control transmission protocol más al protocolo TCP y en cuáles más al UDP? Te lo mostramos en la siguiente tabla:
En los protocolos TCP y SCTP encontramos tres importantes puntos en común: ambos protocolos requieren una conexión entre ambas partes, ofrecen un mecanismo para el control de la congestión y son, además, fiables, ya que ambos se aseguran de que los paquetes lleguen al receptor sin sufrir pérdidas. El protocolo UDP, en cambio, no ofrece tal garantía, al no utilizar mensajes de confirmación. A cambio, el protocolo UDP ahorra a la aplicación tener que marcar sus propios conjuntos de datos (para delimitar los límites de cada paquete), puesto que no está basado en bytes, sino en mensajes, una ventaja que también ofrece el protocolo SCTP.
Esta flexibilidad convierte al protocolo SCTP en la mejor solución para sistemas de transmisión de voz como VoIP (voice over IP). Además, el SCTP tiene la ventaja de soportar multistreaming y multihoming (tolerancia a fallos en lugar de hosts alternativos), algo que no se puede decir ni del UDP ni del TCP. Por si fuera poco, el Stream control transmission protocol garantiza, gracias al handshake de cuatro vías (incluyendo la cookie de autenticación) y a la etiqueta de verificación obligatoria en la cabecera de cada paquete enviado, una mayor seguridad que los otros dos protocolos de transporte.