networking - significa - ¿Por qué SCTP no es muy usado/conocido?
sctp vs tcp (11)
De hecho, SCTP se usa principalmente en el área de telecomunicaciones. Tradicionalmente, los conmutadores de telecomunicaciones utilizan SS7 ( Sistema de señalización N. ° 7 ) para interconectar diferentes entidades en la red de telecomunicaciones. Por ejemplo, la base de datos de suscriptor (HLR) del proveedor de telecomunicaciones, con un conmutador (MSC), el suscriptor también está conectado (MSC).
El área de telecomunicaciones se está moviendo a velocidades más altas y un entorno más accesible. Uno de estos cambios es reemplazar el protocolo SS7 por un protocolo más elegante, rápido y flexible basado en IP.
El área de telecomunicaciones es muy conservadora. La red SS7 se ha utilizado aquí durante décadas. Es una red muy confiable y cerrada. Esto significa que un usuario regular no tiene acceso a él.
La red IP, en cambio, está abierta y no es confiable, y las telecomunicaciones no se convertirán a ella si no maneja al menos la carga que maneja SS7. Esta es la razón por la cual SCTP fue desarrollado. Intenta:
- imitar todas las ventajas de la red SS7 acumulada a lo largo de las décadas.
- para crear un protocolo orientado a la conexión mejor que TCP en velocidad, seguridad y redundancia
Las últimas versiones de Linux ya tienen soporte SCTP.
Recientemente revisé el libro "Programación de red UNIX, Vol. 1" de Richards Stevens y encontré que hay un tercer estándar de capa de transporte además de TCP y UDP: SCTP .
Resumen: SCTP es un protocolo de nivel de transporte impulsado por mensajes como UDP, pero confiable como TCP. Aquí hay una breve introducción de IBM DeveloperWorks .
Honestamente, nunca antes había escuchado sobre SCTP. No recuerdo haber leído sobre esto en ningún libro de redes ni haber escuchado sobre él en las clases que había tomado. Leer otras preguntas de stackoverflow que mencionan SCTP sugiere que no estoy solo con esta falta de conocimiento.
¿Por qué SCTP es tan desconocido? ¿Por qué no se usa mucho?
En referencia a todos los comentarios acerca de que los enrutadores comerciales están rotos o que carecen de soporte SCTP, el problema es que SCTP con NAT todavía está en borrador con el IETF. Entonces no hay una especificación RFC para que lo implementen.
Hemos estado implementando SCTP en varias aplicaciones ahora y hemos encontrado un problema importante con el soporte SCTP en varios enrutadores domésticos. Simplemente no manejan SCTP correctamente. Creo que esto es principalmente un problema de rendimiento (la especificación del protocolo SCTP requiere sumas de comprobación para que todos los paquetes se vuelvan a calcular y no solo para los encabezados).
Como muchos otros protocolos prometedores, SCTP está tristemente muerto en el agua hasta que D-link y Netgear arreglan sus cajas NAT rotas.
Leyendo la página de Wikipedia de SCTP diría que la razón principal es que SCTP es un protocolo muy joven (propuesto en 2000) que actualmente no está respaldado por los sistemas operativos principales ( Windows , OS X , Linux ).
Si "muy joven" le parece inapropiado, piense en IPV6 : "en diciembre de 2008, a pesar de celebrar su décimo aniversario como un protocolo de seguimiento de normas, IPv6 apenas estaba en su infancia en términos de despliegue general en todo el mundo".
Muchos de nosotros usaremos SCTP pronto, ya que es utilizado por los canales de datos de WebRTC para crear una capa confiable similar al TCP sobre UDP - SCTP sobre DTLS sobre UDP: https://tools.ietf.org/html/draft-ietf-rtcweb-data-channel-13#section-6
SCTP no es muy conocido y no se usa / implementa mucho porque:
- General: no está ampliamente integrado en las pilas de TCP / IP (en 2013: todavía falta de forma nativa en las últimas Mac OS X y Windows)
- Bibliotecas: pocas vinculaciones de alto nivel en lenguajes fáciles de usar (Descargo de responsabilidad: soy mantenedor de pysctp , soporte de pila fácil SCTP para Python)
- NAT: No cruza muy bien NAT / nada (menos del 1% de los enrutadores de hogar y empresa de Internet hacen NAT en SCTP).
- Popularity: Ninguna aplicación pública general lo usa
- Paradigma de programación: cambió un poco: sigue siendo un socket, pero puede conectar muchos hosts a muchos hosts (multihoming), datagrama es ordenado y confiable, erc ...
- Complejidad: la pila SCTP es compleja de implementar (debido a lo anterior)
- Competencia: Multipath TCP se acerca y debe abordar las necesidades / capacidades de multihoming para que las personas se abstengan de implementar SCTP si es posible, esperando el MTCP.
- Nicho: Necesidades Los rellenos SCTP son muy peculiares (datagramas confiables ordenados, multitream) y no son necesarios para muchas aplicaciones
- Seguridad: SCTP evade los controles de seguridad (algunos firewalls, la mayoría de los IDS, todos los DLP, no aparecen en netstat, excepto CentOS / Redhat / Fedora ...)
- Capacidad de auditoría: algo así como 3 compañías en el mundo rutinariamente hacen auditorías de seguridad SCTP (Descargo de responsabilidad: yo trabajo en una de ellas)
- Curva de aprendizaje: no hay mucha cadena de herramientas para jugar con SCTP (verifique la excelente withsctp que combina muy bien con netcat o use socat)
- Bajo el capó: se usa principalmente en telecomunicaciones y cada vez que envía SMS, comienza a navegar por la red en su teléfono móvil o realiza llamadas telefónicas, a menudo activa mensajes que fluyen por SCTP (SIGTRAN / SS7 con GSM / UMTS, Diámetro con LTE / IMS / RCS, S1AP / X2AP con LTE), así que realmente lo usas mucho, pero nunca lo sabes ;-)
SCTP requiere más diseño dentro de la aplicación para obtener el mejor uso de la misma. Hay más opciones que TCP, la API similar a Sockets vino más tarde, y es joven. Sin embargo, creo que la mayoría de las personas que se toman el tiempo para entenderlo (y que conocen las deficiencias de TCP) lo aprecian: es un protocolo bien diseñado que se basa en nuestros ~ 30 años de conocimiento de TCP y UDP.
Uno de los aspectos que requiere algo de reflexión es el de las transmisiones. Las transmisiones proporcionan (por lo general, creo que puede desactivarlo) una garantía de pedido dentro de ellas (al igual que una conexión TCP) pero puede haber varias transmisiones por conexión SCTP. Si los datos de su aplicación se pueden enviar a través de varias transmisiones, se evita el bloqueo de cabecera cuando el receptor muere de hambre debido a un paquete extraviado. Efectivamente, se pueden tener conversaciones diferentes a través de la misma conexión sin afectarse mutuamente.
Otra adición útil es la del soporte de múltiples domicilios: una conexión puede realizarse a través de múltiples interfaces en ambos extremos y resuelve fallas. Puede emular esto en TCP, pero en la capa de aplicación.
El latido del corazón adecuado, que es lo primero que implementa cualquier aplicación que usa TCP para conexiones no transitorias, es gratis.
Mi resumen personal de SCTP es que no hace nada que no se pueda hacer de otra manera (en TCP o UDP) con un gran soporte de aplicaciones. Lo que proporciona es la capacidad de no tener que implementar ese código (mal) usted mismo.
FYI, SCTP es obligatorio como compatible con Diameter (cf RADIUS next gen). ver RFC 3588
Diameter clients MUST support either TCP or SCTP, while agents and servers MUST support both. Future versions of this specification MAY mandate that clients support SCTP.
SCTP se usa ampliamente en la red 4G LTE donde se usa Diámetro para AAA.
Sctp nace demasiado tarde, y para muchas situaciones TCP es suficiente.
Además, como sé, la mayor parte de su uso está en el área de telecomunicaciones.
p1. El SCTP mapeado directamente sobre IPv4 requiere soporte en puertas de enlace NAT, que nunca se han implementado ampliamente en ningún lugar, y sin él, la puerta de enlace NAT típica solo permitirá que un host privado por cada dirección pública utilice SCTP a la vez.
p2. SCTP mapeado sobre UDP / IPv4 permite más hosts privados por dirección pública, pero las asignaciones UDP en IPv4 / pasarelas NAT son notoriamente difíciles de establecer y mantener, debido al hecho de que UDP es un transporte sin conexión sin ningún estado explícito para que un NAT rastree .
p3. SCTP mapeado directamente sobre IPv6 requiere ... bueno ... IPv6. ¿Has intentado implementar IPv6? Si es así, ¿ha intentado comprar un firewall IPv6? ¿Es compatible con SCTP? ¿Qué tal un equilibrador de carga? Un acelerador de SSL?
p4. Finalmente, gran parte de Internet se limita a lo que puede caber a través del puerto TCP 80 y el puerto 443, por lo que SCTP de cualquier sabor tiende a perder allí. Por lo tanto, verá esfuerzos como el grupo de trabajo MPTCP en IETF.