¿Cómo se dibujan las máquinas de estados finitos para el emisor y el receptor de una repetición selectiva?

N es el tamaño de la ventana (fijo en todo). Para simplificar, asumimos un espacio de número de secuencia infinito.

Remitente:

  1. Inicializar
  2. Cuando los datos llegan de la aplicación, si el siguiente número de secuencia está dentro de la ventana, envíe el paquete, inicie el temporizador para este paquete e incremente el siguiente número de secuencia.
  3. Si el temporizador de algún paquete caduca, reenvíe ese paquete (por lo tanto, selectivo), reinicie el temporizador.
  4. Si algún paquete está ACKed, márquelo como ACKed y avance sendbase al siguiente paquete enviado sin RACK.

Receptor

5. Inicializar rcvbase
6. Si se recibe el paquete (y no está dañado):

  • Si su número de secuencia está entre rcvbase y rcvbase + N-1 (ambos incluidos): envíe ACK (n); si el número de secuencia es igual a recibir base, entregar datos a la aplicación y entregar datos almacenados en búfer consecutivos (avance rcvbase en consecuencia); de lo contrario, el búfer recibió datos
  • Si su número de secuencia está entre rcvbase-N y rcvbase-1 (ambos incluidos), simplemente envíe ACK (n)
  • De lo contrario, ignorar