Redes de Computadores
Curso de Eng. Informática
Curso de Eng. de Electrónica e Computadores
Aula Prática
Bit stuffing, CRC e IP
1 Introdução
1.1
Framing
O nível de ligação de dados utiliza o serviço fornecido pelo nível físico para fornecer
serviço ao nível de rede. O que o nível físico faz é aceitar um novo grupo de bits (bit
stream) e tentar enviá-lo para o seu destino. Não é garantido que este grupo de bits não
tenha de erros. O número de bits recebido pode ser menor, igual ou maior que o número
de bits transmitido, e pode ter valores diferentes. É deixado ao nível de ligação de dados
a tarefa de detecção e, se necessário, a correcção de erros.
O procedimento usual é o do nível de ligação separar em tramas (frames) o grupo de
bits recebido e calcular o checksum de cada trama. Quando uma trama chega ao destino,
o checksum é recalculado. Se o novo checksum calculado fôr diferente do contido na
trama, o nível de ligação de dados determina que ocorreu um erro e procede de acordo
(por ex., descarta a trama e envia uma mensagem de erro).
Uma forma de fazer a separação do grupo bits recebido em tramas é a de inserir espaços
de tempo (time gaps) entre tramas, tal como os espaços entre palavras em texto.
Contudo, as redes raramente dão garantias temporais, por isso é possível que estes
espaços sejam eliminados ou que outros espaços sejam inseridos durante a transmissão.
Sendo então muito arriscado contar com marcas temporais para início e fim de trama
consideram-se os seguintes métodos para separação das tramas:
•
Contagem de caracteres (character count)
•
Caracteres de início e fim, com caracter stuffing
•
Flags de início e fim, com bit stuffing
•
Violação de codificação no nível físico
O primeiro método baseia-se na introdução de um cabeçalho onde é indicado o número
de bits da trama. Este método tem como desvantagem a do cabeçalho ser alterado
devido a um erro de transmissão, o que colocava o receptor fora de sincronismo sendo
incapaz de localizar o início da próxima trama.
O Segundo método consiste na introdução de uma sequência de caracteres ASCII (DLE
ETX) no início e fim da trama e um caracter DLE sempre que a meio da trama ocorra
uma sequência que coincida com este caracter. Este método tem como grande
desvantagem de estar muito orientado para transmissão de caracteres de oito bits em
geral e de código ASCII em particular.
Quanto ao último método ele só é aplicável em redes onde a codificação no meio físico
contém alguma redundância, pelo que não o vamos abordar.
Considerando o atrás exposto, vamos descrever com mais detalhe o terceiro método (bit
stuffing).
Como nota final queremos referir que muitos protocolos de ligação de dados utilizam
uma combinação da contagem de caracteres com um dos outros métodos para garantir
um nível de segurança acrescido.
2
Bit Stuffing
A técnica de bit stuffing permite que as tramas contenham um número arbitrário de bits
e que os códigos de caracter tenham um número arbitrário de bits por caracter. Neste
método cada trama inicia e termina com um padrão especial, 01111110, designado por
flag byte. Sempre que o nível de ligação de dados do emissor detecta cinco bits
consecutivos a 1 automaticamente insere (stuffs) um bit 0 no conjunto de bits a enviar.
Quando o receptor encontra cinco bits consecutivos a 1, seguidos por um bit a 0,
automaticamente retira (destuffs) o bit a 0. Se os dados de utilizador contêm a flag
padrão, 01111110, ela é transmitida como 011111010 mas é guardada no receptor como
01111110.
A técnica de bit stuffing é completamente transparente para o nível de rede em ambos os
computadores.
Como exemplo, se quisermos enviar a sequência 01101111111111110010, ela será
transmitida como 0110111110111110110010 e recebida como
01101111111111110010.
Com bit stuffing os limites entre duas tramas são conhecidos sem ambiguidade através
da flag padrão.
3 Detecção e correcção de erros
Os erros de transmissão são uma constante quer ao nível de sistemas analógicos ainda
em uso quer nas comunicações sem fios que se tornam cada vez mais comuns.
Como resultado dos processos físicos que os geram, os erros em alguns meios (ex,
radio) tendem a ocorrer em rajadas em vez de isoladamente. A ocorrência de erros em
rajada tem vantagens e desvantagens sobre
Existem duas estratégias básicas de tratamento de erros. Uma é a de incluir a
redundância necessária em cada bloco de dados enviado para permitir que o receptor
deduza qual o caracter errado. O outro é incluir a redundância apenas suficiente para
permitir ao receptor deduzir que ocorreu um erro mas sem saber que erro, para fazer o
pedido de retransmissão. A primeira estratégia usa códigos de correcção de erros ao
passo que a segunda usa códigos de detecção de erros.
Vamos apenas debruçarmo-nos sobre a segunda, os códigos de detecção de erros.
3.1
Códigos de detecção de erros
Os códigos de detecção de erros são por vezes usados para transmissão de dados onde,
por exemplo, o canal é simplex e por isso as retransmissões não podem ser pedidas, mas
muitas vezes a detecção de erros seguida de pedido de retransmissão é preferida devido
à sua maior eficiência.
Um dos métodos de detecção de erros mais utilizado é o código polinomial também
conhecido por código CRC – Cyclic Redundancy Code. Os códigos são baseados no
processamento das bit strings como representações de polinómios com coeficientes 0 e
1. Uma trama de k bits é considerada como uma lista de coeficientes de um polinómio
com k termos entre xk-1 e x0 . Um polinómio deste tipo diz-se de grau k-1. O bit de
ordem superior (mais à esquerda) é o coeficiente de xk-1 ; o bit seguinte o coeficiente de
xk-2 e assim sucessivamente. Por exemplo, 110001 tem 6 bits representando por isso um
polinómio com seis termos cujos coeficientes são 1, 1, 0, 0, 0 e 1: x5 + x4 + x0 .
Entre os polinómios utiliza-se aritmética de módulo 2: tanto a adição como a subtracção
são idênticas ao OU EXCLUSIVO; a divisão é efectuada como em binário excepto as
subtracções que também são efectuadas com OU EXCLUSIVO; diz-se que um divisor
“cabe” no dividendo se este tiver tantos bits como o divisor.
Quando se aplica um método de código polinomial, o emissor e o receptor têm que
acordar previamente sobre um polinómio gerador, G(x). Ambos os bits de ordem
superior e inferior têm que ser 1. Para calcular o checksum de uma trama com m bits,
correspondente ao polinómio M(x), a trama deve ser maior que o polinómio gerador. A
ideia é a de acrescentar um checksum no fim da trama de forma a que o polinómio
representado pela trama, já com o checksum, seja divisível por G(x). Quando o receptor
recebe a trama com o checksum incluído tenta dividi-la por G(x). Se o resultado da
divisão não tiver resto zero é porque houve um erro de transmissão.
O algoritmo para o cálculo do checksum é o seguinte:
-
Consideremos que r é o grau de G(x). Acrescentam-se r bits 0 no lado de
ordem inferior da trama, ficando a trama com m + r bits correspondentes ao
polinómio xr M(x).
-
Divide-se a bit string correspondente a xr M(x) pela bit string G(x) usando a
divisão de módulo 2.
-
Subtrai-se o resto (que tem sempre r ou menos bits) da bit string
correspondente a xr M(x) usando subtracção de módulo 2. o resultado é a
trama, já com o checksum, que será transmitida. O seu polinómio é
designado por T(x) que é sempre divisível por G(x).
Como exemplo consideremos a trama 1101011011 e G(x) = x4 + x + 1.
Trama: 1101011011
Gerador: 10011
Mensagem depois de acrescentar 4 (ordem do polinómio gerador) bits 0:
11010110110000
10011 11010110110000
10011
010011
10011
000001
00000
000010
00000
000101
00000
001011
00000
010110
10011
001010
00000
010100
10011
001110
00000
Resto:
01110
11010110110000
- 1110
Trama transmitida:
11010110111110
Existem três polinómios geradores que se tornaram normas internacionais:
CRC-12
= x12 + x11 + x3 + x2 + x + 1
CRC-16
= x16 + x15 + x2 + 1
CRC-CCITT = x16 + x12 + x5 + 1
O CRC-12 é usado quando o caracter tem um comprimento de 6 bits. Os outros dois são
usados quando os caracteres são de 8 bits. Um checksum de 16 bits, como CRC-16 e
CRC-CCITT, detectam todos os erros simples e duplos, todos os erros com um número
impar de bits, todos os erros em rajada de comprimentos igual ou inferior a 16, 99.997
% de erros em rajada de 17 bits de comprimento e 99.998 % de erros em rajada de
comprimento igual ou superior a18 bits.
4 O protocolo IP
O IP (Internet protocol) é o protocolo base utilizado em toda a Internet.
A principal função do protocolo IP é definir uma norma de pacotes universal,
independente do hardware de comunicações, que são sempre tratados de forma
uniforme pelos protocolos de nível superior.
Cada pacote IP possui um cabeçalho com todos os dados necessários para o enviar,
incluindo o endereço de origem, o endereço de destino, o seu tipo, a dimensão, um
número de sequência e alguma informação de controlo.
Para suportar os diversos tipos de hardware, forma criados vários protocolos de mais
baixo nível, que servem para encapsular pacotes IP e enviá-los pelos diferentes meios de
comunicação.
4.1
Endereços IP
Um endereço IP é composto por quatro números entre 0 e 255, que identificam um nó
da rede e um número entre 0 e 65535 que identifica um porto de ligação.
Os portos são necessários, porque cada computador pode possuir muitos programas e
serviços de rede a funcionar ao mesmo tempo. Cada serviço ou cada programa de
comunicações utiliza (pelo menos) um porto IP.
O endereço “182.168.1.32:80”, por exemplo, representa o oprto 80 do computador
192.168.1.32. O porto 80 costuma ser usado pelos servidores Web.
Por norma os servidores ftp costumam estar associados ao porto 21, os servidores de email ao porto 25 e o serviço telnet, que permite fazer login pela rede, ao porto 23.
Os portos numerados de 1 a 1024 foram reservados para os serviços do sistema,
enquanto os portos 1025 a 65535 são utilizados pelas aplicações normais. Em
consequência disso, só um superutilizador possui privilégios para usar os primeiros
1024 portos.
4.2
Sub-redes
O encaminhamento dos pacotes dentro das redes locais é extremamente simples, porque
todos os nós da rede estão ligados ao mesmo BUS. Basta enviar os pacotes pela placa
Ethernet, que estes chegam imediatamente ao seu destino.
Nas redes de grande dmensão, como a Internet, o encaminhamento é bastante mais
complicado. Em vez de estarem todos ligados ao mesmo BUS, os nós encontram-se
distribuídos por todo o mundo. Para piorar a situação, estão interligados por uma teia de
ligações ponto a ponto, que possui uma estrutura muito irregular.
Para enviar informação de um nó para outro, é necessário conhecer um caminho, que
pode passar por muitos nós, antes de chegar ao destino.
Para resolver este problema, foi criado o conceito de sub-redes, que permite partir uma
rede grande em várias zonas. Este conceito aplica-se à própria Internet, que é uma rede
global, dividida em milhares de sub-redes.
Uma sub-rede é uma zona de uma rede maior. A cada sub-rede é atribuída uma faixa de
endereços consecutivos, que serão usados para identificar os nós (computadores) que
fazem parte dessa zona.
As sub-redes são identificadas por um endereço base e uma máscara de rede (netmask).
O endereço base é o número mais baixo da gama de endereços reservada para essa subrede. A máscara serve para delimitar os extremos da gama de endereços atribuída à subrede.
Os quatros números de 0 a 255 (4 bytes / 32 bits) que constituem o endereço IP estão
divididos em duas partes: a primeira parte identifica a sub-rede e a segunda parte
identifica cada nó dentro da sub-rede.
A máscara de rede é utilizada para fazer a separação entre essas duas partes. Por
exemplo, o endereço 201.102.103.104, como todos os endereços, é composto por duas
partes. Contudo, só podemos fazer a devisão entre as duas partes se conhecermos a
máscara da respectiva sub-rede.
Para exemplificar, vamos supor que a máscara é 255.255.255.0. Com este valor, iremos
concluir que os primeiros três bytes (201.102.103) correspondem à sub-rede, enquanto o
último byte (104) serve para identificar o nó dentro da sub-rede.
Para compreender o significado destes números, temos que traduzir o valor da máscara
de numeração decimal para binária:
255.255.255.0 = 11111111.11111111.11111111.00000000
Numa máscara os 1’s determinam a parte do endereço que define a sub-rede, enquanto
os 0’s definem os dígitos que distiguem o endereço de cada nó.
Desta forma, a sub-rede vai possuir a seguinte gama de endereços
201.102.103.0
Endereço base
201.102.103.1
Primeiro nó
201.102.103.2
Segundo nó
...
...
201.102.103.253
Penúltimo nó
201.102.103.254
Último nó
201.102.103.255
Endereço de broadcast
O endereço base de uma sub-rede é sempre o endereço mais baixo da sua gama de
endereços. Esse endereço identifica a própria sub-rede e por esse motivo nunca costuma
ser atribuído a nenhum nó.
Por outro lado, o endereço mais alto de uma sub-rede também não pode ser atribuído a
nenhum nó, porque é utilizado para fazer broadcast.
O endereço de broadcast representa todos os nós da sub-rede e pode ser usado para
enviar mensagens destinadas a todos os computadores dessa sub-rede.
Quando pretendemos determinar o número máximo de nós que poder ser atribuído a
uma sub-rede, começamos por contar o número n de algarismos binários iguais a 0 da
respectiva máscara. O número máximo de combinações que podem ser geradas com
esses dígitos é sempre igual a 2 elevado a n. Como temos que excluir o endereço da
própria sub-rede e o endereço de broadcast, ficamos com 2n -2 endereços disponíveis
para atribuir aos nós.
Para exemplificar, vamos observar o endereço 165.12.5.47 de uma sub-rede com
máscara 255.255.0.0.
Ao converter a máscara para numeração binária, obtemos o valor:
255.255.0.0 = 11111111.11111111.00000000.00000000
Isto significa que os primeiros dois bytes do endereço determinam a sub-rede e os
restantes dois bytes identificam cada nó. Observando o endereço inicial, concluímos que
os valores 165.12 definem a sub-rede, enquanto os valores 5.47 identificam o nó. Como
consequência, o endereço base desta sub-rede é 165.12.0.0.
Os 16 algarismos binários que ficaram livres para identificar os nós, permitem criar
65536 combinações diferentes. De acordo com a regra anterior, podemos concluir que o
número máximo de nós que esta sub-rede suporta é igual a esse valor, subtraído de duas
unidades: 65534.
5 Exercícios
1
Qual a sequência de bits que é enviada para o canal de comunicação, quando se
aplica o procedimento de bit-stuffing à sequência 0111 1011 1110 1111 1100?
Considere que a flag é a sequência 01111110.
2
Considere uma ligação em que é recebida a seguinte sequência de bits
..... 016 00012 016 0016 015 012 0015 0015 015 012 00016 01015 00016 0016 0 .....
foi recebida . Considere que a flag é a sequência 01111110.
Nota: 1n representa n 1’s consecutivos.
a) Remova os bits inseridos pelo procedimento bit-stuffing, de modo a
recuperar a sequência original. Assinale eventuais flags.
b) Individualize os blocos de bits de informação que serão passados ao
nível superior do nível de trama.
3
Foi recebida a seguinte sequência:
0011111100111110101111100111111011
(o primeiro bit recebido foi o da esquerda).
a) Assinale as flags presentes.
b) Remova os bits inseridos pelo procedimento de “bit-stuffing”.
c) Decida sobre a aceitação da trama, tendo em conta que o polinómio
gerador é x3 +x2 +1.
Considere que a flag é a sequência 01111110.
4
Calcule a FCS que deve ser acrescentada à mensagem 0110111110, em que
o primeiro bit a transmitir é o da direita, sendo o polinómio gerador
x4+x3+1.
5
Considere o seguinte cabeçalho IP (em hexadecimal):
45 00 00 5B 48 E1 40 00 80 11 A0 8F 2B 1A E7 05 1A 01 02 06
a) Qual o endereço IP da fonte (no formato decimal pontuado)?
b) E o destino (na mesma apresentação)?
c) Qual é, em decimal, o comprimento do datagrama? Em que unidades?
d) Qual o valor em decimal e o nome do protocolo transportado por este
datagrama?
e) Qual o tipo de serviço (Type Of Service – TOS) incluido neste
cabeçalho?
f) Em decimal qual é o valor do TTL (Time To Live)?
6
Considere o endereço IP 152.78.101.91 e a máscara (subnet mask)
255.255.224.0. Associado a este endereço IP:
a) Qual é o endereço de rede?
b) Qual é o endereço de difusão (broadcast) da rede do host?
c) Qual é o número do host?
7
Um administrador de rede IP decidiu utilizar uma máscara 255.255.248.0.
Faça o raciocínio inverso do administrador para justificar a escolha.
8
Um router tem a seguinte tabela de encaminhamento:
Rede
Máscara
Interface
193.35.25.16
255.255.255.248
Interface 0
193.35.25.160
255.255.255.248
Interface 1
193.5.40.64
255.255.255.192
Router 2
<Default> (i.e., quando não sabe)
Router 3
O que faz (i.e. para onde transmite) este router quando recebe um datagrama IP
com os seguintes endereços:
193.25.35.23, 193.35.25.166, 193.35.25.235, 193.5.40.78,
192.35.4.78, 12.5.68.98?
9
Suponha que num endereço de classe B eram utilizados 20 bits em vez de 16
para a parte de rede. Isto permite ter quantas subredes e quantos hosts en
cada subrede?
10 Um endereço de classe B tem a máscara (subnet mask) 255.255.240.0. Qual
é o número máximo de hosts por subrede?