Protocolo de red informática
El protocolo de transmisión de control de flujo ( SCTP ) es un protocolo de comunicaciones de redes informáticas en la capa de transporte del conjunto de protocolos de Internet . Originalmente diseñado para el transporte de mensajes del Sistema de señalización 7 (SS7) en telecomunicaciones, el protocolo proporciona la característica orientada a mensajes del Protocolo de datagramas de usuario (UDP), al tiempo que garantiza un transporte confiable y en secuencia de mensajes con control de congestión como el Protocolo de control de transmisión ( TCP). A diferencia de UDP y TCP, el protocolo admite rutas redundantes y de múltiples conexiones para aumentar la resiliencia y la confiabilidad.
SCTP está estandarizado por Internet Engineering Task Force (IETF) en RFC 9260. La implementación de referencia de SCTP se lanzó como parte de FreeBSD versión 7 y desde entonces se ha adaptado ampliamente a otras plataformas.
Supervisión formal
El grupo de trabajo de Transporte de Señalización del IETF ( SIGTRAN ) definió el protocolo (número 132 [1] ) en octubre de 2000, [2] y el grupo de trabajo del Área de Transporte del IETF (TSVWG) lo mantiene. RFC 9260 define el protocolo. 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 los cuales es un grupo de bytes), en lugar de transportar un flujo ininterrumpido 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 sola operación. Por el contrario, TCP es un protocolo orientado a flujos, que transporta flujos de bytes de forma fiable y en orden. Sin embargo, TCP no permite que el receptor sepa cuántas veces la aplicación del remitente llamó al transporte TCP pasándole grupos de bytes para enviar. En el remitente, TCP simplemente agrega más bytes a una cola de bytes que esperan salir a través de la red, en lugar de tener que mantener una cola de mensajes salientes individuales separados que deben conservarse como tales.
El término transmisión múltiple se refiere a la capacidad de SCTP de transmitir varias secuencias 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, operando con mensajes (o fragmentos) en lugar de bytes.
TCP preserva el orden de los bytes en la secuencia al incluir un número de secuencia de bytes con cada segmento . SCTP, por otro lado, asigna un número de secuencia o una identificación de mensaje [nota 1] a cada mensaje enviado en una secuencia. 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 optar por procesar 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
- Soporte de multihoming en el 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.
- La entrega de fragmentos dentro de flujos independientes elimina el bloqueo innecesario de cabecera de línea , a diferencia de la entrega de flujo de bytes TCP.
- Fiabilidad parcial explícita
- 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 sobre fragmentos de datos duplicados o faltantes.
- Detección de errores mejorada adecuada para tramas gigantes Ethernet
Los diseñadores de SCTP originalmente lo idearon para el transporte de telefonía (es decir, el Sistema de Señalización 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 del IETF se conoce como SIGTRAN . Mientras tanto, se han propuesto otros usos, por ejemplo, el protocolo Diámetro [3] y el Reliable Server Pooling (RSerPool). [4]
Motivación y adopción
TCP ha proporcionado el medio principal para transferir datos de manera confiable a través de Internet. Sin embargo, TCP ha impuesto limitaciones a varias aplicaciones. De RFC 4960:
- TCP proporciona una transferencia de datos confiable y una entrega de datos en un estricto orden de transmisión. Algunas aplicaciones necesitan una transferencia confiable sin mantenimiento de secuencia, mientras que otras estarían satisfechas con un ordenamiento parcial de los datos. En ambos casos, la propiedad de bloqueo de cabecera de línea de TCP provoca retrasos innecesarios.
- Para 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 el envío de muchos paquetes IP pequeños donde un solo paquete más grande hubiera sido suficiente, la implementación de TCP puede retrasar la transmisión de datos mientras espera que la aplicación ponga en cola posiblemente más datos ( algoritmo de Nagle ). Si un retraso tan pequeño no es deseable, la aplicación debe solicitar explícitamente la transmisión sin retrasos caso por caso utilizando la función push (es decir, configurando el indicador PSH en el encabezado del paquete TCP). SCTP, por otro lado, permite configurar la transmisión sin demoras como valor predeterminado para una asociación, eliminando cualquier demora no deseada, 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 utilizando hosts multitarjeta.
- 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 conocimiento, la falta de implementaciones (particularmente en Microsoft Windows), la falta de soporte de aplicaciones y la falta de soporte de red. [6]
SCTP ha sido adoptado en el espacio de la telefonía móvil como protocolo de transporte para varias interfaces de red centrales . [7]
multihoming
SCTP proporciona rutas redundantes para aumentar la confiabilidad.
Cada punto final SCTP necesita verificar la accesibilidad de las direcciones primaria y redundante del punto final remoto mediante un latido . Cada punto final SCTP necesita 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 la decidirá la tabla de enrutamiento del host (y no SCTP).
En multihoming asimétrico, uno de los dos puntos finales no admite multihoming.
En multihoming local y remoto único, si no se puede acceder a la dirección primaria 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 N fragmentos (Chunk N) está resaltado en rojo.
Cada fragmento comienza con un identificador de tipo de un byte, con 15 tipos de fragmentos 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 están incluidos 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 formaba parte del diseño SCTP original, SCTP se diseñó con funciones para mejorar la seguridad, como un 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. 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 transporta SS7 a través de una red IP utilizando 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 dactilares . Algunos sistemas operativos se entregan con soporte SCTP habilitado y, como no es tan conocido como TCP o UDP, a veces se pasa por alto en las configuraciones de firewall y detección de intrusos, lo que a menudo permite sondear el tráfico.
Implementaciones
La implementación de referencia SCTP se ejecuta en FreeBSD, Mac OS X, Microsoft Windows y Linux. [8]
Los siguientes sistemas operativos implementan SCTP:
- AIX versión 5 y posteriores
- NetBSD [9] desde 8.0 [10]
- Cisco IOS 12 y superior
- DragonFly BSD desde la versión 1.4, sin embargo, el soporte está en desuso en la versión 4.2 [11]
- FreeBSD , versión 7 y superiores, contiene la implementación SCTP de referencia [12]
- HP-UX , 11i v2 y superior [13]
- iluminamos
- Kernel de Linux 2.4 y superior
- QNX Neutrino Realtime OS, [14] 6.3.0 a 6.3.2, obsoleto desde 6.4.0 [15]
- Tru64 con el paquete complementario SCTP de Compaq
- Sun Solaris 10 y superior [16]
- Versiones de VxWorks 6.2.xa 6.4.x y 6.7 y posteriores
Controladores de terceros:
- Microsoft Windows :
- El controlador del kernel SctpDrv es un puerto de la pila BSD SCTP para Windows (abandonado después de 2012) [17]
- Mac OS :
- Extensión del kernel de red SCTP para Mac OS X [18]
Biblioteca de espacio de usuario :
Las siguientes aplicaciones implementan SCTP:
Túnel sobre UDP
En ausencia de soporte SCTP nativo en los sistemas operativos, es posible hacer un túnel SCTP sobre UDP, [22] así como asignar llamadas API TCP a llamadas SCTP para que las aplicaciones existentes puedan usar SCTP sin modificaciones. [23]
RFC
- Protocolo de transmisión de control de flujo RFC 9260
- Protocolo de transmisión de control de flujo RFC 8540: erratas y problemas en RFC 4960 (obsoleto por RFC 9260)
- RFC 7829 SCTP-PF: un algoritmo de conmutación por error rápido para el protocolo de transmisión de control de flujo
- RFC 7765 TCP y protocolo de transmisión de control de flujo (SCTP) Reinicio de RTO
- RFC 7496 Políticas adicionales para la extensión del protocolo de transmisión de control de flujo parcialmente confiable
- RFC 7053 SACK-IMMEDIATELY Extensión para el protocolo de transmisión de control de flujo (obsoleto por RFC 9260)
- RFC 6951 Encapsulación UDP de paquetes del protocolo de transmisión de control de flujo (SCTP) para comunicación de host final a host final
- RFC 6525 Reconfiguración de flujo del protocolo de transmisión de control de flujo (SCTP)
- Extensiones API de sockets RFC 6458 para el protocolo de transmisión de control de flujo (SCTP)
- RFC 6096 Registro de banderas de fragmentos del protocolo de transmisión de control de flujo (SCTP) (obsoleto por RFC 9260)
- RFC 5062 Ataques de seguridad encontrados contra el protocolo de transmisión de control de flujo (SCTP) y contramedidas actuales
- RFC 5061 Protocolo de transmisión de control de flujo (SCTP) Reconfiguración dinámica de direcciones
- RFC 5043 Protocolo de transmisión de control de flujo (SCTP) Adaptación de colocación directa de datos (DDP)
- Protocolo de transmisión de control de flujo RFC 4960 (obsoleto por RFC 9260)
- RFC 4895 Fragmentos autenticados para el protocolo de transmisión de control de flujo (SCTP)
- RFC 4820 Parámetro y fragmento de relleno para el protocolo de transmisión de control de flujo (SCTP)
- Erratas y problemas de especificación del protocolo de transmisión de control de flujo (SCTP) RFC 4460 (obsoleto por RFC 9260)
- RFC 3873 Base de información de gestión (MIB) del protocolo de transmisión de control de flujo (SCTP)
- Extensión de confiabilidad parcial del protocolo de transmisión de control de flujo (SCTP) RFC 3758
- RFC 3554 sobre el uso del protocolo de transmisión de control de flujo (SCTP) con IPsec
- RFC 3436 Seguridad de la capa de transporte sobre el protocolo de transmisión de control de flujo
- RFC 3309 Cambio de suma de comprobación del protocolo de transmisión de control de flujo (SCTP) (obsoleto por RFC 4960)
- RFC 3286 Introducción al protocolo de transmisión de control de flujo
- Declaración de aplicabilidad del protocolo de transmisión de control de flujo RFC 3257
- Protocolo de transmisión de control de flujo RFC 2960 (actualizado por RFC 3309 y obsoleto por RFC 4960)
Ver también
Notas
Referencias
- ^ "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 base de diámetro. IETF . segundo. 2.1. doi : 10.17487/RFC3588 . RFC 3588 . Consultado el 18 de mayo de 2012 .
- ^ "Escenario de ejemplo utilizando los servicios de sesión RSerPool". Una descripción general de los protocolos de agrupación de servidores confiables. IETF . pag. 10. seg. 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)?". Mundo de la Red . Consultado el 4 de octubre de 2017 .
- ^ Olsson, Magnus; Mulligan, Catalina; 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.). Amsterdam Boston: Elsevier/AP, Academic Press es una editorial de Elsevier. pag. 491.ISBN 978-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 portátil 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 21 de enero de 2019 .
- ^ "man4/sctp.4". Referencia cruzada de BSD . NetBSD . 2018-07-31 . Consultado el 21 de enero de 2019 .
- ^ "DragonFly elimina SCTP". Listas.dragonflybsd.org . Consultado el 28 de abril de 2016 .
- ^ "Acerca de los avances tecnológicos de FreeBSD". El proyecto FreeBSD. 2008-03-09 . Consultado el 13 de septiembre de 2008 .
SCTP: FreeBSD 7.0 es la implementación de referencia para el nuevo protocolo SCTP (Stream Control Transmission Protocol) de IETF, destinado a admitir VoIP, telecomunicaciones y otras aplicaciones con gran confiabilidad y transmisión de calidad variable a través de características como entrega multiruta, conmutación por error. y transmisión múltiple.
- ^ "Protocolo de transmisión de control de flujo (SCTP)". Compañía de desarrollo Hewlett-Packard. Archivado desde el original el 3 de enero de 2013.
- ^ "Redes TCP/IP". Soporte para desarrolladores de QNX . Sistemas de software QNX . Consultado el 13 de septiembre de 2008 ."Novedades de 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". Microsistemas solares . 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 del kernel 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 SCTP". 29 de mayo de 2006 . Consultado el 4 de febrero de 2011 .
- ^ "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). "Capa de cuña de traducción transparente de TCP a SCTP" (PDF) . Consultado el 13 de septiembre de 2008 .
- ^ D. Ala; A. Yourtchenko (abril de 2012). "Happy Eyeballs: éxito con hosts de doble pila". herramientas.ietf.org . IETF .
- ^ Khademi, Naeem; Brunström, Anna; Hurtig, Per; Grinnemo, Karl-Johan (21 de julio de 2016). "Ojos felices para la selección de transporte". herramientas.ietf.org . IETF . Consultado el 9 de enero de 2017 .
enlaces externos
- sigtran (archivado)
- "Grupo de Trabajo de Transporte de Señalización (sigtran)".
- "Grupo de Trabajo del Área de Transporte (tsvwg)".
- "Proyecto OpenSS7".
- Grupo de trabajo SCTP para Linux
- "Página SCTP de Michael Tüxen".
- "Página SCTP de Lode Coene".
- "Página del proyecto SCTP de Thomas Dreibholz".