YouTube Facebook Twitter
Novo Site Apostilas Artigos Tutoriais Aulas Vídeos Ferramentas de Rede Fórum Downloads Colabore Fale Conosco
» artigos
:: TCP e Protocolos de Janelas Deslizantes

Prof. Especialista José Mauricio Santos Pinheiro - 29/04/2010

 

1. Introdução

Protocolos de Janela Deslizante ou Sliding Window são recursos usados na camada de enlace de dados do modelo OSI, bem como no protocolo TCP (equivalente à camada de transporte do modelo OSI). Janela deslizante é uma característica de alguns protocolos que permite que o remetente transmita mais que um pacote de dados antes de receber uma confirmação. Depois de receber a confirmação para o primeiro pacote enviado, o remetente desliza a janela e manda outra confirmação. O número de pacotes transmitidos sem confirmação é conhecido como o tamanho da janela; aumentando o tamanho da janela melhora-se a vazão.

2. Por que Janelas Deslizantes?

Em sistemas distribuídos, supõe-se que uma mensagem enviada por um nó chegue integralmente ao seu destino, e que a ordem dos pacotes de informação é preservada entre os dois nós num meio de comunicação ideal. Entretanto, perdas de pacotes e erros de comunicação ocorrem no meio de comunicação real. Entretanto, protocolos que enviam um frame e aguardam sua confirmação são ineficientes do ponto de vista de um canal de comunicação full duplex. Com o uso de um sistema de janelas deslizantes esse problema pode ser contornado. O emissor mantém uma janela de transmissão dos frames enviados mas, ainda, não confirmados. Assim, é possível ao transmissor enviar um número maior de frames enquanto aguarda a confirmação do receptor. Essa técnica de retardar temporariamente as confirmações e enviá-las junto com o próximo quadro de dados é conhecida pelo nome de piggybacking (superposição).

À medida que o receptor recebe os frames, envia para o emissor a confirmação até qual frame recebeu corretamente. Com base nas informações recebidas do receptor, o emissor desloca a janela de envio os frames já confirmados e transmite novos frames. Entretanto, o emissor deve manter um controle de timeout para cada frame transmitido. Esse timeout define o limite de tempo em que a confirmação deve chegar do receptor. Se a confirmação não chegar dentro desse tempo, o emissor assume que o frame não foi enviado ou não chegou ao seu destino.

3. TCP e Janelas Deslizantes

O TCP é um protocolo orientado à conexão que permite a entrega sem erros de um fluxo de bytes originados de uma determinada máquina para qualquer outra máquina da inter-rede. Esse protocolo atua na camada de transporte oferecendo um serviço de transferência de bytes fim a fim, de modo confiável, em uma inter-rede não-confiável.

Considerando que na camada de rede o IP não oferece qualquer garantia de que os datagramas serão entregues da forma apropriada, cabe ao protocolo TCP administrar os temporizadores e retransmitir os datagramas sempre que necessário. Os datagramas também podem chegar fora de ordem e o TCP também terá de reorganizá-los em mensagens na seqüência correta. Resumindo, o TCP deve fornecer a confiabilidade que o IP não oferece.

O protocolo básico utilizado pelas entidades TCP é o protocolo de janelas deslizantes usado para manter um registro do quadro de sequências enviadas e os respectivos reconhecimentos recebidos pelos usuários. Nas transmissões com controle de fluxo, temos uma janela de duração variável, a qual permite que um remetente possa transmitir determinado número de unidades de dados antes que uma confirmação seja recebida ou que um evento especificado ocorra. Consequentemente, o objetivo da janela deslizante é aumentar a taxa de transferência de pacotes melhorando a utilização do meio de transmissão.

No TCP, o protocolo da janela deslizante é usado para envio de arquivos de dimensão superior ao pacote (Max ≈ 64KB). O emissor numera cada pacote, guardando os números do último pacote enviado e reconhecido. Para cada pacote enviado, a largura da janela aumenta. Se a distância for superior à largura da janela, o emissor suspende o envio de pacotes. A solução consiste no envio e recebimento do sinal de ACK (Acknowledge), sinal eletrônico de reconhecimento usado em transmissões de dados para informar o status de recebimento dos pacotes. O emissor envia um número de pacotes w que representa o tamanho da janela, ou seja, o número de pacotes que podem ser enviados sem qualquer ACK do receptor. O tamanho de janela é conhecido tanto pelo emissor como pelo receptor, até porque este último tem de reservar inicialmente um buffer com capacidade para os w pacotes que espera receber. O receptor usa um buffer finito para armazenar temporariamente os dados até que as camadas superiores possam processá-los.

Como se trata de um buffer finito sempre existe a probabilidade de este atingir sua capacidade máxima, com consequente "estouro" e perda de dados. Para evitar esta situação o receptor deve informar ao emissor o estado do seu buffer através de um mecanismo simples de controle de fluxo conhecido por stop & wait:

O emissor envia um pacote de cada vez, e espera pela confirmação (ACK) do receptor; só após essa confirmação é que pode enviar outro pacote;

O receptor só envia o ACK ao emissor se possui espaço suficiente no buffer de recepção.

Para garantir o funcionamento do mecanismo das janelas deslizantes, tanto os pacotes como os ACK são numerados de 0 a w, isto evita que o receptor tenha de enviar ACK individuais para todos os pacotes. Quando um pacote é enviado, o transmissor aciona um temporizador e quando esse pacote chega ao destino, a entidade TCP receptora retorna um segmento (com ou sem dados, de acordo com as circunstâncias) com um número de confirmação igual ao próximo número de seqüência que espera receber. O transmissor cria uma espécie de tabela, onde cada posição é uma janela, em que são gravadas todas as mensagens que foram enviadas.

Por exemplo, se o receptor envia ACK-8 quer dizer que já retirou do buffer todos os pacotes até o 8º pacote; nesta situação o emissor sabe que pode manter sem ACK os w pacotes depois do pacote de número 8 (PAC-8). Se o temporizador do transmissor expirar antes de a confirmação ser recebida, o segmento será retransmitido.

A principal vantagem dessa técnica de superposição em relação ao envio de quadros de confirmação distintos é a melhor utilização da largura de banda disponível para o canal. O campo ACK do cabeçalho de quadro precisa de apenas alguns bits, enquanto um quadro separado precisaria de um cabeçalho, da confirmação e de um total de verificação. Além disso, um número menor de quadros enviados significa menor quantidade de interrupções de "chegada de quadro", e menor quantidade de buffers no receptor, dependendo da forma como o software do receptor está organizado.

3.1. Janelas Deslizantes

Os Protocolos de janelas deslizantes são usados para a entrega confiável e ordenada de mensagens. Trata-se de protocolos orientados a conexão (primeiro garante que a conexão está ativa, para depois iniciar o envio das mensagens) que garantem que todas as mensagens enviadas serão entregues aos destinatários integralmente e na ordem correta de envio.

Uma das principais características das janelas deslizantes é que o transmissor mantém um conjunto de números de seqüência que indicam os quadros, reunidos na janela de transmissão, que este pode enviar (janela de transmissão). O receptor também possui um conjunto de números de seqüência que correspondem aos quadros que espera receber (janela de recepção).

O protocolo prevê o controle de fluxo dos quadros enviados e recebidos de uma estação para outra. Cada quadro enviado contém um número de seqüência, que varia de 0 a um valor máximo. O valor máximo, geralmente vai até 2n -1, de forma que o número possa caber em um campo de n bits. Da mesma forma, o receptor mantém uma janela de recepção correspondente aos dados aptos a serem aceitos.

A Figura 1 mostra as janelas do transmissor e do receptor com índices de 0 a 7. Os próximos quadros reutilizarão os índices a partir de 0. Neste caso, o tamanho máximo da janela é 23-1, que é 4, pois são utilizados 3 bits para representar os números de seqüência.

Figura 1 - Janelas deslizantes do transmissor e do receptor

Em (a) é mostrada a representação da perspectiva do transmissor. O retângulo sombreado diz respeito aos quadros a serem enviados. Cada vez que um quadro é enviado, o retângulo sombreado diminui da esquerda para a direita. Quando ocorre o reconhecimento (ACK) de um quadro recebido pelo receptor, o retângulo aumenta da esquerda para a direita. Os quadros antes da barra vertical são os quadros enviados e confirmados, não necessitando de armazenamento em buffer. O quadro de índice 3, após a barra vertical, indica o quadro transmitido, mas ainda não confirmado e que precisa estar em buffer caso precise ser reenviado.

Em (b) é mostrada a perspectiva do receptor. O retângulo sombreado representa os quadros a serem recebidos. À medida que os quadros são reconhecidos (ACK), o retângulo diminui da esquerda para a direita. À medida que os quadros são recebidos, o retângulo aumenta da esquerda para a direita.

4. Implementação de Protocolos de Janelas Deslizantes

A essência de todos os protocolos de janelas deslizantes é o fato de que, em qualquer instante, o transmissor mantém um conjunto de números de seqüência correspondentes a quadros que ele pode enviar. Os protocolos seguintes são bidirecionais e pertencem à classe de protocolos de janelas deslizantes. Os três apresentam diferenças em termos de eficiência, complexidade e requisitos de buffer:

4.1. Janela Deslizante de Um Bit ou "stop-and-wait"

O protocolo de janela deslizante stop-and-wait utiliza n = 1, restringindo os números de seqüência a 0 e 1. Este protocolo é assim chamado porque o tamanho máximo da janela é de um bit, ou seja, só são aceitos os valores 0 ou 1. Ele envia um quadro e aguarda a confirmação para enviar o seguinte. Versões mais sofisticadas podem usar um valor arbitrário de n.

Outra característica é que não há combinação de erros no pacote ou por estouro de tempo que resultem na duplicação ou chegada de pacotes fora de ordem para a camada de rede.

Figura 2 - Janela Deslizante de Um Bit

A Figura 2 mostra um exemplo de janela deslizante de tamanho máximo igual a 1 bit, com um número de seqüência de 3 bits. Inicialmente, não há quadros pendentes e a borda inferior e superior da janela do transmissor são iguais, mas, à medida que o tempo passa, a situação se desenvolve da maneira mostrada: Em (a) a condição inicial. Em (b) depois que o primeiro quadro é enviado. Em (c) depois que o primeiro quadro é recebido. Em (d) depois que a primeira confirmação é recebida.

4.2. Janela Deslizante Volte a N ou "go back n"

O protocolo de janela deslizante de um bit possui um problema de desempenho, visto que o canal de comunicação fica ocioso enquanto não chegar uma confirmação do receptor. Para tal situação, o protocolo de "volte a n" possibilita o transmissor enviar n quadros antes que o primeiro seja confirmado. Este valor será proporcional ao tempo em que se podem enviar quadros completos antes que a janela fique esgotada.

Neste protocolo, todos os quadros enviados, após um quadro com erro, serão descartados. O receptor simplesmente descarta todos os quadros subseqüentes ao erro e não envia qualquer confirmação desses quadros descartados. Essa estratégia corresponde a uma janela de recepção de tamanho 1. Em outras palavras, a camada de enlace de dados se recusa a aceitar qualquer quadro, exceto o próximo quadro que ela tem de entregar à camada de rede.

Se a janela do transmissor for totalmente preenchida antes do timer encerrar a contagem, o buffer começará a se esvaziar. Conseqüentemente, o transmissor interromperá a transmissão e retransmitirá todos os quadros não confirmados em ordem, começando pelo quadro danificado ou perdido. Convém salientar que essa abordagem poderá desperdiçar uma grande quantidade de largura de banda se a taxa de erros do canal for alta.

Figura 3 - Janela Deslizante Volte a N

Na Figura 3 temos o caso em que a janela do receptor é grande. Os quadros 0 e 1 são corretamente recebidos e confirmados. Porém, o quadro 2 está danificado ou perdido. O transmissor, desavisado desse problema, continua a enviar quadros até expirar o temporizador correspondente ao quadro 2. Em seguida, ele volta até o quadro 2 e começa tudo de novo a partir dele, enviando mais uma vez os quadros 2, 3, 4 etc.

4.3. Janela Deslizante com Retransmissão Seletiva ou "selective repeat"

Uma estratégia para lidar com os erros é permitir que o receptor aceite e armazene os quadros subseqüentes a um quadro danificado ou perdido. O protocolo com retransmissão seletiva não descarta quadros apenas porque um quadro anterior foi danificado ou perdido.

Figura 4 - Janela Deslizante com Retransmissão Seletiva

Na Figura 4, os quadros 0 e 1 são recebidos e confirmados corretamente, e o quadro 2 é perdido. Quando o quadro 3 chega ao receptor, a camada de enlace de dados do receptor percebe que perdeu um quadro e envia de volta um NAK (No AcKnowledge), correspondente ao quadro 2, mas armazena no buffer o quadro 3. Quando os quadros 4 e 5 chegam, eles também são inseridos no buffer pela camada de enlace de dados, em vez de serem repassados à camada de rede.

Eventualmente, o NAK do quadro 2 volta ao transmissor, que retransmite de imediato o quadro 2. Quando esse quadro chega, a camada de enlace de dados fica com os quadros 2, 3, 4 e 5, e pode repassar todos à camada de rede na ordem correta. Ela também pode confirmar todos os quadros até o quadro 5, inclusive, como mostra a figura. Se o NAK se perder, o transmissor chegará ao timeout correspondente ao quadro 2 e o enviará (e apenas esse quadro) por sua própria iniciativa, mas isso pode acontecer um pouco mais tarde. Na realidade, o NAK acelera a retransmissão de um quadro específico.

 Bibliografia:

STALLINGS, W. Redes e Sistemas de Comunicação de Dados. Rio de Janeiro: Campus, 2004.

TANENBAUM, Andrew S. Redes de Computadores, 4 ed. Rio de Janeiro: Campus, 2003.

PETERSON, Larry L.; DAVIE, Bruce S. Computer Networks: A System Approach, 3 ed. USA: Morgan Kaufmann Publishers, 2003.


José Maurício Santos Pinheiro
Professor Universitário, Projetista e Gestor de Redes, 
membro da BICSI, Aureside e IEC.

Autor dos livros:
 
· Guia Completo de Cabeamento de Redes ·
· Cabeamento Óptico ·
· Infraestrutura Elétrica para Redes de Computadores
·
· Biometria nos Sistemas Computacionais - Você é a Senha ·
· Da Iniciação Científica ao TCC ·

E-mail: jm.pinheiro@projetoderedes.com.br

Powered by Disqus
© www.projetoderedes.com.br - Termos e Condições de Uso