[IRC] Error en examen Febrero 2013?

[IRC] Error en examen Febrero 2013?

de Usuario eliminado -
Número de respuestas: 3
Hola, revisando la solución del ejercicio 2 del examen me da la impresión que permite que el receptor suba a la capa superior dos veces el mismo paquete.

Esta es la secuencia:
1) Emisor envía primer paquete
2) Receptor recibe paquete y envía ACK que nunca llega al emisor
3) Emisor hace timeot y envía NAK que nunca llega al receptor
4) Receptor hace timeot y envía NAK (acá comienza el problema)
5) Emisor recibe NAK y envía otra vez el primer paquete
6) El receptor recibe otra vez el primer paquete y lo vuelve a pasar a la capa superior

Esta es la secuencia de eventos según la solución, como se ve al final el receptor sube por segunda vez el mismo paquete:

Emisor: Emisor envía primer paquete
    rdt_send(datos)
    -----------------------
    sndpkt=make_pkt(datos)
    udt_send(sndpkt)
    iniciar_temporalizador
    (Pasa a Espera ACK)

Receptor: Receptor recibe paquete y envía ACK que nunca llega al emisor
    rdt_rcv(rcvpkt) && id_data(rcvpkt)
    -----------------------
    extract_data(rcvpkt, data)
    deliver_data(data)
    sndpkt=make_pkt(ACK)
    udt_send(sndpkt)
    iniciar_temporalizador
    (Sigue en Recibiendo datos)
 
Emisor: Emisor hace timeot y envía NAK que nunca llega al receptor
    fin_de_temporalización
    -----------------------
    sndpkt=make_pkt(NAK)
    udt_send(sndpkt)
    iniciar_temporalizador
    (Pasa a Restransmitiendo)
 
Receptor: Receptor hace timeot y envía NAK (acá comienza el problema)
    fin_de_temporalización
    -----------------------
    sndpkt(NAK)
    udt_send(sndpkt)
    iniciar_temporalizador
    (Pasa a Recepción fallida)
 
Emisor: Emisor recibe NAK y envía otra vez el primer paquete
    rdt_rcv(rcvpkt) && is_NAK(rcvpkt)
    -----------------------
    sndpkt=make_pkt(datos)
    udt_send(sndpkt)
    iniciar_temporalizador
    (Sigue en Restransmitiendo)

Receptor: El receptor recibe otra vez el primer paquete y lo vuelve a pasar a la capa superior
    rdt_rcv(rcvpkt) && id_data(rcvpkt)
    -----------------------
    extract_data(rcvpkt, data)
    deliver_data(data)
    sndpkt=make_pkt(ACK)
    udt_send(sndpkt)
    iniciar_temporalizador
    (Pasa a Recibiendo datos)

Puede que esté mal la solución?

Saludos.
En respuesta a Usuario eliminado

Re: [IRC] Error en examen Febrero 2013?

de Usuario eliminado -

A mí también me da la sensación de que tiene errores, por ejemplo, otro caso:
- El emisor envía datos (los mismos se pierden).
- El emisor da timeout y envía un NACK.
- El receptor recibe el NACK y envía un ACK.
Entonces, el emisor está en condiciones de pedir datos nuevos y que estos sean enviados, sin haber entregado los primeros. 

En la letra no se aclara ninguna relación entre t y r, por lo que podría suceder que el emisor de timeout antes que el receptor. 
¿Podrían aclarar si el razonamiento es correcto?

Saludos,
Renzo.

En respuesta a Usuario eliminado

Re: [IRC] Error en examen Febrero 2013?

de Gerardo Fabian Coscia De Leon -

Alguien (docentes, estudiantes) tiene la solución correcta de este ejercicio? gracias.

Saludos

 

En respuesta a Gerardo Fabian Coscia De Leon

Re: [IRC] Error en examen Febrero 2013?

de Hernan Esteves Rosano -

Yo no estoy seguro si tendrá solucion porque lo que Mauro dijo puede pasar y no dejan usar números de secuencia que justamente son usados en el alternating bit protocol para que el receptor sepa si lo que esta recibiendo es una retransmision o datos nuevos; no se me ocurre otra forma de implementarlo segun las condiciones de la letra. Espero que algun profesor intervenga y lo pueda aclarar.