# Parada y espera

El método de Parada y espera (Stop-and-wait) es un tipo de protocolo ARQ para el control de errores en la comunicación entre dos hosts basado en el envío de tramas o paquetes, de modo que una vez se envía un paquete no se envía el siguiente paquete hasta que no se recibe el correspondiente ACK (confirmación de la recepción) y en caso de recibir un NACK (rechazo de la recepción) se reenvía el paquete anterior.
Este protocolo asegura que la información no se pierde y que las tramas o paquetes se reciben en el orden correcto. Es el más simple de los métodos ARQ. En este, el emisor, después de enviar una sola trama, no envía las demás hasta que reciba una señal ACK (un acuse de recibo de que se recibió la trama) por parte del receptor. Por otro lado, el receptor, cuando recibe una trama válida (sin errores), envía la señal ACK.
Si el ACK no logra llegar al emisor antes de un cierto tiempo, llamado tiempo de espera, entonces el emisor, reenvía la trama otra vez. En caso de que el emisor sí reciba el ACK, entonces envía la siguiente trama.
El comportamiento anterior es la implementación más simple del método Parada-y-Espera. Sin embargo, en la implementación práctica de la vida real existen problemas que deben solucionarse.
Normalmente el emisor agrega un bit de redundancia al final de cada trama. El receptor utiliza dicho bit de redundancia para la búsqueda de posibles errores. Si el receptor encuentra que la trama es válida (no contiene errores), entonces envía el ACK. Si el receptor encuentra que la trama está dañada, entonces el receptor la deshecha y no envía el ACK -- pretendiendo que la trama se perdió por completo, no que fue solamente dañada.
Un problema surge cuando un ACK enviado por el receptor se daña o se pierde por completo en la red. En este caso, el emisor de la trama no recibe el ACK, se acaba el tiempo de espera y reenvía la trama de nuevo. Ahora el receptor tiene 2 copias de la misma trama y no sabe si la segunda es una trama duplicada o si es la siguiente trama de la secuencia que se enviará, que en realidad contiene datos idénticos a la primera.
Otro problema surge cuando el medio de transmisión tiene una latencia tan grande que el tiempo de espera del emisor se termina incluso antes de que la trama llegue al receptor. En este caso, el emisor reenvía la trama. Finalmente el receptor obtiene 2 copias de la misma trama y envía un ACK por cada una de ellas. Entonces, el emisor, que está a la espera de un solo ACK, recibe dos ACK's que pueden causar problemas si el emisor asume que el segundo ACK es para la siguiente trama en la secuencia.
Para evitar estos problemas, la solución más común es definir un número de secuencia de 1 bit en la cabecera de la trama. Este número de secuencia es alternado (de 0 a 1) en las tramas posteriores. Así, cuando el receptor envía un ACK, incluye el número de secuencia de la siguiente trama que espera recibir. De esta forma, el receptor puede identificar tramas duplicadas al checar si el número de secuencia de la trama fue alternado. Si dos tramas subsiguientes tienen el mismo número de secuencia, significa que son duplicados, y la segunda trama es desechada. De igual forma, si dos ACK's subsiguientes hacen referencia al mismo número de secuencia, entonces significa que están acusando de recibo a la misma trama.
Como comentario, recordar que todo esto puede ser aplicado tanto a tramas, como a paquetes, ya que estos protocolos pueden ser implementados tanto en la capa de Enlace de Datos, como en la capa de Transporte del modelo OSI.
El método ARQ de Parada-y-Espera es ineficiente comparada con otros métodos ARQ porque el tiempo entre paquetes, en caso de que los ACK's y los datos sean recibidos satisfactoriamente, es el doble del tiempo de transmisión (suponiendo que el tiempo que tardan los hosts en procesar la información y responder es cero). El rendimiento en el canal es una fracción de lo que realmente podría ser. Para solucionar este problema, se puede enviar más de un paquete a la vez con un número de secuencia más grande y usar un solo ACK para dicho conjunto de paquetes. Esto es lo que se realiza con los métodos ARQ de Rechazo simple (Go-Back-N) y de Repetición Selectiva (Selective Repeat).