Problemas com stop e wait

[!attention] Problemas com o protocolo stop and wait.

atraso fim a fim eh grande pacotes podem estar em transito e sem o ACK

Desempenho do RDT 3.0

  • desempenho do Emissor ($U_{sender}$)
  • relacao entre o tempo para transmitir o pacote e o tempo para receber o ACK.

$$U_{sender}= \frac{L/R}{RTT+L/R}$$ tempo de transição do pacote emitido / (Rounded time + tempo de transicao do pacote de acknowledge)

Protocolos Dutados/Pipelined

Permitem existir múltiplos pacotes em transito mesmo que não confirmados. Ou seja, aumentar o numero de sequencia.

  • exigira buffers no remetente e no receptor.

GBN - Go Back N

Primeiro protocolo estudado com estas caracteristicas. Ele permite ao emissor enviar $n$ pacotes sem aguardar o ACK.

  • send_base = Seq. # do pacote mais antigo nao confirmado no duto.
  • nextseqnum = Menor Seq. # prontos, mas nao enviados. (Ou seja, proximo a se enviar)
  • N = tamanho da janela

[!note] Conhecido como sliding window protocol

![[Pasted image 20250415102607.png]]

$[0, send_base - 1]$ = Pacotes transmitidos e confirmados (verde) $[send_base, nextseqnum - 1]$ = Pacotes enviados mas não confirmados (amarelo) $[nextseqnum, send_base + N - 1]$ = Disponíveis para serem usados imediatamente, assim que dados chegarem da camada superior (azul).

Maquina de estados

Emissor

![[Pasted image 20250415102857.png]] notas:

  • O timer so eh disparado se a base == nextseqsum (para o mais antigo nao confirmado)
  • se o timer vence, ele envia todos os da janela de nao confirmados.
  • o emissor, se recebe o ack do pacote $n_3$, por exemplo, ele presume que todos os $n_{i-1}$ estao validos, ent 1, 2 e 3, estao confirmados (ACK cumulativo)

Receptor

![[Pasted image 20250415104003.png]] exemplo:

  • pacotes 1, 2, 3 e 4 enviados pelo transmissor
  • pacotes 1 e 2 chegam no receptor, devolve ACK.
  • 3 nao chega, mas o 4 sim. Receptor joga os 2 fora.
  • timer vence no transmissor, ele envia todos na janela (3,4, 4+i)

Problemas de performance

se o tamanho da janela eh grande e o atraso também, muitos pacotes podem estar no duto.

  • um único erro em um pacote pode fazer a retransmissão de vários pacotes que chegaram com sucesso.

Repetição Seletiva

  • Emissor: retransmite apenas os pacotes que ele suspeita terem sido recebidos com erro pelo receptor.
  • Receptor confirma individualmente pacotes. Mesmo que fora de ordem.

Pacotes estao no buffer, para posterior entrega em ordem para a aplicacao.

Emissor

![[Pasted image 20250415105349.png]]

  • cada pacote tem um timeout unico, para que cada pacote possa ser reenviado individualmente.
  • se, e somente se, o numero de sequencia do pacote de ack for igual a $send_base$, entao a base (janela desliza) ate o proximo pacote nao confirmado.

Receptor

agora tambem tem uma janela deslizante. Se o pacote recebido esta dentro da janela $[ rcv_base, rcv_base+N-1]$. Um ack seletivo eh enviado ao remetente.

  • se esta na janela, ele manda o ACK
  • Se o pacote recebido esta fora de ordem e dentro da janela, ele bufferiza ele.
  • se esta em ordem, ele so devolve o ACK.