Protocolo de Transporte Stream Control Transmission Protocol (SCTP)
SCTP
es un protocolo de transporte creado recientemente (año 2000),
comparado con TCP y UDP (año 1981). En principio fue diseñado para
cubrir las necesidad es de aplicaciones emergentes como Telefonía IP,
en particular para transportar señalización a través de Internet.
Su servicio es:
- Confiables
- Orientado al mensaje. TCP es orientado al byte, UDP al bloque de datos que se envíe cada vez.
- Provee múltiples flujos (streams) entre puntos extremos
- soporte a nivel transporte para computadores con conexión a varias redes o proveedores (multihoming)
- Ojo no se compromete con orden estricto de entrega, sí hay orden dentro de cada mensaje
SCTP posee ciertas ventajas sobre TCP en la mayoría de las aplicaciones:
- SCTP soporta directamente multihoming
- Puede eliminar bloqueos debido al paquete más antiguo (head-of-line blocking)
- Los límites de los mensajes de la aplicación son preservados
- Provee servicio de mensajes no ordenados (pero confiables)
- Algunas
implementaciones ofrecen servicios confiables parciales. Esto es el Tx
puede señalar que si un mensaje no ha podido ser entregado después de
un tiempo, se descarta. Así se mejora el transporte de datos ante
congestión.
- SCTP ofrece prácticamente los mismos servicios que
TCP, pero no permite cerrar la conexión parcialmente (shutdown), ni el
envío de datos urgentes (esta opción no la hemos estudiado en este
curso).
- SCTP posee mejor control para sintonizar el protocolo de transporte según su necesidad. TCP es más rígido.
Modelo de interfaz Uno-a-uno y uno-a-muchos
Podemos crear dos tipos de sockets en SCTP: one-to-one o one-to-many.
One-to-one:
Corresponde a una asociación (no conexión como en TCP) entre un
computador y otro pero en lugar de dos IPs puede involucrar más IPs en
caso multihoming. Entre otros fue desarrollados para facilitar la migración de aplicación sobre TCP a SCTP.
One-to-many:
En este caso podemos tener múltiples asociaciones para un mismo
sockets, es decir para este socket podemos tener múltiples sockets
remotos. Es similar al caso UDP donde un socket servidor puede atender
peticiones entrelazadas desde múltiples clientes.
El usar un tipo de interfaz (socket) u otro depende de la aplicación; por ejemplo, considerar:
- ¿Se trata de un servidor iterativo o concurrente?
- ¿Deseamos manejar varios descriptores en el servidor o sólo uno?