SCTP está estandarizado por el Internet Engineering Task Force (IETF) en RFC 9260. La implementación de referencia de SCTP se lanzó como parte de la versión 7 de FreeBSD y desde entonces se ha adaptado ampliamente a otras plataformas.
Supervisión formal
El grupo de trabajo de Transporte de Señalización ( SIGTRAN ) de la IETF definió el protocolo (número 132 [1] ) en octubre de 2000, [2] y el grupo de trabajo del Área de Transporte de la IETF (TSVWG) lo mantiene. El RFC 9260 define el protocolo. El RFC 3286 proporciona una introducción.
Transmisión múltiple basada en mensajes
Las aplicaciones SCTP envían datos para su transmisión en mensajes (grupos de bytes) a la capa de transporte SCTP. SCTP coloca los mensajes y la información de control en fragmentos separados (fragmentos de datos y fragmentos de control), cada uno identificado por un encabezado de fragmento . El protocolo puede fragmentar un mensaje en varios fragmentos de datos, pero cada fragmento de datos contiene datos de un solo mensaje de usuario. SCTP agrupa los fragmentos en paquetes SCTP. El paquete SCTP, que se envía al Protocolo de Internet , consta de un encabezado de paquete, fragmentos de control SCTP (cuando sea necesario), seguidos de fragmentos de datos SCTP (cuando estén disponibles).
SCTP puede caracterizarse como orientado a mensajes, lo que significa que transporta una secuencia de mensajes (cada uno de ellos un grupo de bytes), en lugar de transportar un flujo continuo de bytes como en TCP. Al igual que en UDP, en SCTP un remitente envía un mensaje en una operación, y ese mensaje exacto se pasa al proceso de aplicación receptor en una operación. Por el contrario, TCP es un protocolo orientado a flujos, que transporta flujos de bytes de forma fiable y ordenada. Sin embargo, TCP no permite que el receptor sepa cuántas veces la aplicación remitente llamó al transporte TCP que le pasaba grupos de bytes para enviar. En el remitente, TCP simplemente añade más bytes a una cola de bytes que esperan salir por la red, en lugar de tener que mantener una cola de mensajes salientes individuales separados que deben conservarse como tales.
El término multitransmisión se refiere a la capacidad de SCTP de transmitir varios flujos independientes de fragmentos en paralelo, por ejemplo, transmitir imágenes de páginas web simultáneamente con el texto de la página web. En esencia, implica agrupar varias conexiones en una única asociación SCTP, que funciona sobre mensajes (o fragmentos) en lugar de bytes.
TCP conserva el orden de bytes en el flujo incluyendo un número de secuencia de bytes con cada segmento . SCTP, por otro lado, asigna un número de secuencia o un identificador de mensaje [nota 1] a cada mensaje enviado en un flujo. Esto permite ordenar de forma independiente los mensajes en diferentes flujos. Sin embargo, el orden de los mensajes es opcional en SCTP; una aplicación receptora puede elegir procesar los mensajes en el orden de recepción en lugar de en el orden de envío.
Características
Las características de SCTP incluyen:
Transmisión confiable de flujos de datos ordenados y desordenados
Compatibilidad con múltiples hosts en la que uno o ambos puntos finales de una conexión pueden constar de más de una dirección IP, lo que permite una conmutación por error transparente entre rutas de red redundantes
Selección y monitoreo de ruta para seleccionar una ruta de transmisión de datos primaria y probar la conectividad de la ruta de transmisión
Los mecanismos de validación y reconocimiento protegen contra ataques de inundación y brindan notificación de fragmentos de datos duplicados o faltantes.
Los diseñadores de SCTP originalmente lo idearon para el transporte de telefonía (es decir, Signaling System 7) sobre el Protocolo de Internet, con el objetivo de duplicar algunos de los atributos de confiabilidad de la red de señalización SS7 en IP. Este esfuerzo de IETF se conoce como SIGTRAN . Mientras tanto, se han propuesto otros usos, por ejemplo, el protocolo Diameter [3] y Reliable Server Pooling (RSerPool). [4]
Motivación y adopción
TCP ha proporcionado el principal medio para transferir datos de manera confiable a través de Internet. Sin embargo, TCP ha impuesto limitaciones a varias aplicaciones. Según RFC 4960:
TCP proporciona una transferencia de datos confiable y una entrega de datos con un orden de transmisión estricto. Algunas aplicaciones necesitan una transferencia confiable sin mantenimiento de la secuencia, mientras que otras se conformarían con un orden parcial de los datos. En ambos casos, la propiedad de bloqueo de cabecera de línea de TCP causa un retraso innecesario.
Para las aplicaciones que intercambian registros o mensajes distintos, la naturaleza orientada al flujo de TCP requiere la adición de marcadores explícitos u otra codificación para delinear los registros individuales.
Para evitar enviar muchos paquetes IP pequeños cuando un solo paquete más grande hubiera sido suficiente, la implementación de TCP puede retrasar la transmisión de datos mientras espera que posiblemente más datos sean puestos en cola por la aplicación ( algoritmo de Nagle ). Aunque muchas implementaciones de TCP permiten la desactivación del algoritmo de Nagle, esto no es requerido por la especificación. SCTP, por otro lado, permite que la transmisión sin retrasos se configure como un valor predeterminado para una asociación, eliminando cualquier retraso no deseado, pero a costa de una mayor sobrecarga de transferencia. [5]
El alcance limitado [ vago ] de los sockets TCP complica la tarea de proporcionar capacidad de transferencia de datos de alta disponibilidad mediante hosts multihomed.
TCP es relativamente vulnerable a ataques de denegación de servicio, como los ataques SYN .
La adopción se ha visto frenada por la falta de concienciación, la falta de implementaciones (particularmente en Microsoft Windows), la falta de soporte de aplicaciones y la falta de soporte de red. [6]
SCTP proporciona rutas redundantes para aumentar la confiabilidad.
Cada punto final SCTP debe verificar la accesibilidad de las direcciones primarias y redundantes del punto final remoto mediante un latido . Cada punto final SCTP debe reconocer los latidos que recibe del punto final remoto.
Cuando SCTP envía un mensaje a una dirección remota, la interfaz de origen solo será decidida por la tabla de enrutamiento del host (y no por SCTP).
En el multihoming asimétrico, uno de los dos puntos finales no admite el multihoming.
En el host múltiple local y el host único remoto, si no se puede acceder a la dirección principal remota, la asociación SCTP falla incluso si es posible una ruta alternativa.
Estructura del paquete
Un paquete SCTP consta de dos secciones básicas:
El encabezado común , que ocupa los primeros 12 bytes y está resaltado en azul.
Los fragmentos de datos , que ocupan la parte restante del paquete. El primer fragmento está resaltado en verde y el último de los N fragmentos (fragmento N) está resaltado en rojo.
Pedazos
0–7
8–15
16–23
24–31
+0
Puerto de origen
Puerto de destino
32
Etiqueta de verificación
64
Suma de comprobación
96
Tipo de trozo 1
Banderas del fragmento 1
Trozo de 1 longitud
128
Datos del fragmento 1
…
…
…
Trozo tipo N
Banderas del trozo N
Longitud del trozo N
…
Datos del fragmento N
Cada fragmento comienza con un identificador de tipo de un byte, con 15 tipos de fragmento definidos por RFC 9260 y al menos 5 más definidos por RFC adicionales. [nota 2] Ocho bits de bandera, un campo de longitud de dos bytes y los datos componen el resto del fragmento. Si el fragmento no forma un múltiplo de 4 bytes (es decir, la longitud no es un múltiplo de 4), entonces se rellena con ceros, que no se incluyen en la longitud del fragmento. El campo de longitud de dos bytes limita cada fragmento a una longitud de 65.535 bytes (incluidos los campos de tipo, banderas y longitud).
Seguridad
Aunque el cifrado no era parte del diseño original de SCTP, SCTP fue diseñado con características para mejorar la seguridad, como el protocolo de enlace de 4 vías (en comparación con el protocolo de enlace de 3 vías de TCP ) para proteger contra ataques de inundación SYN y "cookies" grandes para verificación de asociación y autenticidad.
La confiabilidad también fue una parte clave del diseño de seguridad de SCTP. El multihoming permite que una asociación permanezca abierta incluso cuando algunas rutas e interfaces están inactivas. Esto es de particular importancia para SIGTRAN , ya que transmite SS7 a través de una red IP mediante SCTP y requiere una gran resiliencia durante las interrupciones del enlace para mantener el servicio de telecomunicaciones incluso cuando se soportan anomalías en la red.
SCTP es a veces un buen candidato para la toma de huellas digitales . Algunos sistemas operativos incluyen la compatibilidad con SCTP habilitada y, como no es tan conocido como TCP o UDP, a veces se lo pasa por alto en las configuraciones de detección de intrusiones y firewall, lo que a menudo permite el sondeo del tráfico.
Implementaciones
La implementación de referencia de SCTP se ejecuta en FreeBSD, Mac OS X, Microsoft Windows y Linux. [8]
En ausencia de soporte nativo de SCTP en los sistemas operativos, es posible tunelizar SCTP sobre UDP, [22] así como mapear llamadas API TCP a llamadas SCTP para que las aplicaciones existentes puedan usar SCTP sin modificaciones. [23]
RFC (Requerimientos de comentarios)
Protocolo de transmisión de control de flujo RFC 9260
TCP multiruta : permite que una conexión TCP utilice múltiples rutas para maximizar el uso de recursos y aumentar la redundancia
Happy Eyeballs : originalmente diseñado para la selección eficiente de IPv4 o IPv6 para una conexión; [24] también podría adaptarse para seleccionar entre diferentes protocolos de transporte como TCP y SCTP [25]
Notas
^ El fragmento DATA utiliza un número de secuencia para mensajes ordenados, el fragmento I-DATA , que resuelve algunos problemas con el fragmento DATA original, utiliza un identificador de mensaje para todos los mensajes.
^ "Números de protocolo". iana.org . IANA . Consultado el 9 de septiembre de 2014 .
^ Protocolo de transmisión de control de flujo. IETF . Octubre de 2000. doi : 10.17487/RFC2960 . RFC 2960.
^ "Transporte". Protocolo de base de diámetro. IETF . sec. 2.1. doi : 10.17487/RFC3588 . RFC 3588 . Consultado el 18 de mayo de 2012 .
^ "Ejemplo de escenario que utiliza servicios de sesión RSerPool". Descripción general de los protocolos de agrupación de servidores confiables. IETF . pág. 10. sec. 4.2. doi : 10.17487/RFC5351 . RFC 5351.
^ RFC 9260, sección 1.5.5
^ Hogg, Scott. "¿Qué pasa con el protocolo de transmisión de control de flujo (SCTP)?". Network World . Archivado desde el original el 30 de agosto de 2014. Consultado el 4 de octubre de 2017 .
^ Olsson, Magnus; Mulligan, Catherine; Sultana, Shabnam; Rommer, Stefan; Frid, Lars (2013). Redes de paquetes EPC y 4G: impulsando la revolución de la banda ancha móvil (2.ª ed.). Ámsterdam, Boston: Elsevier/AP, Academic Press es un sello editorial de Elsevier. pág. 491. ISBN978-0-12-394595-2.
^ "Implementación de referencia para SCTP - RFC4960". GitHub . Consultado el 14 de octubre de 2013 . Esta es la implementación de referencia para SCTP. Es portable y se ejecuta en FreeBSD/MAC-OS/Windows y en User Space (incluido Linux).
^ "sys/netinet/sctp.h". Referencia cruzada de BSD . NetBSD . 2017-06-27 . Consultado el 2019-01-21 .
^ "man4/sctp.4". Referencia cruzada de BSD . NetBSD . 2018-07-31 . Consultado el 2019-01-21 .
^ "DragonFly elimina SCTP". Lists.dragonflybsd.org . 7 de enero de 2015 . Consultado el 28 de abril de 2016 .
^ "Acerca de los avances tecnológicos de FreeBSD". El proyecto FreeBSD. 2008-03-09 . Consultado el 2008-09-13 . SCTP: FreeBSD 7.0 es la implementación de referencia para el nuevo protocolo IETF Stream Control Transmission Protocol (SCTP), destinado a soportar VoIP, telecomunicaciones y otras aplicaciones con una gran fiabilidad y una transmisión de calidad variable a través de funciones como entrega por múltiples rutas, conmutación por error y transmisión múltiple.
^ "Protocolo de transmisión de control de flujo (SCTP)". Hewlett-Packard Development Company. Archivado desde el original el 3 de enero de 2013.
^ "Redes TCP/IP". Soporte para desarrolladores de QNX . Sistemas de software de QNX . Consultado el 13 de septiembre de 2008 ."Novedades en esta referencia". Referencia de la biblioteca QNX . Sistemas de software QNX . Consultado el 18 de diciembre de 2012 .
^ "Plataforma de desarrollo de software QNX 6.4.0".
^ "Redes del sistema operativo Solaris 10: rendimiento de red extremo". Sun Microsystems . Consultado el 13 de septiembre de 2008 .
^ "SctpDrv: un controlador SCTP para Microsoft Windows". Archivado desde el original el 8 de octubre de 2017. Consultado el 4 de enero de 2022 .
^ "Extensión de núcleo de red SCTP para Mac OS X". GitHub . 23 de septiembre de 2021.
^ "sctplab/usrsctp". Github . Consultado el 21 de septiembre de 2021 .
^ "Página de descarga de SCTP". 2006-05-29 . Consultado el 2011-02-04 .
^ "Instalador de la biblioteca SCTP de Windows" . Consultado el 4 de febrero de 2011 .
^ Tuexen, Michael; Stewart, Randall R. (mayo de 2013). Encapsulación UDP de paquetes del Protocolo de transmisión de control de flujo (SCTP) para comunicación de host final a host final. IETF . doi : 10.17487/RFC6951 . RFC 6951.
^ Bickhart, Ryan; Paul D. Amer; Randall R. Stewart (2007). "Transparent TCP-to-SCTP Translation Shim Layer" (Capa de corrección de traducción transparente de TCP a SCTP) (PDF) . Consultado el 13 de septiembre de 2008 .
^ D. Wing; A. Yourtchenko (abril de 2012). "Happy Eyeballs: Success with Dual-Stack Hosts" (Ojos felices: éxito con hosts de doble pila). tools.ietf.org . IETF .
^ Khademi, Naeem; Brunstrom, Anna; Hurtig, Per; Grinnemo, Karl-Johan (21 de julio de 2016). "Happy Eyeballs for Transport Selection" (Ojos felices para la selección de transporte). tools.ietf.org . IETF . Consultado el 9 de enero de 2017 .
Enlaces externos
sigtran (archivado)
"Grupo de trabajo sobre transporte de señalización (sigtran)".
"Grupo de Trabajo del Área de Transporte (tsvwg)".