La familia de pro­to­co­los de Internet es la base de la co­mu­ni­ca­ción de sistemas en redes como Internet. Sus más de 500 pro­to­co­los di­fe­re­n­tes 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 (Tra­n­s­mi­s­sion Control Protocol) como el UDP (User Datagram Protocol) definen de qué manera in­te­r­ca­m­bian los datos los usuarios de red. Mientras que el TCP necesita para ello una conexión pree­xi­s­te­n­te, el UDP permite la tra­n­s­fe­re­n­cia de datos sin conexión. Con el protocolo SCTP (stream control tra­n­s­mi­s­sion protocol), la IETF (Internet En­gi­nee­ri­ng Task Force) lanzó en el 2000 un nuevo protocolo que combina las ca­ra­c­te­rí­s­ti­cas del TCP y del UDP.

¿Qué es SCTP?

El stream control tra­n­s­mi­s­sion protocol o SCTP es un protocolo de red fiable de la familia de pro­to­co­los 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 pu­bli­ca­ció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 es­tá­n­da­res, pri­n­ci­pa­l­me­n­te, como un protocolo que sirve para re­pro­du­cir la in­frae­s­tru­c­tu­ra 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 se­r­vi­do­res para la di­s­tri­bu­ción de cargas).

De­fi­ni­ción

El SCTP (stream control tra­n­s­mi­s­sion protocol) es un protocolo fiable de la familia de pro­to­co­los de Internet que permite la tra­n­s­mi­sión de mensajes de te­le­co­mu­ni­ca­ción a través de redes IP. Reúne diversas ca­ra­c­te­rí­s­ti­cas de dos pro­to­co­los también en­ca­r­ga­dos de la tra­n­s­fe­re­n­cia de datos: el TCP (orientado a la conexión) y el UDP (sin conexión). Además, contiene, entre otras cosas, me­ca­ni­s­mos para controlar la co­n­ge­s­tión y mejorar la to­le­ra­n­cia de fallos en el envío de paquetes. Gracias a su gran fle­xi­bi­li­dad, el SCTP también se usa para otros fines (por ejemplo, para controlar y ad­mi­ni­s­trar grupos de se­r­vi­do­res).

¿Por qué se ca­ra­c­te­ri­za el protocolo SCTP?

El SCTP usa no­r­ma­l­me­n­te la dirección IP como base, pero en principio puede usarse sobre cualquier otro servicio de me­n­sa­je­ría sin conexión. El tra­n­s­po­r­te de paquetes se ca­ra­c­te­ri­za en este caso por los si­guie­n­tes aspectos:

  • Tra­n­s­mi­sión con co­n­fi­r­ma­ción de datos de usuario (sin fallos ni du­pli­ca­dos)
  • Fra­g­me­n­ta­ción de datos para poder ajustarse al tamaño máximo de paquete de la ruta de red
  • Entrega se­cue­n­cia­da de mensajes de usuario dentro de múltiples co­rrie­n­tes de datos (mu­l­ti­s­trea­mi­ng), in­clu­ye­n­do la opción de de­te­r­mi­nar el orden de dichos mensajes
  • Agru­pa­ción (opcional) de varios mensajes de usuario en un solo paquete SCTP (chunk bundling)
  • To­le­ra­n­cia de fallos a nivel de red gracias al mu­l­ti­ho­mi­ng (host con varias di­re­c­cio­nes de red válidas) de uno o de ambos pa­r­ti­ci­pa­n­tes en la co­mu­ni­ca­ción

El stream control tra­n­s­mi­s­sion protocol tiene como principal objetivo la fia­bi­li­dad y seguridad de la tra­n­s­mi­sió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 tra­n­s­mi­sión de paquetes si la apli­ca­ción que accede lo requiere. Para ello, los datos enviados que se pueden repartir en varias co­rrie­n­tes se agrupan por paquetes, no por bytes. Esto es es­pe­cia­l­me­n­te útil en servicios basados en mensajes.

Dicha seguridad se consigue mediante un handshake de cuatro vías (au­te­n­ti­ca­ción recíproca, in­clu­ye­n­do el es­ta­ble­ci­mie­n­to de la conexión) entre el emisor y el receptor, sin el cual la tra­n­s­fe­re­n­cia de datos mediante el SCTP no sería posible. Además, la cabecera contiene una etiqueta de ve­ri­fi­ca­ción y un campo opcional de suma de co­m­pro­ba­ción.

¿Cómo funcionan las funciones concretas del protocolo SCTP?

Para aclarar el fu­n­cio­na­mie­n­to del tra­n­s­po­r­te de datos mediante el stream control tra­n­s­mi­s­sion protocol, te ex­pli­ca­mos de­ta­lla­da­me­n­te las funciones más im­po­r­ta­n­tes del SCTP, desde el handshake de cuatro vías hasta el envío de los paquetes, pasando por la fra­g­me­n­ta­ción.

Conexión y de­s­co­ne­xió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 in­te­r­ca­m­biar paquetes. Para es­ta­ble­cer 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 co­n­fi­r­ma­ción, una cookie que ide­n­ti­fi­ca de forma ine­quí­vo­ca 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 es­ta­ble­ci­mie­n­to de la conexión con un mensaje tipo COOKIE-ACK.

En cuanto acaba la tra­n­s­mi­sión, la apli­ca­ción / el usuario puede cerrar las co­ne­xio­nes SCTP. Sin embargo, también puede que se in­te­rru­m­pan antes de tiempo como resultado de un fallo. Además, es posible finalizar la conexión en cualquier momento mediante una petición. En cua­l­quie­ra de los casos, la tra­n­s­fe­re­n­cia de datos se para to­ta­l­me­n­te en cuanto uno de los pa­r­ti­ci­pa­n­tes in­te­rru­m­pe la conexión.

Tra­n­s­mi­sión se­cue­n­cia­da en streams (co­rrie­n­tes de datos)

El término stream designa, en el ámbito del SCTP, una secuencia de datos de usuario que se in­te­r­ca­m­bia entre el servidor y el cliente. Una única conexión SCTP da cabida a tantos streams como se quiera, pudiendo el usuario es­pe­ci­fi­car el número exacto al es­ta­ble­cer la conexión. Mientras que el orden de los datos dentro de una corriente se mantiene de forma estricta, en la di­s­tri­bu­ción de los distintos streams no hay ninguna jerarquía ni re­la­cio­nes concretas de de­pe­n­de­n­cia. Por ello, si se dan problemas en la tra­n­s­mi­sión de la corriente de datos, estos no afectarán a la tra­n­s­mi­sión de las otras co­rrie­n­tes. Además, hay un mecanismo que permite eludir la tra­n­s­mi­sión se­cue­n­cia­da y enviar paquetes de mensajes prio­ri­ta­rios.

Nota

Mientras que los streams en SCTP siempre marcan una secuencia de datos de usuario, en el TCP cada stream re­pre­se­n­ta una secuencia concreta de bytes.

Fra­g­me­n­ta­ción de los datos de usuario

El SCTP ofrece la po­si­bi­li­dad de fra­g­me­n­tar paquetes para poder mantener siempre una PMTU (Path Maximum Tra­n­s­mi­s­sion Unit) de­te­r­mi­na­da, es decir, el tamaño máximo de paquete que puede ser tra­n­s­fe­ri­do por la ruta de conexión en concreto. En el momento de la entrega, los diversos fra­g­me­n­tos se vuelven a unir y llegan hasta el usuario como un mensaje unificado. En co­m­pa­ra­ción con la fra­g­me­n­ta­ción a nivel de red (llevada a cabo por el protocolo IP) esta fra­g­me­n­ta­ción en la capa de tra­n­s­po­r­te tiene muchas ventajas. Así, por ejemplo, se reduce la carga de los routers re­s­po­n­sa­bles de la fra­g­me­n­ta­ció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.

Co­n­fi­r­ma­ción de paquete y control de so­bre­ca­r­ga

El stream control tra­n­s­mi­s­sion protocol marca todos los fra­g­me­n­tos de datos y los mensajes enteros con un llamado tra­n­s­mi­s­sion sequence number (número de secuencia de tra­n­s­mi­sión). Para cada uno de estos números de secuencia, el emisor espera un mensaje de co­n­fi­r­ma­ció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 ga­ra­n­ti­zar esta fia­bi­li­dad de entrega in­de­pe­n­die­n­te­me­n­te de la tra­n­s­mi­sión se­cue­n­cia­da, el receptor confirma que ha recibido un tra­n­s­mi­s­sion sequence number incluso cuando hay huecos en la secuencia de tra­n­s­mi­sión. Para que la tra­n­s­mi­sión no solo sea fiable, sino también lo más rápida posible, el SCTP recurre a al­go­ri­t­mos de control de co­n­ge­s­tión similares a los del TCP. Esos al­go­ri­t­mos regulan el envío para que no haya atascos de paquetes que puedan so­bre­ca­r­gar el host.

Chunk bundling (agru­pa­ció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 in­fo­r­ma­cio­nes 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 se­pa­rar­los del lado del receptor.

Va­li­da­ción de paquetes

En el es­ta­ble­ci­mie­n­to de la conexión SCTP, ambos puntos te­r­mi­na­les acuerdan una etiqueta de ve­ri­fi­ca­ción que debe aparecer durante toda la tra­n­s­mi­sió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 pro­te­c­ción frente al acceso de terceros y evita, además, que puedan seguir llegando paquetes de co­ne­xio­nes an­te­rio­res.

Para proteger aún más los datos, el emisor tiene la po­si­bi­li­dad de ampliar la cabecera con una suma de co­m­pro­ba­ción tipo CRC32C. Con este fin, el protocolo tiene di­s­po­ni­ble un campo opcional de 32 bits.

Control de ruta

Puesto que el SCTP permite la tra­n­s­fe­re­n­cia mu­l­ti­ho­mi­ng, los usuarios pueden in­tro­du­cir grupos enteros de di­re­c­cio­nes que pueden ser usadas como destinos po­te­n­cia­les de los paquetes enviados. Si se han in­tro­du­ci­do múltiples di­re­c­cio­nes, el protocolo recurre por defecto a la ruta de conexión primaria. Si esta ruta no está di­s­po­ni­ble, se reenvía a las di­re­c­cio­nes al­te­r­na­ti­vas para poder retomar la tra­n­s­mi­sión sin in­te­rru­p­cio­nes. Para poder ofrecer este servicio, el streaming control tra­n­s­mi­s­sion protocol ha im­ple­me­n­ta­do una función de control de ruta que accede a las di­re­c­cio­nes in­tro­du­ci­das. Además, dicha función supervisa la di­s­po­ni­bi­li­dad de todas las rutas de dirección in­tro­du­ci­das. Para ello, envía los llamados hea­r­t­beats (señales de control) re­gu­la­r­me­n­te.

Nota

El control de ruta y la va­li­da­ción de paquetes siempre se realizan al mismo tiempo.

¿Qué es el protocolo SCTP?

Como protocolo de la capa de tra­n­s­po­r­te, el SCTP rivaliza sobre todo con los me­n­cio­na­dos pro­to­co­los TCP y UDP. Sin embargo, basta con hacer un repaso de las funciones im­ple­me­n­ta­das y las ca­ra­c­te­rí­s­ti­cas del SCTP para ver que no se trata de pro­to­co­los su­s­ti­tu­ti­vos, sino que más bien se combinan entre ellos. ¿En qué aspectos se parece el stream control tra­n­s­mi­s­sion protocol más al protocolo TCP y en cuáles más al UDP? Te lo mostramos en la siguiente tabla:

En los pro­to­co­los TCP y SCTP en­co­n­tra­mos tres im­po­r­ta­n­tes puntos en común: ambos pro­to­co­los requieren una conexión entre ambas partes, ofrecen un mecanismo para el control de la co­n­ge­s­tió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 co­n­fi­r­ma­ción. A cambio, el protocolo UDP ahorra a la apli­ca­ció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 fle­xi­bi­li­dad convierte al protocolo SCTP en la mejor solución para sistemas de tra­n­s­mi­sión de voz como VoIP (voice over IP). Además, el SCTP tiene la ventaja de soportar mu­l­ti­s­trea­mi­ng y mu­l­ti­ho­mi­ng (to­le­ra­n­cia a fallos en lugar de hosts al­te­r­na­ti­vos), algo que no se puede decir ni del UDP ni del TCP. Por si fuera poco, el Stream control tra­n­s­mi­s­sion protocol garantiza, gracias al handshake de cuatro vías (in­clu­ye­n­do la cookie de au­te­n­ti­ca­ción) y a la etiqueta de ve­ri­fi­ca­ción obli­ga­to­ria en la cabecera de cada paquete enviado, una mayor seguridad que los otros dos pro­to­co­los de tra­n­s­po­r­te.

Ir al menú principal