.2. Protocolos Dutados
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 antigonao 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.

