deve permitir a comunicação bidirecional para permitir que a entidade de Enlace receptora
emita os quadros de reconhecimento. Este protocolo, denominado send-wait, stop-and-wait ou
envia-espera, é ilustrado pela figura [Link].
O terceiro caso a ser analisado aqui torna-se muito mais próximo do real, uma vez que
consideraremos aqui a “hipótese” (nem tão hipotética assim!) de que os dados possam chegar
à outra extremidade do canal corrompidos ou que estes sejam perdidos ao longo do canal.
Vamos, porém, considerar a possibilidade de detectar a ocorrência de quadros incorretos
através de uma das técnicas apresentadas na seção [Link].
A B
dados
reconhecimento
dados
reconhecimento
dados
Figura [Link] - Protocolo envia-espera.
Uma primeira solução é aquela em que o receptor emite um quadro de reconhecimento
somente no caso em que o quadro de dados recebido esteja correto. Do lado do receptor, é
estabelecido um mecanismo de temporização que é disparado após o envio de cada quadro de
dados. Se após a expiração da temporização, um quadro de reconhecimento não é recebido, o
emissor considera que o quadro de dados foi perdido ou que foi recebido incorretamente e o
retransmite. A operação é repetida pelo número de vezes que sejam necessárias para que um
quadro de reconhecimento seja, enfim recebido de B (figura [Link]).
61
A B
dado1
reconhecimento
dado2
dado2
reconhecimento
tem porização interrompida
tem porização esgotada
Figura [Link] - Protocolo considerando controle de erro por quadro de reconhecimento com
temporização.
Esta solução, porém, apresenta uma grave deficiência: no caso da entidade em B
receber corretamente o dado e enviar o quadro de reconhecimento e este último for perdido no
canal de comunicação, a entidade emissora, após a expiração da temporização, vai reemitir o
quadro de dados, gerando um problema de duplicação de mensagem (figura [Link]).
Isto significa que o receptor deve ser capaz de reconhecer os quadros recebidos de
modo a saber se estes são duplicados ou não. Para isto, será preciso introduzir um campo
contendo um número de seqüência (um bit, no caso) do quadro de modo a permitir esta
distinção. Se uma entidade receptora recebe sucessivamente dois quadros contendo o mesmo
número de seqüência, o segundo será rejeitado.
Outro ponto importante a ser destacado no caso deste terceiro tipo de protocolo é a
escolha do valor da temporização no emissor (para espera do reconhecimento). Uma
temporização muito longa pode conduzir a atrasos indesejáveis na comunicação. Uma
temporização excessivamente curta, por outro lado, pode conduzir a erros de protocolo
consideráveis. Tomando como exemplo este caso, vamos supor que o emissor enviou um
quadro, que este foi recebido corretamente pelo receptor que, por sua vez, emitiu um quadro
de reconhecimento.
62
A B
dado1
perda reconhecimento
dado1
quadro duplicado
temporização esgotada
Figura [Link] - Protocolo considerando controle de erro por quadro de reconhecimento com
temporização, no caso de perda do quadro de reconhecimento (gerando duplicação de quadro).
Considerando que a temporização é excessivamente curta, pode ocorrer que esta seja
expirada antes que o quadro de reconhecimento tenha sido integralmente transmitido ao
emissor. Desta forma, o receptor entende que o quadro foi perdido ou transmitido
incorretamente e retransmite o mesmo. Em seguida, o emissor recebe o quadro de
reconhecimento daquele enviado inicialmente e, erroneamente, pensa que o reconhecimento é
relativo àquele que ele havia enviado posteriormente. Entretanto, o emissor desconhece que
um novo quadro de reconhecimento está a caminho (relativo ao quadro duplicado). Se,
portanto o quadro seguinte é perdido e o emissor recebe um quadro de reconhecimento ele,
desta vez, vai interpretar que o último quadro enviado foi corretamente recebido,
caracterizando então um erro de protocolo. A figura [Link] ilustra este problema.
Os protocolos analisados nesta seção, do tipo envia-espera, apesar dos problemas que
podem gerar, são bastante utilizados, principalmente devido à sua relativa simplicidade de
construção. Esta classe de protocolos, além disso, subutiliza o canal de comunicação, uma vez
que eles devem esperar a recepção do quadro de reconhecimento para poderem enviar o
quadro de dados seguinte.
Uma classe de protocolos mais eficiente é aquela em que o emissor pode enviar um
certo número de quadros de dados sem que ele tenha recebido o reconhecimento dos quadros
já emitidos. Isto vai requerer, obviamente, a implementação de um mecanismo de
reconhecimento de quadros mais completo que aquele citado no caso do protocolo anterior.
São os denominados protocolos contínuos ou de largura de janela.
63
A B
dado1
reconhecimento
dado1
perda
dado2
reconhecimento
temporização esgotada
temporização interrompida
Figura [Link] - Protocolo com quadro de reconhecimento no caso de temporização
excessivamente curta.
Os protocolos de largura de janela também são chamados protocolos de “janela
deslizante” ou “Continuous-RQ”.
A idéia básica é numerar também os ACK. Em conseqüência da numeração dos ACK,
o emissor não precisa esperar um ACK para cada quadro: ele pode enviar vários quadros e
manter uma lista de retransmissão com um time-out para cada quadro. A lista de
retransmissão opera de forma FIFO. O receptor retorna um ACK com o número do quadro
recebido N(r). O receptor mantém uma lista de recepção, contendo os n últimos quadros
recebidos sem erro (n é a “largura” da janela).
Quando o emissor recebe um ACK, deleta o quadro com número correspondente da
lista de retransmissão. Este procedimento é ilustrado na figura [Link].
lista de
retrans- N+2 N+3 N+4
missão N+1 N+1 N+2 N+3 N+4
N N N N+1 N+2 N+3
E I(N) I(N+1) I(N+2) I(N+3) I(N+4)
I(N) I(N+1) I(N+2) I(N+3) I(N+4)
A(N) A(N+1) A(N+2) A(N+3) tempo
R I(N) I(N+1) I(N+2) I(N+3) I(N+4)
N N N N N
lista de N+1 N+1 N+1 N+1
recepção
N+1 N+1 N+1
N+1 N+1
N+1
Figura [Link] - Protocolo de janela deslizante
64
O Exemplo visto assume que não ocorrem erros. Duas estratégias podem ser adotadas
em caso de erros:
Retransmissão seletiva: emissor retransmite somente quadros cujos ACK não foram
recebidos após time-out. Receptor tem que manter buffer com n (largura de janela)
grande...
Retorna-N (Go-Back-N): quando o receptor recebe um quadro fora da sequencia,
pede ao emissor para reiniciar do último quadro recebido na ordem correta.
Receptor mantém janela com largura 1 !
[Link]. Exemplo de Protocolo de Enlace: o HDLC
HDLC (High-level Data Link Control) é uma família de protocolos orientados ao bit,
resultado do esforço realizado pela ISO para a padronização da camada de enlace. O HDLC
foi definido pela ISO a partir do protocolo SDLC (Synchronous Data Link and Control), da
IBM. Existem atualmente diversos protocolos compatíveis com o HDLC: por exemplo,
ADCCP (ANSI), LAP E LAPB (CCITT).
O protocolo HDLC prevê 2 modos de operação:
NRM (Normal Response Mode): define uma estação mestra e várias escravas com
topologia em barramento;
ABM (Asynchronous Balanced Mode): operação multimestre para topologia ponto-
a-ponto.
A forma de operação mais comum para a maioria das aplicações de HDLC é a
utilização do modo NRM (mestre / escravos).
Um quadro HDLC apresenta a estrutura conforme mostrado na figura [Link], cujos
campos serão descritos a seguir. Os campos flag correspondem à seqüência 01111110, que
permite delimitar o quadro. Todos os quadros HDLC iniciam e terminam com esta seqüência.
No caso de envio de quadros consecutivos, um mesmo flag pode marcar o fim de um quadro e
o início de outro. O campo endereço, de 8 bits, permite identificar a estação destinatária do
quadro (no caso de comando) ou fonte (no caso de resposta). O campo controle permite
identificar a função do quadro, assim como especificar os números de seqüência. A figura
[Link] mostra a configuração dos bits compondo este campo. O campo informação é aquele
que contém os dados a serem transferidos via camada de Enlace. O campo FCS (Frame Check
Sequence) contém a seqüência de detecção de erros utilizada. Esta seqüência é calculada sobre
os campos endereço, controle e informação, utilizando como polinômio gerador a
combinação x16 + x12 + x5 + 1 (CRC-CCITT).
Um quadro de enlace é considerado incorreto e, assim, ignorado pelo destinatário nas
seguintes condições:
65
• se não estiver delimitado pelos flags;
• se o comprimento for inferior a 32 bits entre flags;
• se contiver mais de sete 1’s consecutivos.
O protocolo HDLC prevê três tipos de quadro: de informação, de supervisão e não
numerados, diferenciados pelo campo de controle, como mostra a figura [Link]. Os bits 1 e
2 deste campo permitem identificar o tipo de quadro: se bit 1 = 0 indica um quadro de
informação; se bit 1 = 1, pode identificar tanto um quadro de supervisão (bit 2 = 0) ou um
quadro não numerado (bit 2 = 1). Os quadros de supervisão são utilizados principalmente
para controle de fluxo (indicar se receptor está pronto ou não para receber dados, rejeição de
quadros com defeito, quadro de reconhecimento), enquanto os quadros não numerados são
usados principalmente para o estabelecimento e o término de conexões.
8 bits 8 bits 8 bits *** 16 bits 8 bits
flag endereço controle informação FCS flag
Figura [Link] - Estrutura de um quadro HDLC.
bits 1 2 3 4 5 6 7 8
informação 0 N(s) P/F N(r)
supervisão 1 0 S S P/F N(r)
não numerado 1 1 M M P/F M M M
Figura [Link] - Campo controle dos quadros HDLC.
O campo N(s) permite definir o número de seqüência do quadro e o campo N(r) para o
reconhecimento de quadros (indica o número do próximo quadro esperado) — N(s) e N(r)
correspondem, de fato, aos campos seq e ack mostrados anteriormente. O bit P/F depende do
modo de operação do protocolo. No primeiro modo de operação, resposta normal (NRM), o
bit P a 1 indica que a estação emissora deseja consultar uma secundária. Desta forma, o
último quadro de uma seqüência de quadros de resposta enviados por uma estação secundária
conterá o bit F a 1. No segundo modo, resposta assíncrona e balanceada (ABM), o
66
recebimento de um quadro com o bit P a 1 indica que a estação secundária deve enviar o
próximo quadro com o bit F também a 1.
Os bits S são utilizados para identificar comandos de supervisão, particularmente para
comandos de reconhecimento e de controle de fluxo. A tabela abaixo mostra as possíveis
combinações dos bits S e os comandos / respostas associados.
S S Código Comando/Resposta
0 0 RR Receiver Ready (Receptor Pronto)
1 0 RNR Receiver Not Ready (Receptor Não Pronto)
0 1 REJ Reject (Rejeitado)
1 1 SREJ Selective Reject (Recusa Seletiva)
Os bits M são utilizados para identificar comandos e respostas não numeradas. Eles
permitem, nos quadros sem numeração, representar 32 diferentes comandos e respostas, entre
os quais DISC para terminar uma conexão de enlace previamente estabelecida, FRMR para
indicar a rejeição de um quadro, SNRM (Set Normal Response Mode, Connect), SABM (Set
Asynchronous Balanced Mode), UA (Unnumbered ACK), UP (Unnumbered Poll, usado pelo
mestre em NRM), etc...
A operação do protocolo pode ser ilustrada como segue:
Inicio de operação:
ajuste do modo de operação e estabelecimento de uma conexão (frame
SNRM ou SABM)
parceiro responde com frame UA
Troca de Dados:
em NRM, escravo só envia dados a pedido do mestre: mestre envia UP,
escravo responde com I-Frame (se tem dados) ou RNR (se não tem dados)
em ABM, operação full-duplex. Estação envia I-Frame, receptor responde
com RR (ACK), REJ (NAK) ou SREJ (NAK)
Fim conexão:
em NRM só mestre pode concluir conexão (frame DISC); escravo responde
com frame UA.
em ABM, qualquer lado pode enviar DISC; outro responde com UA.
[Link]. Padrão IEEE 802 para a Camada de Enlace
67
O IEEE definiu um padrão para a camada de enlace (norma IEEE 802.2), hoje
largamente difundido. Estudaremos a norma IEEE 802 mais detalhadamente em um capítulo
posterior. Aqui nos limitaremos a descrever brevemente as primitivas propostas nesta norma.
Primitivas da Interface MAC / LLC:
M_DATA.request (local address, remote address, user data, service class):
pedido originado da subcamada LLC para a subcamada MAC solicitando o
envio de um frame de dados entre estações;
M_DATA.confirm (status): confirmação de envio de um frame retornada
pela subcamada MAC à subcamada LLC (valor local, não é ACK do
receptor);
M_DATA.indication (local address, remote address, user data, service
class): indica para a subcamada LLC do receptor a chegada de um frame de
dados de uma estação remota.
Na proposta IEEE 802, a subcamada MAC opera somente com serviços sem conexão e
sem reconhecimento. Os serviços oferecidos pela subcamada LLC ao usuário (ou à camada de
rede) podem ser com ou sem conexão e são apresentados na tabela a seguir:
SERVIÇOS ORIENTADOS À CONEXÃO
L_CONNECT.request (local address, remote address, service class)
L_CONNECT.indicationt (local address, remote address, status, service class)
L_CONNECT.response (local address, remote address, service class)
L_CONNECT.confirm (local address, remote address, status, service class)
L_DISCONNECT.request (local address, remote address)
L_DISCONNECT.indication (local address, remote address, reason)
L_DISCONNECT.response (local address, remote address)
L_DISCONNECT.confirm (local address, remote address, status)
L_DATA_CONNECT.request (local address, remote address, user_data)
L_DATA_CONNECT.indication (local address, remote address , user_data)
L_DATA_CONNECT.response (local address, remote address)
L_DATA_CONNECT.confirm (local address, remote address¸ status)
68
L_RESET.request ( local address, remote address)
L_RESET.indication (local address, remote address, reason)
L_RESET.response (local address, remote address)
L_RESET.confirm (local address, remote address, status)
L_CONNECTION_FLOWCONTROL.request (local address, remote address,
amount of data)
L_CONNECTION_FLOWCONTROL.indication (local address, remote address,
amount of data)
SERVIÇOS SEM CONEXÃO
L_DATA.request (local address, remote address, user_data, service class)
L_DATA.indication (local address, remote address, user_data, service class)
2.3.4. A CAMADA DE REDE
O objetivo da camada de Rede é assegurar o transporte de unidades de dados,
denominadas pacotes, do sistema fonte ao sistema destinatário, definindo uma trajetória
apropriada. Esta trajetória pode significar a passagem por diversos nós intermediários da rede,
o que significa que a camada de Rede deve ter o conhecimento de todos os aspectos
topológicos da rede considerada e, com esta informação, ser capaz de escolher o caminho a
ser traçado pelas mensagens (Roteamento). Nesta escolha, é interessante que seja levado em
conta o estado corrente da rede, particularmente no que diz respeito ao tráfego das mensagens,
evitando assim a sobrecarga de certos trechos das linhas de comunicação.
Ainda, se o sistemas fonte e destinatário estão conectados a redes diferentes, estas
diferenças devem ser levadas em conta e compensadas pela camada de Rede.
Duas funções essenciais da camada de Rede, descritas brevemente aqui, refletem,
respectivamente, os problemas de roteamento e congestionamento, serão tratados nesta parte
do documento. Os mecanismos relacionados às funções de interconexão de redes merecerão
uma parte dedicada mais adiante.
[Link]. Serviços oferecidos pela camada de Rede
a) Serviços orientados à conexão e sem conexão
Uma das primeiras discussões realizadas no que diz respeito à concepção da camada
de Rede foi a questão do tipo de serviço a ser oferecido às camadas superiores,
particularmente relacionado à existência ou não de conexão.
69
Aqueles que defendiam a proposta de um serviço sem conexão, estabeleciam que a
função desta camada era garantir o transporte dos pacotes e nada mais que isso, as outras
funções como o controle de erro, controle de fluxo, etc, devendo ficar a cargo das camadas
superiores da arquitetura de comunicação. Desta forma, a camada de Rede deveria, então,
oferecer unicamente dois tipos de primitivas de serviço: SEND PACKET e RECEIVE
PACKET.
Por outro lado, outro grupo defendia a proposta de um serviço confiável, orientado à
conexão, com comunicação bidirecional.
O resultado desta discussão foi a definição, a nível do modelo OSI, de duas classes de
serviço, sem conexão e orientado à conexão, sendo que uma certa liberdade foi dada no
sentido de se definir a que nível o serviço com conexão seria implantado, ou mesmo se este
seria implantado. Abriu-se, assim, a possibilidade de se ter, nos diferentes níveis, as duas
classes de serviço, como ilustrado pela figura 2.3.24.
serviço orientado serviço sem
conexão conexão
APLICAÇÃO
APRESENTAÇÃO
SESSÃO
TRANSPORTE
REDE
ENLACE
SAP
FÍSICA
Figura 2.3.24 - Ilustração das classes de serviço do modelo OSI.
Os SAPs são localizados na interface entre duas camadas, permitindo que uma camada
tenha acesso aos serviços oferecidos pela camada inferior. Como se pode ver na figura 2.3.24,
da camada de Enlace para cima, os serviços podem ser sem ou com conexão.
Pode-se ter, desde o nível Aplicação, um serviço totalmente orientado à conexão ou,
de maneira oposta, sem conexão. Ainda, é possível ter-se num dado nível, um serviço
orientado conexão, mesmo se os serviços oferecidos pelas camadas inferiores são sem
conexão. O inverso também é verdadeiro, embora não seja uma escolha das mais interessantes
(implantar serviços sem conexão sobre redes oferecendo serviços orientados à conexão).
Uma conexão de Rede é vista, da ótica do modelo OSI, como um par de filas FIFO
(FIrst In FIrst Out), cada uma orientada num sentido, conectado entre dois NSAPs (endereços
de rede). A figura 2.3.25 ilustra o estado da conexão, considerando a adoção de um serviço
orientado à conexão. A figura 2.3.25(a) ilustra o estado da conexão antes do seu
70