Você está na página 1de 8

Introduo s Redes de Computadores/Transmisso de dados confivel

Transferncia confivel de dados


Dentre todos os problemas que existem para a implementao de redes de computadores, podemos dizer que a tranferncia confivel de dados um dos principais. Essa tarefa ainda mais complexa, pois a implementao do Protocolo de tranferncia confivel de dados feita em um canal confivel, porm possui a camada de rede logo abaixo: um canal no confivel. Por exemplo: o TCP um protocolo de tranferncia de dados confivel implementado sobre uma camada de rede fim-a-fim no confivel (IP).

Tranferncia Confivel de dados (Fonte: Rede de Computadores e a Internet, 3 Edio, James F. Kurose) A figura do link acima ilustra como implementado o servio de tranferncia confivel de dados. Os pacotes so enviados do remetente ao destinatrio vindo das camadas superiores at as inferiores. O protocolo de tranferncia confivel de dados implementado na camada de transporte. rdt a sigla para Reliable Data Transfer que significa transferncia confivel de dados. Na figura, rdt_send() chamada vinda da camada superior, (ex., pela aplicao). Passa dados para entregar camada superior receptora. udt_send() chamada pela entidade de transporte, para transferir pacotes para o receptor atravs do canal no confivel. rdt_rcv() chamada pela entidade da camada inferior quando o pacote chega ao lado receptor do canal e deliver_data() chamada pela entidade de transporte para entregar dados para camada superior. Consideraremos apenas o caso de transferncia unidirecional de dados, ou seja, do lado do remetente ppara o lado do destinatrio. Os diagramas utilizados para a exemplificao dos protocolos utilizam mquinas de estados finitos (FSM) para especificar o protocolo transmissor e o receptor. definido que estado quando neste estado o prximo estado fica unicamente determinado pelo prximo evento. FSM A figura acima ilustra a abordagem FSM. [editar]rdt1.0:

Transferncia confivel de dados sobre canais perfeitamente confiveis


Primeiro considerado um caso mais simples, na qual nao h erro de bits na transmisso e tambm no h perdas de pacotes. As FSMs so separadas para transmissor e receptor na qual transmissor envia dados para o canal subjacente receptor l os dados do canal subjacente. Como no 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 solicitao. O lado do destinatrio 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

A figura acima ilustra a especificao da FSM do protocolo em questo. [editar]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 destinatrio ao remetente. Dessa forma o protocolo usa como resposta reconhecimento positivo (ACK) e reconhecimento negativo (NAK). Nos reconhecimentos (ACKs)o destinatrio avisa explicitamente ao remetente que o pacote foi recebido corretamente e nos reconhecimentos negativos (NAKs)o destinatrio avisa explicitamente ao remetente que o pacote tem erros. Quando o remetente recebe um NAK ele faz o reenvio do pacote. RDT2.0 A figura acima ilustra a especificao da FSM do protocolo em questo.

[editar]rdt2.1:

Soluo para ACKs/NAKs perdidos

O rdt2.1 uma verso 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 destinatrio. Dessa forma evitado a tranferncia desnecessria de arquivos (duplicidade) e confuses em determinar para qual pacote foi enviado o reconhecimento. RDT2.1 REMETENTE RDT2.1 DESTINATRIO As figuras acima ilustram a especificao da FSM do protocolo em questo. Notamos que agora o remetente e o destinatrio possui duas vezes a mais o nmero de estados.

[editar]rdt2.2:

Uso somente de ACKs

O rdt2.2 possui a mesma funcionalidade do rdt2.1, porm usando somente ACKs. Ao invs de enviar NAK, o destinatrio envia um ACK para o ltimo pacote recebido sem erro incluindo explicitamente o nmero de seqncia do pacote sendo reconhecido. O recebimento de ACKs duplicados no remetente resulta na mesma ao do NAK, ou seja, a retransmisso do pacote corrente. Dessa forma nota-se uma maior simplicidade no FSM com relao ao rdt2.1 [editar]Protocolo

rdt3.0

O que vimos at agora foi: Rdt1.0: um protocolo sobre um canal perfeitamente confivel; Rdt2.2: um protocolo mais real, onde h erro de bits.

Porm, h uma outra situao que normalmente ocorre em uma transferncia de arquivos e que precisa ser tratada: a perda de pacotes. Implementaremos ento um mecanismo para detectar um pacote perdido e retransmiti-lo. Tal mecanismo consiste da utilizao de um temporizador de contagem regressiva que ser acionado ao enviar cada pacote do remetente ao destinatrio.

Uma ilustrao do mecanismo apresentado a seguinte: um pacote pkt0 enviado ao remetente, e o temporizador relativo esse pacote acionado. pkt0 chega ao destinatrio e este envia o ACK0. se ACK0 chegar ao remetente, o temporizador de pkt0 parado e ser enviado o pkt1. Porm, caso o temporizador chegue a 0 antes do ACK0 ser recebido, pkt0 reenviado, e os passos anteriores so novamente repetidos.

Utilizando o temporizador, nem o remetente nem o destinatrio conseguem identificar o que houve com o pacote enviado. Ele pode ter sido perdido, a resposta ACK pode ter sido perdida, ou simplesmente houve lentido na rede, o que fez com que o temporizador zerasse antes do recebimento do pacote ou do ACK. A ltima situao resulta em pacotes duplicados, porm o protocolo rdt2.2 j corrige tal problema. [editar]Transferncia

confivel de dados utilizando paralelismo

Com a utilizao do protocolo rdt3.0 j so corrigidos os principais problemas que ocorrem em uma transferncia 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 prximo quando receber a confirmao de recebimento do mesmo. Introduziremos ento o conceito de paralelismo. Sero enviados vrios pacotes sequencialmente(apesar do nome indicar, os pacotes no so enviados ao mesmo tempo), mesmo sem a recepo dos pacotes anteriores. Isso implica em maiores nmeros de seqncia e na utilizao de buffers do lado remetente, e tambm do lado destinatrio no caso da repetio seletiva, para mais de um pacote. Sero apresentados dois protocolos que utilizam a idia de paralelismo,Go-Back-N e Repetio Seletiva.

[editar]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 nmero de pacotes sem que os anteriores tenham sido reconhecidos. Para um melhor entendimento vamos analisar a seguinte figura:

definido um nmero de pacotes que podem ser enviados sem que seja necessrio aguardar pelo reconhecimento de cada um deles. Esta quantidade de pacotes pode ser vista como uma "janela". Na figura, os pacotes pretos so pacotes que foram corretamente enviados e j receberam reconhecimento (receberam o ACK do destinatrio). Os pacotes azuis so pacotes que j foram enviados, mas ainda no foram reconhecidos, e os pacotes verdes so os prximos pacotes a serem enviados, j que ainda esto dentro dos limites da janela. Os pacotes vermelhos esto fora do limite da janela, logo no podem ser enviados ainda. Nextseqnum o nmero de sequncia do prximo pacote a ser enviado. O pacote base o pacote no reconhecido com nmero de sequncia mais antigo. Quando este pacote for reconhecido, a janela ir se deslocar para a direita no espao de nmeros de sequncia dos

pacotes, permitindo o envio de outros pacotes. A janela "desliza", e com isso o protocolo GoBack-N tambm denominado protocolo de janela deslizante. O lado remetente deve ser capaz de responder a 3 situaes: Dados recebidos da camada de cima

Antes de criar e enviar um pacote, o protocolo deve verificar se h espao na janela. Se no houver, os dados sero devolvidos, podendo ser enviados apenas quando um espao for liberado; Recebimento de um ACK

Receber um ACK com nmero de sequncia n indica ao remetente que todos os pacotes com nmero de sequncia at n (inclusive) foram recebidos corretamente pelo destinatrio, e assim a janela desliza. O pacote com nmero de sequncia n+1 se torna a base; Esgotamento de temporizao

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 no foram reconhecidos so reenviados. O lado destinatrio, ao receber um pacote com nmero de sequncia n, que est na ordem esperada, envia um ACK correspondente e entrega os dados camada superior. Caso o pacote recebido no esteja na ordem, ele ser descartado e ser reenviado um ACK para o ltimo pacote recebido corretamente. Esta caracterstica garante que os pacotes sejam recebidos em ordem, mas descarta pacotes recebidos corretamente. Se por um lado isto gera um prejuzo na necessidade de retransmisso de dados (que ainda podem ser perdidos, gerando mais retransmisses), existe uma vantagem importante nesta opo: a simplicidade nos buffers do destinatrio. No ser preciso armazenar pacotes fora de ordem, mas apenas o nmero de sequncia esperado para o prximo pacote. As figuras a seguir, retiradas do livro Computer Networking: A Top-Down Approach Featuring the Internet, de James F. Kurose e Keith W. Ross, 3 edio, mostram as FSM do lado remetente e do destinatrio, e a operao geral do protocolo, respectivamente. [editar]Repetio

Seletiva

O protocolo o Go-Back-N ou (GBN) resolveu um problema de vital importncia para a transferncia de dados, que a questo do aproveitamento e da utilizao do canal. Com o GBN h envio de mais de um pacote sem a obrigatoriedade de confirmao de recebimento do pacote anterior, ou seja, ele enche o canal com pacotes, N pacotes (um numero finito), tendo assim um melhor aproveitamento do canal, da largura de faixa do canal. Porm a forma como foi feito o GBN existem ainda algumas questes que prejudicam a transferncia eficiente de dados. Estas questes so: o tamanho da janela grande e/ou o produto entre atraso e largura de faixa tambm grande. Pensemos sobre a janela, que o mesmo conceito de janela do GBN. Vamos supor uma janela de tamanho para 100 pacotes. Se houver qualquer erro, pode ser perda do pacote enviado ou perda do ACK enviado pelo destinatrio, ter que ser reenviado o pacote. O problema surge do fato que todos os pacotes posteriores ao que foi perdido tero de ser tambm reenviados. Se houver erro no 10 pacote, todos os 90 restantes

juntamente com o 10 tero de ser reenviados, ou seja, haver muitos reenvios desnecessrios, tendo desta forma uma utilizao tambm ineficiente, apesar de j ter melhorado. Imagine agora uma janela com 1000 pacotes! Quanto maior a janela, mais o problema se agrava. Se, tambm, o canal contiver uma taxa de erros alta, implica em maiores repeties. Como sabemos, os canais reais no transmitem sem erros. Por mais que o canal seja confivel e com baixa taxa de erros, esses erros existiro! A repetio seletiva veio justamente melhorar esta questo. Agora, como o prprio nome sugere, no haver reenvios desnecessrios. Apenas ser retransmitido o pacote que tiver algum problema. Com isto h um bom ganho de tempo nas transferncias de dados. Analisemos agora a viso que tanto o remetente quanto o destinatrio tm da janela, primeiramente para o remetente:

Em verde podemos ver os pacotes que foram enviados e seus ACKs j foram recebidos. Em amarelo so os que foram enviados, mas ainda no chegou a resposta (recebimento do ACK). Em azul so os pacotes que foram autorizados a serem enviados, mas ainda no foram. Em branco so os pacotes que ainda no foram autorizados ao envio. Veja que alguns pacotes j tiveram confirmao de recebimento mesmo que pacotes anteriores ainda no tenham sido confirmados. Isto uma grande diferena da janela do GBN, e justamente a isso que veio a Repetio Seletiva, permitir que o destinatrio reconhea pacotes fora de ordem, possibilitando assim retransmisses somente dos arquivos com algum problema. Como no GBN, os pacotes medida que so recebidos da camada superior recebem um nmero de sequncia. Se este nmero estiver dentro da janela, ento este pacote pode ser enviado, que so justamente os pacotes em azul. Ao ser enviado sua classificao muda para amarelo, e finalmente ao receber confirmao de recebimento por parte do destinatrio o pacote passa a ser classificado como verde. Ao receber o ACK do pacote, se o pacote estiver no incio da janela, ento a janela pula uma ou mais posies frente conforme os pacotes posteriores forem verdes ou no. Outra questo quanto ao problema da perca de pacotes. Para isto usado temporizao, s que na repetio seletiva, cada pacote tem de ter sua prpria temporizao, uma vez que s ser retransmitido o pacote perdido. Agora analisemos o destinatrio. Os pacotes em lils j foram recebidos, veja que eles esto fora de ordem, uma vez que existem pacotes anteriores ainda no recebidos. Esta mais uma diferena, e uma causa da repetio seletiva. Esses pacotes ficaro em buffer no destinatrio. Em cinza temos os pacotes que so aguardados, mas ainda no recebidos. Em azul so pacotes aceitveis, que tambm so aguardados por estarem dentro da janela. Em branco so os pacotes no utilizados por estarem fora da janela. Como j dito, os pacotes j recebidos mas fora de ordem ficam armazenados em buffer. Ao receber um pacote e este pacote sendo o primeiro da janela, ele ser enviado camada superior juntamente com aqueles que j foram recebidos anteriormente e esto em sequncia com este primeiro. Ento a janela desliza direita por um numero de pacotes igual quantidade de pacotes que foram camada superior. Em caso de o destinatrio receber um pacote com nmero de sequncia anterior ao nmero de inicio da janela (rcv_base), ou seja, pacote j recebido, mesmo assim ser necessrio o envio de um ACK para que o remetente possa movimentar sua janela frente. Este fato pode ocorrer devido perca do ACK, pois desta forma o remetente nunca receber confirmao e ento reenviar o pacote, mas o pacote j foi recebido pelo destinatrio, porm o remetente no sabe disso, e por isso ele deve reenviar o ACK.

Na figura acima temos um exemplo de transmisso com a repetio seletiva. So enviados 4 pacotes (pkt0, pkt1, pkt2, pkt3). Porm o pacote pkt2 perdido e s chegam ao destinatrio os pacotes pkt0, pkt1 e pkt3. O destinatrio recebe normalmente os trs pacotes que chegaram, os armazena em buffer e envia seus respectivos ACKs. O remetente recebe confirmao para os pacotes pkt0 e pkt1 e envia ento os pacotes pkt4 e pkt5. Nesse ponto o tempo de vida do pacote pkt2 se esgota e ento ele reenviado. Os pacotes pkt4 e pkt5 so recebidos, armazenados em buffer e o destinatrio envia seus ACKs. S ento o pacote pkt2 recebido. Agora ento, como pkt2 est no inicio da janela ele enviado para a camada superior juntamente com pkt3, pkt4 e pkt5 que estavam em buffer e na sequncia de pkt2. ento enviado o ACK respectivo a pkt2 (ACK2).

FONTE: http://pt.wikiversity.org/wiki/Introdu%C3%A7%C3%A3o_%C3%A0s_Redes_de_Computadores /Transmiss%C3%A3o_de_dados_confi%C3%A1vel

Go-Back-N ARQ
Go-Back-N ARQ uma instncia especfica do pedido automtico de repetio (ARQ), o qual envia processos contnuos com um nmero de frames especfico pelo tamanho da janela sem receber um pacote de confirmao (ACK) do receptor. um caso especial do protocolo de janela deslizante que transmite uma janela de tamanho N e recebe uma janela de tamanho 1. O processo de recebimento mantm a faixa de sequncia de nmero no prximo frame e espera receber, e envia o nmero o qual cada ACK envia. O receptor ir ignorar a frame caso ela no tenha exatamente a sequncia de nmero esperados. Uma vez que o emissor enviou todas as frames da janela, ser detectado que todos os frames desde o primeiro frame perdido esto prontos para serem enviados, e iro voltar a sequncia de nmero do ltimo ACK recebido do processo do receptor e a janela ser preenchida comeando com um frame e continuando o processo novamente. Go-Back-N ARQ mais eficiente que o Stop-and-wait ARQ, pois ao contrrio de esperar uma confirmao para cada pacote, a conexo ainda est sendo utilizada como pacotes que esto sendo enviados. Em outras palavras, durante o tempo que seria gasto em espera, mais pacotes esto sendo enviados. No entanto, este mtodo tambm resulta no envio de frames vrias vezes se qualquer frame for perdida ou danificada, ou a reconhecer os ACK perdidos ou danificados, ento esse quadro e todos os quadros a seguir na janela (mesmo se eles foram recebidos sem erro) vo ser re-enviados. Para evitar isso, o Selective Repeat ARQ pode ser usado.

FONTE: http://pt.wikipedia.org/wiki/Go-Back-N_ARQ

Protocolo usando Go Back N

Os protocolos vistos at aqui tinham uma janela de transmisso igual a 1, ou seja, s enviavam um quadro aps receberem confirmao da recepo do quadro enviado anteriormente. Como o tempo de transmisso de quadros no desprezvel, a adoo dessa tcnica resulta, normalmente, em ineficincia. Se permitido ao emissor enviar W quadros independentemente de confirmao do primeiro quadro, caracteriza-se um protocolo com janela de transmisso de tamanho W. Um aspecto que merece considerao especial o tratamento de ocorrncia de erro de transmisso de quadro nos protocolos com janela de transmisso maior do que 1. Este tratamento est diretamente relacionado com o desempenho do protocolo. A ttulo de ilustrao, discute-se dois casos, descritos a seguir: (1) janela de transmisso W > 1 e janela de recepo = 1; (2) Janela de transmisso w > 1 e janela de recepo > 1. Em ambos os casos existe temporizao para retransmisso de cada quadro no confirmado. Observe-se que, na figura (a), foram ignorados todos os quadros transmitidos a partir do quadro que se perdeu at o momento de terminada a temporizao e a conseqente retransmisso do quadro perdido. Com isto, todos os quadros que foram ignorados devem ser retransmitidos. Na segunda figura (b), todos os quadros corretos, recebidos aps o quadro que se perdeu, so armazenados ao invs de serem ignorados. Quando o emissor temporiza e retransmite o

quadro perdido, somente alguns de seus sucessores so retransmitidos, pois o nodo j tem vrios quadros corretos armazenados. O nodo ento confirma o quadro de mais alta ordem, conforme mostra a figura.

FONTE: http://efagundes.com/openclass_networking/index.php/protocolos-elementares-deenlace-de-dados/protocolo-usando-go-back-n/