Teleprocessamento e Redes
Capítulo 3:
Camada de Enlace
Prof. Fábio M. Costa
INF / UFG
Introdução

Estudo de técnicas e algoritmos para se
obter comunicação confiável e eficiente entre
duas máquinas conectadas por um canal
direto
–
–
–

Propriedade essencial do canal:
–
2
através de um cabo (par trançado, coaxial, etc.)
através de uma linha telefônica
etc.
Bits são entregues na mesma ordem em que
foram enviados
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Introdução (2)

Problemas envolvidos
–
–
–

3
Erros introduzidos nos meios de transmissão
Taxa de transmissão limitada
Atrasos de propagação
Protocolos da camada de enlace devem
tratar tais problemas, fornecendo à camada
superior (camada de rede) a “ilusão” de um
canal “perfeito” (ou quase)
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Posicionamento da camada de enlace
4
Rede
Rede
Rede
Rede
Rede
Enlace
Enlace
Enlace
Enlace
Enlace
Enlace
Enlace
Física
Física
Física
Física
Física
Física
Física
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
5
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Unidades de transmissão de dados:
Nomenclatura utilizada




6
Camada de Transporte: Mensagens
Camada de Rede: Pacotes
Camada de Enlace: Quadros
Camada Física: Bits
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Aspectos de projeto




7
Tipo do serviço provido à camada de rede
Enquadramento (delimitação) dos dados
transmitidos
Controle de erros
Controle de fluxo
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Serviço provido à camada de rede
8
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Tipos de serviço



9
Serviço sem conexão e sem reconhecimento
Serviço sem conexão, com reconhecimento
Serviço orientado a conexões e com
reconhecimento
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Serviço sem conexão e sem
reconhecimento




Unidades de transmissão de dados (quadros)
independentes são enviados da máquina
origem para a máquina destino
Sem que a máquina destino envie de volta o
reconhecimento da recepção dos quadros
Perda de quadros (p. ex., devido a erros de
transmissão) não é tratada
Apropriado quando
–
–
10
Taxa de erros é muito baixa
Tráfego em tempo-real
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Serviço sem conexão, com
reconhecimento (Acknowledgement)


Quadros transmitidos independentemente
uns dos outros
Cada quadro é individualmente reconhecido
pela máquina destino da transmissão
–
–
11
Reconhecimento: quadro especial transmitido
de volta para a máquina origem da transmissão,
informando que um quadro foi recebido com
sucesso
Reconhecimento negativo: quadro não foi
recebido ou foi recebido com erros
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Serviço sem conexão, com
reconhecimento (2)

Caso um reconhecimento não chegue após um
certo tempo (a contar do instante em que o quadro
foi transmitido inicialmente):
–
–

Entretanto:
–

Se o quadro de reconhecimento em si for perdido, o quadro
de dados original será retransmitido, gerando uma
duplicação (que pode ser indesejável)
Serviço apropriado quando o meio de transmissão
(canal) é essencialmente não confiável
–
–
12
Timeout
Quadro é retransmitido
i.e., altas taxas de erros
Ex.: meios de transmissão sem-fio
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Considerações sobre
reconhecimentos

Acknowledgements (Acks) podem também ser
providos pelas camadas superiores
–

Ex.: camada de transporte (nível 4)
Entretanto, provê-los apenas nos níveis superiores
pode não ser eficiente. Exemplo:
–
Protocolo de transporte trabalha com mensagens longas

–
Implicações da perda de uma mensagem:


13
Fragmentadas em múltiplos quadros para transmissão através
do serviço da camada de enlace
Somente seria detectada após um tempo considerável
Uma grande quantidade de dados precisaria ser retransmitida
devido a, por exemplo, um erro apenas um quadro
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Considerações sobre
reconhecimentos (2)

Provê-los no nível da camada de enlace pode ser
mais eficiente
–
–

No exemplo anterior, apenas um quadro seria retransmitido
(não a mensagem completa)
Operação dirigida por hardware (implementação da
camada de enlace na placa de rede)
Acknowledgements podem ainda ser providos
(redundantemente) na camada de transporte
–
Para um nível de confiabilidade maior

–
14
Por exemplo, para lidar com falhas de roteamento de pacotes
na rede
Ex.: o protocolo TCP utilizado na Internet
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Serviço orientado a conexões, com
reconhecimento

Uma conexão deve ser estabelecida antes
que dados possam ser transmitidos
–

Quadros são transmitidos dentro do contexto
de uma conexão
–
–
15
Representa um contexto de comunicação bem
delimitado
As mesmas propriedados são aplicadas a todos
os quadros pertencentes a uma conexão
Quadros de uma conexão são numerados em
seqüência
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Serviço orientado a conexões, com
reconhecimento (2)

Garantias fornecidas pelo serviço
–
Cada quadro enviado será, de fato, recebido

–
Cada quadro será recebido apenas uma vez


–
16
Não ocorre a duplicação de quadros
Graças à numeração em seqüência dos quadros
Quadros são recebidos na mesma ordem em que
foram enviados


Quadros não são perdidos
Também conseqüência da numeração dos quadros
Permite à camada de redes assumir que o
meio de transmissão subjacente é
inteiramente confiável
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Serviço orientado a conexões: Fases
na comunicação (no nível de enlace)

Estabelecimento da conexão
–
Inicialização de variáveis e alocação de buffers
em ambos os lados da conexão




Transmissão de dados
Liberação da conexão
–
17
Para ter controle sobre os quadros transmitidos,
recebidos, retransmitidos, etc.
Pode envolver um acordo sobre os parâmetros de
transmissão (taxa de dados, atrasos máximos, etc.)
Recursos alocados à conexão (buffers, variáveis,
etc.) são liberados
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Procedimentos envolvidos na
comunicação: Exemplo de um roteador
18
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Procedimentos envolvidos na
comunicação
1.
2.
3.
Quadro é recebido em um roteador
Hardware verifica checksum (detecção de erros) e
repassa o quadro para o software da camada de
enlace
Camada de enlace verifica se o quadro recebido é
realmente o quadro esperado
–
4.
5.
19
Ex.: verifica se o quadro está na ordem correta
Caso afirmativo, camada de enlace extrai o pacote
de dentro do quadro e o entrega ao software da
camada de rede para roteamento
Software de roteamento escolhe a linha de saída
apropriada e repassa o pacote para o software de
camada de enlace responsável por aquela linha
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Unidades de dados transmitidas nas
várias camadas
Mensagens
Pacotes
Quadros
20
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Delimitação de quadros

Camada física: dados são transmitidos como
seqüências de bits não estruturadas
–

Camada de enlace: impor uma estrutura aos
dados a serem transmitidos
–

Facilitando o tratamento de tais erros
Abordagem básica:
–
–
21
Transmissão sujeita a erros
Agrupar os bits em quadros distintos
Calcular um checksum dos dados, o qual é
verificado no destino para detectar possíveis erros
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Delimitação de quadros: Abordagens

Separação dos quadros sucessivos através
de lacunas de “silêncio”
–
Não-confiável


Métodos mais confiáveis:
–
–
–
–
22
Atrasos de transmissão podem fazer com que as
lacunas desapareçam ou que lacunas indesejáveis
sejam inseridas, danificando a separação dos quadros
Contagem de caracteres
Caracteres de início e fim de quadro
Flags de início e fim de quadro
Uso de códigos inválidos
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Delimitação de quadros: Contagem de
caracteres



Cabeçalho do quadro contém um campo
especificando o número de caracteres nele
contidos
Receptor conta os caracteres recebidos para
determinar o fim de um quadro (e o início do
próximo)
Problema fundamental:
–
Erros de transmissão podem mudar o valor do
campo que contém o número de caracteres

23
Receptor incapaz de se re-sincronizar
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Delimitação de quadros: Contagem de
caracteres (2)
24
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Delimitação de quadros: Caracteres de
início e fim

Início e fim de quadro demarcado com
caracteres ASCII especiais
–
–
DLE + STX: início
DLE + ETX: fim




25
DLE = Data Link Escape
STX = Start of TeXt
ETX = End of TeXt
Na ocorrência de erros, o receptor pode se
re-sincronizar procurando pelo próximo par
DLE-STX ou DLE-ETX
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Delimitação de quadros: Caracteres de
início e fim (2)

Problema na transmissão de dados binários
ou numéricos
–
–

Ocorrência acidental de um padrão de bits idêntico
ao par de caracteres delimitadores
Interpretação errônea do fim (ou início) de quadro
Solução: character stuffing
–
Camada de enlace no transmissor insere um
caracter DLE antes do caracter DLE acidental

–
26
Resultado: DLEs “falsos” no meio dos dados sempre
aparecem em pares (ao contrário dos DLEs verdadeiros)
Receptor (camada de enlace) remove o caracter
DLE introduzido (antes de repassar os dados à
camada de rede)
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Delimitação de quadros: Caracteres de
início e fim (3)
27
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Delimitação de quadros: Caracteres de
início e fim (4)

Desvantagem fundamental:
–
–
O mecanismo de construção dos quadros (e sua
transmissão) é dependente do código de
caracteres utilizado (ASCII)
Impede o uso de códigos de caracteres mais
modernos


28
Tais como UNICODE, que é fundamental para a
internacionalização dos dados transmitidos
ASCII é voltado apenas para as necessidades das
línguas ocidentais (mais especificamente, do Inglês)
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Delimitação de quadros: Bits de início
e fim de quadro



Permite que quadros contenham um número
arbitrário de bits
O código de caracteres utilizado é irrelevante
Padrão de bits delimitador (flag): 01111110
–

Demarca início e fim de quadro
Princípio básico: Bit stuffing
–
Sempre que o transmissor encontrar cinco bits
“1” consecutivos no meio dos dados, um bit “0” é
automaticamente inserido

29
Impede que a seqüência delimitadora ocorra nos dados
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Delimitação de quadros: Bits de início
e fim de quadro (2)

Bit stuffing (cont.)
–
No receptor, sempre que se detectar cinco bits “1”
consecutivos seguidos de um bit “0”, este último é
automaticamente deletado


Exemplo:
–
–

Dados originais: 01111110
Dados transmitidos: 011111010
Transparente para a camada de rede
–
30
Pois foi inserido artificialmente
Stuffing bits são removidos antes de repassar os
dados para a camada de rede
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Delimitação de quadros: Bits de início
e fim de quadro (3)
31
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Delimitação de quadros: Uso de
códigos inválidos da camada física

Apenas aplicável quando o esquema de
codificação de bits para transmissão (na
camada física) contém redundância
–
–

Isto é, alguns dos possíveis códigos são inválidos
como dados
Utilizados para detectar condições excepcionais
Exemplo: Em redes locais
–
–
–
Bit “1”: high-low (nível alto seguido por nível baixo)
Bit “0”: low-high
High-high e low-low são inválidos como dados

32
Podem então ser usados como delimitadores
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Delimitação de quadros: Combinção
de técnicas


Contagem de caracteres empregada em
conjunto com bits (ou caracteres)
delimitadores
Maior segurança na delimitação dos quadros
–
O fim de um quadro só é confirmado (e o quadro
tido como válido) se:


–
Além disso, o conteúdo do quadro (i.e., um
pacote) só será entregue à camada de rede se:

33
Atingiu-se o número de caracteres esperado, e
Encontrou-se o caracter / flag delimitador
não houver erro no checksum ou na ordem do quadro
(ver a seguir)
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Controle de erros


Erros não-recuperáveis – i.e., que não podem ser
corrigidos no receptor
A camada de enlace deve tratar os seguintes
problemas:
–
Quadros perdidos

–
–
–
Quadros recebidos com erros de checksum que não
possam ser corrigidos
Quadros recebidos fora de ordem
Perda de quadros de reconhecimento


34
Ex.: devido a ruídos na transmissão
E, em conseqüência, a duplicação de quadros
Especialmente em serviços orientados a conexão
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Controle de erros (2)


Quadros de reconhecimentos
Transmissor
(acknowledgement)
Receptor informa ao transmissor
o estado do quadro recebido:
–
ACK: positivo – o quadro chegou
sem problemas

–
transmissor prossegue normalmente
NACK: negativo – o quadro chegou,
mas com erro

35
Receptor
o quadro deve ser re-transmitido
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Controle de erros (3)

Problema: Quadros perdidos devido a erros
de transmissão
–
O quadro não é recebido de forma alguma



Transmissor poderia ficar bloqueado para
sempre à espera do reconhecimento
Solução: Uso de temporizadores
–
36
portanto, NACK não será enviado pelo receptor
Permite que o transmissor atribua um limite
máximo (timeout) ao tempo que esperará por um
reconhecimento de um quadro pelo receptor
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Controle de erros (4)

Uso de temporizadores (cont.)
–
Ao enviar um quadro o transmissor dispara um
temporizador

Alarme “soará” (timeout) após um tempo considerado
suficiente para
–
o quadro se propagar e ser recebido do outro lado
– o receptor processar o quadro
– o reconhecimento propagar de volta até o remetente
–
Caso o reconhecimento não chegue antes do
timeout ocorrer

37
Transmissor re-envia o quadro, assumindo que o
mesmo não foi recebido do outro lado do enlace
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Controle de erros (5)
Transmissor
Receptor
timeout
38
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Controle de erros (6)

Mas e se um reconhecimento se perder?
–
–
Ocorrerá um timeout
Transmissor se comportará como se o quadro
original houvesse sido perdido

–
re-transmitirá uma duplicata o quadro!
O mesmo quadro será ser processado duas (ou
mais) vezes pelo receptor


cópias do mesmo pacote poderão ser passadas para a
camada de rede como se fossem pacotes diferentes
podendo gerar resultados indesejáveis
–
39
ex.: operações com o saldo de uma conta corrente)
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Controle de erros (7)
Transmissor
Receptor

Solução:
–
–
Associar números de
seqüência aos quadros
Receptor saberia se um
quadro já foi recebido


timeout
Esta solução é também
válida para o problema da
ordenação dos quadros:
–
40
Prof. Fábio M. Costa - INF / UFG
descarta duplicatas
um quadro somente é
repassado à camada de
rede se sua ordem estiver
de acordo com seu número
de seqüência
Capítulo 3: Camada de Enlace
Controle de fluxo

Problema fundamental:
–
Quando a taxa de transmissão é superior à taxa
em que o receptor pode processar os dados
recebidos

–
Processo transmissor reside em um computador mais
rápido ou menos carregado que o computador onde
reside o receptor
Receptor pode ficar “inundado” com quadros


buffer overflow
quadros começam a ser perdidos
–
41
mesmo que não haja erros de transmissão
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Controle de fluxo (2)

Solução genérica:
–
–
Regras para garantir o compasso entre o
transmissor e o receptor
Exige alguma forma de feedback do receptor
para o transmissor


Exemplo:
–
42
Protocolo que permite ao receptor informar quando (e o
quanto de) dados ele está preparado para receber
Receptor informa ao transmissor que pode
transmitir n quadros, após os quais deve parar
até que o receptor o autorize a enviar mais
quadros
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Detecção e Correção de Erros

Meios de transmissão comumente utilizados são
sujeitos a erros
–

Duas possibilidades:
–
–

43
Ex.: sistema telefônico (loops locais) e meios de
transmissão sem fio
Correção de erros: técnicas que permitem detectar e
corrigir bits errôneos em um quadro recebido
Detecção de erros: apenas detecta-se o erro, indicando a
necessidade de retransmissão
Obs.: Controle de erros (visto anteriormente)
envolve os tratamentos necessários uma vez que
um erro foi detectado (mas não corrigido)
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Natureza de erros de transmissão

Erros tendem a acontecer em rajadas
–

Exemplo:
–
–
–
–
–
44
Ex.: um surto de ruído no meio pode causar a inversão de
vários bits consecutivos
dados transmitidos em blocos de 1000 bits
taxa de erros de 0.001 erro por bit (1 a cada 1000 bits)
erros independentes (isolados): comprometeriam a maior
parte dos quadros
Vantagem de erros em rajada (ex.: 100 bits seguidos de
cada vez): apenas um ou dois blocos em cada 100 seriam
afetados (em média)
Por outro lado: erros em rajada são mais difíceis de se
detectar e corrigir do que erros isolados
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Códigos de correção de erros

Transmissor inclui informação redundante o
suficiente para permitir ao receptor deduzir
quais foram os dados corretos transmitidos
–

45
Bits de redundância permitem determinar a
posição do(s) bit(s) invertido(s)
Bits errôneos são corrigidos antes que os
dados sejam repassados para a camada de
rede
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Detecção e correção de erros:
Distância de Hamming



m bits de dados – mensagem
r bits de redundância – bits de checagem
palavra-código (codeword): mensagem +
bits de checagem
–

comprimento: n = m + r
Distância de Hamming entre duas palavrascódigo:
–
–
número de posições de bits nas quais as duas
palavras diferem entre si
Ex.: 10001001 e 10110001: dist. Hamming = 3

46
são necessários 3 erros de bit para transformar uma
palavra na outra
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Detecção e correção de erros:
Distância de Hamming (2)


2m mensagens válidas
Nem todas as 2n palavras-código são válidas
–

conjunto de todas as palavras-código: código
Dado o algoritmo para computar os bits de
checagem, é possível:
–
–
enumerar todas as palavras código válidas
encontrar as duas palavras-código cuja distância
de Hamming é mínima (dentro do código)

47
Distância de Hamming do código em si
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Detecção e correção de erros:
Distância de Hamming (3)


As propriedades de detecção e correção de erros de
um código dependem da sua distância de Hamming
Para detectar d erros: código com distância d + 1
–

não há como d erros converterem uma palavra-código
válida em outra palavra-código também válida
Para corrigir d erros: código com distância 2d + 1
–
mesmo com d bits errôneos, a palavra-código original ainda
estará mais próxima da palavra recebida do que qualquer
outra

48
palavra correta pode ser deduzida unicamente
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Exemplo: Detecção de erros com
bit de paridade


Um bit adicional é adicionado ao bloco de
bits a ser transmitido de forma que a soma
total dos bits “1” seja par (ou ímpar)
Exemplo: dados originais = 10110101
–
–

Distância de Hamming do código = 2
–
–
49
paridade par: 101101011
paridade ímpar: 101101010
Apenas um erro de bit: gera uma palavra-código
ilegal (com a paridade incorreta)
Permite detectar erros de um único bit
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Correção de erros: Exemplo

Código com as seguintes palavras-código
válidas:
–

Distância de Hamming do código = 5
–

0000000000, 0000011111, 1111100000, 1111111111
Capaz de corrigir erros duplos (dois bits)
Ex.: palavra recebida: 0000000111
–
–
Receptor deduz que a palavra correta é 0000011111
Mas se o erro for de três bits, convertendo a palavra
0000000000 em 0000000111, o erro não será
corrigido corretamente!

50
Não há como ter certeza disto (pode-se apenas fazer
suposições, com base em observações, sobre os tipos de
erros característicos em um determinado sistema)
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Código de correção de erros: Aspectos
gerais de projeto (exemplo)


Correção de erros simples (de 1 único bit)
Tamanho da mensagem: m bits
–

Número de bits de checagem: r
–
–

Total de bits em uma palavra-código: n = m + r
2n palavras-código (i.e., padrões de bits possíveis)
Para cada palavra-código válida:
–
–
–
51
2m mensagens válidas
n palavras ilegais (a uma distância 1 da palavra válida)
Portanto: Cada palavra válida requer n+1 padrões de bits
dedicados a ela
Logo, o número mínimo de check bits necessários é dado
por: (n + 1)2m ≤ 2n ou: (m + r + 1) ≤ 2r
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Código de correção de erros: Código
de Hamming

Numera-se os bits seqüencialmente
–



Bits numerados como potências de 2 (ex.: 1,
2, 4, 8, 16, etc.) representam os r check bits
Demais bits (3, 5, 6, 7, 9, etc.) representam
os m bits de dados
Cada check bit determina a paridade de um
sub-conjunto dos bits da palavra-código
–
52
Começando com o bit 1 como o bit mais à
esquerda
O mesmo check bit pode estar envolvido na
paridade de vários sub-conjuntos de bits
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Código de correção de erros: Código
de Hamming (2)

Para determinar os check bits que fazem a
verificação de um determinado bit de dados
na posição k:
–

Re-escrever k como uma soma de potências de 2
Exemplos:
–
k = 11 = 1 + 2 + 8

–
k = 29 = 1 + 4 + 8 + 16


53
bit 11 é checado pelos bits 1, 2 e 8
bit 29 é checado pelos bits 1, 4, 8 e 16
Transmissor calcula cada check bit e os
insere na palavra-código a ser transmitida
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Código de correção de erros: Código
de Hamming (3)

Ao receber uma palavra-código, o receptor
–
–
–
Inicializa um acumulador (em zero)
Examina cada check bit k (k = 1, 2, 4, 8, ...) para
determinar se o mesmo tem a paridade correta
Se paridade do check bit k está incorreta:

–
Se, ao final, o valor do acumulador for zero

–
Adiciona k ao acumulador
Não houve erro na palavra recebida
Se o valor do acumulador for diferente de zero:

Acumulador contém o número do bit errôneo
–
54
Ex.: check bits 1, 2 e 8 estão com paridade incorreta: bit
11 foi invertido (é o único bit checado pelos bits 1, 2 e 8)
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Código de correção de erros:
Código de Hamming - exemplo



Blocos de dados transmistidos: 7 bits
4 check bits: 1, 2, 4, 8
Bits de dados: 3, 5, 6, 7, 9, 10 ,11
1
55
2
3
4
Bit
3
Checado por
1, 2
5
6
7
1, 4
2, 4
1, 2, 4
Prof. Fábio M. Costa - INF / UFG
5
6
7
8
9
10
11
Bit
9
Checado por
1, 8
10
11
2, 8
1, 2, 8
Capítulo 3: Camada de Enlace
Código de correção de erros: Código
de Hamming – exemplo
56
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Código de Hamming: Correção de
surtos de erros

Grupo de k palavras-código a serem
transmitidas
–




57
Arranjadas como uma matriz k x n
Transmitir os dados coluna por coluna
Uma rajada de erros de até k bits afetaria, no
máximo um bit em cada palavra-código
Código de Hamming em cada palavra-código
seria usado para corrigir cada erro individual
Resultado: múltiplos (≤ k) erros consecutivos
corrigidos com kr check bits
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Códigos de Detecção de Erros

Correção de erros é aplicável (prática) quando
–
O canal de transmissão é simplex

–
Os atrasos de transmissão são muito grandes


Ex.: conexões de satélite ou enlaces interplanetários
Na maioria das situações comuns, contudo,
detecção seguida de retransmissão é mais
eficiente
–
Em geral, detecção de erros e retransmissões geram
menos bits de overhead do que códigos de correção de
erros

58
Retransmissões não são possíveis
Assumindo que erros ocorrem esporadicamente
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Códigos de detecção de erros: Modelo
fundamental
59
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Detecção de erros: Bits de paridade

Confiabilidade 100% apenas nos casos de erros
isolados
–

Para erros em rajada (vários bits no mesmo bloco):
–

1 bit para cada bloco protegido por um bit de paridade
Probabilidade de acerto de apenas 50%
Melhoria:
–
–
Organizar os dados a serem transmitidos como uma matriz
(k linhas x n colunas)
Última linha: bits de paridade


–
–
60
Paridade coluna-por-coluna
Cada bit de paridade checa uma posição de bit em cada linha
Capaz de corrigir rajadas de erros de até n bits
Ver exemplo a seguir
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Detecção de erros: Bits de paridade (2)
Ordem de transmissão
(uma linha de cada vez)
• k = 7 linhas
• n = 8 colunas
• Capaz de
detectar
surtos de
erros de até
8 bits
61
Bits de
Paridade
1
0
1
0
1
0
1
0
0
1
1
0
1
0
1
0
Prof. Fábio M. Costa - INF / UFG
0
0
0
1
1
1
0
1
1
0
0
1
0
1
0
1
1
0
0
0
0
0
1
0
1
1
0
1
0
1
0
0
0
1
1
1
1
0
1
1
0
1
1
0
1
1
1
1
Capítulo 3: Camada de Enlace
Detecção de erros: Códigos
polinomiais


Checagem de Redundância Cíclica (CRC)
Um quadro (seqüência de bits) a ser
transmitido é visto como um polinômio M(x)
binário (i.e., com coeficientes 0 e 1 apenas)
–

Polinômio gerador: G(x)
–
–
62
Ex.: 110001  x5 + x4 + x0 ou: x5 + x4 + 1
Utilizado para a geração de um checksum (CRC) a
ser concatenado ao final de cada quadro original
Polinômio resultante, M(x) + checksum, deve ser
divisível por G(x)
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Detecção de erros: Códigos
polinomiais – Algoritmo de geração

Concatenar um número de bits “0” (equivalente ao
grau r do polinômio gerador) ao final do quadro a ser
transmitido
–



63
resultando no polinômio xrM(x)
Dividir (módulo 2) o polinômio resultante por G(x)
Subtrair (módulo 2) o resto da divisão acima da
seqüência de bits correspondente ao polinômio
xrM(x)
O resultado é o quadro com checksum a ser
transmitido
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Detecção de erros: Códigos
polinomiais – Exemplo



Quadro original: 1 1 0 1 0 1 1 0 1 1
Gerador: 1 0 0 1 1 (x4 + x + 1 => grau 4)
Quadro após adicionar 4 bits:
–

Resto da divisão: 1 1 1 0
–

64
11010110110000
(1 1 0 1 0 1 1 0 1 1 0 0 0 0 dividido por 1 0 0 1 1)
Quadro transmitido: 1 1 0 1 0 1 1 0 1 1 1 1 1 0
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Detecção de erros: Códigos
polinomiais – Eficiência

Tipos de erros detectados:
–
–
–
–
–

Implementação simples e eficiente por hardware
–
65
Erros de um único bit (100%)
Erros duplos (desde que G(x) tenha pelo menos três bits
“1”)
Qualquer número ímpar de erros (desde que G(x) contenha
um fator x + 1)
Qualquer surto de erros cujo comprimento (entre o primeiro
e o último bits invertidos) seja menor que o comprimento do
polinômio gerador
A maior parte dos erros de rajada (probabilidade de não
detectar: 1/2r)
Registradores de deslocamento e portas XOR
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Detecção de erros: Códigos
polinomiais padronizados

CRC-12: X12 + x11 + x3 + x2 + x1 + 1
–
–

CRC-16: X16 + X15 + X2 + 1
–
–

Idem (Europa)
CRC-16 e CRC-CCITT: eficiência
–
–
–
–
–
66
Transmissão de seqüências de caracteres de 8 bits
Gera CRCs de 16 bits
CRC-CCITT: X16 + X12 + X5 + 1
–

Transmissão de seqüências de caracteres de 6 bits
Gera CRCs de 12 bits
Todos os erros de 1 ou 2 bits
Todos os erros de um número ímpar de bits
Todos os surtos de erros de até 16 bits
99,997% dos surtos de erros de 17 bits
99,998% dos surtos de erros de 18 bits ou mais
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolos de Enlace Elementares

Três protocolos em ordem crescente de
complexidade
–
Um protocolo simplex irestrito

–
Um protocolo simplex do tipo stop-and-wait

–
controle de fluxo básico
Um protocolo simplex com controle de erros

67
uma série de suposições (não-realistas) que simplificam
o projeto do protocolo
mais realista, reconhece que o canal de comunicação é
sujeito a erros
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolos de Enlace Elementares: O
modelo de comunicação

Camadas física, enlace e redes
–
implementadas através de processos
independentes, por exemplo:


–
camadas física e enlace: hardware da placa de rede
camada de rede: processo executando na CPU
comunicam-se entre si através de mensagens
(comunicação inter-processo)
CPU
Camada
Física
68
Camada
de Enlace
Camada
de Rede
NIC – Network Interface Card
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolos de Enlace Elementares: O
modelo de comunicação (2)

Transmissão simplex
–
–

Camada de rede (em A) sempre tem dados a
transmitir
–
–

69
do computador A para o computador B apenas
(em protocolos mais sofisticados: duplex)
suprimento de dados infinito
esta suposição será removida à medida em que
protocolos mais sofisticados são apresentados
Pacotes da camada de rede são tratados
puramente como dados pela camada de
enlace (inclusive o cabeçalho do pacote)
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolos de Enlace Elementares: O
modelo de comunicação (3)
Camada de Rede
H
Data
from_network_layer()
No transmissor:
•Encapsula
Camada de Enlace
H
H
Data T
to_physical_layer()
Camada Física
70
pacotes em
quadros
•Adiciona
cabeçalho e trailer
Prof. Fábio M. Costa - INF / UFG
•Calcula checksum
antes de transmitir
o quadro
Capítulo 3: Camada de Enlace
Protocolos de Enlace Elementares: O
modelo de comunicação (4)
Camada de Rede
No Receptor:
to_network_layer()
Data
H
•Checa cabeçalho
Camada de Enlace
para detectar
qualquer problema
•Extrai o pacote e o
repassa à camada
de rede
•Verifica checksum
•Sinaliza chegada
71
from_physical_layer()
H
H
Data T
Camada Física
do quadro (evento)
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolos de Enlace Elementares: O
modelo de comunicação (5)

Camada de enlace no receptor:
–
–
Loop infinito aguardando por eventos
Procedure wait_for_event( &event )

–
Vários tipos de eventos


–
dependente de protocolo
Exemplos: chegada de quadro, erro de checksum, timeout,
etc.
Ao receber um evento (ex.: chegada de um quadro),
a camada de enlace deve processá-lo

72
retorna quando algo acontece (ex.: chegada de um quadro)
Ex.: chama from_physical_layer() para obter o
quadro
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolos de Enlace Elementares:
Definições básicas
73
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolos de Enlace Elementares:
Definições básicas (2)
74
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolos de Enlace Elementares:
Estruturas de dados




75
#define MAX_PKT 1024
– tamanho máximo de um quadro
typedef enum {false, true} boolean;
typedef unsigned int seq_nr;
– número de seqüência atribuído aos quadros
– 0 a MAX_SEQ (dependente de protocolo)
– contagem circular (0, 1, 2,... MAX_SEQ, 0, 1, ...)
typedef struct{unsigned char
data[MAX_PKT];}packet;
– unidade de dados trocada entre a camada de
rede e a camada de enlace
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolos de Enlace Elementares:
Estruturas de dados (2)


76
typedef enum{data, ack, nak}frame_kind;
– tipo do quadro (dados ou controle)
typedef struct {
frame_kind kind;
seq_nr seq;
seq_nr ack;
packet info;
} frame;
– quadro propriamente dito
– seq: número de seqüência do quadro
– ack: acknowledgement
– info: pacote encapsulado (vazio se quadro de
controle)
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolos de Enlace Elementares:
Rotinas comuns




77
wait_for_event(event_type &event);
from_network_layer(packet *p);
– chamada pela camada de enlace para aceitar
pacotes (da camada de rede) a serem
transmitidos
to_network_layer(packet *p);
– chamada pela camada de enlace para passar
pacotes recebidos para a camada de rede
to_physical_layer(frame *s); e
from_physical_layer(frame *s);
– interface com a camada física
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolos de Enlace Elementares:
Rotinas comuns (2)

start_timer(seq_nr k);

dispara um temporizador para detectar a
ocorrência de timeouts (ex.: p/ ack de um quadro)
– um temporizador para cada quadro pendente
stop_timer(seq_nr k);
–
–

start_ack_timer(void); e
stop_ack_timer(void);
–
78
interrompe a contagem do temporizador quando
o evento esperado ocorreu (ex.: quadro chegou
antes do timeout)
uso semelhante em situações especiais
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolos de Enlace Elementares:
Rotinas comuns (3)

enable_network_layer(void);
–
–
utilizada em protocolos mais sofisticados (com controle de
fluxo e que não assumem a constância do fluxo de dados)
quando habilitada, a camada de rede pode interromper a
camada de enlace para avisar que há pacotes a serem
transmitidos

–

a camada de enlace então invoca from_network_layer
para obter o pacote
disable_network_layer(void);
–
–
79
evento network_layer_ready
desabilita a camada de rede (não permitindo novas
interrupções
para evitar que a camada de rede tente transmitir pacotes
além da capacidade da camada de enlace
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolos de Enlace Elementares:
Rotinas comuns (4)
#define inc(k) if (k < MAX_SEQ) k = k + 1; else k = 0

–
–

Todas as definições básicas são contidas no
arquivo protocol.h
–
80
macro utilizada para incrementar números de
seqüência circularmente
MAX_SEQ é definido por cada protocolo
incluído (#include) pela implementação de cada
protocolo
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Um protocolo simplex irrestrito

Suposições básicas:
–
–
dados são transmitidos apenas de A para B
camada de rede no transmissor sempre tem
dados a transmitir

–
camada de rede no receptor sempre está pronta
para receber dados

–
81
ao ser invocada pela camada de enlace (através de
from_network_layer)
ao ser invocada pela camada de enlace (através de
to_network_layer)
tempos de processamento (nas camadas) é
ignorado
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Um protocolo simplex irrestrito (2)

Suposições básicas (cont.):
–
–
Buffers com capacidade infinita nas camadas
Canal de comunicação 100% confiável


Suposições não-realistas, mas que
simplificam a implementação deste primeiro
protocolo estudado
–
–
82
nunca corrompe ou perde quadros
–
números de seqüência ou reconhecimentos
(acks) não são necessários
único evento possível: chegada de quadro (sem
erros)
apenas um tipo de pacote: de dados
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Um protocolo simplex irrestrito:
Transmissor
typedef enum{frame_arrival} event_type;
#include “protocol.h”
void sender1(void){
frame s;
packet buffer;
83
while(true){
from_network_layer(&buffer);
s.info = buffer;
to_physical_layer(&s);
}}
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Um protocolo simplex irrestrito:
Receptor
void receiver1(void){
frame r;
event_type event;
while(true){
wait_for_event(&event);
from_physical_layer(&r);
to_network_layer(&r.info);
}
}
84
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Um protocolo simplex Stop-and-Wait

Removendo a seguinte restrição:
–


Ainda assumindo um canal livre de erros e
tráfego de dados em uma só direção
Problema a ser resolvido:
–

85
receptor com capacidade infinita de
processamento/ armazenamento de quadros
prevenir que o transmissor inunde o receptor com
uma taxa dados maior do que ele é capaz de
consumir
Solução: feedback do receptor para o
transmissor indicando quando se pode
transmitir mais quadros
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolo simplex Stop-and-Wait:
Transmissor
typedef enum{frame_arrival} event_type;
#include “protocol.h”
void sender2(void){
frame s;
packet buffer;
event_type event;
while(true){
from_network_layer(&buffer);
s.info = buffer;
to_physical_layer(&s);
wait_for_event(&event);
}}
86
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolo simplex Stop-and-Wait:
Receptor
void receiver2(void){
frame r, s;
event_type event;
while(true){
wait_for_event(&event);
from_physical_layer(&r);
to_network_layer(&r.info);
to_physical_layer(&s);
}
}
87
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Um protocolo simplex para um canal
sujeito a erros

Quadros podem ser danificados ou perdidos
–
–

Quadros danificados: detectados pelo hardware ao
calcular o checksum
Quadros perdidos: excede-se o prazo para receber o
Acknowledgement
Solução simplista:
–
–
Uso de timeout no protocolo anterior
Não funciona:
timeout
timeout
Sender
Dados
Receiver
88
Ack
p/ camada
de rede
Duplicata!
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Um protocolo simplex para um canal
sujeito a erros (2)

Solução mais elaborada:
–
Uso de números de seqüência no cabeçalho de cada
quadro de dados enviado




Detalhe: Tamanho dos números de seqüência
–
–
89
Stop-and-wait com timeout e números de seqüencia
Receptor pode distingüir quadros novos de retransmissões
Acknowledgements: quadros vazios (ver posteriormente)
–
Influencia na quantidade de overhead carregada em
cada quadro de dados
É necessário ao receptor distinguir apenas entre um
quadro e o próximo (stop-and-wait significa que há
apenas um quadro em trânsito em um dado instante)
Portanto: 1 bit apenas neste caso: 0, 1, 0, 1, ...
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Um protocolo simplex para um canal
sujeito a erros (3)
timeout
timeout
Sender
Dados
0
1
1
1
Receiver

Protocolos deste tipo são conhecidos como:
–
–
90
Ack
p/ camada
de rede
ARQ – Automatic Repeat Request, ou
PAR – Positive Aknowledgement with
Retransmission
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Um protocolo simplex para um canal
sujeito a erros (4)

Outro detalhe: duração do intervalo de timeout
deve ser corretamente ajustada
–
Suficiente para:



–
Propagação do quadro até o receptor
Processamento do quadro e geração do Ack no receptor
Propagação do Ack (quadro de controle) até o transmissor
Problema se este intervalo for subestimado:
timeout
Sender
1
0
91
Receiver
Prof. Fábio M. Costa - INF / UFG
0
Falha do protocolo:
transmissor pensa
que este quadro foi
recebido ok.
Dados
Ack
p/ camada
de rede
Capítulo 3: Camada de Enlace
Protocolo ARQ simplex: Definições
/* Protocol 3 */
#define MAX_SEQ 1
typedef enum {frame_arrival,
cksum_error,
timeout} event_type;
#include “protocol.h”
92
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
void sender3(void){
seq_nr next_frame_to_send;
frame s;
packet buffer;
event_type event;
next_frame_to_send = 0;
from_network_layer(&buffer);
while(true){
s.info = buffer;
s.seq = next_frame_to_send;
to_physical_layer(&s);
start_timer(s.seq);
wait_for_event(&event);
if (event == frame_arrival) { /* chegou ACK */
from_network_layer(&buffer);
inc(next_frame_to_send);
}
}
}
93
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
void receiver3(void){
seq_nr frame_expected;
frame r,s;
event_type event;
frame_expected = 0;
while(true){
wait_for_event(&event);
if(event == frame_arrival){
from_physical_layer(&r);
if (r.seq == frame_expected){
to_network_layer(&r.info);
inc(frame_expected);
}
to_physical_layer(&s); /* envia ACK */
}
}
}
94
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
void sender3(void){
seq_nr next_frame_to_send;
frame s;
packet buffer;
event_type event;
95
O mesmo protocolo,
agora com números
de seqüência no
Acknowledgement
(transmissor)
next_frame_to_send = 0;
from_network_layer(&buffer);
while(true){
Ack com número
s.info = buffer;
de seqüência!
s.seq = next_frame_to_send;
to_physical_layer(&s);
start_timer(s.seq);
wait_for_event(&event);
if (event == frame_arrival) {
from_physical_layer(&s);
if (s.ack == next_frame_to_send){
from_network_layer(&buffer);
inc(next_frame_to_send);
}
}
}
}
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
void receiver3(void){
seq_nr frame_expected;
frame r,s;
event_type event;
}
96
O mesmo protocolo,
agora com números
de seqüência no
Acknowledgement
(receptor)
frame_expected = 0;
while(true){
wait_for_event(&event);
if(event == frame_arrival){
from_physical_layer(&r);
if (r.seq == frame_expected){
to_network_layer(&r.info);
inc(frame_expected);
}
s.ack = 1 – frame_expected;
to_physical_layer(&s);
}
}
Ack com número
de seqüência!
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolos de “Janela Deslizante”
(Sliding Window)

Conceitos básicos
Protocolo de janela deslizante de 1 bit
Protocolo “Go Back n”
Protocolo com repetição seletiva

Removendo mais uma das suposições:



–
Protocolos full-duplex


97
Um circuito físico full-duplex ou dois circuitos simplex
Mantém-se a suposição de que a camada de
rede sempre tem pacotes a transmitir
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Piggybacking

Problema: Reconhecimentos (Acks)
consomem recursos da rede
–

Solução: Enviar reconhecimentos de
“carona” em quadros de dados transmitidos
no sentido oposto ao do quadro reconhecido
–
–
98
um quadro transmitido para cada Ack
Aguarda-se até que haja um quadro de dados a
ser transmitido para então enviar o Ack
Caso demore muito, enviar o Ack em quadro
separado – para evitar timeout do transmissor
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
O conceito de “janela deslizante”


Cada quadro (e cada reconhecimento)
contém um número de seqüência
Janela de transmissão
–
Números de seqüência dos quadros que podem
ser transmitidos

–

Quadros transmitidos mas com Ack pendente
Janela de recepção
–
Números de seqüência dos quadros que o
receptor pode aceitar

99
Ex.: 0 1 2 3 4 5 6 7 9 10 11
Ex.: 0 1 2 3 4 5 6 7 8 9 10 11
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
O conceito de “janela deslizante” (2)


As duas janelas são atualizadas (deslizadas) a cada
quadro transmitido / recebido
Janela de transmissão
–
–
quadro transmitido: incrementa limite superior
Ack recebido: incrementa limite inferior


quadros são mantidos em buffer até receber Ack
Janela de recepção
–
quadro recebido com número de seq. dentro da janela:

quadro é aceito, Ack é enviado, janela é deslizada
–
–
quadro recebido com número de seq. fora da janela:

100
quadro só é passado para a camada de rede quando seu
número for igual ao primeiro número de seq. na janela
quadro é simplesmente descartado
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
O conceito de “janela deslizante”:
Janela de tamanho 1
101
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolo 4: Janela Deslizante de 1 bit
Cenário ideal
Notação:
(seq, ack, packet number)
102
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolo 4: Janela Deslizante de 1 bit
Cenário anômalo
•A e B iniciam o
envio de quadros
simultaneamente
•Protocolo não
comete erros
•Entretanto, metade
dos quadros
transmitidos são
duplicatas
103
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolo 4: Janela deslizante de 1 bit
#define MAX_SEQ 1 /* must be 1 for protocol 4 */
typedef enum {frame_arrival, cksum_err, timeout} event_type;
#include "protocol.h“
void protocol4 (void)
{
seq_nr next_frame_to_send;
seq_nr frame_expected;
frame r, s;
packet buffer;
event_type event;
next_frame_to_send = 0;
frame_expected = 0;
from_network_layer(&buffer);
s.info = buffer;
s.seq = next
frame_to_send;
s.ack = 1 – frame_expected;
to_physical_layer(&s);
start_timer(s.seq);
104
Prof. Fábio M. Costa - INF / UFG
/* 0 or 1 only */
/* 0 or 1 only */
/* scratch variables */
/* current packet being sent */
/* next frame on the outbound stream */
/* number of frame arriving frame expected */
/* fetch a packet from the network layer */
/* prepare to send the initial frame */
/* insert sequence number into frame */
/* piggybacked ack */
/* transmit the frame */
/* start the timer running */
Capítulo 3: Camada de Enlace
Protocolo 4: Janela deslizante de 1 bit
(2)
while (true) {
wait_for_event(&event);
/* frame_arrival, cksum_err, or timeout */
if (event == frame_arrival) {
/* a frame has arrived undamaged. */
from_physical_layer(&r);
/* go get it */
if (r.seq == frame_expected) {
/* Handle inbound frame stream. */
to_network_layer(&r.info);
/* pass packet to network layer */
inc(frame_expected);
/* invert sequence number expected next */
}
if (r.ack == next_frame_to_send) {
/* handle outbound frame stream. */
from_network_layer(&buffer);
/* fetch new pkt from network layer */
inc(next_frame_to_send);
/* invert sender’s sequence number */
}
}
s.info = buffer;
/* construct outbound frame */
s.seq = next_frame_to_send;
/* insert sequence number into it */
s.ack = 1 – frame_expected;
/* seq number of last received frame */
to_physical_layer(&s);
/* transmit a frame */
start_timer(s.seq);
/* start the timer running */
}
} /* End protocol4 */
105
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Eficiência de utilização


Stop-and-wait apresenta sérios problemas de
eficiência de utilização da capacidade do enlace
Exemplo: link de satélite usando o protocolo 4
–
–
–
–
–

Stop-and-wait é inapropriado quando temos:
–
–
–
106
Taxa de dados: 50Kbps; RTT = 500ms
Tempo de transmissão: 20ms
Recepção do quadro (receptor): 270ms
Recepção do reconhecimento (transmissor): 520ms
Transmissor ficou bloqueado durante 500/520 = 96% do
seu tempo -> 4% de utilização da capacidade disponível
RTT muito alto
Alta largura de banda
Quadros de tamanho pequeno
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Solução: Múltiplos quadros enviados
antes de bloquear o transmissor

Permite-se ao transmissor enviar até w
quadros antes que o primeiro
reconhecimento seja recebido
–
–

No exemplo anterior:
–
–
107
w calculado em função do RTT
Preenchendo o máximo da capacidade do enlace
(lembrança: produto delayXbandwidth)
w = 26 (RTT=520 dividido pelo tempo de
transmissão = 20)
Após enviar o 26o. quadro, Acks chegarão a cada
20ms, dando permissão para transmitir mais um
quadro
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolo de janela deslizante de 3 bits
108
©Stallings
2000
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolo usando “Go Back n”


O que fazer quando um dos quadros
transmitidos é perdido?
Solução 1: Go Back n
–
Retransmitir todos os quadros posteriores ao
quadro perdido, inclusive

–
Receptor com janela de tamanho 1

–
109
Após timeout do quadro perdido
Isto é, sem espaço de buffer para guardar quadros
Lembre-se de que o receptor não pode passar
quadros fora de ordem para a camada de rede
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolo usando “Go Back n”:
Exemplo
110
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolo usando “Go Back n”:
Detalhes de projeto

Buffers de transmissão: quadros com Ack pendente
devem ser armazenados temporariamente no
transmissor (um buffer para cada quadro)
–
–

A camada de rede não possui um suprimento
contínuo de pacotes
–
–
–
111
Buffers são liberados à medida em que Acks são recebidos
Um Ack pode liberar um ou mais buffers
Ela interrompe a camada de enlace quando há pacotes
Camada de rede pode ser desabilitada quando a janela de
transmissão está cheia
A cada Ack recebido, um ou mais buffers podem ser
liberados e novos pacotes podem ser aceitos da camada
de rede
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolo usando “Go Back n”:
Detalhes de projeto (2)

Números de seqüência dos quadros
–
–
–
De 0 a MAX_SEQ
Implicam que, no máximo, MAX_SEQ quadros
podem estar com Ack pendente em um dado
instante
MAX_SEQ+1 números de seqüência para
impedir que Acks sejam mal interpretados:




–
112
Transmissor envia quadros 0 a 7
Transmissor recebe Ack do quadro 7
Transmissor envia os próximos 8 quadros (0 a 7)
Outro Ack para o quadro 7 é recebido
O que aconteceria se o segundo grupo de 8
quadros fosse perdido?
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolo usando “Go Back n”:
Detalhes de projeto (3)

Temporizadores independentes devem ser
associados a cada quadro transmitido
–
–
Cada quadro tem um período de timeout próprio
Temporizadores lógicos são usados

113
Com um único relógio físico
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolo 5 – Go Back n
#define MAX_SEQ 7 /* should be 2ˆn - 1 */
typedef enum {frame_arrival, cksum_err, timeout, network_layer_ready}
event_type;
#include "protocol.h"
static boolean between(seq_nr a, seq_nr b, seq_nr c)
{
/* Return true if (a <=b < c circularly; false otherwise. */
if (((a <= b) && (b < c)) || ((c < a) && (a <= b)) || ((b < c) && (c < a)))
return(true);
else
return(false);
}
114
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
static void send_data(seq_nr frame_nr, seq_nr frame_expected,
packet buffer[])
{
/* Construct and send a data frame. */
frame s;
/* scratch variable */
s.info = buffer[frame_nr];
/* insert packet into frame */
s.seq = frame_nr;
/* insert sequence number into frame */
/* piggyback ack */
s.ack = (frame_expected + MAX_SEQ) % (MAX_SEQ + 1);
to_physical_layer(&s);
start_timer(frame_nr);
/* transmit the frame */
/* start the timer running */
}
115
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
void protocol5(void)
{
seq_nr next_frame_to_send;
seq_nr ack_expected;
/* oldest frame as yet unacknowledged */
seq_nr frame_expected; /* next frame expected (inbound stream) */
frame r;
/* scratch variable */
packet buffer[MAX_SEQ + 1];
/* buffers for the outbound stream */
seq_nr nbuffered;
/* # output buffers currently in use */
seq_nr i;
/* used to index into the buffer array */
event_type event;
enable_network_layer();
ack_expected = 0;
next_frame_to_send = 0;
frame_expected = 0;
nbuffered = 0;
116
Prof. Fábio M. Costa - INF / UFG
/* allow network_layer_ready events */
/* next ack expected inbound */
/* next frame going out */
/* number of frame expected inbound */
/* initially no packets are buffered */
Capítulo 3: Camada de Enlace
while (true) {
wait_for_event(&event); /* four possibilities: see event_type above */
switch(event) {
case network_layer_ready: /* network layer has a packet to send */
/* Accept, save, and transmit a new frame. */
/* fetch new packet */
from_network_layer(&buffer[next_frame_to_send]);
/* expand the sender’s window */
nbuffered = nbuffered + 1;
/* transmit frame */
send_data(next_frame_to_send, frame_expected, buffer);
/* advance sender’s upper window edge */
inc(next_frame_to_send);
break;
117
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
case frame_arrival: /* a data or control frame has arrived */
from_physical_layer(&r);
/* get frame from physical layer */
if (r.seq == frame_expected) {
/* Frames are accepted only in order. */
to_network_layer(&r.info); /* pass packet to network layer */
inc(frame_expected);
/* advance lower edge of
receiver’s window */
}
/* Ack n implies n - 1, n - 2, etc. Check for this. */
while (between(ack_expected, r.ack, next_frame_to_send)) {
/* Handle piggybacked ack. */
nbuffered = nbuffered - 1;
/* one frame fewer buffered */
stop_timer(ack_expected); /* frame arrived ok; stop timer */
inc(ack_expected);
/* contract sender’s window */
}
break;
118
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
case cksum_err: break; /* just ignore bad frames */
case timeout:
/* trouble; retransmit all outstanding frames */
next_frame_to_send = ack_expected; /* start retransm. here */
for (i = 1; i <= nbuffered; i++) {
/* resend 1 frame */
send_data(next_frame_to_send, frame_expected, buffer);
inc(next_frame_to_send); /* prepare to send the next one */
}
} /* end switch statement */
if (nbuffered < MAX_SEQ)
enable_network_layer();
else
disable_network_layer();
} /* end while */
} /* end protocol5() */
119
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolo de janela deslizante usando
Repetição Seletiva

Alternativa para o protocolo 5 quando
–
–

Receptor aceita quadros recebidos fora de
ordem, armazenando-os temporariamente
–
–

Até que possa entregá-los (em ordem) à camada
de rede
Não descarta os quadros subseqüentes quando
um quadro anterior for perdido ou danificado
Isto é: receptor com janela maior que 1
–
120
erros são freqüentes
receptor possui espaço de buffer suficiente
Um buffer para cada quadro que pode aceitar
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolo de janela deslizante usando
Repetição Seletiva
121
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolo com repetição seletiva:
Detalhes de projeto

A faixa de números de seqüência deve ser
grande o suficiente
–
–
O dobro do tamanho da janela
Evitar que duas janelas sucessivas se
sobreponham


Número de buffers necessários: equivale ao
tamanho da janela
–
–
–
122
O que poderia causar erros no protocolo
Um buffer para cada número de seqüência
Bit para marcar se o buffer está cheio ou vazio
Um temporizador para cada buffer
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolo com repetição seletiva:
Detalhes de projeto (2)

Quadros de reconhecimento Vs.
Piggybacking
–
–
–
123
Caso não haja um quadro de dados a ser
transmitido, o Ack pode ser enviado em um
quadro de controle independente
Receptor só espera por um pacote da camada de
rede por um certo tempo (ack_timeout)
Ack_timeout deve ser menor que o timeout para
quadros de dados
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolo com repetição seletiva:
Detalhes de projeto (3)

Reconhecimentos negativos (NAK)
–
–
Requisição para retransmissão de um quadro
Quando o receptor suspeita de um erro


–
124
Quadro perdido
Quadro recebido com erro de CRC
Melhoram o desempenho global quando o tempo
necessário para um quadro ser reconhecido não
pode ser determinado com precisão
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Protocolo com repetição seletiva:
Detalhes de projeto (4)

Determinando qual quadro causou um
timeout
–
–
Evento de timeout não diz explicitamente a que
quadro ele se refere
Quadros são transmitidos em seqüência, um
após o outro

–
–
125
Ao se transmitir cada quadro, um temporizador é
disparado
Quadros mais “antigos” expiram (timeout) mais
cedo
Logo, um evento de timeout refere-se ao quadro
mais “antigo”
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
“Leitura” Complementar


Protocolo 6 (Figura 3-18, Tanenbaum)
Applet animado ilustrando o protocolo de janelas
deslizantes:
–
126
http://www.kom.e-technik.tudarmstadt.de/projects/iteach/itbeankit/Applets/Sliding_
Window/sliding_window.html
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Camada de Enlace na Internet

Enlaces ponto-a-ponto de longa distância
–

Enlaces entre usuários e provedores
–
127
Isto é, os protocolos de enlace utilizados na sub-rede de
comunicações
Linha dedicada, linha discada
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
SLIP – Serial Line IP (RFC 1055)

Quadro: pacote IP + flag de fim de quadro
–
–
–

Compressão de cabeçalho TCP e IP
–
128
Byte marcador de fim de quadro (flag): 0xC0
Uso de caracteres de enchimento (0xDB, 0xDC)
caso o flag apareça no meio do pacote a ser
tranmitido
Se 0xDB aparecer no meio do pacote, insere-se
outro 0xDB
RFC 1144
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
SLIP: Limitações





129
Não faz detecção ou correção de erros
Suporta apenas o protocolo IP
Não permite a atribuição dinâmica de
endereços IP
Não provê autenticação
Múltiplas versões existem (não é um padrão
aprovado pelo IETF)
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
PPP – Point-to-Point Protocol
(RFC 1661)

Vantagens sobre o SLIP:
–
–
–
–

Deteção de erros
Encapsulamento de múltiplos protocolos de
camada de rede
Negociação de endereços IP durante o
estabelecimento da conexão
Autenticação
Aplicações:
–
–
Conexões de linha discada (usuário-provedor)
Conexões de linha dedicada (roteador-roteador)

130
Ex.: sobre uma linha física SONET/SDH
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
PPP: Serviços providos


Formatação e delimitação de quadros
Protocolo de controle de enlace
–
–
–
–
–

LCP (Link Control Protocol)
Ativação do circuito físico
Teste do circuito
Negociação de opções
Desativação do circuito
NCP (Network Control Protocol)
–
–
Negociação de opções da camada de rede
Independente do protocolo de rede utilizado

131
Um NCP para cada protocolo de rede diferente
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
PPP: Exemplo de uso

132
Conectando um PC à Internet através de um
provedor de acesso
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
PPP: Exemplo de uso
1.
Estabelecimento da conexão física
–
–
2.
PC envia uma seqüência de pacotes LCP
–
–
3.
Encapsulados em um ou mais quadros PPP
Negociação dos parâmetros do protocolo PPP
PC e roteador trocam uma série pacotes
NCP
–
–
133
Entre o PC e o roteador do provedor de acesso
Através de um modem em cada lado
Também encapsulados em quadros PPP
Associação de um endereço IP ao PC
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
PPP: Exemplo de uso (2)
4.
PC funciona como um host na Internet
–
–
5.
Ao final da sessão:
–
–
6.
134
Pode enviar e receber pacotes IP
Encapsulados em quadros PPP
Protocolo NCP é usado para desfazer a
conexão (no nível de rede), liberando o
endereço IP
Protocolo LCP é usado para fechar a conexão
de enlace
PC instrui o modem para liberar o circuito
físico
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
PPP: Formato dos quadros


Protocolo orientado a caracteres
Delimitação de quadros:
–
–

Campo de endereço: 11111111 (todas as estações)
–
135
Caracter (byte) especial 01111110 usado para delimitar o início
e fim de cada quadro
Character stuffing: caso o caracter delimitador apareça no
meio do quadro
Endereço padrão (evita ter que associar endereços de enlace)
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
PPP: Formato dos quadros (2)

Campo de controle
–
–
–
Valor default: 00000011 – quadro não numerado
Por default, PPP não provê transmissão confiável, com
números de seqüência e reconhecimentos
RFC 1663: Especifica o uso de números de seqüência


136
Para ambientes susceptíveis a ruídos
Campos de endereço e de controle, se default, podem
ser omitidos – opção negociada via protocolo LCP
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
PPP: Formato dos quadros (3)

Campo de Protocolo
–
–
–
Especifica o tipo do pacote encapsulado no campo Payload
do quadro PPP
Códigos padrão definidos para os protocolos LCP, NCP, IP,
IPX, AppleTalk, entre outros
Primeiro bit:


–
137
0 – protocolo da camada de rede
1 – protocolo de negociação (LCP ou um dos vários NCPs)
Tamanho do campo: 1 ou 2 (default) bytes, negociável c/ LCP
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
PPP: Formato dos quadros (4)

Campo de Payload
–
–
Tamanho variável
Tamanho máximo: negociado através do protocolo LCP


Campo de Checksum
–
138
Default: 1500 bytes
2 ou 4 bytes de CRC, negociável usando LCP
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
PPP: Diagrama de estados
139
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
PPP: Protocolo utilizado na fase de
negociação (LCP) – tipos de pacotes
140
Prof. Fábio M. Costa - INF / UFG
Capítulo 3: Camada de Enlace
Download

slides Powerpoint