Capítulo 9. Introdução às redes TCP/IP

Índice
9.1. Redes TCP/IP
Bibliografia

9.1. Redes TCP/IP

O autor deste capítulo (Introdução às redes TCP/IP) é Hubert Feyrer .

9.1.1. Introdução

O presente capítulo do guia é dedicado às redes, das quais explica os elementos fundamentais para os leitores que não têm uma grande familiaridade com o assunto. O capítulo seguinte, por sua vez, contém uma introdução prática às configurações de rede do NetBSD. Quem deseja configurar rapidamente a rede pode iniciar com o próximo capítulo e depois voltar vom calma à leitura do capítulo atual.

Da parte do leitor é pressuposto o conhecimento de elementos de base da administração do sistema: como tornar-se "root", como editar arquivos, como mudar as permissões dos arquivos, como encerrar processos, etc. Ver por exemplo [AeleenFrisch] para aprofundar estas questões. Além disso, é necessário saber utilizar alguns programas utilitários como telnet, ftp, etc. Tais programas não serão descritos aqui e, portanto, para informações adicionais remete-se às páginas de manual, à bibliografia e aos outros capítulos desse guia.

Esta introdução às redes TCP/IP não tem a pretensão de ser completa. Quem deseja aprofundar os assuntos tratados, para ter um quadro mais completo pode fazer referência a [CraigHunt]. Este livro, além de descrever os elementos de base, explica todos os conceitos e detalhes necessários para a configuração de todos os serviços. É um ótimo livro.

9.1.3. Interfaces suportadas

O protocolo TCP/IP pode ser utilizado com uma ampla gama de interfaces. Entre as suportadas pelo NetBSD recordemos a Ethernet (10/100/1000MBd), a linha serial Arcnet, ATM, Fiber Channel, USB, HIPPI, FireWire (IEEE 1394), Token Ring, linhas seriais e ainda outras.

9.1.3.1. Linhas seriais

Há várias razões que nos levam a aconselhar o uso de TCP/IP em linhas seriais.

A desvantagem das conexões por linha serial é que são mais lentas que os outros métodos. Nessa conexão o NetBSD pode utilizar no máximo 115300 bit/s, o que a torna muito mais lenta em comparação com os 10 Mbit/s da Ethernet e aos 4 Mbit/s do Arcnet.

Para conectar um host com NetBSD a um outro host por via serial, eventualmente também por linha telefônica, podem-se usar dois métodos:

A escolha depende do tipo de conexão que se quer efetuar. Para uma conexão telefônica por modem, convém utilizar o PPP, que oferece a opção de auto-negociar os endereços IP e trajetos (routes), coisas complicadas de configurar manualmente. Ao contrário, para conectar-se diretamente a uma outra máquina, por exemplo com um cabo null-modem ou uma linha dedicada, o protocolo SLIP é mais simples de configurar com endereços e trajetos (routes), e é suportado praticamente por todos os sistemas operacionais.

PPP em uma linha direta é mais difícil de configurar se compararmos com SLIP por causa do handshake inicial, que no SLIP não está presente. Isto significa que com o SLIP inicia-se a conexão de um lado e o outro lado já pode enviar o primeiro pacote assim que estiver pronto.

[RFC1331] e [RFC1332] descrevem os protocolos PPP e TCP/IP em PPP. SLIP é descrito em [RFC1055].

9.1.4. O formato dos endereços TCP/IP

A atual implementação do protocolo TCP/IP (IPv4) usa os identificadores de 4 bytes (32 bits) (chamados também endereços de IP) para endereçar os hosts.

Estes endereços IP são únicos em nível mundial. Para atingir esse objetivo, sua administração é delegada a um organismo central, o InterNIC, que designa grupos de endereços diretamente aos sites que queiram ligar-se à Internet ou aos provedores que os redistribuirão aos próprios clientes.

As universidades e empresas ligadas à Internet têm pelo menos um desses endereços, geralmente não atribuído diretamente pelo InterNIC, mas obtido de um Provedor de Serviço de Internet (Internet Service Provider ISP).

Para configurar uma rede privada doméstica basta "inventar" os próprios endereços privados, como se explica à frente. Para conectar a própria máquina à Internet, todavia, é necessário obter um "verdadeiro" endereço de IP do próprio administrador de rede ou do provedor.

Para a escrita dos endereços IP é usada particularmente uma notação chamada dotted quad (quadripontuada), na qual os quatro bytes do endereço são escritos um de cada vez (a partir do mais significativo), separando-os com um ponto. Por exemplo 132.199.15.99 é um endereço válido. Um endereço pode também ser escrito utilizando-se uma palavra de 32 bits em hexadecimal, por exemplo: 0x84c70f63. Este formato não é tão intuitivo como o precedente, mas às vezes pode-se revelar útil como será visto nas seções seguintes.

Atribuir uma rede a um host significa simplesmente estabelecer valores determinados para alguns dos 32 bits do endereço do host. Estes bits, usados para identificar a rede, são chamados "bits de rede". Os bits restantes servem para identificar o host no interior da rede, e são portanto denominados "bits de host".

No exemplo precedente o endereço de rede é 132.199.0.0 (em um endereço de rede os bits de host são definidos como zero), enquanto o endereço do host na rede é 15.99.

Como se faz para saber que o endereço do host ocupa 16 bits? Simples: é indicado pelo provedor do qual se obtém o próprio endereço. No estradamento inter-domínios sem classificação (Classless Inter-Domain Routing,CIDR) utilizado hoje, o número de bits reservados ao host vai de 2 a 16 e o número de bits reservado à rede é escrito depois do endereço IP, separado por uma "/". Por exemplo, 132.199.0.0/16 indica que a rede em questão tem 16 bits. Quando nos referimos à "dimensão" de uma rede, o fazemos em geral simplesmente com "/16", "/24", etc.

Antes do advento do CIDR as redes eram divididas em quatro classes. Cada classe iniciava-se com uma bem precisa seqüência de bits que a identificava. Em detalhe:

Note-se que os bits utilizados para identificar a rede fazem, não obstante, parte do próprio endereço de rede.

Quando se separa a parte de rede da parte de host é cômodo utilizar a assim chamada netmask (máscara de rede). Trata-se de um valor a ser usado como "mascára", em que todos os bits de rede são assentados em "1" e todos os bits de host em "0". Pondo juntos com um AND lógico o endereço com a netmask obtém-se o endereço da rede.

Reportando-se ao exemplo precedente, 255.255.0.0 é uma possível netmask de 132.199.15.99. Quando se aplica a netmask ao endereço, permanece a parte de rede 132.199.0.0.

Para os endereços em notação CIDR, o número indicado de bits de rede especifica também quais dos bits mais significativos devem ser postos em "1" para se obter a netmask da rede correspondente. Para os endereços de rede Classe A/B/C existe uma netmask default:

Um tipo particular de endereço que é bom conhecer é o "endereço de broadcast". As mensagens enviadas a este endereço são recebidas por todos os hosts da rede correspondente. O endereço de broadcast é caracterizado pelo fato de ter todos os bits de host colocados em "1".

Por exemplo, dado o endereço 132.199.15.99 com a máscara de rede 255.255.0.0, o endereço de broadcast é 132.199.255.255.

Nesse ponto podem-nos perguntar se podemos utilizar um endereço de host com todos os bits em "0" ou em "1". A resposta é não, porque o primeiro é o endereço da rede e o segundo o endereço de broadcast, e esses dois endereços devem estar sempre presentes. Agora se pode compreender porque uma rede de Classe B pode conter no máximo 216-2 hosts e uma rede de Classe C pode conter 28-2 = 254.

Além dos vários tipos de endereço já citados, há um outro que é especial. Trata-se do endereço 127.0.0.1, que se refere sempre ao host local (localhost). Isso significa que quando se "fala" com o 127.0.0.1, comunica-se na realidade consigo mesmo, sem dar lugar a nenhuma atividade de rede, o que pode ser útil para utilizar os serviços instalados na própria máquina ou para fazer simulações e testes quando não há outro host na rede.

Resumindo o que se discutiu até agora:

9.1.5. Sub-rede e estradamento (routing)

A seção precedente descreveu em detalhe as máscaras de rede e os endereços de host e de rede. O discurso sobre redes, entretanto, está longe de terminar.

Consideremos a situação de uma típica universidade, com um endereço de Classe B (/16) que lhe permite ter até 216 ~= 65534 hosts na rede. Mesmo que fôsse cômodo pensarmos em ter todos estes hosts em uma mesma rede, isto não pode ser realizado por causa das limitações físicas do hardware em uso atualmente.

Por exemplo, o comprimento máximo de um cabo Ethernet thinwire é de 185 metros. Ainda que se ponham repetidores que amplifiquem o sinal entre os pontos de rede, isto não basta para se atingir todos os pontos de rede em que se encontram as máquinas. Além disso, o número máximo de hosts em um cabo Ethernet thinwire é de 1024 e, avizinhando-se desse limite, tem-se uma perda de eficiência.

Portanto, encontramo-nos em uma situação em que temos um endereço que permitiria ter 60000 hosts mas estamos limitados pelo cabeamento, que nos permite atingir um número muito menor de pontos de rede.

Naturalmente existe a solução, e consiste em subdividir a "rede" de Classe B em redes menores, usualmente denominadas sub-redes. Estas sub-redes podem hospedar, por exemplo, até 254 hosts cada (isto é, subdividimos a grande rede de Classe B em várias sub-redes de Classe C).

Para se obter esse resultado, é necessário modificar a máscara de rede para se ter mais bits de rede e menos bits de host. Isto geralmente se faz trabalhando sobre os bytes da máscara (mesmo que seja possível descer ao nível de um único bit). Portanto, a coisa mais simples é transformar a máscara de rede de 255.255.0.0 (Classe B) em 255.255.255.0 (Classe C).

Usando a notação CIDR, escreve-se agora "/24" ao invés do precedente "/16" para indicar que são usados 24 bits do endereço para identificar a rede e a sub-rede,em vez dos 16 usados antes.

Esta modificação permite-nos ter um byte de rede a mais para cada uma das redes físicas. Todos os 254 hosts de cada rede podem comunicar-se diretamente e podem ser criadas 256 redes desse tipo (Classe C). Esta nova configuração deveria ser adequada às exigências da nossa universidade hipotética.

Para esclarecer melhor o conceito, continuemos com o exemplo precedente. Suponhamos que o nosso host seja 132.199.15.99, que se chame dusk e que tenha a netmask 255.255.255.0, o que significa que se encontra na sub-rede 132.199.15.0/24. Naturalmente há outros hosts,como se vê pela Figura 9-1.

Na rede do exemplo,dusk pode falar diretamente com dawn, já que ambos encontram-se na mesma sub-rede. Existem ainda outros hosts na sub-rede 132.199.15.0/24, mas por ora não os consideraremos.

O que acontece se dusk quer falar com um host que se encontra em uma outra sub-rede? Nesse caso, o tráfego ocorrerá através de um ou mais gateways (routers) anexados às duas sub-redes. Por esse motivo um gateway tem sempre dois endereços diferentes: um para cada uma das subredes a que está conectado. Do ponto de vista funcional, o router (estradador) é totalmente transparente para os hosts. Ou seja, não é necessário conhecer-lhe o endereço para atingir os hosts que estão do "outro lado". É suficiente endereçar diretamente aos hosts e os pacotes alcançarão o destino correto.

Suponhamos por exemplo que dusk queira fazer o download de arquivos do servidor FTP local. Já que dusk não pode alcançar ftp diretamente (porque se encontra em uma sub-rede diferente) todos os seus pacotes serão encaminhados ao seu "router por default" rzi (132.199.15.1), que sabe para onde deve enviá-los para que atinjam a destinação.

dusk conhece o endereço do router por default da sua rede (rzi, 132.199.15.1), e lhe encaminha todos os pacotes que não são destinados à mesma sub-rede. Isto é, neste caso, todos os pacotes IP que têm o terceiro byte do endereço diferente de 15.

O router por default (defaultrouter) envia os pacotes ao host apropriado, visto que se encontra na sub-rede do servidor de FTP.

Neste exemplo todos os pacotes são enviados à rede 132.199.1.0/24 simplesmente porque se trata do backbone da rede, a parte mais importante da rede, que transporta todo o tráfego de passagem entre as várias sub-redes. Quase todas as sub-redes além de 132.199.1.0/24 estão conectadas ao backbone de modo similar.

Que acontece se conectássemos uma outra sub-rede a 132.199.15.0/24 ao invés de 132.199.1.0/24? Provavelmente algumas coisa parecida à situação descrita na Figura 9-2.

Agora, para dusk atingir um host que se encontra na sub-rede 132.199.16.0/24, os pacotes não podem ser encaminhados a rzi. É necessário enviá-los diretamente a route2 (132.199.15.2). dusk deve saber que deve encaminhar estes pacotes para route2 e enviar todos os outros para rzi.

Quando se configura dusk, dizemos a ele para enviar todos os pacotes para a sub-rede 132.199.16.0/24, a route2, e todos os outros a rzi. Ao invés de explicitar este default com 132.199.1.0/24, 132.199.2.0/24, etc., pode-se usar o valor 0.0.0.0 para definir a rota default.

Retornando à Figura 9-1, verifica-se um problema parecido quando dawn quer enviar a noon, que está ligado a dusk via cabo serial. Do exame de seu endereço IP,noon pareceria estar conectado à rede 132.199.15.0. Esse realmente não é o caso. Ao contrário, dusk é usado como gateway e dawn deve enviar seus pacotes a dusk que, por sua vez, os encaminhará a noon. O sistema graças ao qual dusk é forçado a aceitar pacotes que não são destinados a ele, mas a um outro host (noon), é definido "proxy arp".

O mesmo discurso vale quando um host de uma outra sub-rede que enviar a noon. Deverá enviar os seus pacotes a dusk (eventualmente encaminhados por rzi).

9.1.6. Conceitos de Name Service

Nas seções precedentes, fazendo referência aos hosts utilizamos freqüentemente seus endereços IP. Isto era necessário para explicar as diferenças entre os vários tipos de endereços. Em geral, todavia, quando se fala de host é mais cômodo utilizar seu "nome", como fizemos na seção sobre routing.

Para a maior parte das aplicações não importa se os hosts são especificados usando o nome ou o endereço IP. Todavia, internamente elas usam endereços IP. Nesta seção serão introduzidos os conceitos que estão na base de cada um desses métodos. Sucessivamente será explicado como efetuar-lhes a configuração.

A conversão dos nomes dos hosts (e dos domínios) em endereços de IP é realizada por um módulo de software chamado resolver. Não se trata de um serviço complementar, mas de uma série de funções de biblioteca que são articuladas com cada aplicação que usa funções de rede. O resolver procura "resolver" (daí o nome) os nomes dos hosts em endereços IP. Veja-se [RFC1034] e [RFC1035] para maiores detalhes sobre o resolver.

Os nomes dos hosts têm geralmente um comprimento máximo de 10 caracteres e podem conter letras, números, hífens ("-") e traços de subscrito ("_"). Maiúsculas e minúsculas são consideradas equivalentes.

Assim como para as redes e sub-redes, é possível (mais que isso, desejável) reagrupar os hosts em domínios e subdomínios. Quando se obtém um endereço de rede do provedor, geralmente se obtém também um nome de domínio. Como para as sub-redes, é deixada ao usuário a tarefa de criar sub-domínios. Os sub-domínios não estão em relação direta com as sub-redes. Por exemplo, um domínio pode conter hosts conectados a diversas sub-redes.

Figura 9-1 mostra as sub-redes 132.199.1.0/24 e 132.199.15.0/24 (e as outras) que fazem parte do sub-domínio rz.uni-regensburg.de. O domínio que a Universidade de Regensburg obteve de seu provedor de IP é "uni-regensburg.de" (".de" indica a Alemanha, Deutschland); o sub-domínio "rz" indica Rechenzentrum (Centro de Cálculo).

Os nomes dos hosts, dos sub-domínios e dos domínios são separados por pontos (".". Também é possível, embora não seja comum, usar mais de um nível de sub-domínio. Por exemplo: fox_in.socs.uts.edu.au.

Um nome de host que compreende o (sub)domínio é denominado domínio completamente qualificado (FQDN, Fully Qualified Domain Name). Por exemplo, o endereço IP 132.199.15.99 pertence ao host cujo FQDN é dusk.rz.uni-regensburg.de.

Anteriormente foi dito que o endereço IP 127.0.0.1 pertence sempre ao host local, qualquer que seja o "verdadeiro" endereço IP do próprio host. Portanto, 127.0.0.1 é sempre mapeado pelo nome localhost.

Os três métodos diferentes de traduzir um nome de host em endereço IP são: /etc/hosts, o Domain Name Service (DNS) e o Network Information Service (NIS).

9.1.6.3. O Network Information Service (NIS/YP)

A Yellow Pages (YP) foram inventadas pela Sun Microsystems. O nome depois foi mudado para Network Information Service (NIS) porque YP já era uma marca da British Telecom.

Nos sistemas Unix estão habitualmente presentes um grande número de configurações e é, portanto, muito desejável limitar a manutenção destes arquivos a uns poucos hosts. Os hosts são, assim, agrupados em domínios NIS (que não têm nada a ver com os domínios DNS) e em geral fazem parte de um cluster (cacho) de workstations.

Alguns dos arquivos de configuração compartilhados por estes hosts são /etc/passwd, /etc/group e /etc/hosts.

É, portanto, possível "abusar" do NIS para obter uma única tradução de nomes para endereços em todos os hosts de um domínio NIS.

Há apenas uma desvantagem que impede ao NIS de ser efetivamente utilizado para esse tipo de tradução: diferentemente do DNS, o NIS não fornece nenhum método para resolver os nomes dos hosts que não fazem parte da tabela dos hosts. Não existem hosts de nível superior que o servidor NIS possa interrogar e, portanto, a tradução fica fadada ao fracasso. O NIS+, também da Sun, resolve esse problema, mas como o NIS+ está disponível apenas para os sistemas Solaris, não nos será de grande ajuda.

Do que foi dito não quer dizer que o NIS não seja um método excelente para gerenciar, por exemplo, as informações sobre os usuários (/etc/passwd, ...) em clusters de workstations. Simplesmente não é muito útil para resolver os nomes dos hosts.

9.1.7. IPv6, o protocolo de última geração da Internet

9.1.7.1. O futuro da Internet

A juízo dos experts, a Internet na sua forma atual deverá enfrentar um problema sério dentro de poucos anos. Por causa de seu rápido crescimento e das limitações em seu projeto, chegar-se-á a um ponto em que não estarão mais disponíveis endereços para conter novos hosts. Nesse momento, não se poderão acrescentar novos servidores da web, os usuários não poderão obter contas dos ISPs, não se poderão conectar novas máquinas em rede para acessar a web ou participar de jogos online. Em resumo, um problema muito sério.

Foram pensadas várias abordagens para resolver este problema. Um método muito difundido consiste em não atribuir endereço válido unívoco para cada máquina conectada, mas atribuir endereços "privados" e "esconder" várias máquinas por trás de um único endereço oficial global. Este método, que se chama Network Address Translation (NAT, conhecido ainda como IP Masquerading), apresenta problemas porque as máquinas escondidas atrás do endereço único global não podem ser endereçadas diretamente e, portanto, não é possível abrir conexões com elas, como exigido, por exemplo, pelos jogos online, pelas redes peer-to-peer, etc. Para uma discussão sobre as desvantagens do NAT, ver [RFC3027].

Uma abordagem diferente ao problema da escassez de endereços da Internet é abandonar o velho protocolo da Internet e a sua limitada capacidade de endereçamento, em favor de um novo protocolo que não sofre estas limitações. O protocolo, ou melhor, o conjunto de protocolos usado pelas máquinas conectadas para formar a atual Internet é conhecido como suite TCP/IP (Transmission Control Protocol/Internet Protocol), e a sua versão 4, a que está em uso atualmente, tem todos os problemas descritos há pouco. Para poder passar a uma nova versão do protocolo que resolva esses problemas é necessário, obviamente, que a tal versão "melhor" exista. De fato, a versão 6 do Internet Protocol (IPv6) existe e responde a todas as possíveis exigências futuras de espaço de endereçamento, enfrentando ainda outros problemas como a segurança de dados, a criptografia e um suporte melhor à computação móvel.

Esta seção introduz o protocolo IPv6. Para uma boa compreensão será exigido um conhecimento básico do funcionamento do protocolo IPv4. São descritas as mudanças no formato do endereço e na resolução dos nomes. Usufruindo dessas informações, a Secção 10.2.4 mostrará como utilizar o IPv6 mesmo se ele não for oferecido pelo ISP, utilizando um mecanismo de transição simples mas eficaz denominado 6to4. O objetivo final será por-se online com o IPv6, mostrando um exemplo de configuração do NetBSD.

9.1.7.2. Por que passar ao IPv6?

Quando se aconselha alguém a passar do IPv4 para o IPv6, a primeira pergunta que se ouve em retorno é: "por que"? Há várias boas razões.

9.1.7.3. Modificações no IPv4

Agora que vimos as várias características importantes do IPv6, podemos passar ao exame das bases do protocolo. Para uma melhor compreensão é preferível um conhecimento elementar do IPv4, em comparação com o qual serão descritas as diferenças. Comecemos com os endereços IPv6, explicando como estão estruturados, quais são os tipos de endereço e o que foi feito dos broadcasts. Assim, depois de ter discutido o "substrato" do IP, passaremos às mudanças relativas à resolução dos nomes e às novidades do IPv6 para o DNS.

9.1.7.3.1. Endereçamento

Um endereço IPv4 é um valor de 32 bits, escrito usualmente no formato "dotted quad", onde cada um dos valores separados por pontos é um valor compreendido entre 0 e 255. Por exemplo:

127.0.0.1	  

Esta estrutura permite um número máximo teórico de 232 ou ~4 bilhões de hosts serem conectados à atual Internet. Por causa dos agrupamentos, todavia, nem todos os endereços estão realmente disponíveis.

Os endereços IPv6 usam 128 bits, que nos levam a 2128 de hosts teoricamente endereçáveis. Isto permite endereçar um número verdadeiramente enorme de máquinas, cobrindo completamente sem problemas todos os requisitos atuais e futuros mesmo de PDAs e telefones celulares dotados de endereço IP. Para escrever os endereços IP, dividimo-os em grupos de 16 bits escritos com quatro algarismos hexadecimais, separando os grupos com o caracter ":" (dois pontos). Por exemplo:

fe80::2a0:d2ff:fea5:e9f5	  

Este exemplo mostra também que uma série de zeros consecutivos pode ser abreviada com um único "::" no endereço IPv6. O endereço precedente é pois equivalente a fe80:0:00:000:2a0:d2ff:fea5:e9f5. Os zeros iniciais dentro do grupo podem ser omitidos.

Para simplificar o gerenciamento, os endereços são divididos em duas partes: os bits que identificam a rede a que a máquina pertence e os bits que identificam a própria máquina na (sub)rede. Os primeiros são definidos como "bits de rede" (netbits) os segundos como "bits de host" (hostbits) e, tanto no IPv4 quanto no IPv6, os bits de rede são os que estão mais à esquerda (bits mais significativos), enquanto que os bits de host estão mais à direita (bits menos significativos), como se mostra na Figura 9-3.

No IPv4 os bits de rede e os bits de host são separados graças à máscara de rede. Exemplos típicos são 255.255.0.0, que usa 16 bits para o endereço de rede, e 255.255.255.0, que usa outros 8 bits, permitindo, por exemplo, endereçar 256 sub-redes em uma rede de classe B.

Quando se passa do endereçamento por classes ao formato CIDR, a separação entre bits de rede e bits de host deixa de cair necessariamente sobre o limite dos 8 bits e, por conseqüência, as máscaras de rede começam a ficar mais difíceis de gerenciar. No lugar das máscaras já se começa a indicar o limite usando o número de bits de rede para um dado endereço. Por exemplo:

10.0.0.0/24	  

corresponde a uma máscara de rede de 255.255.255.0 (24 bits por 1). O mesmo esquema é usado no IPv6. O valor:

2001:638:a01:2::/64	  

indica que no endereço especificado os primeiros 64 bits (os que estão mais à esquerda) dizem respeito à rede, enquanto os últimos 64 bits (os mais à direita) identificam a máquina na rede. Os bits de rede são freqüentemente chamados "prefixo" (da rede) e aqui o comprimento do prefixo é de 64 bits.

Entre os esquemas de endereçamento mais comuns do IPv4, estavam as redes de classe B e de classe C. Com uma rede de classe C (/24) o provedor atribui 24 bits, deixando 8 bits disponíveis. Se acrescentamos as sub-redes acaba-se tendo uma máscara de rede "irregular" não muito prática de se administrar. Neste caso uma rede de classe B (/16) seria mais fácil de administrar porque são fixados só 16 bits pelo provedor, o que permite criar sub-redes com mais facilidade, dividindo em duas partes os restantes 16 bits. A primeira parte endereça a sub-rede local e a segunda endereça o host no interior da própria sub-rede. Geralmente se "interrompe" no extremo dos oito bits (um byte). Usando uma máscara de rede de 255.255.255.0 (/24) consegue-se administrar de modo mais flexível mesmo redes de grandes dimensões, continuando-se a manter o limite de 256 sub-redes com 254 máquinas cada uma.

Com os 128 bits disponíveis para o endereçamento IPv6, o esquema utilizado é o mesmo, apenas que com os campos maiores. Os provedores usualmente estabelecem redes /48, o que deixa 16 bits para as sub-redes e 64 bits para os hosts.

Enquanto o espaço para as rede e as sub-redes parece adequado, o uso de 64 bits para os hosts parece um desperdício de espaço. Visto que é improvável a utilização de vários bilhões de hosts na mesma sub-rede, porque usar essa estrutura?

A idéia que está na base de um identificador de host de comprimento fixo de 64 bits é que os identificadores de host não são mais estabelecidos manualmente, como é feito hoje com o IPv4. No lugar disso, recomenda-se (é só uma recomendação, não uma obrigação) contruí-los partindo dos assim chamados endereços EUI64. Os endereços EUI64 ocupam, como diz o nome, 64 bits e derivam do endereço MAC da placa de rede. Por exemplo, para a Ethernet, ao endereço de rede de 6 bytes (42 bits) são usualmente acrescentados os bits "fffe" no meio e um bit é definido para indicar que o endereço é único (o que é verdadeiro para a Ethernet). Por exemplo, o endereço MAC

01:23:45:67:89:ab	  

torna-se o endereço EUI64

03:23:45:ff:fe:67:89:ab	  

o que leva os bits de host do endereço IPv6 a ter a forma

::0323:45ff:fe67:89ab	  

Estes bits de host podem ser usados para designar o endereço IPv6 a um host suportando a auto-configuração dos hosts IPv6. Tudo o que é preciso para se ter um endereço IPv6 completo são os primeiros bits (rede/sub-rede), mas o IPv6 oferece ainda o sistema para determiná-los automaticamente.

Nas redes de máquinas IP há geralmente um router que age como gateway para com a redes externas. Nas redes IPv6 o router envia uma série de informações de "router advertisement", que os clientes deveriam receber enquanto estão em funcionamento ou solicitar explicitamente enquanto estão em fase de inicialização. Estas informações compreendem o endereço do router e os prefixos de rede geridos pelo próprio router. Com estas informações e o endereço EUI64 gerado automaticamente, um host IPv6 pode determinar seu próprio endereço IP sem uma atribuição manual. Naturalmente os routers devem ainda ser explicitamente configurados.

As informações enviadas pelo router fazem parte do protocolo NDP Neighbor Discovery Protocol (ver [RFC2461]), que é o sucessor do protocolo ARP do IPv4. Diferentemente do ARP, o NDP não apenas busca os endereços IP correspondentes aos endereços MAC, mas efetua também um serviço parecido para os routers e seus prefixos correspondentes das redes geridas, o que é utilizado pela auto-configuração dos hosts IPv6 recém descritos.

9.1.7.3.3. Multicasting

No domínio IP há três modos para se atingir um host: unicast, broadcast e multicast. A forma mais comum de conversação usufrui do endereço unicast que, no IPv4, é o endereço IP "normal" atribuído a um host, compreendendo os bits de rede. O endereço de broadcast é utilizado para se alcançar todos os hosts da mesma sub-rede IP e tem os bits de rede definidos pelo endereço da rede e os bits de host todos em "1". Os endereços de tipo multicast servem para se atingir os hosts que fazem parte do grupo multicast, que se podem encontrar em um ponto qualquer da Internet. As máquinas devem unir-se explicitamente a um grupo multicast para poder participar e há endereços especiais IPv4 usados para o multicast, alocados na sub-rede 224/8. O multicast não é muito utilizado sob o IPv4. Apenas alguns aplicativos como os utilitários MBone de áudio e vídeo broadcast o usam.

Os endereços unicast IPv6 são usados do mesmo modo que os IPv4. Não há nenhuma mudança. Assim, todos os bits de rede e de host são designados para identificar a rede e a máquina. O broadcast não está mais disponível em IPv6, do modo em que o era no IPv4. É aqui que entra em jogo o multicasting. Os endereços da rede ff::/8 são reservados para as aplicações multicast e há dois endereços multicast especiais que tomam o lugar do endereço de broadcast do IPv4. Um é o endereço multicast " all routers" (todos os estradadores) e o outro é o "all hosts" (todos os hospedeiros). Estes endereços são específicos da sub-rede. Ou seja, um router conectado a duas sub-redes pode endereçar todos os hosts/routers de qualquer uma das duas sub-redes. Nesse caso os endereços são:

onde "X" é o ID da conexão que identifica a rede e que, geralmente, é iniciado em "1" para o âmbito local, em "2" para o primeiro link, etc. Note-se que é possível que duas interfaces de rede sejam vinculadas ao mesmo link, resultando na duplicação da amplitude da rede.

Um uso do endereço de multicast "all hosts" está no código NDP, quando uma máquina que se quer comunicar com uma outra máquina envia uma solicitação ao grupo all hosts e a máquina em questão deve responder.

9.1.7.3.4. A resolução dos nomes em IPv6

Depois desta longa introdução ao endereçamento em IPv6, é lícito esperar que haja um modo para continuar a usar nomes para nos referirmos aos hosts, como se faz com o IPv4, no lugar de desfiar os longos endereços IPv6. Naturalmente é possível.

A tradução do nome de host para o endereço IP em IPv4 geralmente se faz em um destes três modos: usando uma simples tabela no /etc/hosts, usando o Network Information Service (NIS, antes YP) ou com o Domain Name System (DNS).

No momento o NIS/NIS+ em IPv6 está disponível apenas para o Solaris 8, tanto para o conteúdo do banco de dados como para o transporte, usando uma extensão RPC.

Um simples mapa do tipo endereço<->nome, do tipo do /etc/hosts é suportado por todos os stacks IPv6. Com a implementação KAME usada no NetBSD, o arquivo /etc/hosts contém tanto os endereços IPv4 como os IPv6. A título de simples exemplo, vejamos a expressão "localhost" na versão default para uma instalação do NetBSD.

127.0.0.1               localhost
::1                     localhost          

Para o DNS não são introduzidos conceitos fundamentalmente novos. A resolução dos nomes IPv6 é feita com registro de tipo AAAA que, como indica o nome, apontam para uma entidade que é quatro vezes maior que um registro do tipo A. Um registro AAAA tem um nome de host na parte esquerda, do mesmo jeito que para A, e o endereço IPv6 na parte direita. Por exemplo:

noon            IN      AAAA    3ffe:400:430:2:240:95ff:fe40:4385          

Para a resolução inversa o IPv4 usa a zona in-addr.arpa, à qual acrescenta os bytes (decimais) em ordem inversa, vale dizer com os bytes mais significativos mais à direita. Com o IPv6 o método é o mesmo, só que são usados os algarismos hexadecimais (um a cada 4 bits) ao invés dos números decimais e os registros dos recursos encontram-se em um domínio diferente: ip6.int.

Portanto, para a resolução inversa do host precedente, deve-se por no arquivo /etc/named.conf uma expressão parecida com a seguinte:

zone "0.3.4.0.0.0.4.0.e.f.f.3.IP6.INT" {
        type master;
        file "db.reverse";}; 

e, no arquivo de zona db.reverse, além dos usuais registros SOA e NS:

5.8.3.4.0.4.e.f.f.f.5.9.0.4.2.0.2.0.0.0 IN   PTR   noon.ipv6.example.com.          

Aqui o endereço é escrito como uma cifra hexadecimal e, ao mesmo tempo, em ordem inversa, iniciando-se pela menos significativa (a que está mais à direita) e separando os números com pontos, como nos costumeiros arquivos de zona.

Quando se instala o DNS para o IPv6, é preciso prestar atenção à versão do software DNS que se utiliza. BIND 8.x compreende os registros AAAA mas não oferece a resolução dos nomes via IPv6. Porisso é necessário utilizar o BIND 9.x que, entre outras coisas, suporta alguns tipos de registro de recursos ainda em fase de discussão e, portanto, não introduzidos oficialmente. O mais interessante é o registro A6, que facilita a mudança do provedor/prefixo.

Resumindo, nesta seção foram discutidas as diferenças técnicas entre o IPv4 e o IPv6 para o endereçamento e resolução dos nomes. Alguns aspectos, como as opções dos títulos IP, QoS, etc. não foram intencionalmente tratados para não avolumar demais a matéria, dado também o caráter introdutório deste guia.

Bibliografia

[AeleenFrisch] Aeleen Frisch, 1991, O'Reilly & Associates, Essential System Administration.

[CraigHunt] Craig Hunt, 1993, O'Reilly & Associates, TCP/IP Network Administration.

[RFC1034] P. V. Mockapetris, 1987, RFC 1034: Domain names - concepts and facilities.

[RFC1035] P. V. Mockapetris, 1987, RFC 1035: Domain names - implementation and specification.

[RFC1055] J. L. Romkey, 1988, RFC 1055: Nonstandard for transmission of IP datagrams over serial lines: SLIP.

[RFC1331] W. Simpson, 1992, RFC 1331: The Point-to-Point Protocol (PPP) for the Transmission of Multi-protocol Datagrams over Point-to-Point Links.

[RFC1332] G. McGregor, 1992, RFC 1332: The PPP Internet Protocol Control Protocol (IPCP).

[RFC1933] R. Gilligan e E. Nordmark, 1996, RFC 1933: Transition Mechanisms for IPv6 Hosts and Routers.

[RFC2004] C. Perkins, 1996, RFC 2003: IP Encapsulation within IP.

[RFC2401] S. Kent e R. Atkinson, 1998, RFC 2401: Security Architecture for the Internet Protocol.

[RFC2411] R. Thayer, N. Doraswamy, e R. Glenn, 1998, RFC 2411: IP Security Document Roadmap.

[RFC2461] T. Narten, E. Nordmark, e W. Simpson, 1998, RFC 2461: Neighbor Discovery for IP Version 6 (IPv6).

[RFC2529] B. Carpenter e C. Jung, 1999, RFC 2529: Transmission of IPv6 over IPv4 Domains without Explicit Tunnels.

[RFC3024] G. Montenegro, 2001, RFC 3024: Reverse Tunneling for Mobile IP.

[RFC3027] M. Holdrege e P. Srisuresh, 2001, RFC 3027: Protocol Complications with the IP Network Address Translator.

[RFC3056] B. Carpenter e K. Moore, 2001, RFC 3056: Connection of IPv6 Domains via IPv4 Clouds.