Administração de Redes GNU/Linux/Visão Geral de Redes TCP/IP: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
K2crux (discussão | contribs)
Criou a página com "== Introdução == === TCP/IP === O protocolo TCP/IP foi originado da rede ARPANET, que foi criada como uma rede de pesquisa criada pelo Departamento de Defesa dos Estados..."
 
K2crux (discussão | contribs)
Sem resumo de edição
Linha 1:
Este capítulo é uma introdução aos conceitos do protocolo TCP/IP, tal como números IP, portas TCP, serviços, roteamento, etc.
 
<img src="%ATTACHURLPATH%/pag_15a.jpg" alt="pag_15a.jpg" width="623" height="182" />
 
== Introdução ==
=== TCP/IP ===
 
O protocolo TCP/IP foi originado da rede ARPANET, que foi criada como uma rede de pesquisa criada pelo Departamento de Defesa dos Estados Unidos, que pouco a pouco, centenas de universidades e repartições públicas foram sendo a ela conectadas através de linhas telefônicas privadas, resultando à atual rede mundial de computadores, a Internet.
 
Linha 9 ⟶ 12:
 
O projeto TCP/IP teve sua origem por volta de 1969, porém, esta rede tornou-se operacional somente a partir de 1975 quando sua funcionalidade já estava comprovada. Por volta de 1983, o novo modelo de referência TCP/IP estava completamente padronizado e disponível publicamente, permitindo sua rápida popularização. O sucesso foi tão grande que hoje o protocolo TCP/IP está totalmente disseminado tanto na Internet quanto nas redes locais privadas. O TCP/IP tornou-se praticamente uma "língua" (protocolo) universal das redes de computadores.
 
== Conceitos básicos ==
&&ilustrar cliente, servidor, roteador ou gateway e firewall?&&
 
Todo computador em uma rede TCP/IP é denominado hospedeiro [host]. Para entender melhor uma rede, é necessário saber classificar cada host que a compõe, onde cada um desenvolve tarefas variadas. Através das funções de cada hospedeiro, é que podemos classificá-los nas seguintes denominações: servidor, cliente, roteador ou gateway e firewall.
 
A característica primordial que determina a classificação de um hospedeiro em servidor está no fato de que o mesmo deve possuir serviços que aguardam solicitações vindas de outros hospedeiros, de forma a responder com algum dado. Por exemplo, um servidor Web retornará o conteúdo de uma página Web quando algum cliente requisitá-lo.
 
<img src="%ATTACHURLPATH%/pag_16a.jpg" alt="pag_16a.jpg" width="488" height="205" />
<br><b><i>Fig. 1 - Ilustração Cliente/Servidor.</i></b>
 
Um cliente solicita determinados serviços ao servidor. Por exemplo, um cliente poderia estar executando um editor de texto e enviar uma solicitação para que um servidor de impressão imprima seu texto.
 
Um roteador tem a função de repassar pacotes de uma rede para outra através da checagem dos endereços de destino. Dentro desta funcionalidade o roteador funciona como uma ligação entre uma rede e outra, portanto geralmente utiliza de tecnologias e protocolos diferentes.
 
<img src="%ATTACHURLPATH%/pag_17a.jpg" alt="pag_17a.jpg" width="594" height="201" />
<br><b><i>Fig. 2 - Ilustração de um roteador interligando duas redes.</i></b>
 
Um firewall é um computador conectado a uma rede local e ao mesmo a tempo à uma rede externa. Este tipo de hospedeiro tem a função de filtrar determinados serviços que a rede interna não necessita compartilhar externamente, ou seja, o firewall pode permitir ou negar determinados serviços para uma rede externa.
 
<img src="%ATTACHURLPATH%/pag_17b.jpg" alt="pag_17b.jpg" width="595" height="220" />
<br><b><i>Fig. 3 - Ilustração de um firewall filtrando uma rede interna.</i></b>
 
Por exemplo, pode existir firewall entre a rede interna e a externa que assegura que nenhum cliente fora da rede interna terá acesso às informações de um banco de dados.
 
A verdade é que, em uma rede TCP/IP, um hospedeiro pode ser qualquer combinação desses itens descritos anteriormente. Um mesmo computador pode ser um servidor para um serviço ao mesmo tempo que atua como cliente de outro e ao mesmo tempo ele pode estar realizando roteamento de pacotes de uma rede para outra.
 
O exemplo mais fácil de visualizar esta miscelânea de hosts com papéis variados é a Internet; que é formada uma grande quantidade variada de máquinas atuando como servidores, clientes, roteadores e firewalls.
 
== O Protocolo IP ==
O protocolo IP - Protocolo Internet - é a chave da interligação de redes que utilizam tecnologias e hardwares diferentes. Uma das características mais importantes do Protocolo IP é a divisão da informação a ser transportada de um ponto ao outro em fragmentos denominados datagramas.
 
Todo datagrama é dividido em cabeçalho e corpo. No cabeçalho encontra-se informações como: origem do pacote, destino do pacote, e informações específicas do protocolo pertinente a este pacote; já o corpo do datagrama é utilizado para armazenar os dados, ou seja, ao mandar um email a concatenação do corpo dos datagramas no destino formará a mensagem original do email enviada pela origem.
 
O datagrama tem uma estrutura padronizada pelo protocolo IP que é independentemente do hardware utilizado. A principal vantagem do IP reside no fato de transformar redes fisicamente separadas com diferentes hardwares em uma rede funcionalmente homogênea. O protocolo IP, consequentemente, requer uma forma de endereçamento independente do hardware, para isto existe o que chamamos de endereçamento IP que será explicado mais à frente no tópico sobre endereços IP.
 
<img src="%ATTACHURLPATH%/pag_19a.jpg" alt="pag_19a.jpg" width="592" height="211" />
<br><b><i>Fig. 4 - Ilustração da transferência de dados através de datagrama.</i></b>
 
Para saber mais sobre a estrutura do datagrama IP, acesse o endereço http://www.cisco.com/univercd/cc/td/doc/cisintwk/ito_doc/ip.htm, ou consulte uma bibliografia especializada.
 
== O Protocolo TCP ==
 
O protocolo TCP - Protocolo de Controle de Transmissão - tem como objetivo controlar os dados quando estão em tráfego, de forma que todos dados enviados de uma máquina devem ser divididos em pacotes pelo emissor, podendo trafegar por caminhos distintos e finalmente serem remontados corretamente pelo receptor. O protocolo também cuida da perda de pacotes no trajeto entre um ponto ao outro, solicitando a retransmissão do pacote ao remetente.
 
Vejamos um exemplo: duas redes compartilham um roteador , ponto de passagem entre duas redes. Se várias máquinas da mesma rede enviar pacotes para uma outra máquina da outra rede, obviamente estes pacotes devem passar pelo roteador e se a quantidade de tráfego gerada for intensa, além da capacidade de repasse do roteador, este poderá ficar sem espaço livre no buffer, sendo incapaz de retransmiti-lo. O protocolo IP resolve este problema simplesmente descartando pacotes. Porém, o protocolo TCP faz com que a máquina cheque a integridade dos dados e solicita a retransmissão dos pacote faltantes em caso de erros. Assim, toda vez que um pacote é enviado na rede, o protocolo TCP cuida das confirmações de recebimento. Portanto, é dito que o protocolo TCP constrói um serviço confiável sobre o protocolo IP.
 
Outra característica importante do TCP é o controle de fluxo. Ao enviar dados na rede, a parte receptora indica à parte transmissora a quantidade de bytes que podem ser recebidos após os últimos dados recebidos, assim evita-se ultrapassar o limite da capacidade de buffer da máquina receptora.
 
== Teoria de protocolo de rede ==
 
Para toda comunicação existe uma linguagem. Comunicação é impossível sem algum tipo de linguagem ou código preestabelecido. Em redes de computadores, estes códigos de comunicação são chamados de protocolos. Logo, em uma comunicação de computadores existem regras bem definidas e formalizadas, ou seja, é através dos protocolos que os dados conseguem fluir de modo organizado e sem perdas.
 
Outro aspecto importante no processo de comunicação é a hierarquia de protocolo. A hierarquia de Protocolo é baseada em uma série de camadas ou níveis que são dispostas uma em cima da outra, de forma semelhante a uma pilha de protocolos. O número, o nome, o conteúdo e a função de cada camada difere de uma rede para outra. Porém, o objetivo de cada camada é oferecer determinados serviços para as camadas superiores, tornando se um filtro e conversor de dados para a camada superior.
 
No âmbito lógico da rede, a camada n comunica com a camada n da outra máquina. As regras e convenções usadas nessa comunicação são chamadas de protocolo. Resumidamente, um protocolo é um conjunto de regras sobre o modo como se dará a comunicação entre as partes envolvidas. Assim, ao comunicar-se com determinada máquina existem regras que devem ser respeitadas conjuntamente. Caso isto não venha a acontecer , a comunicação será dificultada e em alguns casos pode impossibilitá-la, ocorrendo o que chamamos de violação do protocolo.
 
Veja o exemplo de uma comunicação baseada em camadas:
 
<img src="%ATTACHURLPATH%/pag_21a.jpg" alt="pag_21a.jpg" width="476" height="224" />
<br><b><i>Fig. 5 - Comunicação através de camadas.</i></b>
 
O conjunto de camadas de um protocolo é chamada de arquitetura de rede. Entre cada par de camadas adjacentes existe uma interface. A interface consiste nas operações e serviços que a mesma deve prover para camada superior a ela. A especificação de uma arquitetura deve conter informações suficientes para permitir que um desenvolvedor crie um programa ou construa um hardware de cada camada de modo que ela transmita-o corretamente ao protocolo adequado.
 
As operações e serviços que ocupam as mesmas camadas em diferentes máquinas são chamadas de pares - peers. Em outras palavras, são os pares que se comunicam usando o protocolo. Na verdade, os dados não são transferidos diretamente da camada n de uma máquina para a camada n de outra máquina. Cada camada transfere os dados e as informações de controle para a camada imediatamente abaixo dela, até a última camada ser alcançada. Abaixo da camada 1 está o meio físico através do qual se dá a comunicação propriamente dita.
 
O objetivo deste material não é aprofundar muito na extensa teoria de redes, mas sim dar embasamento teórico para a prática de administração de redes. Veja os links indicados e a bibliografia para saber mais sobre este assunto.
 
== O modelo OSI ==
 
O modelo de referência OSI - Open System Interconnection - é conhecido como o modelo de padronização de tecnologias de redes de computadores . O modelo OSI teve como objetivo estabelecer uma regra e direcionamento no desenvolvimento de modelos de arquiteturas de redes.
 
O modelo OSI define 7 camadas. Estas camadas estão dispostas da seguinte forma:
 
<pre>
---------------------------
APLICAÇÃO
---------------------------
APRESENTAÇÃO
---------------------------
SESSÃO
---------------------------
TRANSPORTE
---------------------------
REDE
---------------------------
ENLACE DE DADOS
---------------------------
FÍSICA
---------------------------
</pre>
 
Física: Esta camada tem como função adaptar o sinal de comunicação com o meio de transmissão. Esta camada possui acesso físico ao meio de transmissão e, portanto, trata de fatores como especificação elétrica, mecânica e outros fatores físicos que fazem a interface entre o equipamento e o meio de transmissão.
 
Enlace: Esta camada trata a organização dos dados em pacote. Quando um pacote é enviado, esta camada é responsável pelo último empacotamento antes da transmissão. Quando um pacote é recebido, este verifica, em primeira instância, a integridade do pacote. Se o pacote apresentar erros, este será descartado.
 
Rede: Responsável pela tabela de roteamento, portanto esta camada controla o envio de pacotes para os dispositivos corretos e deve garantir que o pacote chegue ao dispositivo correto.
 
Transporte: Esta é uma camada intermediária que tem a função de corrigir as eventuais deficiências provenientes do nível rede.
 
Sessão: Esta camada fornece serviços como controle de comunicação (diálogo), gerenciamento de token (sinalização) e gerenciamento de tarefas.
 
Apresentação: Esta camada tem como objetivo manipular dados antes do envio ao próximo nível, ou seja, neste nível várias transformações são feitas, por exemplo: criptografia, compressão, etc.
 
Aplicação: Este nível oferece os meios de aplicação para que seja possível a comunicação através do protocolo OSI. Nesta camada são definidos as funções de gerenciamento e mecanismos que tem como finalidade dar suporte ao desenvolvimento de aplicações em rede para o usuário.
 
== Modelo TCP/IP ==
 
O protocolo TCP/IP - Protocolo de Controle de Transporte/Protocolo Internet - foi desenvolvido na plataforma UNIX e, atualmente, é o protocolo mais utilizado no mundo.
 
O protocolo TCP/IP, na verdade, é uma pilha de protocolo, ou seja, não está limitado ao TCP e o IP. A sigla TCP/IP se refere aos dois principais protocolos: o TCP, que trabalha na camada de transporte, e o IP, que trabalha na camada de rede.
 
O protocolo IP permite a comunicação de dois pontos da rede sem a necessidade destes estarem no mesmo meio físico. Já o TCP fornece uma conexão confiável sobre o IP.
 
Vejamos como está estruturado o protocolo TCP/IP:
<pre>
---------------------------
APLICAÇÃO
---------------------------
TRANSPORTE
---------------------------
INTERNET
---------------------------
ACESSO DE REDE
---------------------------
</pre>
 
&&colocar o modelo OSI do lado deste diagrama&&
 
=== Acesso de Rede ===
 
Similar a camada física do protocolo OSI. Tem a função de determinar as características elétricas e mecânicas do meio de transmissão. Enfim, especificar os aspectos físicos da comunicação.
 
=== Internet ===
 
Nesta camada o IP é o protocolo mais importante. Esta camada, assim como o protocolo IP, tem a função de tornar as redes homogêneas entre si, ou seja, tem a função de reunir redes com arquiteturas diferentes, fazendo com que sejam transparentes. Transporte
 
Nesta camada encontra-se os protocolos TCP e UDP - Protocolo de Datagrama de Usuário. Esta camada tem a responsabilidade de transmitir e controlar o envio de dados.
 
=== Aplicação ===
 
Aplicação é a camada que interage com o usuário. Exemplo de insteração são: o smtp(envio de email), o telnet(terminal remoto), o ftp (transferência de arquivos).
 
<img src="%ATTACHURLPATH%/pag_24a.jpg" alt="pag_24a.jpg" width="400" height="142" />
<br><b><i>Fig. 6 - Comparação do modelo TCP/IP com o OSI.</i></b>
 
Para saber mais sobre o funcionamento do protocolo TCP/IP, acesse o endereço: http://www.cisco.com/univercd/cc/td/doc/product/iaabu/centri4/user/scf4ap1.htm.
 
== RFC ==
 
Os protocolos do conjunto TCP/IP são definidos por documentos chamados de Request for Comments (RFC). A princípio, as RFCs definem os padrões dos protocolos TCP/IP, entretanto vários outros tipos de documentações foram acrescentadas, incluindo artigos e dicas de como gerenciar uma rede TCP/IP. As RFCs podem ser criadas e enviadas por qualquer pessoa desde que seja aprovado pela Internet Engineering Steering Group (IESG). As RFCs podem ser acessadas através do endereço http://www.ietf.org/rfc.html.
 
As RFCs mais conhecidas que definem padrões associados à rede TCP/IP são:
* RFC 768 - User Datagram Protocol
* RFC 791 - Internet Protocol
* RFC 792 - Internet Control Message Protocol
* RFC 793 - Transmission Control Protocol
 
== O endereço IP ==
 
Como comunicar e/ou localizar uma máquina na Internet? Todo hospedeiro tem um endereço exclusivo. O endereço IP na versão 4 (ipv4), que é atualmente o mais utilizado, é um número de 32 bits. Você está acostumado a ver endereços de Internet como www.sistemasabertos.com.br e www.linux.org; porém, na verdade, este nome está referenciado a um endereço IP que permite acesso a determinada máquina sem a necessidade de decorar números. Um endereço IP é normalmente representado por quatro números decimais, um para cada porção de 8 bits, separados por pontos. Logo, o endereço IP é um número formado por 4 octetos, cada octeto com 8 bits.
 
%T% atualmente está em teste e futuramente em uso o IP v6, de 6 octetos e com capacidade de endereçar muito mais endereços que o atual IP v4. Para saber mais sobre o IP versão 6, acesse o endereço http://www.cisco.com/univercd/cc/td/doc/cisintwk/ito_doc/ipv6.htm.
 
Por exemplo, uma única máquina pode ter um endereço de IP geralmente expresso de 3 formas:
* 149.76.12.4 = notação decimal de quatro partes, é a mais utilizada e mais legível;
* 0x954C0C04 = notação hexadecimal;
* 10010101.01001100.00001100.00000100 = notação binária. Note a quantidade de 32 bits, divididos em 4 octetos (conjuntos de 8 bits) e a correspondência entre cada octeto com o valor decimal equivalente.
 
== Número IP: identificando rede e máquina ==
 
Simplesmente por razões de tornar o controle da atribuição de números IP mais organizada, os criadores do TCP/IP resolveram dividir o número IP em duas partes:
* 1.Número de rede: este número está contido em um ou mais octetos do número IP. Este número indica em que rede o hospedeiro está conectado. Cada rede deve ter endereço único.
* 2.Número de máquina: este é o número de identificação da máquina na rede. É através deste número que localizamos um determinado host na rede, este número também deve ser único na rede.
 
Assim, o número IP possui uma estrutura do tipo <número da rede, número do host>. Por exemplo, poderíamos ter um número IP com 13.121.111.1, onde 13 é o número que identifica a rede e 121.111.1 identifica um host desta rede.
 
== Classes de endereços IP ==
 
Ao iniciar a distribuição dos números IP para empresas, os criadores do TCP/IP perceberam que era vantajoso definir blocos de endereços contíguos, no sentido de facilitar a administração. Verificaram também que as empresas tinham portes diferentes, e com isto surgiram as classes, que além de definir tipos de redes de tamanhos diferentes. Quando alguma empresa necessitava de números IP, era fornecido um bloco contíguo de endereços IP de uma classe adequada à sua necessidade, baseada na quantidade de hosts a serem identificados com números IP.
 
Foram definidos 5 tipos de classes: A, B, C, D e E. Para se identificar uma classe, procurou-se definir algo que seria melhor implementado em nível de hardware. Por isto, cada classe, foi definida baseando-se no primeiro dos quatro bytes do número IP, como segue:
 
{| cellpadding="5" cellspacing="0" border="1"
|-
||*Classe* || *Valor binário do 1o. byte* || *Faixa de valores expresso em binário do 1o. byte* || *Faixa de valores expresso em decimal do 1o. byte* |
|-
|| A || 0XXXXXXX || 00000000 a 01111111 || 0 a 127 |
|-
|| B || 10XXXXXX || 10000000 a 10111111 || 128 a 191 |
|-
|| C || 110XXXXX || 11000000 a 11011111 || 192 a 223 |
|-
|| D || 1110XXXX || 11100000 a 11101111 || 224 a 239 |
|-
|| E || 11110XXX || 11110000 a 11110111 || 240 a 254 |
 
|}
 
Assim, para se identificar se um número IP pertence à classe A basta saber o valor do bit do primeiro byte. Caso seja 0 pode-se concluir imediatamente que refere-se à classe A, caso contrário deve-se testar o segundo bit. Se o segundo bit for 0 pode-se concluir imediatamente que refere-se à classe B, caso contrário deve-se verificar o terceiro bit, e assim por diante. Note então que para se identificar uma classe, basta saber qual a posição do bit 0 no primeiro byte.
 
Quando este valor binário é convertido em valor decimal, podemos compreender melhor a faixa de endereços IP definidos por cada classe. Por exemplo, todo endereço IP de classe A tem o primeiro byte localizado na faixa de 0 a 127. Vejamos mais sobre cada classe:
 
=== Classe A ===
Por padrão, este tipo de classe compreende os endereços de 0.0.0.0 até 127.255.255.255, sendo que, o número de rede está contido no primeiro octeto, ou seja, o endereço de rede varia de 0 a 127, um total de 128 redes. A classe A possibilita que a parte do endereço reservada às máquinas tenha um tamanho de aproximadamente 24 bits (três últimos octetos), possibilitando assim obter matematicamente 224 = 16.777.216 endereços de hosts, que na prática é um número muito grande.
 
{| cellpadding="5" cellspacing="0" border="1"
|-
|| *Endereço de rede* || *Endereço de host* ||||
|-
|| 0 - 127 || 0 - 255 || 0 - 255 || 0 - 255 |
 
|}
 
%T% Como o endereço IP é um número de 4 octetos de 1 byte, os valores decimais para cada octeto pode variar de 0 a 255.
 
O endereço de rede corresponde apenas ao primeiro octeto, podendo estar entre o número 0 e 127. Já o endereço de host tem três octetos podendo variar de 0 até 255. Qualquer endereço IP que contenha as características acima é considerado um endereço IP de classe A.
 
Note que esta classe endereça 50% dos endereços IP possíveis, uma vez que é relativo à todos endereços IP que tiverem o primeiro bit do primeiro byte com valor 0, exatamente a mesma quantidade de 50% dos restantes, que têm valor 1 no primeiro bit.
 
Existem dois tipos de endereços reservados desta classe, que tem um uso especial:
* 0.0.0.0 - este endereço IP nunca será atribuído a um host, uma vez que é utilizado para referenciar &#8220;todas redes&#8221; ou &#8220;qualquer rede&#8221;. É muito utilizado para definir o ponto de passagem para outras redes (gateway) padrão de um host. Por exemplo, para definir o gateway padrão de uma máquina, o seguinte comando pode ser executado:
<pre>
route add -net 0.0.0.0/0 gw 10.0.0.1
</pre>
Este comando, significa que estamos adicionando (add) o caminho (route) para todas redes (-net 0.0.0.0/0) que necessariamente deverá passar pelo gateway (gw 10.0.0.1). Neste exempo, estamos apenas adiantando um pouco o que veremos detalhadamente adiante.
 
* 127.X.X.X - este tipo de endereço, que inicia-se com o valor 127, e com qualquer valor para os outros octetos, também é utilizado para referenciar o seu próprio host. Este endereço também é denominado endereço de loopback, porque é bastante útil para executar testes na pilha TCP/IP, permitindo que você verifique, por exemplo, a comunicação de um software cliente com um servidor na mesma máquina. Experimente executar: ping 127.0.1.2 ou ping 127.234.1.1; note que se você tiver instalado corretamente a pilha TCP/IP, você sempre irá obter resposta, pois você está &#8220;pingando&#8221; na sua própria máquina. Apesar de poder ser qualquer número IP com o primeiro octeto com valor 127, o valor 127.0.0.1 é o mais utilizado como endereço de loopback.
 
%T% no fundo, definir todo o endereço de loopback iniciando-se com 127 foi um certo contra-senso, uma vez que seria necessário apenas um. Ou seja, foram desperdiçados cerca de 16 milhões de números IP que não podem ser utilizados para outro tipo de endereçamento. Porém isto não pode ser mais corrigido, pois seria muito complicado atualizar todo software e hardware que suporta este tipo de endereço de loopback.
 
=== Classe B ===
 
Por padrão, os endereços de rede desta classe estão na faixa 128.0 à 191.255. Observe que o endereço de rede está contido nos dois primeiros octetos, no primeiro octeto o número deve estar no intervalo de 128 a 191, enquanto o segundo octeto pode variar entre 0 e 255. Os últimos dois octetos ficam reservado ao endereço de host, estes dois últimos octetos podem variar de 0 a 255.
 
{| cellpadding="5" cellspacing="0" border="1"
|-
|| *Endereço de rede* ||| *Endereço de host* |||
|-
|| 128 - 191 || 0 - 255 || 0 - 255 || 0 - 255 |
 
|}
 
Como os dois bits iniciais deste endereço são utilizados para indicar esta classe, não variando seus valores, temos apenas 6+8=14 bits restantes, que podem variar e portanto, permitem 214=16.384 endereços de rede. Note que o restante dos bits é utilizado para endereçamento de host, ou seja, suportam até 216=65.536 endereços de host para cada rede.
 
=== Classe C ===
 
Por padrão, esta classe utiliza somente o último octeto para uso de endereçamento de máquinas nas redes de Classe C.
 
{| cellpadding="5" cellspacing="0" border="1"
|-
|| *Endereço de rede* |||| *End. de host* |
|-
|| 192 - 223 || 0 - 255 || 0 - 255 || 0 - 255 |
 
|}
 
Observe que o primeiro octeto deve estar entre os números 192 e 223 , já o segundo e o terceiro podem assumir valores entre 0 e 255. Os endereços de hosts ficam restrito ao último octeto, podendo assumir valores de 0 a 255.
 
Como os três bits iniciais deste endereço são utilizados para indicar esta classe, não variando seus valores, temos 5+8+8=21 bits restantes, que podem variar e portanto, permitem 221= 2.097.152 endereços de rede. Note que o restante dos bits, é utilizado para endereçamento de host, ou seja, suportam até 28= 256 endereços de host para cada rede.
 
=== Classe D, E ===
 
Estes endereços são especiais. Um endereço classe D é usado para multicasting [multidifusão], que de uma forma bem simplificada, é qualquer comunicação entre um simples remetente e vários destinatários. Diferente das mensagens de broadcast [difusão], os quais são enviadas para todos os endereços de uma rede, mensagens multicast são enviadas para um subconjunto de uma rede de endereços, portanto pode ser considerado como um broadcast dirigido. Devido à sua característica de ser direcionada a público específico e boa performance, é utilizado principalmente em aplicações de vídeo-conferência, e-learning, notícias, etc. Para saber mais sobre multicasting, acesse o endereço: http://www.cisco.com/warp/public/cc/pd/iosw/tech/ipmu_ov.htm. Os endereços classe E são utilizados para fins experimentais.
 
== Endereço de rede e broadcast [difusão] ==
 
Assim como foi padronizado que os endereços 127.X.X.X e 0.0.0.0 são utilizados respectivamente para endereços de localhost e rede padrão, também foram padronizados os seguintes endereços especiais:
 
* '''broadcast [difusão]''' - é o endereço utilizado para enviar mensagens para todos da mesma rede, ou seja, difundir uma mensagem para todos. Assim como ocorre nos transmissores de rádio, através do processo denominado radiodifusão. Por padrão, o endereço de broadcast é obtido atribuindo-se todos os bits da porção do endereço de host para o valor 1. Por exemplo, suponha que tenhamos o endereço de classe A 10.1.2.3; qual é o endereço de broadcast padrão? o endereço de broadcast é 10.255.255.255.
* '''de rede''' - é o endereço utilizado para especificar a rede e não um host específico. Por padrão, o endereço de broadcast é obtido atribuindo-se todos os bits da porção do endereço de host para o valor 0. Por exemplo, suponha que tenhamos o endereço de classe A 10.1.2.3; qual é o endereço de rede? o endereço de rede é 10.0.0.0.
 
== Máscara de rede ==
 
Um conceito muito importante introduzido após a padronização das classes foi o conceito de máscara de rede. A máscara de rede é utilizada para delimitar o endereço de rede e o endereço de host de um endereço IP.
 
Veja o exemplo, para o endereço IP de classe A 10.1.2.3 e máscara de rede 255.0.0.0:
{| cellpadding="5" cellspacing="0" border="1"
|-
|| || *Endereço de rede* || *Endereço de host* ||
|-
||Número IP || 10. || 1.2.3 ||
|-
|| Máscara de rede (em binário) || 11111111. || 00000000.00000000.00000000 |
|-
|| Máscara de rede (em decimal) || 255. || 0.0.0 |
|-
|| Máscara de rede (quantidade de 1's) || 8 |||
 
|}
 
A máscara é um valor de 32 bits, exatamente como um endereço IP, podendo ser expresso também na forma decimal e na forma hexadecimal. A máscara de rede por padrão define todos os bits do primeiro byte igual a 1 (equivale ao valor 255) para o endereço de rede. Para os endereços de hosts ela deve ter todos os bits iguais a 0 (número 0 na forma decimal). Outra maneira de expressar a máscara de rede é a quantidade de bits 1, no caso para a classe A acima, tem um valor de 8. Portanto, uma forma resumida do endereço acima, juntamente com sua máscara de rede, é o valor 10.1.2.3/255.0.0.0 ou 10.1.2.3/8.
 
Isto implica que:
* '''Máscara de rede Classe A:''' tem valor 255.0.0.0. Pois na classe A o endereço de rede está contido no primeiro octeto, onde a máscara de rede está definido com todos os bits iguais a 1 ( Na forma decimal 255). Observe que os endereços de host estão nos últimos três octetos em que a máscara de rede tem todos os bits iguais a 0. Pode também ser denominada como máscara de valor 8.
* '''Máscara de rede Classe B:''' tem valor 255.255.0.0. Pois o endereço de rede Classe B está contido nos dois primeiros octetos em que a máscara de rede tem todos os bits iguais a 1. Neste caso, os endereços de hosts ficam reservados aos últimos dois octetos em que a máscara de rede tem todos os bits iguais a 0. Pode também ser denominada como máscara de valor 16.
* '''Máscara de rede Classe C:''' tem valor 255.255.255.0. Pois o endereço de rede Classe C está contido nos três primeiros octetos em que a máscara de rede tem todos os bits iguais a 1. Como o endereço de hosts está contido no último octeto, o octeto correspondente da máscara deve ter todos os bits iguais a 0. Pode também ser denominada como máscara de valor 24.
 
== Sub-rede ==
Ao se utilizar o esquema de classes acima, na prática percebeu-se que a quantidade de hosts disponibilizada por uma rede de uma classe ora era muito pouca ou era excessiva para o uso de uma entidade. Lembre-se que a faixa de endereços classe A, B e C correspondem a 65 milhões, 65 mil e 255 endereços de hosts respectivamente e que quando uma rede de uma destas classes era fornecido para uma entidade, pecava-se pelo excesso, desperdiçando uma quantidade enorme de endereços IP. Para resolver este problema, surgiu a idéia de sub-rede, lançada na RFC950 e que proporcionou um melhor aproveitamento do conjunto de números IP disponíveis, fornecendo faixas de endereços IP sob medida de acordo com a necessidade de cada entidade.
 
O esquema original de máscara de rede, com máscaras 255.0.0.0, 255.255.0.0 e 255.255.255.0 para as classes A, B e C respectivamente, é considerada como máscara natural; enquanto que o novo esquema utilizado em sub-redes é baseado no avanço dos bits de valor 1 para direita do esquema antigo. Por exemplo, suponha que tenhamos o número IP 10.1.2.3, com máscara de sub-rede 255.255.0.0. Note que a máscara natural para a classe deste endereço é 255.0.0.0 e ela foi estendida para 255.255.0.0, ou seja, estendendo a parte que determina a parte de rede do endereço IP.
 
%T% devido ao avanço dos bits 1 a partir da máscara natural, estendendo a parte de endereçamento de rede do número IP, a máscara de sub-rede também é chamada de máscara de rede estendida.
 
{| cellpadding="5" cellspacing="0" border="1"
|-
|| *Classe* || *Primeiro byte* || *Segundo byte* || *Terceiro byte* || *Quarto byte* |
|-
|| A || bit 0 + 7bits de endereço de rede || 24 bits disponíveis ||||
|-
|| B || bits 10 + 14 bits de endereço de rede ||| 16 bits disponíveis |||
|-
|| C || bits 110 + 21 bits de endereço de rede |||| 8 bits disponíveis |
 
|}
 
Note neste quadro acima, que em endereços IP classe A, B, C, temos 24, 16 e 8 bits disponíveis respectivamente para o avanço da máscara de sub-rede e endereço de host. Portanto, a máscara de sub-rede pode avançar somente até o antepenúltimo bit, pois se avançamos até o penúltimo bit, teremos disponível somente 1 bit para número de host, o que seria insuficiente para identificar hosts reais, uma vez que o bit 0 seria para identificar a rede e o bit 1 para broadcast. Da mesma forma, se avançarmos até o último bit, não teríamos mais bits disponíveis para identificar hosts. Portanto, para a máscara de sub-rede, para as classes A, B e C, temos disponível para avançar 22, 14 e 6 bits respectivamente.
 
Outro conceito importante a ser notado é o número de sub-rede. Antes da sub-rede, todo número IP era do tipo <número da rede, número do host>, com o uso de sub-redes, o endereço IP pode ser expresso de uma forma diferente: <número da rede, número da sub-rede, número do host>. Por exemplo, suponha que tenhamos um número IP 10.1.2.3, com máscara de sub-rede 255.255.0.0. Este número proporciona o valor de 10 como número de rede, 1 como número de sub-rede e 2.3 como número de host.
 
%X% Um equívoco muito comum é determinar a classe de um endereço baseado na máscara que um endereço IP utiliza. O que define a classe em que um endereço IP pertence é seu primeiro octeto. Por exemplo: O endereço IP 11.0.0.101 é um endereço IP de classe A, pois seu primeiro octeto tem valor entre 0 e 127 independente da máscara que ele estiver utilizando.
 
Agora vem uma boa pergunta: Até o momento só temos lidado com máscaras de sub-rede que ocupam totalmente um octeto, por exemplo 255.255.0.0, 255.255.255.0; e se utilizarmos uma máscara de sub-rede que ocupa parte de um octeto, como 255.255.255.248? Veja como fica esta máscara convertida em base binária:
 
{| cellpadding="5" cellspacing="0" border="1"
|-
|| *1o. octeto* || *2o. octeto* || *3o. octeto* || *4o. octeto* ||
|-
|| 255. || 255. || 255. || 248 |
|-
|| 11111111. || 11111111. || 11111111. || 11111000 |
 
|}
 
Quando utilizamos máscaras de sub-rede como esta, temos um cálculo mais complexo. Para mostrar isto, vamos utilizar um exemplo: suponha que tenhamos a rede 200.163.79.0. Se utilizarmos a máscara de sub-rede 255.255.255.248, estaremos aumentando a parte de rede e diminuindo a parte de hosts. Vamos ver como calcular quais são as sub-rede e seus possíveis números IP.
 
Os endereços de rede são obtidos fixando-se a parte de host com bits 0's e variando-se a parte de sub-rede. Ou seja, teremos as sub-redes variando de 00000000=0 a 11111000=248. Veja o quadro:
 
{| cellpadding="5" cellspacing="0" border="1"
|-
|| *sub-rede (em binário)* || *sub-rede (em decimal)* |
|-
|| 00000000 || 0 |
|-
|| 00001000 || 8 |
|-
|| 00010000 || 16 |
|-
|| 00011000 || 24 |
|-
|| ... || ... |
|-
|| 11111000 || 248 |
 
|}
 
Note que para obtermos as sub-redes, simplesmente somamos recursivamente o valor de 8 (equivalente a 1000 binário) ao valor da primeira sub-rede 00000000. Se aplicarmos esta regra, obteremos as seguintes sub-redes: 0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120, 128, 136, 144, 152, 160, 168, 176, 184, 192, 200, 208, 216, 224, 232, 240, 248, ou seja 32=2<sup>5</sup> sub-redes, ou seja 2<sup>n</sup> sub-redes, onde n é a quantidade de bits disponibilizados a mais para formação de sub-rede.
 
Agora que já obtemos as sub-redes, suponha que tenhamos o endereço IP 200.163.79.10. Qual é o endereço de rede, sub-rede e host?
 
Veja o quadro:
{| cellpadding="5" cellspacing="0" border="1"
|-
|| Endereço IP || 200.163.79.10 |
|-
|| Endereço de rede || 200.163.79 |
|-
|| Endereço de sub-rede || 8 = 1000 |
|-
|| Endereço de host || 2 = 010 |
|-
|| Endereço IP (em binário) || 11001000.10100011.01001111.00001010 |
|-
|| Máscara de sub-rede (em binário) || 11111111.11111111.11111111.11111000 |
 
|}
 
Note pela máscara de sub-rede (em binário) que ela divide as partes que nos interessa:
* O endereço de rede permanece sempre o mesmo, independentemente se está usando máscara de rede ou sub-rede: 200.163.79. Note que é exatamente a parte indicada pela parte de rede da máscara: 11111111.11111111.11111111.
* O endereço de sub-rede é a parte indicada pela máscara com os bits 1: observe no quarto octeto, que os bits 1 indicam a parte de sub-rede, ou seja 00001000, equivalendo à sub-rede 8.
* O endereço de host é a parte indicada pela máscara com os bits 0: observe no quarto octeto, que os bits 0 indicam a parte de host, ou seja 00000010, equivalendo ao host 2.
 
Seguem mais exemplos: para o endereço IP 200.163.79.19 e máscara de rede 255.255.255.248, temos os endereços: de rede 200.163.79, de sub-rede 16 e de host 3. Para o endereço IP 200.163.79.253 temos os endereços: de rede 200.163.79 ou 200.163.79.0, de sub-rede 248 ou 200.163.79.248 e de host 5. Note que para obtermos a sub-rede, basta verificarmos a maior sub-rede calculada possível para o número ip em questão e o número de host é obtido subtraindo-se este número. Por exemplo, veja que para o número IP 200.163.79.253 a maior sub-rede calculada é 248 e portanto o número de host é 253-248=5.
 
Note que também, neste caso, que o uso de máscara de sub-rede, obtivemos 32 endereços de sub-redes, com 8 endereços de hosts cada, sendo que 2 são especiais (de rede e de broadcast), portanto somente 6 podem ser utilizados para endereçar hosts reais. Portanto, utiizando sub-redes, você teria 32x6=192 endereços reais de hosts. Por exemplo, vejamos somente os hosts da sub-rede 200.163.79.248:
{| cellpadding="5" cellspacing="0" border="1"
|-
|| *Endereço IP* || *Endereço (em binário)* || *Tipo de endereço* |
|-
|| 200.163.79.248 || 11001000.10100011.01001111.11111000 || Especial de Rede |
|-
|| 200.163.79.249 || 11001000.10100011.01001111.11111001 || Normal de host |
|-
|| 200.163.79.250 || 11001000.10100011.01001111.11111010 || Normal de host |
|-
|| 200.163.79.251 || 11001000.10100011.01001111.11111011 || Normal de host |
|-
|| 200.163.79.252 || 11001000.10100011.01001111.11111100 || Normal de host |
|-
|| 200.163.79.253 || 11001000.10100011.01001111.11111101 || Normal de host |
|-
|| 200.163.79.254 || 11001000.10100011.01001111.11111110 || Normal de host |
|-
|| 200.163.79.255 || 11001000.10100011.01001111.11111111 || Especial de broadcast |
 
|}
 
Até o momento, mostramos um endereço classe C. Também é bom apresentar um exemplo para um endereço IP classe B e observarmos as diferenças. Suponha por exemplo, que recebemos uma rede classe B, 140.10.0.0 e de acordo com um levantamento da necessidade da empresa em que você trabalha, vai ser necessário 50 sub-redes, com no mínimo 200 hosts cada sub-rede, podendo ter um possível crescimento de 50% em sub-redes (esta realmente é uma grande empresa). Vem a pergunta: qual a máscara de sub-rede ideal e suas consequentes sub-redes?
 
Veja o quadro:
 
{| cellpadding="5" cellspacing="0" border="1"
|-
|| *Quantidade de bits de sub-rede* || *Valor de octeto de máscara de sub-rede* || *Quantidade de sub-redes* |
|-
|| 1 || 128 (10000000) || 2 |
|-
|| 2 || 192 (11000000) || 4 |
|-
|| 3 || 224 (11100000) || 8 |
|-
|| 4 || 240 (11110000) || 16 |
|-
|| 5 || 248 (11111000) || 32 |
|-
|| 6 || 252 (11111100) || 64 |
|-
|| 7 || 254 (11111110) || 128 |
|-
|| ... || ... || ... |
|-
|| n || 1111...1000 onde n é a quantidade de bits 1 || 2n |
 
|}
 
Note que quanto mais a máscara de sub-rede avança em quantidade de bits 1, maior é a quantidade de sub-redes e menor a quantidade de hosts. Lembrando também que para as classes A, B e C, podemos avançar a máscara de sub-rede em no máximo 22, 14 e 6 bits respectivamente. Portanto, o maior avanço que podemos fazer na sub-rede do nosso exemplo é de 14 bits.
 
Se atualmente temos 50 sub-redes, com possível crescimento de 50%, temos uma previsão de crescimento em até 75 sub-redes. Note que se avançarmos 6 bits, seria suficiente para a arquitetura atual da rede, no entanto não seria suficiente para o previsto futuramente. Portanto, o avanço de 7 bits seria suficiente, permitindo até 128 sub-redes. Podemos escolher então, a máscara de sub-rede de 7 bits, ou seja, 255.255.254.0=11111111.11111111.11111110.00000000.
 
Agora vamos calcular as sub-redes. As sub-redes serão de 0 (000000000) a 254 (11111110), sempre mantendo o último bit com 0, uma vez que este bit está alocado para endereçamento de hosts. Portanto, a segunda sub-rede será (00000010=2), a terceira sub-rede será (00000100=4) e assim por diante. Ou seja, será todas redes pares (de 2 em 2) a partir de 0 até 254, ou seja, exatamente as 128 sub-redes citadas anteriormente.
 
Para a máscara de sub-rede determinada acima, 255.255.254.0 e número IP 140.10.27.10, qual seria o endereço de rede, de sub-rede e de host? Veja o quadro abaixo:
{| cellpadding="5" cellspacing="0" border="1"
|-
|| Endereço IP || 140.10.27.100 |
|-
|| Endereço de rede || 140.10 (o endereço é classe B e a máscara é 255.255.0.0) |
|-
|| Endereço IP (em binário) || 10001100.00001010.00011011.00001010 |
|-
|| Máscara de sub-rede (em binário) || 11111111.11111111.11111110.00000000 |
|-
|| Endereço de sub-rede || 26 = 00011010 |
|-
|| Endereço de host || 266 = 100001010 |
 
|}
 
Note neste exemplo, que foram aplicadas as mesmas regras para o exemplo anterior classe C, com a diferença foi que surgiu uma curiosidade: o endereço de host para este endereço IP é 266, ou seja, acima do valor de um octeto de valor máximo 255. Isto é totalmente normal, uma vez o endereço de host ficou com 9 bits, 1 bit a mais que um octeto, totalizando 2<sup>9</sup> = 512 endereços.
 
== Entidades de alocação de endereços ==
 
Até o momento, sabemos que os blocos de endereços podem ser atribuídos para empresas, que por sua vez podem repassá-las para outras empresas ou filiais, fazendo uso de sub-redes. Mas surge uma boa pergunta: quem fornece uma rede ou sub-rede? Mundialmente existe uma hierarquia de organizações, que cuidam da alocação dos endereços IP, dispostos em blocos, geralmente atribuídos a continentes, países, empresas, etc. Veja o esquema:
 
<img src="%ATTACHURLPATH%/pag_39a.jpg" alt="pag_39a.jpg" width="472" height="213" />
<br><b><i>Fig. 7 - Hierarquia das entidades de alocação de endereços IP.</i></b>
 
Note que quem administra os grandes blocos de endereços IP são:
* '''nível mundial:''' IANA (Internet Assigned Numbers Authority - http://www.iana.org/ipaddress/ip-addresses.htm)
* '''Américas (do Norte, Central e do Sul):''' ARIN (http://www.arin.net/registration/index.html)
* '''Europa:''' RIPE (Réseaux IP Européens - http://www.ripe.net)
* '''Ásia e Pacífico:''' APNIC ( Asia Pacific Network Information Centre - http://www.apnic.net)
* '''Brasil:''' Registro.br (http://www.registro.br). É administrado atualmente pela entidade pública FAPESP (Fundação de Amparo à Pesquisa do Estado de São Paulo).
 
== Endereços IP para redes privadas ==
 
Como todo computador da Internet recebe um endereço IP único, caso você queira ter uma rede local própria, precisará de alguns endereços únicos. Neste caso você não precisa usar os números válidos na Internet, porque há um bloco de endereços que foi reservado apenas para as redes privadas. Os endereços de rede apresentados abaixo podem ser utilizados em sua rede local. Vejamos:
* '''10.0.0.0 a 10.255.255.255''' - permite endereçar uma rede classe A
* '''172.16.0.0 - 172.31.255.255''' - permite endereçar 16 redes classe B
* '''192.168.0.0 - 192.168.255.255''' - permite endereçar 256 redes classe C
 
Para conhecer mais detalhadamente o uso de endereços privados, acesse o endereço: http://www.cisco.com/warp/public/701/35.html.
 
== O Número de Porta ==
 
&&criar ilustração para número de porta?&&
 
Embora o endereço IP seja suficiente para localizar um computador, é necessário localizar também um aplicativo específico naquele computador. Por exemplo, se a mensagem que está sendo recebida for uma correspondência eletrônica, ela precisará ser enviada para o leitor de correio. Se a mensagem recebida for uma solicitação de página Web, ela precisa ser roteada para o programa que envia páginas Web.
 
Existe um número de identificação, chamado número da porta, que é enviado em cada mensagem. É necessário que o remetente saiba o número da porta, bem como o endereço da porta, portanto, certos números são padronizados. Esses valores padronizados são conhecido como os números de portas bem conhecidos. Por exemplo, todo navegador Web sabe que a porta número 80 de todos os hospedeiros é por padrão, de um servidor Web. Há também números dedicados a correio eletrônico, FTP e a todos os outros tipos de serviço da Internet.
 
Embora o número padrão da porta Web seja 80, é possível especificar um número diferente. Por exemplo, se um computador tiver um servidor Web experimental na porta 8080, uma URL para endereçá-lo poderia ser escrito assim:
 
<pre>
http://www.testandook.com.br:8080/index.html
</pre>
 
Sempre que uma mensagem é enviada de um cliente para um servidor, os números do endereço de retorno e da porta de retorno são incluídos. O servidor usa esses números para formar o endereço de retorno da mensagem. Sempre que você inicia seu navegador Web ou leitor de correio eletrônico, eles solicitam à máquina local um número de porta não utilizado. Eles usam esse número como parte do seu endereço de retorno e irão monitorar, e receber, quaisquer mensagens endereçadas para aquela porta. É por isso que é possível executar diversos programas de Internet simultaneamente sem que haja interferência entre eles.
 
<img src="%ATTACHURLPATH%/pag_41a.jpg" alt="pag_41a.jpg" width="616" height="249" />
<br><b><i>Fig. 8 - Exemplo de comunicação virtual através de porta.</i></b>
 
<img src="%ATTACHURLPATH%/pag_41b.jpg" alt="pag_41b.jpg" width="620" height="444" />
<br><b><i>Fig. 9 - Exemplo de comunicação real através da porta.</i></b>
 
== Roteamento ==
 
Analise o seguinte exemplo: você mora em Goiânia-GO e quer mandar uma correspondência para Cascavel-PR. O seu primeiro passo seria entregar esta carta ao correio (Goiânia) que, porventura, mandaria a carta para o correio de Cascavel que, por sua vez, entregaria para o destinatário. Em redes de computadores acontece analogamente como foi descrito acima, mas neste caso o correio seria o roteador, ou seja, tudo que não pertencer a rede local será enviado para o roteador que comunicará com o roteador da outra rede onde se encontra o destinatário, que por sua vez, entrega para este. Observe que no caso do correio, podem existir "roteadores" intermediários em um trajeto; ou seja, o mesmo pode primeiramente enviar a carta para São Paulo e somente depois chegaria ao destino, assim acontece com as redes e consequentemente com a Internet: para comunicar com uma máquina é possível e bastante comum passar por vários roteadores.
 
<img src="%ATTACHURLPATH%/pag_42a.jpg" alt="pag_42a.jpg" width="575" height="455" />
<br><b><i>Fig. 10 - Exemplo de rede interligada através de 5 roteadores.</i></b>
 
A vantagem de utilizar esta forma estruturada está no fato de não haver uma preocupação com o caminho que o pacote irá percorrer, a única preocupação está limitada a origem e ao destino. Toda a Internet consiste em um número de redes próprias que são denominadas como redes autônomas. Cada rede necessita de um roteamento interno que tem a tarefa de entregar o datagrama para a rede da máquina de destino.
 
== DNS - Domain Name Server ==
 
Raramente os programas fazem referência a hosts, e-mail e outros recursos utilizando seus endereços binários de rede - endereços IP. Em vez de números binários, eles utilizam strings ASCII, como exemplo www.sistemasabertos.com.br. Todavia, a rede em si só compreende endereços binários; portanto, é necessário algum tipo de mecanismo para converter os strings ASCII em endereços de rede. Esta é a grande função do DNS, ele transforma strings(nomes) para endereço IP. Um exemplo para ilustrar seria o uso da lista telefônica, conhecendo o nome da pessoa ou estabelecimento, você adquire o número de telefone - número necessário para comunicação. Nas redes de computadores, você conhecendo o nome e domínio da máquina, obtêm-se o endereço IP - número necessário para comunicação entre computadores.
 
Primeiramente, os nomes e endereços eram armazenados automaticamente no seu computador local por meio de arquivo texto. Na verdade, foi assim que a Internet começou, e continua sendo uma prática comum em redes pequenas. Tão logo uma rede ultrapassa alguns poucos computadores, começam a surgir os problemas referentes a manter todos os endereços em todos os computadores. Faz sentido automatizar a manutenção da lista. Para resolver este problema foi criado o DNS - Domain Name Server - que se baseia em um computador que gerencia a lista e faz com que os outros computadores o consultem para procurar endereços (veremos isso posteriormente em um capítulo exclusivo).
 
== Arquivos Gerais ==
 
A partir desta seção, será utilizado muito o conceito de conversão entre base decimal e binária; e vice-versa. Portanto, é extremamente recomendável que o leitor tenha noção deste assunto. Caso isto não seja de seu conhecimento, favor procure bibliografia apropriada, ou estude o anexo que trata de conversão de números binários.
 
Há uma grande gama de arquivos de configurações e informações de rede. Estes arquivos armazenam números de portas e endereços usados nas comunicações. A grande maioria destes arquivos podem ser editados manualmente.
 
=== /etc/protocols ===
 
Este arquivo define os protocolos de baixo nível utilizados na comunicações de redes TCP/IP. Um pacote quando é enviado necessita ser encapsulado em um tipo de protocolo, este arquivo serve como uma referência para saber como &#8220;desembrulhá-lo&#8221;.
 
Essa referência é feita através de ID (Números de Identificação) do protocolo. Para conseguir a conexão em rede, o computador comunica através dos números de identificação dos protocolos, os dois hospedeiros concordam com um grupo de ID que é usado como etiqueta para identificar o protocolo quando a mensagem chega. Esses números de ID são mantidos no arquivo /etc/protocols que é apresentado a seguir:
 
<pre>
ip 0 IP # internet protocol, pseudo protocol number
icmp 1 ICMP # internet control message protocol
igmp 2 IGMP # Internet Group Management
ggp 3 GGP # gateway-gateway protocol
ipencap 4 IP-ENCAP # IP encapsulated in IP (officially ``IP'')
st 5 ST # ST datagram mode
tcp 6 TCP # transmission control protocol
egp 8 EGP # exterior gateway protocol
pup 12 PUP # PARC universal packet protocol
udp 17 UDP # user datagram protocol
hmp 20 HMP # host monitoring protocol
xns-idp 22 XNS-IDP # Xerox NS IDP
rdp 27 RDP # "reliable datagram" protocol
iso-tp4 29 ISO-TP4 # ISO Transport Protocol class 4
xtp 36 XTP # Xpress Tranfer Protocol
ddp 37 DDP # Datagram Delivery Protocol
idpr-cmtp 39 IDPR-CMTP # IDPR Control Message Transport
rspf 73 RSPF #Radio Shortest Path First.
vmtp 81 VMTP # Versatile Message Transport
ospf 89 OSPFIGP # Open Shortest Path First IGP
ipip 94 IPIP # Yet Another IP encapsulation
</pre>
 
A primeira coluna é o nome do protocolo, a segunda se refere ao seu número de ID. A terceira coluna é um nome alternativo, geralmente estará em letra maiúscula, mas poderia ser outro nome. Através do arquivo é possível observar que existem outros protocolos além do TCP/IP, alguns destes protocolos são usados na Internet por hospedeiros para obter informações sobre endereço e roteamento.
 
A grande maioria de mensagens que circulam a Internet usam o protocolo TCP ou UDP. A diferença está exclusivamente na forma com que cada protocolo trata as informações. O protocolo UDP envia o pacote de dados não se importando se ele será recebido, enquanto o TCP espera por uma resposta, ou seja, ele envia o pacote e espera por uma resposta de recebimento por parte do outro hospedeiro.
 
=== /etc/services ===
 
Este arquivo define os números de porta de cada serviço. Ter uma entrada neste arquivo não indica necessariamente que o programa estará sendo executado, pois este arquivo apenas controla o número de porta que o processo/programa é executado. Veja um exemplo deste arquivo:
 
<pre>
Tcpumx1 1/tcp #rfc-1078
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
systat 11/tcp users
daytime 13/tcp
daytime 13/udp
netstat 15/tcp
qotd 17/tcp quote
chargen 19/tcp ttytst source
chargen 19/udp ttytst source
ftp-data 20/tcp
ftp 21/tcp
telnet 23/tcp
smtp 25/tcp mail
time 37/tcp timeserver
time 37/udp timeserver
rlp 39/udp resource #resource location
name 42/udp nameserver
whois 43/tcp nicname #usually to sri-nic
domain 53/tcp
domain 53/udp
mtp 57/tcp #deprecated
bootps 67/udp #bootp server
bootpc 68/udp #bootp client
tftp 69/udp
gopher 70/tcp
rje 77/tcp
finger 79/tcp
http 80/tcp
link 87/tcp ttylink
kerberos 88/udp kdc #Kerberos authentication-udp
kerberos 88/tcp kdc #Kerberos authentication-tcp
linuxconf 98/tcp #added by linxuconf RPM
hostnames 101/tcp hostname #usually to sri-nic
pop-3 110/tcp #PostOffice V.3
pop 110/tcp #PostOffice V.3
snmp 161/udp
snmp-trap 162/udp
login 513/tcp #BSB rlogind(8)
who 513/udp whod #BSB rwhod(8)
pcnfs 640/udp #PC-NFS DOS Authentication
dos 7000/tcp msdos
</pre>
 
Este arquivo contém os serviços mais conhecidos, por exemplo, espera se que a World Wide Web, baseado no protocolo HTTP, tenha seu servidor escutando a porta 80. Da mesma forma que o serviço telnet esteja esperando por solicitações na porta 23. Já o serviço ftp requer duas portas - ele usa a porta 20 para transmitir e receber dados e a porta 21 para enviar e receber informações de controle (solicitação de interrupção de transferência de arquivo, por exemplo).
 
Apesar da maioria dos protocolos listados no arquivo especificarem tanto o protocolo de baixo nível TCP e UDP, estes não necessariamente são realmente implementados nos dois protocolos. A IANA - órgão oficial regulador da Internet que tem como uma das atribuições regulamentar as entradas neste arquivo - atribui sempre ao protocolo a reserva de uso dos dois protocolos de baixo nível TCP e UDP, no sentido de permitir uso futuro . Outra característica deste arquivo, está no fato de que um serviço pode ter mais de um nome, veja o serviço name que também é chamado de nameserver.
 
%T% Veja a lista PORT NUMBERS disponível on-line através do endereço http://www.isi.edu/in-notes/iana/assignments/port-numbers.
 
%PASSO% Vejamos este exemplo, ao executar:
 
<pre>
#telnet 127.0.0.1
</pre>
 
%PASSO% Você estará automaticamente tentando uma solicitação de conexão na sua própria máquina através de sua porta 23, uma vez que a porta padrão configurada no arquivo /etc/services do serviço telnet é 23.
 
%PASSO% Para fazer o teste anterior, você deve estar executando o serviço telnetd, este serviço é controlado pelo serviço inetd(Voltaremos a tratar este assunto posteriormente no tópico Serviço Inet). Para ativar o serviço telnet edite o arquivo de configuração do inet, o arquivo /etc/inetd.conf.
 
<pre>
#vi /etc/inetd.conf
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
</pre>
 
%PASSO% Observe se a linha similar a apresentada acima está comentada. No Linux os arquivos de configuração usam o caractere &#8220;#&#8221; ou &#8220;;&#8221; para comentar uma linha.
 
%PASSO% Depois de configurado o arquivo você deve reiniciar o serviço inetd, ou inicializá-lo se ele estiver parado.
 
%PASSO% Para verificar se ele está parado ou ativo, execute:
 
<pre>
{| cellpadding="5" cellspacing="0" border="1"
|-
|#ps aux || grep inetd root 946 0.0 1.6 1164 484 ? S 02:15 0:00 inetd
|}
 
root 951 0.0 1.7 1368 512 pts/0 S 02:15 0:00 grep inet
</pre>
 
%PASSO% Caso obtenha uma saída desta forma, o serviço está ativo e seu número de identificação de processo - PID - é 946. Para reinicializá-lo, execute:
 
<pre>
#kill -HUP 946
</pre>
 
%PASSO% Caso o serviço não esteja ativo, execute:
<pre>
#inetd
</pre>
 
%PASSO% Agora você pode utilizar o telnet para fazer a requisição.
 
=== /etc/hosts ===
 
Este arquivo tem como objetivo relacionar nomes de máquinas com endereços IP.
 
Este arquivo trabalha como se fosse uma agenda telefônica, ou seja, através do nome da pessoa você descobre o número do telefone. Em redes de computadores o funcionamento é análogo: você atribui um nome a um endereço IP no arquivo (lista telefônica) e depois disso não é necessário lembrar do endereço IP e sim do nome da máquina, pois este arquivo é utilizado para converter o nome do hospedeiro no seu endereço IP.
 
A seguir um exemplo do arquivo:
<pre>
127.0.0.1 localhost
10.1.0.101 lab1.sistemasabertos.com.br lab1
10.1.0.102 lab2.sistemasabertos.com.br lab2
10.1.0.103 lab3.sistemasabertos.com.br lab3
10.1.0.2 servidor.sistemasabertos.com.br servidor
</pre>
 
A primeira coluna refere-se ao endereço IP, a segunda coluna é o nome da maquina com seu domínio, a terceira coluna é um alias. Com essa configuração você pode ter acesso ao host 10.1.0.2 através do seguinte exemplo:
 
<pre>
#ftp servidor.sistemasabertos.com.br
</pre>
 
ou ainda,
<pre>
#ftp servidor
</pre>
 
No arquivo /etc/hosts um host pode ter mais de um nome, ou seja, pode ter mais de uma entrada no arquivo, esses nomes são chamados de nomes alternativos. O primeiro endereço 127.0.0.1 no arquivo é um endereço IP especial chamado de loopback. É uma boa prática ter esta entrada em todos os arquivos /etc/hosts de hospedeiros. Ter o endereço definido desta forma permite que vários softwares usem o nome padrão localhost para referenciar a máquina na qual ele está sendo executado.
 
Outro fato a ser salientado, é o fato de que se houver 500 hosts em uma rede, todos as máquinas da rede deverão ter o arquivo /etc/hosts com os nomes das 500 máquinas. Pois, caso contrário, os que não estiverem configurados, não poderão utilizar nomes ao invés de números IP, o que se torna inviável. Neste caso utiliza-se um serviço de banco de dados com informações de nomes e seus números IP associados da rede, chamado de DNS - Domain Name Server, o qual será estudado nos próximos capítulos.
 
%DEBIAN% %PASSO%
=== /etc/network/interfaces ===
No Debian, configuramos as interfaces de rede locais de forma permanente no arquivo /etc/network/interfaces.Podemos analisar os parametros do arquivo:
<pre>
lab152:~# cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
 
# The loopback network interface
auto lo
iface lo inet loopback
 
# The primary network interface
auto eth0
iface eth0 inet static
address 10.2.0.152
netmask 255.255.0.0
network 10.2.0.0
broadcast 10.2.255.255
gateway 10.2.0.20
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 10.2.0.2
dns-search sa.com.br
</pre>
Logo, vemos a interface loopback e a interface eth0, com endereço ip 10.2.0.152/16.
%PASSO% Para ativas as alteraçoes, devemos reiniciar o serviço network:
 
<pre>
#/etc/init.d/networking restart
</pre>
 
 
 
== Configuração Geral TCP/IP ==
 
Na configuração geral do protocolo TCP/IP, temos:
* 1.Configuração do Nome da Máquina
* 2.Configuração da placa de rede
* 3.Configuração das rotas
* 4.Configuração da Resolução de Nomes DNS
 
== Configuração do Nome da Máquina ==
 
Pada cada máquina na rede é atribuído um nome. No protocolo TCP/IP existe uma padronização de nomes para hosts. Os nomes das máquinas devem seguir o padrão FQDN - Nome Totalmente Qualificado - que nada mais é que o nome da máquina mais o seu respectivo domínio DNS (será explicado posteriormente no capítulo DNS). O nome servidor.sistemasabertos.com.br é um exemplo de nome totalmente qualificado, servidor é o nome da máquina, sistemasabertos.com.br é o domínio que a máquina servidor pertence.
 
%PASSO% O comando que configura o nome da máquina chama-se hostname, vejamos sua aplicação:
<pre>
#hostname servidor.sistemasabertos.com.br
</pre>
 
%PASSO% Para verificar se a configuração foi executado com êxito, execute somente hostname, este deve retornar o nome da máquina configurado como mostrado abaixo:
<pre>
#hostname
servidor.sistemasabertos.com.br
</pre>
 
Entretanto, este comando configura o nome da máquina temporariamente, ou seja, se esta máquina for reiniciada, ela perderá a configuração. Logo, você deve colocar este comando em um dos scripts de inicialização do sistema, na Conectiva® e Red Hat® existe o arquivo /etc/rc.d/rc.local, no Slackware® existe o arquivo /etc/rc.d/rc.inet1.
 
%PASSO% Nas distribuições Conectiva® e Red Hat® existe outra forma mais apropriada para definir o nome da máquina. Esta forma é feita através do arquivo /etc/sysconfig/network. Vejamos um exemplo deste arquivo:
<pre>
NETWORKING=yes
HOSTNAME="servidor.sistemasabertos.com.br"
FORWARD_IPV4=yes
GATEWAY=10.2.0.5
GATEWAYDEV=eth0
DOMAINNAME=sistemasabertos.com.br
</pre>
 
Observe a entrada HOSTNAME. Com esta configuração, a nome da máquina fica definido estaticamente, ou seja, não perderá a configuração quando reiniciada.
 
Segue abaixo as explicações referente ao arquivo:
NETWORKING: Caso sua máquina esteja em uma rede, você deve usar o valor yes, caso contrário use no.
FORWARD_IPV4: Esta opção quando assinalada com "yes" ativa o roteamento. Se sua máquina for um roteador a mesma deve estar assinalada com yes.
HOSTNAME: Define o nome totalmente qualificado da máquina(FQDN).
DOMAINNAME: Define o domínio o qual está máquina pertence.
GATEWAY: Define o roteador padrão desta máquina.
GATEWAYDEV: Define a interface de rede que dá acesso ao roteador.
 
=== Configuração da placa de rede ===
 
Esta configuração está baseada na detecção da placa de rede, configuração do endereço IP e máscara de rede.
 
=== Interface Ethernet ===
 
O kernel é responsável pela interação com todo hardware, inclusive placas de rede. Para que o kernel reconheça a interface de rede, é necessário os seguintes componentes:
* '''placa de rede:''' pode ser do tipo ISA ou PCI. Para placas ISA, os parâmetros endereço de I/O e IRQ não são detectados automaticamente, portanto devem ser passados para o kernel através de configuração do lilo. Se for uma placa PCI, será bastante simples, pois os endereços de I/O e IRQ são atribuídos e reconhecidos dinamicamente e não precisam ser repassados para o kernel.
* '''módulo da placa de rede:''' também chamado de driver de placa de rede.
 
=== Configurando as interfaces de rede ===
 
Existem várias ferramentas que podem ser utilizadas para configurar a interface de rede, a principal ferramenta de configuração é o ifconfig.
 
Inicialmente iremos tratar de configurações para redes privadas, depois estenderemos os conceitos para uma rede com acesso público para Internet. Antes de começar a configurar a interface de rede, você deve definir uma faixa de endereço a ser utilizado pelas máquinas. Você deve escolher umas das faixas definidas no tópico Endereços IP especiais, pois como se trata de uma rede interna, estes endereços não precisam ser válidos na Internet. Em nossa configuração estaremos utilizando da faixa 10.0.0.0 - 10.255.255.255.
 
=== Carregando o módulo da placa de rede ===
 
A arquitetura do Linux® é baseada em um kernel que interage com o hardware. Portanto, assim como existem vários tipos de hardware (vídeo, placa de rede, cdrom, etc) e vários tipos de fabricantes e modelos, existem vários módulos (partes do kernel) que o kernel utiliza para interação com estes hardwares. Uma vez que todo módulo ocupa espaço em memória, o kernel permite que os módulos sejam carregados e descarregados de acordo com a necessidade.
 
<img src="%ATTACHURLPATH%/pag_53a.jpg" alt="pag_53a.jpg" width="255" height="184" />
<br><b><i>Fig. 11 - Ilustração entre a interação do Kernel - Módulo - Placa de Rede.</i></b>
 
Para carregar o módulo da placa de rede deve ser utilizado o comando modprobe (veja este e outros comandos relacionados: lsmod, rmmod e insmod nas páginas de manual - man). Vejamos um exemplo da aplicação deste comando:
 
Neste exemplo o módulo a ser carregado é o referente à placa de rede de marca Realtek , modelo 8139 (por isso, carregamos o módulo rtl8139).
<pre>
#modprobe rtl8139
</pre>
 
Para saber qual módulo carregar, você deve:
* '''1)Identificar a sua placa de rede:''' você deve conhecer a marca e o modelo de sua placa;
* '''2)Obter o driver (módulo):''' muitos fabricantes fornecem o driver para Linux juntamente com o seu hardware ou no seu site. Opcionalmente, você pode encontrar o nome do arquivo do módulo a ser carregado na documentação das fontes do kernel (obtido em http://www.kernel.org , ou pelo arquivo kernel-sources*.rpm na Conectiva®). O arquivo de documentação de documentação do kernel a ser procurado é geralmente o arquivo /usr/src/linux-<versão>-/Documentation/Configure.help; este arquivo é muito extenso e você deve fazer uma busca no arquivo pela marca de sua placa de rede.
* '''3)Conferir a existência do módulo de kernel:''' os módulos de kernel existentes em seu sistema são localizados em /lib/modules/<versão-do-kernel>/net. Todos arquivos de módulos tem extensão ".o", mas podem ser carregados através do comando modprobe sem a extensão.
 
Para automatizar o carregamento do módulo na inicialização, existe o arquivo /etc/modules.conf ou /etc/conf.modules
 
De acordo com algumas distribuições ou versões do Linux, o nome do arquivo é diferente. Este arquivo é o arquivo de configuração dos módulos do kernel.
 
%PASSO% Eis aqui um exemplo deste arquivo:
<pre>
alias eth0 rtl8139
alias parport_lowlevel parport_pc
pre-install pcmcia_core /etc/rc.d/init.d/pcmcia start
alias parport_lowlevel parport_pc
pre-install pcmcia_core /etc/rc.d/init.d/pcmcia start
alias eth1 dmfe
alias scsi_hostadapter aic7xxx
alias parport_lowlevel parport_pc
pre-install pcmcia_core /etc/rc.d/init.d/pcmcia start
alias scsi_hostadapter aic7xxx
alias parport_lowlevel parport_pc
</pre>
 
Este arquivo define quais módulos estão referenciados a quais dispositivos. Neste exemplo a primeira linha corresponde a interface de rede, a palavra rtl8139 se refere ao módulo da placa de rede realtek. Com esta entrada no arquivo não é necessário carregar o módulo manualmente, se houver outra placa de rede você deve colocar uma entrada neste arquivo referente a outra interface, por exemplo, eth1. Interfaces de rede ethernet são denominadas como eth<X>, onde X é um número que especifica a interface de rede. Veja a linha:
<pre>
alias eth1 dmfe
</pre>
 
Neste exemplo o módulo da placa de rede é dmfe.
 
Com este arquivo configurado não é necessário ficar carregando o módulo manualmente, o próprio sistema irá carregar o módulo quando houver necessidade.
 
=== Utilitário ifconfig ===
 
Este utilitário tem como finalidade obter informações de configurações de interface de rede, assim como fazer novas configurações, porém todas as alterações feitas pelo ifconfig são temporárias. O formato usual do ifconfig é o seguinte:
<pre>
{| cellpadding="5" cellspacing="0" border="1"
|-
|ifconfig <interface> [ [-net || -host] <endereço> [parâmetros] ]
|}
 
</pre>
 
A interface se refere ao próprio nome da interface, as opções -net e -host faz com que o ifconfig trate o endereço como uma rede ou um endereço de máquina. O endereço se refere ao endereço IP.
 
%PASSO% Digitando o ifconfig sem nenhum parâmetro, obtemos a seguinte saída:
<pre>
#ifconfig
lo Link encap: Local loopback
inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0
UP BROADCAST LOOPBACK RUNNING MTU: 3584 Metric:1
RX packets: 460 errors:0 dropped:0 overruns:0 frame:0
TX packets:460 errors:0 dropped:0 overruns:0 carrier:0
Collisions:0
 
eth0 Link encap: Ethernet Hwaddr 00:90:06:54:05:11
inet addr:192.81.82.10 Bcast:192.81.82.255 Mask:255.255.255.0
UP BROADCAST LOOPBACK RUNNING MTU: 1500 Metric:1
RX packets: 421 errors:0 dropped:0 overruns:0 frame:0
TX packets:75 errors:0 dropped:0 overruns:0 carrier:0
</pre>
 
Neste caso existem duas interfaces ativas - lo e eth0. A primeira é chamada de interface de loopback. A segunda, chamada eth0, é a interface de conexão Ethernet. Na primeira linha da interface eth0 encontra o endereço de hardware da placa ethernet, neste caso o endereço é 00:40:C7:29:9D:98. Um dos trabalhos do protocolos TCP/IP é converter endereço IP em endereços de hardware.
 
O endereço de hardware, também chamado de endereço MAC - Medium Access Control [Controle de Acesso ao Meio] ou endereço Ethernet, é próprio da tecnologia Ethernet. É um número de 6 octetos e é único para cada placa de rede. No sentido de preservar esta identidade única de endereços Ethernet é que foi padronizado que cada fabricante possui um prefixo próprio (parte dos 6 octetos). Assim cada fabricante cuida de seu própria identificação interna.
 
%T% Existe um protocolo chamado ARP - Address Resolution Protocol[Protocolo de Resolução de Endereços] - cujo objetivo é mapear endereços IP em endereços de hardware, veja as RFCs 826 e 903 no endereço http://www.ietf.org/rfc.html, veja também as páginas de manual: execute o comando man arp.
 
%PASSO% O número IP se encontra na segunda linha, no caso da interface eth0, o endereço é 192.81.82.10, em seguida vem o endereço de broadcast que é um endereço reservado referente à todas as máquinas da rede. Por exemplo, digitando o seguinte comando:
<pre>
#ping 192.81.82.255
</pre>
 
Você estará referenciando a todas as máquinas na rede, ou seja, as máquinas que estão com as interfaces ativas e ao mesmo tempo conectadas na rede.
 
O último item da segunda linha - Mask - é utilizado para definir a máscara da rede.
 
Os campos MTU e Metric mostram a unidade máxima de transferência e o valor métrico respectivamente para a interface de rede. As linhas TX e RX mostram quantos pacotes foram recebidos ou transmitidos livres de erros, quantos erros ocorreram, quantos pacotes foram perdidos provavelmente devido à falta de memória e quantos foram perdidos por falta de sincronismo no seu envio.
 
Abaixo encontra uma relação dos principais parâmetros do ifconfig:
up: Define uma interface como ativa, ou seja, acessível para camada IP. Esta opção é utilizada automaticamente quando é passado o endereço IP para o ifconfig. É usada para ativar uma interface que porventura tenha sido desabilitada (down).
down: Define uma interface como inativa, inacessível ao nível IP. Qualquer tráfego que utiliza a interface será desabilitado.
netmask [mask]: Define uma máscara de sub-rede a ser usada pela interface.
pointopoint [address]: Esta opção é utilizada para estabelecimento de conexões ponto a ponto que envolve somente duas máquinas. É o caso do protocolo PPP, SLIP e PLIP.
broadcast [address]: Utilizado para atribuir o endereço de broadcast. Este endereço deve estar de acordo com a máscara.
 
%PASSO% Veja o seguinte comando:
<pre>
#ifconfig eth0 10.1.0.201 netmask 255.0.0.0 broadcast 10.255.255.255 up
</pre>
 
Este comando atribui a interface eth0 o endereço IP 10.1.0.201, a máscara de rede 255.0.0.0 e endereço de broadcast 10.255.255.255.
 
%PASSO% Para desativar esta interface basta digitar,
<pre>
#ifconfig eth0 down
</pre>
 
Nos parágrafos anteriores foi apresentado o utilitário ifconfig, este utilitário muda as configurações das interfaces de rede temporariamente. Para configurar a interface de rede estaticamente, no caso das distribuições Conectiva e Red Hat, os arquivos de configuração das interfaces de rede ficam no diretório /etc/sysconfig/network-scripts. Cada interface de rede tem necessariamente um arquivo dentro deste diretório, denominado ifcfg-<interface-de-rede>. Veja os passos que devem serem seguidos para uma configuração da interface ethernet eth0.
<pre>
#cd /etc/sysconfig/network-scripts
#vi ifcfg-eth0
 
DEVICE="eth0"
IPADDR="10.1.0.101"
NETMASK="255.255.0.0"
ONBOOT="yes"
BOOTPROTO="none"
</pre>
 
Os parâmetros pertinentes ao protocolo TCP/IP são referentes às cinco primeiras linhas deste arquivo. Neste caso o nome do arquivo é ifcfg-eth0 porque faz referência a primeira interface ethernet. Caso exista duas interfaces ethernet deve existir também o arquivo ifcfg-eth1.
DEVICE: Este parâmetro define a interface de rede que no nosso exemplo é a primeira interface ethernet, a interface eth0.
IPADDR: Usado para definir o endereço IP desta interface de rede.
NETMASK: Usado para definir a máscara de rede para este endereço IP.
ONBOOT: Os valores válidos são "yes" ou "no". Com o primeiro valor a interface será ativada na inicialização da máquina. Para o segundo valor a interface não será ativada na inicialização.
BOOTPROTO: Este parâmetro define o tipo de ação desta interface de rede. Existem principalmente dois valores: "none ou static" para endereço IP estático e "dhcp" para endereço IP dinâmico. No último caso deve haver na rede um servidor DHCP(vide capítulo sobre DHCP) para atribuir um endereço IP a esta interface.
 
%T% No Slackware® a configuração da interface de rede é feita através do arquivo /etc/rc.d/rc.inet1. Vejamos um trecho deste arquivo:
<pre>
IPADDR="10.2.0.7" # REPLACE with YOUR IP address!
NETMASK="255.255.0.0" # REPLACE with YOUR netmask!
NETWORK="10.2.0.0" # REPLACE with YOUR network address!
</pre>
A entrada NETWORK é utilizada para definir o endereço de rede, obviamente o endereço de rede deve estar de acordo com o endereço IP e máscara atribuída.
 
=== Configuração das rotas ===
 
Caso você tenha sub-redes ou queira dar acesso a Internet para as máquinas da rede, você deve configurar as rotas. Ao adicionar uma rota, você deve ter as seguintes preocupações:
 
rede de alcance: especifica a rede de destino que você quer ter acesso, pode ser a Internet ou outra sub-rede interna.
 
roteador: define a máquina que dará acesso à rede de alcance, esta máquina terá no mínimo duas interfaces de rede e deve estar acessível às duas redes.
 
%T% Para configurar rotas existe o utilitário route
 
==== Visualizando rotas ====
 
%PASSO% O utilitário route permite adicionar e remover rotas e visualizar as rotas que já estão definidas. Para visualizar as rotas, basta digitar route sem nenhum argumento. Vejamos a saída do comando:
<pre>
#route
Tabela de Roteamento IP do Kernel
Destino Roteador MáscaraGen. Opções Métrica Ref Uso Iface
10.1.0.0 * 255.255.0.0 U 0 0 0 eth0
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
default roteador.siste 0.0.0.0 UG 0 0 0 eth0
</pre>
 
Observe o que cada coluna define:
Primeira coluna: a rede de destino(alcançe);
Segunda coluna: o roteador para acesso à rede de destino;
Terceira coluna: a máscara da rede de destino.
Quarta coluna: As opções possíveis para está coluna são: U - rota está ativa; H - O alvo é uma máquina; G -Use roteador; existem outras opções mais avançadas que fogem do escopo deste material, veja man route para maiores informações.
Quinta coluna: Metric A 'distância' até o alvo (geralmente contada em hops). Não é utilizada pelos kernels recentes, somente daemons de roteamento podem usá-la.
Sexta coluna: Numero de referências a esta rota. Não usado no kernel do Linux, portanto é sempre 0.
Sétima coluna: Contagem de procuras por esta rota. Nos kernels recentes estes números são bem baixos, pois os sockets tem seu próprio cache e não precisam procurar por rotas.
Oitava coluna: Interface através da qual os pacotes IP serão enviados.
 
Observamos que existem três entradas na tabela de roteamento do kernel. Entretanto, as duas primeiras são adicionadas pelo sistema, isto é assim porque por padrão cada interface de rede exige uma rota. Para saber quais rotas foram adicionadas pelo sistema, observe quais entradas têm um "*" na coluna referente ao Roteador.
 
Veja também que nesta configuração, a máquina possui duas interfaces (Veja a última coluna do exemplo):
lo: é a interface de loopback: Todas máquina corretamente configurada possui esta interface. Esta interface é que permite que da própria máquina acessemos serviços dela mesma, ou seja, ela atuando como servidora para ela mesma. É bastante útil para testes. e
eth0: esta é a primeira interface ethernet. Caso existisse mais outra interface, seria nomeada como eth1.
 
%PASSO% A última entrada cuja primeira coluna está definido como default é uma rota padrão que foi adicionado pelo administrador. No campo Roteador está definido a máquina roteador.sistemasabertos.com.br. É comum, ao executar este comando, demorar para retornar as configurações das rotas. Isto pode acontecer quando não há um mecanismo para conversão de endereços IP para nomes de máquinas, ou seja, nenhum servidor DNS acessível e devidamente configurado. Quando é executado o route sem nenhuma opção o mesmo tentará apresentar o nome da máquina ao invés de seu endereço IP e quando não é possível apresentar o nome, ele tenta até expirar o tempo limite (timeout)Assim, você pode utilizar o route com a opção \n. Com esta opção o route não irá tentar resolver o nome, tornando a saída do comando mais rápida. Vejamos como fica a nova saída do comando:
<pre>
# route -n
Tabela de Roteamento IP do Kernel
Destino Roteador MáscaraGen. Opções Métrica Ref Uso Iface
10.1.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 10.1.0.5 0.0.0.0 UG 0 0 0 eth0
</pre>
 
=== Adicionando rotas ===
 
%PASSO% Os próximos exemplos iremos mostrar como adicionar e remover rotas. Vejamos um exemplo de adição de rota:
<pre>
#route add -net 10.2.0.0/16 gw 10.1.0.101
</pre>
 
Este comando adicionará uma rota para a rede 10.2.0.0/16 através do roteador 10.1.0.101. A opção gw é utilizada para atribuir o IP do roteador. O número 16 do endereço 10.2.0.0/16 é utilizado para especificar a máscara de rede. Os números utilizados são: 8 para máscara 255.0.0.0, 16 para 255.255.0.0, 24 para 255.255.255.0 e 32 para 255.255.255.255.
 
%PASSO% O comando para adicionar rota deve ser executado toda vez que for inicializada a máquina, portanto é necessário adicionar este comando nos scripts de inicialização do sistema, na Conectiva® e Red Hat®, existe o arquivo /etc/sysconfig/static-routes que pode ser utilizado para adicionar uma rota estática, deve-se, portanto, inserir a seguinte linha:
<pre>
net 10.2.0.0 netmask 255.255.0.0 gw 10.1.0.101
</pre>
 
%T% Na Slackware® existe o script de inicialização /etc/rc.d/rc.inet1, e deve ser inserido uma linha:
<pre>
route add -net 10.2.0.0/16 gw 10.1.0.101
</pre>
 
=== Removendo rotas ===
 
%PASSO% Para excluir uma rota, basta executar:
<pre>
#route del -net 10.2.0.0/16
</pre>
 
Observe que é necessário especificar novamente a máscara, porém não é necessário especificar o número IP do roteador.
 
=== Configuração da Resolução de Nomes DNS ===
 
Aqui aprenderemos a definir um servidor de DNS para que o mesmo faça a resolução de nomes.
 
%PASSO% O servidor de DNS é definido no arquivo /etc/resolv.conf. Vejamos um exemplo:
<pre>
nameserver 10.1.0.2
nameserver 200.242.140.5
</pre>
 
A entrada nameserver é utilizada para definir o servidor DNS. Observe que pode ser definido mais de um servidor DNS, caso um falhe o outro estará apto a atender.
 
Com o servidor DNS definido não é necessário decorar números IP. Depois de definido o servidor de DNS, você poderá acessar a Internet e utilizar nomes como www.sistemasabertos.com.br e www.conectiva.com.br para referenciar os hospedeiros [hosts], obviamente considerando que as configurações da placa de rede e rotas estejam corretas.
 
== O serviço Inetd ==
 
O serviço inetd é considerado um super serviço, pois este serviço controla vários outros serviços. O inetd lê entradas em um arquivo de configuração chamado /etc/inetd.conf. Através deste arquivo o serviço inetd tem controle sobre demais serviços.
 
%PASSO% Vejamos um exemplo de arquivo inetd.conf:
<pre>
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
#telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
#
# Shell, login, exec, comsat and talk are BSD protocols.
#
#shell stream tcp nowait root /usr/sbin/tcpd in.rshd
#login stream tcp nowait root /usr/sbin/tcpd in.rlogind
#exec stream tcp nowait root /usr/sbin/tcpd in.rexecd
#comsat dgram udp wait root /usr/sbin/tcpd in.comsat
#talk dgram udp wait root /usr/sbin/tcpd in.talkd
#ntalk dgram udp wait root /usr/sbin/tcpd in.ntalkd
#dtalk stream tcp waut nobody /usr/sbin/tcpd in.dtalkd
#
# Pop and imap mail services et al
#
#pop-2 stream tcp nowait root /usr/sbin/tcpd ipop2d
#pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d
#imap stream tcp nowait root /usr/sbin/tcpd imapd
#
</pre>
 
Neste exemplo, são mostrado apenas algumas linhas; na verdade este arquivo é bem maior. Cada linha define um serviço. A vantagem da utilização do super daemon é a economia de recursos, principalmente espaço de memória. Ou seja, se para cada serviço existisse um script de inicialização do serviço, o mesmo ficaria rodando até alguém pará-lo ou, então, até a máquina ser desligada. Com o inetd, cada serviço é inicializado apenas quando há alguma solicitação pertinente a este serviço. Quando o serviço pára de ser requisitado, o inetd pára imediatamente o serviço. Assim, o serviço não fica gastando memória sem necessidade.
 
<img src="%ATTACHURLPATH%/pag_63a.jpg" alt="pag_63a.jpg" width="598" height="332" />
<br><b><i>Fig. 12 - Demonstração da funcionalidade inetd.</i></b>
 
=== Habilitando serviços sob o inetd ===
 
Para que o inetd inicie qualquer um dos serviços definidos neste arquivo, o mesmo deve estar descomentado. Linhas comentadas são linhas que começam com o caractere "#". Seguindo esta linha de raciocínio, para permitir que máquinas acessem a sua máquina através de FTP - File Transfer Protocol basta descomentar a linha referente ao ftp e em seguida inicializar o serviço inet, ou reinicializá-lo.
 
%PASSO% Na conectiva, para inicializar o inet, você deve executar:
<pre>
# /etc/rc.d/init.d/inet start
</pre>
 
%T% Na slackware, para inicializar o inet, você deve simplesmente executar:
<pre>
# /usr/sbin/inetd
</pre>
 
%PASSO% Para que um serviço inet já executando releia o arquivo de configuração, tanto na Slackware quanto na Conectiva, você deve executar:
<pre>
# kill -HUP <no_processo_inetd>
</pre>
 
O inet é o script de inicialização do inetd. Depois disto basta requisitar uma conexão ftp na própria máquina.
 
%PASSO% Para isto, execute:
<pre>
# ftp 127.0.0.1
</pre>
 
Neste caso estamos considerando o cliente e o servidor ftp na mesma máquina.
 
=== Verificando o funcionamento do inetd ===
 
%PASSO% Suponha que você tenha acabado de habilitar o serviço ftp, que se encontra sob o controle do inetd. Também suponha que não há nenhuma sessão ftp aberta. Depois de inicializado o serviço inet, verifique se existe o serviço inetd ou ftpd rodando. Para verificar execute:
<pre>
{| cellpadding="5" cellspacing="0" border="1"
|-
|# ps aux || grep inetd
|}
 
root 986 0.0 1.8 1164 540 ? S 11:50 0:00 inetd
root 1036 0.0 1.7 1368 512 tty2 S 12:14 0:00 grep inetd
</pre>
 
%PASSO% Através da saída observamos que o serviço inetd está rodando e, ainda, verificamos que o seu PID - número de identificação do processo - é 983. Agora vamos verificar o processo ftpd - processo que gerencia o serviço ftp.
<pre>
{| cellpadding="5" cellspacing="0" border="1"
|-
|# ps aux || grep ftpd
|}
 
</pre>
 
Como no momento não há nenhuma solicitação de ftp, o serviço inetd não inicializou o ftpd. Porém, se você solicitar uma nova conexão ftp e verificar novamente, você observará a ocorrência do processo ftpd. Para fazer esta verificação siga estes passos:
 
%PASSO% Primeiramente, execute:
<pre>
# ftp 127.0.0.1
</pre>
 
%PASSO% Em outro terminal execute:
<pre>
{| cellpadding="5" cellspacing="0" border="1"
|-
|#ps aux || grep ftpd
|}
 
root 1040 4.0 2.8 1712 808 ? S 12:18 0:00 ftpd: localhost:
root 1042 0.0 1.7 1368 512 tty2 S 12:18 0:00 grep ftpd
</pre>
 
Para maiores confirmações, você pode terminar o ftp e executar novamente o comando ps aux, você verificará que o processo já estará terminado.
 
Portanto, para iniciar qualquer serviço que seja controlado pelo inetd, basta descomentá-lo e reiniciar o serviço inet. Exemplos de serviços controlados pelo inetd são: o ftp, o POP, telnet, etc.
 
== Utilitários de redes ==
 
Neste tópico será estudado alguns dos principais utilitários de rede. Lembrando que o route e o ifconfig já foi estudado no tópico anterior sobre configuração geral TCP/IP.
 
=== host ===
 
%PASSO% Este utilitário permite obter informações de máquinas pertencentes a um domínio ou sub-domínio. Para isto ele utiliza o serviço de nomes de domínio de hospedeiros e retorna informações sobre eles e como a rede está organizada. Vejamos um exemplo de sua aplicação:
<pre>
# host www.linux.org
linux.org has address 200.243.256.5
</pre>
 
%PASSO% Neste caso foi fornecido o número IP do servidor web do domínio linux.org. Para obter informações como nomes e endereços de todas as máquinas de um domínio digite:
<pre>
# host -l linux.org
</pre>
 
%PASSO% Para descobrir o endereço IP do servidor de DNS de um domínio específico, execute:
<pre>
# host -a www.dominio.com.br
</pre>
 
A opção -a é equivalente a todas opções juntamente, neste caso a saída deste comando fornecerá também o endereço IP do Servidor DNS deste domínio.
 
Para maiores informações consulte as páginas do manual através do comando man..
 
=== netstat ===
 
Esta ferramenta é utilizada também para obter informações de rede, mais precisamente para checar a configuração e atividade de uma rede.
 
%PASSO% Consultando a tabela de roteamento:
<pre>
# netstat -nr
Tabela de Roteamento IP do Kernel
Destino Roteador MáscaraGen. Opções MSS Janela irtt Iface
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
10.1.0.110 0.0.0.0 255.255.0.0 UH 0 0 0 eth0
</pre>
 
Onde:
* r: opção para mostrar a tabela de roteamento
* n: Esta opção faz com que o programa netstat imprima os endereços como números IP ao invés dos nomes da rede e simbólicos da máquina.
 
Com relação a quarta opção (coluna) do resultado da consulta, poderemos ter:
* G - A rota usa um roteador
* U - A rota está ativa.
* H - O alvo da rota é uma máquina.
* D - A rota foi estabelecida dinamicamente por um serviço (geralmente é o serviço routed, o qual é um serviço de rotas dinâmicas)
* M - A rota foi modificada dinamicamente por um serviço.
 
As outras colunas significam:
* MSS - Tamanho de segmento TCP padrão para conexões TCP em bytes através desta rota. Isto normalmente é usado para otimização fina de configurações de roteamento.
* Janela - Tamanho da janela TCP padrão para conexões TCP através desta rota.
* Irtt - Tempo de ida e volta (RTT) inicial. Utilizado para o kernel inferir os melhores parâmetros do protocolo TCP.
* Iface - Interface através da qual os pacotes IP serão enviados.
 
Estas rotas são pré-definidas pelo kernel quando o mesmo está com suporte a roteamento. Caso você não tenha estas característica, é preciso recompilá-lo.
 
%X% Observe que a saída deste comando é similar a do comando route -n
 
%PASSO% Para mostrar estatísticas de fluxo de dados em interface, use a opção -i. Por exemplo:
<pre>
# netstat -ni
</pre>
 
Para maiores informações consulte as páginas do manual sobre o comando netstat através do comando man..
 
=== tcpdump ===
 
%PASSO% Este utilitário monitora a conexão TCP/IP. O monitoramento é feito especificando a interface desejada: eth0, eth1, ppp0 e etc. A saída do comando é o trafego de pacotes enviados e recebido juntamente com endereços de origem e destino. Para monitorar todo tráfego que entra e sai da placa ethernet digite:
<pre>
#tcpdump -i eth0
</pre>
 
%PASSO% O tcpdump é também conhecido como um tipo de sniffer - um "farejador" de pacotes de rede- ou seja, captura todos os pacotes solicitados que trafegam em um meio físico. O tcpdump, devido ao sua capacidade de capturar os pacotes de um meio físico compartilhado, pode ser utilizado para fins ilícitos, como capturar senhas não-criptografadas que trafegam na rede. Também pode ser utilizado para fins lícitos, como ferramenta para análise de um protocolo de rede. O tcpdump permite especificar o host que deve ser monitorado.
<pre>
#tcpdump -i eth0 host lab1.sistemasabertos.com.br
</pre>
 
%PASSO% Neste exemplo, apenas os pacotes enviados pelo lab1 ou a ele destinado serão monitorados. O nome do hospedeiro pode ser o do hospedeiro local, ou pode ser o de qualquer hospedeiro da rede local. Você pode monitorar apenas os dados que estão sendo enviados por lab1 através do parâmetro src.
Exemplo:
<pre>
#tcpdump -i eth0 src host lab1.sistemasabertos.com.br
</pre>
 
%PASSO% Veja agora como monitorar apenas os pacotes que estão sendo enviados para lab1.
 
<pre>
#tcpdump -i eth0 dst host lab1.sistemasabertos.com.br
</pre>
 
%PASSO% Você pode monitorar pacotes que tenham passado por um gateway específico, definindo seu nome, como mostrado a seguir:
<pre>
#tcpdump -i eth0 gateway [roteador]
</pre>
 
%PASSO% Caso queira monitorar tantos pacotes UDP como os TCP que sejam endereçados a uma porta específica, você pode especificar o número da porta, como exemplo:
<pre>
#tcpdump -i ppp0 host lab1.sistemasabertos.com.br and port 80
</pre>
 
O parâmetro ppp0 se refere a primeira interface da conexão PPP (Protocolo Ponto a Ponto), neste caso o tcpdump estará monitorando apenas a porta 80, porta dos servidores Web, do host lab1.sistemasabertos.com.br. Você ainda pode monitorar apenas os dados de entrada ou saída na porta, para isso basta usar os parâmetros src e dst.
 
=== traceroute ===
Este aplicativo indica por quais roteadores um pacote passou antes de atingir seu destino.
 
 
%PASSO% Vejamos um exemplo simples de aplicação deste comando:
<pre>
#traceroute www.linuxdoc.org
traceroute to linuxdoc.org (152.19.254.81), 30 hops max, 40 byte packets
1 roteador (10.2.0.5) 0.872 ms 0.334 ms 0.320 ms
2 10.1.0.7 (10.1.0.7) 1.049 ms 0.815 ms 0.843 ms
3 ppp254-gnace7004.telebrasilia.net.br (200.163.76.254) 16.285 ms 18.032 ms
16.100 ms
4 200.193.193.193 (200.193.193.193) 16.884 ms 18.170 ms 16.307 ms
5 200.199.245.5 (200.199.245.5) 24.378 ms 26.340 ms 24.531 ms
6 200.193.234.1 (200.193.234.1) 26.033 ms 24.762 ms 24.778 ms
7 200.193.234.66 (200.193.234.66) 47.527 ms 49.635 ms 49.128 ms
8 BrT-G3-0.cta-border.telepar.net.br (200.163.207.129) 47.849 ms 50.174 ms
49.365 ms
9 brasiltelecom-A0-0-0-32-dist01.cta.embratel.net.br (200.250.208.57) 53.094
</pre>
 
Observe a grande quantidade de roteadores que o pacote passa antes de atingir o destino, neste caso o destino é www.linuxdoc.org. Neste exemplo não está sendo mostrado a saída completa do comando.
 
=== nmap ===
O comando nmap é um scanner de portas de comunicações, ou seja, ele mostra quais portas estão abertas, sua sintaxe é:
 
<pre>
#nmap <nome da máquina>
</pre>
 
%PASSO% Vejamos um exemplo de sua aplicação:
<pre>
#nmap 127.0.0.1
 
#Starting nmap V. 2.54BETA21 ( www.insecure.org/nmap/ )
Interesting ports on localhost.localdomain (127.0.0.1):
(The 1535 ports scanned but not shown below are in state: closed)
Port State Service
80/tcp open http
111/tcp open sunrpc
119/tcp open nntp
443/tcp open https
515/tcp open printer
878/tcp open unknown
6000/tcp open X11
 
Nmap run completed -- 1 IP address (1 host up) scanned in 1 second
</pre>
 
Neste exemplo estamos verificando quais portas estão abertas na própria máquina local.
 
== Sub-rede - exemplo prático ==
 
A estrutura lógica de um endereço IP pode ser modificado usando bits de endereço de host para bits de endereço de rede adicional. Essencialmente, a linha de divisão entre o endereço de rede e o endereço de hosts pode ser alterado através da máscara de sub-redes, criando redes adicionais (sub-redes). Conseqüentemente a quantidade de hosts suportado por cada sub-rede será menor do que a rede originária.
 
Entre as grandes vantagens e utilidades de dividir as redes, temos:
 
* 1.Tráfego de rede - Esta é uma das necessidades de dividir redes, com a utilização de sub-redes cada rede terá o seu tráfego limitado em seu barramento físico (canal de comunicação), isto atenua as colisões de pacotes em grandes redes, melhorando a performance da rede.
* 2.Distâncias - Limitações de distâncias podem ser solucionadas através das divisões de rede.
 
Para que as sub-redes comuniquem entre si, devem haver roteadores. Assim todos os pacotes destinados à outra sub-rede será passado por um roteador. Assim todo roteador terá pelo menos 1 conexão física com cada uma das duas sub-redes. Esta conexão pode ser feita diretamente ao barramento da sub-rede através de uma interface de rede.
 
Toda sub-rede é criada pela alteração da máscara de rede ou de sub-rede, neste caso a função da máscara de sub-rede será alterar a linha de divisão do endereço IP relacionada ao endereço de rede e endereço de host.
 
Na sua rede local, por exemplo, se o seu computador estiver em uma rede classe B que tenha o endereço 163.9.82.221, a máscara de rede 255.255.0.0 extrairia o endereço da rede: 163.9.0.0. Imagine que você queira dividir esta rede e para isto criar mais duas sub-redes departamentais. Cada sub-rede irá necessitar de um roteador departamental. Estas duas sub-redes podem ser definidas com endereços de sub-rede como por exemplo: 163.9.1.0 e 163.9.2.0. Logo, sua máscara de sub-rede seria 255.255.255.0 e seu endereço de rede continuaria contido nos primeiros 2 octetos, enquanto que o endereço de sub-rede fica contido nos terceiro octeto. Concluindo, a rede 163.9.0.0 pode ser dividida a princípio em 256 sub-redes com cada sub-rede podendo conter 254 endereços de máquinas (256 menos 2), pois o endereço de host neste caso não poderá ser 0 e nem 255 (endereços reservados para endereço de rede e broadcast respectivamente).
 
Através de exemplos de redes procuraremos estabelecer conectividade entre máquinas através do protocolo TCP/IP, por meio de roteadores, que são hardwares com no mínimo 2 interfaces de rede e responsáveis por repassar pacotes de uma rede para outra. Primeiramente iremos interligar duas redes através de um roteador. O segundo exemplo trata a divisão de uma rede em várias sub-redes.
 
== Interligando duas redes ==
 
<img src="%ATTACHURLPATH%/pag_71a.jpg" alt="pag_71a.jpg" width="561" height="183" />
<br><b><i>Fig. 13 - Exemplo de ligação de duas redes através de um roteador.</i></b>
 
Neste exemplo queremos interligar as duas sub-redes: 10.1.0.0/16 e 10.2.0.0/16. As máquinas que compõe a sub-rede 10.1.0.0/16 são: LAB1 e LAB2; A sub-rede 10.2.0.0/16 é composta pelas máquinas: LAB2 e LAB3. Observamos no esquema acima que a máquina LAB2 é o roteador destas redes.
 
=== Configuração do roteador ===
 
A configuração do roteador, neste exemplo, é baseada em apenas ativar a opção ipv4_forward do kernel. Está opção habilita o reencaminhamento [forward] de pacotes - característica de um roteador. Todo roteador Linux deve estar com está opção ativada.
 
%PASSO% O kernel do Linux faz uso do arquivo /proc/sys/net/ipv4/ip_forward para decidir se deve ou não repassar [forward] pacotes. Para o valor 1, o kernel libera a repassagem. Para o valor 0, o kernel não permite a repassagem. Portanto, para este exemplo, devemos sempre executar este comando:
<pre>
#echo 1 > /proc/sys/net/ipv4/ip_forward
</pre>
 
O valor gravado neste arquivo é mantido somente em memória, uma vez que o sistema de arquivo /proc é na verdade um sistema de arquivo baseado em memória, apagável quando se reinicializa o sistema. Portanto, faz-se necessário adicionar a linha de comando no arquivo /etc/rc.d/rc.local, pois assim o comando será executado toda vez que a máquina for iniciada.
 
=== Configuração dos clientes da rede 10.1.0.0/16 ===
 
A configuração das máquinas pertencente a esta sub-rede é baseada em adicionar uma rota cujo destino seja a rede 10.2.0.0/16, neste caso o roteador para esta rede será a máquina LAB2. Vejamos qual comando fará este procedimento:
<pre>
#route add -net 10.2.0.0/16 gw 10.1.0.102
 
</pre>
 
Observe que o IP do roteador é a interface eth0 da máquina LAB2, pois é esta a interface que pertence a rede 10.1.0.0/16.
 
=== Configuração dos clientes da rede 10.2.0.0/16 ===
 
%PASSO% Assim como na configuração dos clientes da rede 10.1.0.0/16, a configuração destas máquinas se resume em um comando. Vejamos:
<pre>
#route add -net 10.1.0.0/16 gw 10.2.0.102
</pre>
 
Para as máquinas da rede 10.2.0.0/16, a rede de destino é a 10.1.0.0/16 que pode ser observado no comando acima. Observe que o endereço IP do roteador definido é o endereço da interface eth1 da máquina LAB2.
 
%T% Nas duas execuções do comando route acima poderia ser utilizado uma rota padrão, ou seja, no lugar de 10.1.0.0/16 e 10.2.0.0/16 poderia ser usado o endereço especial de rota padrão 0.0.0.0/0, uma vez que só existe um roteador nestas redes.
 
== Segmentando uma rede em sub-redes ==
 
Este segundo exemplo trata uma uma sub-rede 10.1.0.0/16 segmentada em 3 sub-redes: 10.1.3.0/24, 10.1.1.0/24 e 10.1.4.0/24. Neste exemplo temos três roteadores: LAB1, LAB2 e LAB8 que dão acesso as respectivas sub-redes 10.1.1.0/24, 10.1.3.0 e 10.1.4.0/24.
 
<img src="%ATTACHURLPATH%/pag_73a.jpg" alt="pag_73a.jpg" width="596" height="319" />
<br><b><i>Fig. 14 - Divisão da rede 10.1.0.0/16 em três sub-redes: 10.1.1.0/24, 10.1.3.0/24 e 10.1.4.0/24.</i></b>
 
=== Compreendendo a rede e sub-redes ===
 
Neste exemplo, podemos visualizar centralmente uma rede principal, também chamada de backbone [espinha dorsal], que possibilita a comunicação entre as suas sub-redes. Podemos chamá-la também de sub-rede 10.1.0.0, enquanto que suas 3 sub-redes, podemos denominar:
* 10.1.1.0:formada pelas máquinas LAB3 e LAB1;
* 10.1.3.0:formada pelas máquinas LAB2 e LAB4; e
* 10.1.4.0:formada pelas máquinas LAB8 e LAB10.
 
Considerando a primeira interface de rede ethernet-eth0, nesta rede teremos como roteadores as máquinas:
* 10.1.0.101 - roteador padrão da sub-rede 10.1.1.0.
* 10.1.0.102 - roteador padrão da sub-rede 10.1.3.0.
* 10.1.0.108 - roteador padrão da sub-rede 10.1.4.0.
 
Define-se roteador padrão [default gateway] a máquina que fará a repassagem de pacotes de uma rede para outra, quando o pacote tiver um endereço IP de destino não condizente com a rede de origem. Ou seja, caso uma máquina necessitar de comunicar com outra rede diferente da qual ela se encontra, o gateway padrão será utilizado para passar para outra rede. Por isso, os gateways também são chamados de "pontos de passagem".
 
=== Configurando os roteadores ===
 
==== a. Configurando as interfaces de rede: ====
 
%PASSO% Usando a máquina LAB1 como exemplo teremos,
 
<pre>
#ifconfig eth0 10.1.0.101 netmask 255.255.0.0
#ifconfig eth1 10.1.1.201 netmask 255.255.255.0
</pre>
 
Para as outras máquinas mudariam apenas os endereços IP. Para as máquinas que não são roteadores seria necessário apenas o primeiro comando com o endereço IP e Máscara de rede correspondente. Lembre-se que o ifconfig muda as configurações somente em memória, sendo apagada quando o sistema for reinicializado.
 
%PASSO% Habilite o reencaminhamento de pacotes, através do comando:
<pre>
#echo 1 > /proc/sys/net/ipv4/ip_forward
</pre>
 
==== b. Configurando as rotas para os roteadores. ====
 
Cada roteador, neste caso, deverá ter duas rotas definida.
 
%PASSO% Máquina LAB1
<pre>
#route add -net 10.1.3.0/24 gw 10.1.0.102
#route add -net 10.1.4.0/24 gw 10.1.0.108
</pre>
 
A verdade é que roteadores precisam de outros roteadores para comunicar-se com outras redes. Você pode generalizar isso para Internet e imaginar o grande emaranhado de roteadores e redes que ela comporta.
 
O primeiro comando está adicionando uma rota no roteador LAB1 que dá acesso à rede 10.1.3.0 através do roteador 10.1.0.102, que é o roteador da última rede citada. O segundo comando é análogo mas refere-se à rede 10.1.4.0 que tem como roteador a máquina 10.1.0.108. Observe que estamos usando os endereços IP das interfaces eth0, pois os roteadores se comunicam através desta interface.
 
%PASSO% Máquina LAB2
<pre>
#route add -net 10.1.1.0/24 gw 10.1.0.101
#route add -net 10.1.4.0/24 gw 10.1.0.108
</pre>
 
%PASSO% Máquina LAB8
<pre>
#route add -net 10.1.1.0/24 gw 10.1.0.101
#route add -net 10.1.3.0/24 gw 10.1.0.102
</pre>
 
==== c. Configurando os clientes dos roteadores ====
 
Para configurar as rotas destas máquinas basta adicionar uma rota para o roteador de sua sub-rede.
 
%PASSO% Máquina LAB3.
<pre>
#route add -net 0.0.0.0/0 gw 10.1.1.201
</pre>
 
Este comando adiciona uma rota padrão através do roteador 10.1.1.201 cuja máquina é a LAB1, este endereço IP refere à segunda interface ethernet -eth1. O parâmetro 0.0.0.0/0 indica que é uma rota padrão e, mais precisamente, que todo e qualquer pacote com destino não pertinente a rede desta máquina será direcionada para o referente roteador.
 
%X% Caso existissem mais máquinas nesta sub-rede o comando a ser digitado seria o mesmo.
 
%PASSO% Máquina LAB4
<pre>
#route add -net 0.0.0.0/0 gw 10.1.3.202
</pre>
 
%PASSO% Máquina LAB10
<pre>
#route add -net 0.0.0.0/0 gw 10.1.4.208
</pre>
 
Depois destes comandos todas as máquinas da rede e sub-redes estão prontas para se comunicar.
 
=== Verificando o funcionamento da rede ===
 
Além do utilitário ping, para verificar a conectividade entre os hospedeiros [hosts], você pode ainda através do utilitário traceroute verificar o caminho dos pacotes, veja a aplicação do utilitário abaixo.
 
%PASSO% Execute o comando abaixo na máquina 10.1.3.204 e terá o seguinte resultado:
 
<pre>
#traceroute 10.1.4.210
traceroute to 10.1.4.210 (10.1.4.210), 30 hops max, 40 byte packets
1 lab2.sistemasabertos.com.br (10.1.3.202) 0.610 ms 0.483 ms 0.417 ms
2 lab8.sistemasabertos.com.br (10.1.0.108) 165.049 ms 128.369 ms 129.672 ms
3 * lab10.sistemasabertos.com.br (10.1.4.210) 137.100 ms 128.543 ms
</pre>
 
Esta lista refere às máquinas que o pacote passou até atingir seu destino. No momento, as linhas que nos interessam começam com um número. O número 1 refere-se à primeira máquina o qual o pacote chegou depois de sair da sua máquina de origem (máquina 10.1.4.210). Logo a máquina da linha número 1 é o roteador padrão da máquina de origem 10.1.4.210. Caso exista um servidor de DNS ou um outro meio para converter endereço IP para o Nome da Máquina, o segundo campo será o nome da máquina com seu respectivo domínio. Caso não exista, a saída do comando irá apresentar somente o endereço IP da respectiva máquina. Logo em seguida entre parêntese vem o endereço IP correspondente. Observe que as máquinas estão utilizando o domínio sistemasabertos.com.br.
 
 
Na segunda linha (Número 2) encontra-se a máquina lab8.sistemasabertos.com.br com endereço IP 10.1.0.108 (eth0), pois ela é o roteador da rede onde se encontra a máquina alvo (lab10).
 
Na terceira linha (Número 3) encontra-se a máquina lab10.sistemasabertos.com.br com endereço IP 10.1.4.210 que é a máquina alvo.
 
É importante salientar que no primeiro caso a interface detectada pelo traceroute foi a eth1 da máquina lab2 e no segundo caso foi a eth0 da máquina lab8. Isso acontece pelo fato de ser a primeira interface da máquina que recebeu o pacote.
 
No primeiro roteador a interface que faz parte da rede de onde originou o pacote é a eth1, já no segundo roteador é a eth0.
 
== Terminologia utilizada no capítulo ==
 
ARPANET: Rede de Defesa dos Estados Unidos. A ARPANET é conhecida como uma das primeira redes de computadores que posteriormente se transformou na Internet.
Broadcast: Método utilizado para difundir pacotes a todos as máquinas da rede
Buffer: Forma de armazenamento de dados em trânsito. Quando algum dado é recebido e deve ser transmitido ou transformado, este processo de transmissão ou transformação pode ser mais lento que a velocidade de recebimento e portanto deve ser a princípio armazenado. Para armazenar estes dados utiliza-se o buffer - parte da memória utilizada para armazenar dados com esta característica.
Cliente: Definido como uma máquina que faz requisições e espera respostas de outra máquinas - servidores.
Daemon: Definido como serviço, exemplo: daemon sendmail é equivalente a serviço sendmail.
Datagrama: Conjunto de dados dividido entre em cabeçalho e corpo utilizado para transmitir informações em redes TCP/IP. Também é conhecido como pacote de dados.
DNS: Domain Name Service - Serviço de Nomes e Domínio, sua finalidade é converter nomes de máquinas para endereços IP e vice-versa.
Endereço IP: número de 32 bits utilizado para identificar uma máquina na rede TCP/IP.
Firewall: Computador utilizado para prevenir ataques externos, tem a finalidade de garantir a segurança de uma rede.
Hacker: Indivíduo hábil em enganar os mecanismos de segurança de sistemas de computação e conseguir acesso não autorizado aos recursos destes, geralmente a partir de uma conexão remota em uma rede de computadores.
Host: Mesmo que hospedeiro - máquina em uma rede TCP/IP.
IP: Protocolo Internet - Protocolo responsável pela interligação de diferentes redes.
Máscara de sub-rede: número de 32 bits utilizado para definir a porção do endereço IP que corresponde ao endereço de rede e ao endereço de máquina na rede.
Modelo OSI: Open System Interconnection - é conhecido como o modelo de padronização de tecnologias de redes de computadores.
Porta de comunicação: É definido através de um número que tem a função de identificar um serviço específico em uma máquina. É considerado o endereço de um serviço
Protocolo: Regras e código envolvido na comunicação de redes de computadores.
Redes de Difusão: Redes onde todas as máquinas compartilham de um mesmo canal de comunicação(barramento)
Redes ponto a ponto: Redes em que apenas duas máquinas compartilham do mesmo canal de comunicação.
RFC: Request for Comment -documentos que define os padrões do protocolo TCP/IP
Roteador ou gateway: Definido como uma máquina capaz de repassar pacotes de uma rede para outra, é a máquina capaz de interligar redes.
Serviço: É definido como um programa que tem uma função específica, este serviço geralmente espera por solicitações podendo ou não responder com algum dado. Serviço é característico de servidor.
Servidor: Definido como a máquina que recebe solicitações e podendo ou não responder com algum tipo de dado
TCP: Protocolo de Controle de Transporte - Protocolo cuja finalidade é construir um serviço confiável sobre o protocolo IP
UDP: Protocolo de Datagrama do Usuário - Este é o outro protocolo de transporte utilizado pelo TCP.
URL: Uniform Resource Locator - Define as informações necessárias para estabelecer uma conexão, uma URL padrão informa: protocolo envolvido na comunicação, IP ou nome da máquina que se deseja comunicar e porta onde se deseja conectar. Exemplo: http://www.sistemasabertos.com.br.
 
== Links indicados ==
* http://www.tldp.org/HOWTO/Networking-Overview-HOWTO.html
** Este endereço possui informações gerais de redes TCP/IP, assim como configurar vários tipos de servidores que serão visto nos próximos capítulos. Site em inglês
* http://www.tldp.org/HOWTO/mini/IP-Subnetworking.html
** Este endereço contém informações sobre endereços IP, Classes de endereços IP, mascaras de sub-rede, sub-rede, roteamento e etc. Site em inglês.
* http://www.ietf.org/rfc.html
** Neste endereço você tem acesso às RFC, sendo que as mais relacionadas ao conjunto de protocolo TCP/IP são: 768, 791, 792 e 793, estas RFCs apresentam respectivamente informações sobre os protocolos UDP, IP, ICMP e TCP.
* http://ldp-br.conectiva.com.br
** Projeto de documentação do Linux em português. Neste endereço é possíveis encontrar informações gerais sobre o Linux, inclusive sobre redes TCP/IP.
* http://www.ictp.trieste.it/~radionet/1998_school/networking_presentation/index.html
** COMPUTER NETWORKING BASICS - por Fonda e Postogna, é um resumo em páginas html de um mini-curso básico de redes de computadores, bem ilustrado. Contém uma descrição bem simples e prática das camadas do modelo OSI. Em inglês.
* http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
** Lista de número de portas TCP e UPD, com classificação de portas oficiais e conflitos.
 
== Exercícios de revisão ==
 
1. Conceitue hospedeiro, roteador, firewall, cliente e servidor.
 
2. Qual a diferença entre os protocolos TCP e IP? Como eles trabalham em conjunto?
 
3. o que são protocolos? O que é uma pilha de protocolos? O que é o modelo OSI e para que serve?
 
4. O que é uma RFC e para que serve?
 
5. converta os números IP:
* a) 10.20.30.40 em hexadecimal e binário
* b) 11100111.11100111.10000001.00001010 em decimal e hexadecimal
* c) 0x11C4C040 em binário e decimal
 
6. Por que os endereços IP foram divididos em classes? Quais são as classes e como identificamos um número IP como pertencente a uma classe?
 
7. Qual é a quantidade de endereços de classe A matematicamente possíveis? E de classe B e C?
 
8. Determine qual é a classe dos seguintes endereços IP:
* a) 12.1.2.3
* b) 200.137.204.1
* c) 10.1.0.1/255.255.255.0
* d) 192.168.1.3/8
* e) 150.150.150.150
 
9. Conceitue e dê exemplos sobre os endereços especiais:
* a) de broadcast
* b) de rede
* c) privado
* d) localhost
* e) rede padrão (todas redes)
 
10. Subtraindo-se os endereços especiais de broadcast, de rede, privado, localhost e rede padrão (todas redes), qual é a quantidade de endereços que podem ser atribuídos para hosts na Internet para as classes A, B e C?
 
11. Suponha que sua rede tenha endereço de broadcast 10.1.255.255. Se na sua rede, contendo vários hosts com este mesmo endereço de broadcast, o que acontece se você executar o comando:
<pre>
$ ping 10.1.255.255
</pre>
 
12. O que é sub-rede? Qual a sua utilidade? Como criar uma sub-rede?
 
13. Suponha que recebemos um endereço classe A 11.0.0.0 e precisamos dividir esta rede em sub-redes de forma que atenda as necessidades da empresa. Suponha que seja necessário no mínimo 200 sub-redes, com no mínimo 300 hosts em cada sub-rede, com previsão de possível crescimento de 100% tanto em sub-redes quanto em hosts em cada sub-rede. Qual máscara de sub-rede você adotaria? Qual seriam as possíveis sub-redes? Cite um possível número IP desta sua sub-rede e identifique o número de rede, de sub-rede e host.
 
14. O que são portas TCP? Para que servem? Cite pelo menos 5 número de portas com seus respectivos serviços padrões.
 
15. O que é uma rota? Qual é o comando para se definir uma rota?
 
16. O que é um DNS? Para que serve um DNS? Qual é o endereço IP dos hosts: www.sistemasabertos.com.br, www.globo.com, www.uol.com.br?
 
17. Para que servem os arquivos: /etc/protocols, /etc/services, /etc/hosts?
 
18. O que é FQDN? Qual a utilidade do comando hostname?
 
19. Para que serve um módulo de placa de rede? Como você carrega um módulo de placa de rede?
 
20. Quais são os passos para se configurar manualmente uma interface de rede, com os comandos modprobe e ifconfig?
 
21. Qual é a utilidade do comando ifconfig?
 
22. Para que serve o comando route? Cite um exemplo, configurando uma estação, com roteador padrão 10.1.2.3
 
23. Para que serve o arquivo /etc/resolv.conf?
 
24. Qual é a utilidade do serviço inetd? Quando devemos utilizá-lo? Qual é o seu arquivo de configuração?Como eu poderia habilitar a execução de um serviço pelo inetd?
 
25. Qual é a utilidade do tcpd?
 
26. Qual é a utilidade dos comandos: host, netstat, tcpdump, traceroute e nmap? Cite um exemplo de utilização de cada um destes comandos.