Foros - Stratos

Programadores => Programación en red => Mensaje iniciado por: plugin en 01 de Enero de 1970, 01:00:00 AM

Título: Control de flujo con UDP
Publicado por: plugin en 01 de Enero de 1970, 01:00:00 AM
                                Hola a todos!!! (cuanto tpo...) Bueno, estoy haciendo una pequeña aplicación comunicandome con UDP. Uso UDP en vez de TCP porque la comunicación la realizo con uno aparatejos que sólo tienen implementado este protocolo y no TCP. Entonces mi problema (a ver si me explico bien) es el siguiente. Yo tengo implementado en ambos extremos (servidor y aparatejo) una máquina de estados que controla la comunicación entre ambos. Si los paquetes NUNCA se perdieran iria perfecto (de hecho al probarlo en LOCAL va) pero me temo que cuando este funcionando realmente no será así. Entonces mi pregunta es ¿conoceis algoritmos o paginas o cualquier info referente al control de flujo en UDP? Como ya sabeis en UDP cada vez que se envia un paquete se confirma su recepción pero, de vez en cuando se me ocurren ciertas circunstancias que harian colgarse a alguna de las máquinas de estado en espera de un paquete que no llega o un ACK retrasado.

No se si me explicado bien.... Pues eso, a ver si podeis echarme una mano que me estoy volviendo locoooo!!!. Saludillos
--plugin                                
Título: Control de flujo con UDP
Publicado por: ethernet en 01 de Enero de 1970, 01:00:00 AM
                                El modelo mas proximo q tienes para mirar es TCP, sino puedes mirate los fuentes del quake2 o del quakeworld ara saber como implementan ellos el control de errores. De todas maneras en funcion del sistema q estes haciendo quizas te puedas permitir perdidas.
Para saber como va este sistema te recomiendo q te mires cosas como el  "protocolo de ventana deslizante" etc
Citar
Como ya sabeis en UDP cada vez que se envia un paquete se confirma su recepción pero...
Supongo q querras decir TCP, en UDP no se confirma nada, tu envias y como mucho puedes recibir un icmp, para informarte por ejemplo de q has enviado un paquete a un puerto q la maquina remota no tiene "escuchando".
Saludos

_________________
main(int i,char **p){
 int b;char *a=0;while( a[b=(int)"rvbolsf`Coz`lp-fp#.#pbovglp#"] ? printf("%c",a++^i): 0);
}

[ Este Mensaje fue editado por: ethernet el 2002-10-01 05:56 ]                                
Título: Control de flujo con UDP
Publicado por: nostromo en 01 de Enero de 1970, 01:00:00 AM
                                Quizas usando Timers (TimeOut) para cada paquete que envias(en el cliente) puedas controlar un poco el tema.


Un saludo                                
Título: Control de flujo con UDP
Publicado por: mICrO en 03 de Octubre de 2002, 09:00:51 AM
                                Prueba a usar la vieja tecnica del boton hombre muerto.

Es la tipica que tu sistema manda un mensaje que es un timestamp cada x tiempo, algo asi como "estoy vivo", "estoy vivo", "estoy vivo". Si en el otro punto no recibe un "estoy vivo" en xxx tiempo da como que el otro lado esta muerto


mICrO                                
Título: Ya ta mas o menos
Publicado por: plugin en 03 de Octubre de 2002, 11:41:30 AM
                                Holas!! pos ya esta esto mas o menos. Al final lo he implementado con el algoritmo cutre de "llamada y espera". Vamos, básicamente, que a la hora de enviar mando los paquetes hasta recibir una confirmación para dicho paquete. Digo básicamente porque también controlo que se pierdan paquetes o ACKS, o que el emisor/receptor se desincronice, etc.

Vamos, que ya parece estar todo correcto. Cuando la semana que viene hga las pruebas ya veré si explota o no, jeje.

Gracias y saludillos!!
--plugin                                
Título: Control de flujo con UDP
Publicado por: Milinko en 03 de Octubre de 2002, 11:51:18 AM
                                Puedes optimizar (si te hiciera falta...) el algoritmo utilizando una técnica similar al algoritmo de ventana deslizante que utiliza TCP. Eso te permitiría simultanear el envío/confirmación de varios paquetes a la vez, controlar el orden y, aunque creo que no es tu caso, combinar el envio de paquetes UDP fiables y no fiables dentro de una misma secuencia ordenada.

Si no necesitas "tiempo real" en tu aplicación creo que tu solución es más que buena.

Un saludo.
Milinko.                                
Título: Hmm, creo que no me valdría
Publicado por: plugin en 03 de Octubre de 2002, 12:41:07 PM
                                El algoritmo de la ventana deslizante (corregidme si me equivoco, que hace tpo no lo veo) se implementaba para recibir paquetes en trozos desordenados, y despues con todos ordenados formas la información. Lo bueno que tengo es que mis paquetes son muy pequeños y no necesito trocearlos. Además tanto el emisor como el receptor basan su comunicación en una máquina de estados y van actuando teniendo en cuenta el paquete ACTUAL; vamos, que no puedo recibir primero la trama 3 y despues la 2 porque de ser así la máquina de estados no sabría que hacer y seguramente se colgaría en espera de algo que no llega..... Espero que mi solución furule..... Al menos por ahora lo hace

Gracias de nuevo a todos y saludos
--plugin