Redes de computadores
75 pág.

Redes de computadores


DisciplinaRedes de Computadores18.630 materiais246.916 seguidores
Pré-visualização26 páginas
que estado é quando neste \u201cestado\u201d o
próximo estado fica unicamente determinado pelo próximo evento.
FSM [2]
A figura acima ilustra a abordagem FSM.
rdt1.0: Transferência confiável de dados sobre canais perfeitamente confiáveis
Primeiro é considerado um caso mais simples, na qual nao há erro de bits na transmissão e também não há perdas de
pacotes. As FSMs são separadas para transmissor e receptor na qual transmissor envia dados para o canal subjacente
receptor lê os dados do canal subjacente. Como não a erro de bits ou perdas de pacotes o papel do remetente é
simplesmente aguardar o pedido de envio da camada superior e enviar o pacote, voltando ao seu estado de espera de
nova solicitação. O lado do destinatário fica em estado de espera de chegada de pacotes da camada inferior, recebe
os dados, extrai e os envia para a camada superior.
RDT1.0 [3]
A figura acima ilustra a especificação da FSM do protocolo em questão.
rdt2.0: Canal com erros de bit
Já o rdt2.0 prevê envio de dados que podem chegar com erros ou comrrompidos. Para solucionar tal problema, é
implementado o conceito de resposta pelo destinatário ao remetente. Dessa forma o protocolo usa como resposta
reconhecimento positivo (ACK) e reconhecimento negativo (NAK). Nos reconhecimentos (ACKs)o destinatário
avisa explicitamente ao remetente que o pacote foi recebido corretamente e nos reconhecimentos negativos (NAKs)o
destinatário avisa explicitamente ao remetente que o pacote tem erros. Quando o remetente recebe um NAK ele faz o
reenvio do pacote.
RDT2.0 [4]
A figura acima ilustra a especificação da FSM do protocolo em questão.
Transmissão de dados confiável 37
rdt2.1: Solução para ACKs/NAKs perdidos
O rdt2.1 é uma versão que soluciona um problema que pode acontecer no rdt2.0 e na qual este nao soluciona.
Trata-se do sequenciamento dos pacotes e dos reconhecimentos positivos e negativos emitidos pelo destinatário.
Dessa forma é evitado a tranferência desnecessária de arquivos (duplicidade) e confusões em determinar para qual
pacote foi enviado o reconhecimento.
RDT2.1 REMETENTE [5]
RDT2.1 DESTINATÁRIO [6]
As figuras acima ilustram a especificação da FSM do protocolo em questão. Notamos que agora o remetente e o
destinatário possui duas vezes a mais o número de estados.
rdt2.2: Uso somente de ACKs
O rdt2.2 possui a mesma funcionalidade do rdt2.1, porém usando somente ACKs. Ao invés de enviar NAK, o
destinatário envia um ACK para o último pacote recebido sem erro incluindo explicitamente o número de seqüência
do pacote sendo reconhecido. O recebimento de ACKs duplicados no remetente resulta na mesma ação do NAK, ou
seja, a retransmissão do pacote corrente. Dessa forma nota-se uma maior simplicidade no FSM com relação ao rdt2.1
Protocolo rdt3.0
O que vimos até agora foi:
\u2022\u2022 Rdt1.0: um protocolo sobre um canal perfeitamente confiável;
\u2022\u2022 Rdt2.2: um protocolo mais real, onde há erro de bits.
Porém, há uma outra situação que normalmente ocorre em uma transferência de arquivos e que precisa ser tratada: a
perda de pacotes. Implementaremos então um mecanismo para detectar um pacote perdido e retransmiti-lo. Tal
mecanismo consiste da utilização de um temporizador de contagem regressiva que será acionado ao enviar cada
pacote do remetente ao destinatário.
Uma ilustração do mecanismo apresentado é a seguinte:
\u2022\u2022 um pacote pkt0 é enviado ao remetente, e o temporizador relativo à esse pacote é acionado.
\u2022\u2022 pkt0 chega ao destinatário e este envia o ACK0.
\u2022\u2022 se ACK0 chegar ao remetente, o temporizador de pkt0 é parado e será enviado o pkt1. Porém, caso o
temporizador chegue a 0 antes do ACK0 ser recebido, pkt0 é reenviado, e os passos anteriores são novamente
repetidos.
Utilizando o temporizador, nem o remetente nem o destinatário conseguem identificar o que houve com o pacote
enviado. Ele pode ter sido perdido, a resposta ACK pode ter sido perdida, ou simplesmente houve lentidão na rede, o
que fez com que o temporizador zerasse antes do recebimento do pacote ou do ACK. A última situação resulta em
pacotes duplicados, porém o protocolo rdt2.2 já corrige tal problema.
Transferência confiável de dados utilizando paralelismo
Com a utilização do protocolo rdt3.0 já são corrigidos os principais problemas que ocorrem em uma transferência de
dados. Resta-nos agora melhorarmos seu desempenho.
Por ser do tipo pare-e-espere o protocolo rdt3.0 envia apenas um pacote por vez, e só envia o próximo quando
receber a confirmação de recebimento do mesmo. Introduziremos então o conceito de paralelismo. Serão enviados
vários pacotes sequencialmente(apesar do nome indicar, os pacotes não são enviados ao mesmo tempo), mesmo sem
a recepção dos pacotes anteriores. Isso implica em maiores números de seqüência e na utilização de buffers do lado
remetente, e também do lado destinatário no caso da repetição seletiva, para mais de um pacote.
Transmissão de dados confiável 38
Serão apresentados dois protocolos que utilizam a idéia de paralelismo,Go-Back-N e Repetição Seletiva.
Protocolo Go-Back-N
Para solucionar os problemas causados pelo comportamento pare e espere dos protocolos anteriores, foi
desenvolvido o protocolo Go-Back-N. Este permite o envio de um determinado número de pacotes sem que os
anteriores tenham sido reconhecidos. Para um melhor entendimento vamos analisar a seguinte figura:
É definido um número de pacotes que podem ser enviados sem que seja necessário aguardar pelo reconhecimento de
cada um deles. Esta quantidade de pacotes pode ser vista como uma "janela". Na figura, os pacotes pretos são
pacotes que foram corretamente enviados e já receberam reconhecimento (receberam o ACK do destinatário). Os
pacotes azuis são pacotes que já foram enviados, mas ainda não foram reconhecidos, e os pacotes verdes são os
próximos pacotes a serem enviados, já que ainda estão dentro dos limites da janela. Os pacotes vermelhos estão fora
do limite da janela, logo não podem ser enviados ainda.
Nextseqnum é o número de sequência do próximo pacote a ser enviado. O pacote base é o pacote não reconhecido
com número de sequência mais antigo. Quando este pacote for reconhecido, a janela irá se deslocar para a direita no
espaço de números de sequência dos pacotes, permitindo o envio de outros pacotes. A janela "desliza", e com isso o
protocolo Go-Back-N é também denominado protocolo de janela deslizante.
O lado remetente deve ser capaz de responder a 3 situações:
\u2022\u2022 Dados recebidos da camada de cima
Antes de criar e enviar um pacote, o protocolo deve verificar se há espaço na janela. Se não houver, os dados serão
devolvidos, podendo ser enviados apenas quando um espaço for liberado;
\u2022\u2022 Recebimento de um ACK
Receber um ACK com número de sequência n indica ao remetente que todos os pacotes com número de sequência
até n (inclusive) foram recebidos corretamente pelo destinatário, e assim a janela desliza. O pacote com número de
sequência n+1 se torna a base;
\u2022\u2022 Esgotamento de temporização
É usado um temporizador para o pacote base. Se um ACK chegar antes do temporizador se esgotar, ele é reiniciado
para o pacote seguinte. Se ele se esgotar, todos os pacotes que foram enviados mas que ainda não foram
reconhecidos são reenviados.
O lado destinatário, ao receber um pacote com número de sequência n, que está na ordem esperada, envia um ACK
correspondente e entrega os dados à camada superior. Caso o pacote recebido não esteja na ordem, ele será
descartado e será reenviado um ACK para o último pacote recebido corretamente.
Esta característica garante que os pacotes sejam recebidos em ordem, mas descarta pacotes recebidos corretamente.
Se por um lado isto gera um prejuízo na necessidade de retransmissão de dados (que ainda podem ser perdidos,
gerando mais retransmissões), existe uma vantagem importante nesta opção: a simplicidade nos buffers do
destinatário. Não será preciso armazenar pacotes fora de ordem, mas apenas o número de sequência esperado para