Reliable Data Transfer

Objetivo: criar uma conexão totalmente confiável entre 2 processos.

O RDT funciona através de fazer a saída de dados de um processo de maneira confiável, em um canal não confiável de dados.

Suposição: o canal de comunicação é perfeitamente confiável.

  • Sem erros de bits.
  • Sem perda de pacotes.

Funcionamento:

  • O remetente simplesmente envia os dados pelo canal.
  • O receptor apenas recebe os dados e os entrega para a camada superior.

Eventos:

  • rdt_send(): remetente envia um pacote.
  • rdt_rcv(): receptor recebe o pacote.
  • deliver_data(): receptor entrega o dado recebido à aplicação.

RDT 2.0

Bits dentro de um pacote podem ser corrompidos. Entretanto, vamos assumir que nao ha perda de pacotes, ainda que haja bits corrompidos.

[!question] Como recuperar-se dos erros?

Protocolo de feedback

  • Confirmação (ACK) -> receptor avisa que pacote chegou bem
  • Negativa de Confirmação (NAK) -> receptor avisa explicitamente ao remetente que pacote tinha erros. Os protocolos de retransmissão são chamados de Protocolos ARQ (Automatic Repeat reQuest)

Emissor

![[1744205046_grim.png]]

Receptor

![[1744205195_grim.png]]

Erros do RDT 2.0

  1. Emissor nao sabe oq aconteceu no receptor, portanto, nao pode so retransmitir, pois pode haver pacotes duplicados.

  2. ACKS e NAKS podem ser corrompidos

RDT 2.1

Ha um novo numero de sequencia no pa, para evitar duplicacao (0 ou 1).

Emissor retransmite pacote atual se ACK/NAK for recebido cm erro.

Receptor descarta pacote duplicado

![[1744205865_grim.png]]

Receptor

![[1744206705_grim.png]]

RDT 3.0

Agora, nao mais assumiremos que o canal nao pode perder pacotes.

[!question] como lidar e como detectar perdas de pacotes

Solucao: Emissor aguarda o ACK que esta em transito por um determinado tempo. Exige o uso de timers.

  • se ha um evento de timeout, o pacote eh retransmitido.

[!question] o que acontece se o ack estiver apenas atrasado?

A retransmissão, nesse caso, seria duplicado. Então, o numero de sequencia tem q ser enviado pelo receptor, junto ao ACK.

![[1744207316_grim.png]]