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 x k-1 e x 0. Um polinómio deste tipo diz-se de grau k-1. O bit de ordem superior (mais à esquerda) é o coeficiente de x k-1 ; o bit seguinte o coeficiente de x k-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: x 5 + x 4 + x 0.
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 x r M(x). - Divide-se a bit string correspondente a x r 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 x r 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) = x 4 + x + 1. Trama: 1101011011 Gerador: 10011 Mensagem depois de acrescentar 4 (ordem do polinómio gerador) bits 0: 11010110110000
10011 11010110110000 10011 010011 10011 1 000010 000101 001011 010110 10011 001010 010100 10011 001110 Resto: 01110 11010110110000-1110 Trama transmitida: 11010110111110 Existem três polinómios geradores que se tornaram normas internacionais: CRC-12 = x 12 + x 11 + x 3 + x 2 + x + 1 CRC-16 = x 16 + x 15 + x 2 + 1 CRC-CCITT = x 16 + x 12 + 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 e- mail 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.000 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 2 n -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.000.000 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... 01 6 0001 2 01 6 001 6 01 5 01 2 001 5 001 5 01 5 01 2 0001 6 0101 5 0001 6 001 6 0... foi recebida. Considere que a flag é a sequência 01111110. Nota: 1 n 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 é x 3 +x 2 +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?