nro secuencia para datagrama("LOGIN")

nro secuencia para datagrama("LOGIN")

de Aldo Martin Plazzotta Aguilera -
Número de respuestas: 5

Hola. Me surgue esta duda:

Supongamos que en el servidor tengo un socket de recepcion de mensajes S donde llegan los paquetes que contienen los LOGIN de los disitintos clientes.

Supongamos que tengo un rdt receptor en ese socket que se encarga de recibir los paquetes y enviar el ACK correspondiente.

El rdt alternara su valor "nro de secuencia esperado" entre 0 y 1.

Esto introduce un problema ¿con que nro de secuencia envía el cliente el paquete conteniendo "LOGIN"?

En respuesta a Aldo Martin Plazzotta Aguilera

Re: nro secuencia para datagrama("LOGIN")

de Martin Giachino -
La única forma de resolver eso es tener un rdt por usuario, donde en todo

momento sabes el estado de cada cliente. Ante un cliente nuevo creas una

máquina nueva.



Martín
En respuesta a Martin Giachino

Re: nro secuencia para datagrama("LOGIN")

de Aldo Martin Plazzotta Aguilera -

Bien. Entiendo que despues de logueado el cliente , el servidor crea maquinas de estado dedicadas a la comunicacion con ese cliente.

Pero antes de logeado el cliente, el primer paquete que él enviará al servidor (  LOGIN <apodo> ) podría o no contener un número de secuencia.

Suponiendo que ese paquete tuviera un número de secuencia que puede valer 0 o 1, esto da a pensar que el rdt receptor del Servidor a veces acepta un paquete con 0 y a veces acepta un paquete con 1.

Pero ahí está el problema: el rdt receptor que recibe los LOGIN no puede tener una condición para aceptar paquetes ("ahora acepto 0", "ahora acepto 1" ),

pues en ese caso no hay un valor adecuado con el cual enviar los LOGIN. ¿ Por qué no? Veamos las opciones:

1) Todos los clientes mandan LOGIN con 0: entonces si tengo un receptor que alterna entre 0 y 1 el nro de secuencia que acepta, y tengo dos clientes C1 y C2 que mandan <0> LOGIN, entonces solo uno de los paquetes será aceptado. El segundo cliente queda sin ser logueado. No se puede.

2) Todos los clientes mandan LOGIN con 1: Caso similar al anterior, no se puede usar.

3) Algunos Clientes mandan "1 LOGIN" y otros mandan "0 LOGIN" tampoco es valido pues ya que no resuelve el problema.

Si no estoy errado esto me da a concluir que en el servidor hay un rdt dedicado a recibir los loguin y que no tiene sentido que tenga una condición (bit alternante ) para aceptar paquetes ¡ si son LOGIN los debe aceptar!

¿ Estoy equivocado ?

Espero haberme explicado. Saludos.

En respuesta a Aldo Martin Plazzotta Aguilera

Re: nro secuencia para datagrama("LOGIN")

de Fernando Roman Penades Texeira -

Hola, 

Creo que la respuesta que te dieron anteriormente ya soluciona tu problema.
No tengo el servidor andando aún, pero creo que basta con tener un "número de secuencia esperado" para cada uno de los clientes que estén en linea. Tu receptor no tiene que "alternar entre 0 y 1" el número de secuencia que acepta, si no aceptar lo que espera de ese cliente.

Veamos un ejemplo:
El cliente C1 envía un LOGIN con número de secuencia 1. El servidor manda el ACK1 y guarda el valor esperado de ese cliente con valor E1 = 0.
C1 manda luego un mensaje con secuencia 0, que el servidor acepta (porque es lo que espera) y luego actualiza E1 = 1.
Cuando un cliente C2 mande LOGIN con secuencia 0, por ejemplo, el servidor va a guardar un nuevo valor E2 = 0.

Esto de tener un número de secuencia esperado para cada uno no solo te ayuda en el caso del LOGIN, si no que es necesario (según entiendo) en el resto de la comunicación, ya que los mensajes de los clientes pueden llegar en cualquier orden.     

En respuesta a Martin Giachino

Re: nro secuencia para datagrama("LOGIN")

de Maira Lucia Sosa Ramirez -

Cuando decís un rdt por usuario te referís a todos los datos, incluido temporizador? o podría ser solo el numero de secuencia?