sockets - socket - SCTP con Multihoming como repuesto en reemplazo para TCP
sockets java (1)
SCTP
tiene soporte nativo multi-hogar que, si lo entiendo correctamente, redirigirá automáticamente sus paquetes a través de una NIC secundaria si la interfaz principal se cae. Dupliqué esta funcionalidad con TCP escribiendo un deamon de enrutamiento personalizado para modificar las tablas de enrutamiento si mi NIC principal deja de funcionar. Me gustaría intentar usar SCTP
lugar.
En Steven Unix Network Programming V1 3rd Edition en la página 288 dice:
Para este ejemplo, usamos un servidor de estilo uno a muchos. Hacemos esta elección por una razón importante. Los ejemplos en el Capítulo 5 se pueden modificar para ejecutar sobre
SCTP
con un cambio menor: modifique la llamada a la función desocket
para especificarIPPROTO_SCTP
lugar deIPPROTO_TCP
como tercer argumento. Simplemente hacer este cambio, sin embargo, no tomaría ventaja de ninguna de las funciones adicionales proporcionadas porSCTP
excepto el multi-homing.
Ahora lo he intentado con resultados bastante pobres.
Me estoy ejecutando en Ubuntu 9.04 con los paquetes libsctp1, libsctp-dev y lksctp-tools instalados. He verificado con lksctp-tools que SCTP
funciona correctamente.
Tomé el código de ejemplo UNP y lo modifiqué como se indica arriba sobre los programas ~/unpv13e/tcpcliserv/tcpserv04.c
y ~/unpv13e/select/tcpcli02.c
.
Este es un simple par echo server / client. El servidor funciona aparentemente escuchando, pero el cliente sale diciendo que la conexión fue rechazada. Como netstat no es compatible con SCTP
, utilicé lsof -n | grep tcpserv
lsof -n | grep tcpserv
que me mostró:
tcpserv04 6208 alice 3u sock 0,4 33889 can''t identify protocol
Esto no parece decirme mucho más que tcpserv04 tiene algún tipo de socket abierto.
Ya había reescrito y probado el cliente TCP original en perl, así que lo cambié a sctp y pude conectarlo, aunque la canalización de un archivo en stdin no funcionó por completo (se colgó a aproximadamente 2/3 del camino al recibir el eco) .
Parece que UNP está implicando que portar aplicaciones TCP a SCTP para aprovechar el multi-homing es trivial, sin embargo, basa este simple intento que realmente no parece ser el caso.
¿Alguien puede indicarme un buen tutorial o dar buenos consejos sobre cualquier programa para tener en cuenta al momento de portar aplicaciones TCP a SCTP de uno a uno para aprovechar el multi-homing?
tcpcli02
intenta conectarse al puerto 7, mientras que tcpserv04
escucha en el puerto 9877 (el valor predeterminado para SERV_PORT
). Después de cambiar esos para que coincida, funciona para mí.
El soporte para SCTP generalmente es muy malo. A menos que controle toda la infraestructura de red entre los hosts que está tratando de conectar, no contaría con que funcione de manera confiable. Portar las aplicaciones en sí debería ser bastante sencillo, como se menciona en UNP.