Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Control de flujo con UDP

Iniciado por plugin, 01 de Enero de 1970, 01:00:00 AM

« anterior - próximo »

plugin

                                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                                

ethernet

                                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 ]                                

nostromo

                                Quizas usando Timers (TimeOut) para cada paquete que envias(en el cliente) puedas controlar un poco el tema.


Un saludo                                

mICrO

                                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                                
ICrO : log off

plugin

                                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                                

Milinko

                                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.                                
-------------------------------------------
Milinko
"The Loneliness Of The Long Distance Runner"
--------------------------------------------

plugin

                                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                                






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.