Informática Numaboa - Linux

Redes Linux

Qua

11

Abr

2007


20:22

  • Imprimir
(8 votos, média 3.88 de 5) 


Nível intermediário Para fazer com que máquinas se "enxerguem" numa rede Linux, especialmente quando a rede é composta por várias sub-redes, é preciso configurar um roteamento correto. Este tutorial não fala dos roteamentos em si, é apenas um texto introdutório indispensável para quem pretende (ou precisa) encarar esta boca.

O que é uma "rede de computadores"?

Não custa repetir o que é feijão com arroz, só que, uma abordagem um pouco menos técnica, talvez seja um pouco menos chata smile

Uma rede de computadores é apenas uma porção "coisinhas" que permitem uma conversa entre os chamados nós de rede. Estes nós podem ser qualquer coisa que consiga se comunicar de alguma forma: computadores, impressoras, banco 24 horas ou qualquer outra coisa que você imaginar. Não importa como estejam interligados - pode ser através da moderníssima fibra ótica ou de pombos correio. É óbvio que algumas opções têm as suas vantagens (principalmente se o seu gato odiar pombos laugh )

Estrela
Fig.1 - Topologia estrela

Quando apenas dois computadores estão interligados, não se considera isto uma rede - este arranjo recebe o nome de "link de rede" ou enlace de rede. Normalmente chamamos de rede um conjunto de três ou mais máquinas interligadas que possuam as seguintes características:

  • Tamanho: se você interligar os quatro computadores do seu escritório, então você tem uma LAN (Local Area Network - Rede de Área Local). Por outro lado, se uma das máquinas estiver no Brasil, a outra na China e a terceira nos EUA - ou seja, apesar de bem longe uma da outra, conseguem se comunicar - então você tem uma WAN (Wide Area Network - Rede de Área Ampliada).
  • Topologia: se você tiver uma redinha (ou uma redona), desenhe uma mapa da mesma. As linhas são os links de rede e cada um dos nós é um ponto. Se cada um dos pontos estiver conectado com um ponto central, seu desenho vai mostrar uma estrela. Isto significa que todos estão se comunicando através de um único ponto - esta disposição é conhecida como "topologia estrela" (Fig.1).
    Por outro lado, é possível se comunicar em linha (Fig.2) ou interligar várias sub-redes, seja qual for a topologia das ditas cujas (Fig.3).
  • <
    Em linha
    Fig.2 - Topologia em linha
    Sub-redes
    Fig.3 - Sub-redes interligadas
  • Rede Física: são os elementos usados para construir a rede. Vamos ao expediente mais antigo (e mais barato) usado para criar uma rede: pessoas que carregam disquetes de lá para cá, atualizando os dados das máquinas. Parece esquisito, mas não faz tanto tempo assim que este tipo de rede era o mais comum smile Logo depois apareceu a conexão discada, que, em muitas regiões do Brasil, ainda é a única opção para se conectar a redes mais distantes e maiores. Os carregadores de disquete foram substituídos por um modem (MOdulador/DEModulador) que transforma uma conexão telefônica normal num link de rede. O modem transforma as informações que o computador envia em sons, "ouve" os sons enviados como resposta e os transforma novamente em informações que o computador possa entender. Não é muito eficiente, porque as linhas telefônicas não foram projetadas para servir computadores, mas quebra um galhão.
    O modo mais comum de conectar máquinas é através de placas Ethernet. Existem vários tipos delas, mas o princípio de funcionamento é sempre o mesmo: todas precisam estar "caladas" para que uma delas possa se manifestar e, se duas "falarem" ao mesmo tempo, a comunicação é interrompida e precisa recomeçar do zero. É um jeito meio "xiita" de se comunicar em rede, mas funciona!
    Geralmente chamamos cada uma das conexões de um nó de "interface de rede", ou simplesmente "interface". O Linux chama a primeira interface Ethernet de "eth0", a segunda de "eth1" e, se houver interfaces chiques de fibra ótica, de "fddi0", "fddi1", etc. O comando Linux /sbin/ifconfig devolve uma listagem de todas as interfaces disponíveis no seu sistema. Experimente...
  • Protocolo: a última coisa que é preciso saber sobre redes é a linguagem usada entre os comunicantes. É claro que dois modems ou as placas Ethernet só podem "conversar" se o "idioma" for entendido pelas partes. Este idioma é chamado de protocolo em nível de link, ou seja, as informações são trocadas entre links de rede individuais - o chamado "one-hop" ou "um-pulo". A palavra protocolo também é usada para definir outras convenções que serão citadas mais adiante.

O que é a Internet?

A Internet é uma "baita" de uma WAN que tomou conta do planeta Terra. É a maior rede de computadores que existe hoje em dia. O termo "internetworking", origem do termo Internet, significa conectar redes individuais para formar uma rede maior, ou seja, a Internet é composta por um zilhão de sub-redes.

Qual é o tamanho da Internet? A Internet é global. Quais são suas características físicas? Bem, aí a resposta é um pouco mais longa: cada uma das suas pequenas sub-redes usa um tipo de conexão diferente, possui topologia diversa e tem uma natureza física individual. Os protocolos "falados" por cada um dos links também costumam ser heterogêneos, ou seja, a Internet não é só uma Torre de Babel, são milhões delas!

Como funciona a Internet?

A primeira pergunta que deve estar pipocando na sua cabeça é: como é que cada um dos nós da Internet pode falar com os outros se todos usam protocolos diferentes em nível de link para se comunicar?

A resposta não é muito simples: um outro protocolo é necessário para controlar como os dados devem transitar pela rede. O protocolo em nível de link preconiza como ir de um nó para o outro se estiverem conectados diretamente. Por outro lado, o "protocolo de rede" define como ir de um ponto a outro da rede atravessando vários links se for necessário. Um é para o vizinho do lado, o outro é para grandes distâncias...

Para a Internet, o protocolo de rede é o IP (Internet Protocol versão 4). Não é o único que existe, mas é o mais utilizado. A versão mais nova deste protocolo está começando a ser usada agora e é conhecida como IPv6.

Para enviar uma mensagem de um lado para outro, a máquina gera um pouco de IP, envia-o para o seu modem que, usando algum protocolo em nível de link, o envia para um modem receptor do seu provedor. Lá, seus dados IP são enviados para um nó da rede do provedor, que os enviam para um nó maior, que os enviam para outro nó e assim por diante. Um nó conectado a duas ou mais redes possui uma interface para cada rede e é chamado de roteador.

Este sanduíche de protocolos é conhecido como "pilha de protocolos" (protocol stack) e pode ser esquematizado da seguinte forma:

Protocol stack
Fig.4 - Pilha de protocolos

Na Fig.4, o navegador (o aplicativo no topo à direita) solicita uma página web ao servidor (o aplicativo no topo à esquerda). Para fazer uma solicitação ao servidor remoto, o navegador aciona a camada TCP (Transmission Control Protocol). Este protocolo de controle de transmissão é usado em mais de 90% do tráfego da Internet porque é usado tanto na web quanto para e-mails. A camada TCP entrega a solicitação à camada IP, responsável por descobrir qual a direção que ela deve tomar. Definida a direção, a camada IP entrega a solicitação à camada de link apropriada, a qual a transmite para a outra ponta do link.

Na outra ponta, a camada de link entrega a solicitação à camada IP que verifica se a mensagem é destinada a este servidor - se não, a devolve para uma camada de link diferente para que alcance outro nó. Se o destino for o correto, a camada IP transfere a solicitação para a camada TCP acima dela que, por sua vez, a entrega ao servidor.

Resumindo, temos o seguinte:

  • O aplicativo (navegador ou servidor) decide com quer se comunicar e o que quer enviar.
  • A camada TCP envia pacotes especiais para iniciar uma conversa com o outro lado e depois embrulha dados em pacotes TCP. Pacotes são dados que transitam por uma rede acondicionados de uma forma especial. A camada TCP entrega os pacotes para a camada IP - fica enviando cada um dos pacotes até que a camada IP acuse seu recebimento. Este processo, chamado de transmissão, é regido por uma porção de regras complexas que controlam quando transmitir, qual o tempo de espera para uma retransmissão, etc. Cada pacote recebe um conjunto de números para que, depois de recebidos, o outro lado possa colocá-los na ordem certa (a ordem de chegada não necessariamente está ordenada).
  • A camada IP verifica o destino do pacote e descobre qual é o próximo nó para o qual o pacote deve ser enviado. Este processo é chamado de roteamento, que pode ser tão simples quanto mandar o pacote para um único nó existente ou tão complexo quanto decidir qual deve ser o próximo nó escolhendo um em um milhão...

Coisas do IP

O negócio da camada IP é descobrir como "rotear" pacotes para que cheguem ao seu destino final. Para tornar isto possível, cada uma das interfaces de uma rede precisa de um "endereço IP". Um endereço IP é composto por quatro números separados por pontos, por exemplo, 201.35.190.155. Cada um dos números fica entre 0 e 255.

As interfaces de uma mesma rede costumam ter endereços IP vizinhos. Por exemplo, 201.35.190.155 fica ao lado da máquina com o endereço IP 210.35.190.156. É bom lembrar que um roteador é um nó com interfaces para mais de uma rede, por isto ele terá um endereço IP para cada uma das interfaces.

A camada IP do kernel do Linux mantém uma tabela com todas as "rotas" possíveis. Esta tabela descreve como vários grupos de endereços IP podem ser alcançados. A rota mais simples é chamada de "rota default": se a camada IP não souber mais o que fazer, então esta será a rota usada para mandar o pacote para frente. Se você quiser saber quais rotas estão definidas na sua máquina, use o comando /sbin/route.

As rotas podem apontar para um link ou para um nó em particular que faça parte de uma outra rede. Por exemplo, se você estiver conectado com o seu provedor, sua rota default aponta para o link do modem do provedor... é por onde você pode alcançar a net (Fig.5).

link de modems
Fig.5 - Rota default num link de modems

Quando você tem uma pequena rede no seu escritório com conexão para o mundo exterior, a coisa é um pouco mais complicada. Na Fig.6, a máquina do chefe pode falar diretamente com a máquina da contabilidade, com a das vendas e com o firewall, mas precisa saber que os pacotes destinados para o mundo externo precisam passar pelo firewall. Isto significa que você tem duas rotas: uma que diz "se for para a minha rede, despache para a contabilidade e para as vendas" e um outra rota default que diz "se não, envie para o firewall".

Rota default
Fig.6 - Rota default em rede interna e mundo externo

Grupos de endereços IP: Máscaras de rede

Há mais um detalhe: existe uma notação padrão para grupos de endereços IP, algumas vezes chamados de "endereço de rede". Assim como um número de telefone pode ser separado num prefixo de operadora, num de DDD e no número propriamente dito, um endereço IP também pode ser dividido num prefixo de rede e no resto.

Quando se diz "a rede 10.20.30", nos referimos a 256 endereços que vão de 10.20.30.0 até 10.20.30.255. Se a rede tiver mais do que 256 máquinas, então se diz "a rede 10.20", ou seja, nos referimos a todos os endereços que vão de 10.20.0.0 até 10.20.255.255.

Não se costuma escrever "10.20.0.0 - 10.20.255.255" porque podemos resumir esta notação com "10.20.0.0/16". Esta coisa meio estranha de "/16" é chamada de máscara de rede.

Deu nó na cabeça? Não se preocupe, a explicação até que é bem simples. Cada um dos números entre os pontos de um endereço IP é um número que pode ser expresso com 8 bits (0 a 255 é o mesmo que 00000000 a 11111111). É claro que preferimos escrever os números na sua forma decimal, muito mais fácil de ler. O "/16" significa que os primeiros 16 bits são o endereço de rede, ou seja, a parte "10.20" representa a rede. Como são dois números e cada número é composto por 8 bits, 2x8=16! Isto significa que qualquer endereço IP que comece com "10.20" faz parte da rede: "10.20.30.10" e "10.20.30.50" fazem parte da rede, mas "10.30.1.1" não.

Para facilitar as coisas, geralmente são usadas máscaras do tipo "/8", "/16" e "/24". Por exemplo, "10.0.0.0/8" é uma rede imensa que contém os endereços entre 10.0.0.0 e 10.255.255.255 - são mais de 16 milhões de endereços! Já a rede 10.0.0.0/16 é um pouco menor, com endereços que vão de 10.0.0.0 até 10.0.255.255. A menor das três é a 10.0.0.0/24, com endereços entre 10.0.0.0 e 10.0.0.255.

Existe uma outra forma para determinar máscaras de rede - podem ser escritas como um endereço IP. Usando os mesmos exemplos anteriores, a rede 10.0.0.0/8 também pode ser escrita como 10.0.0.0/255.0.0.0 onde 255 indica a parte que queremos fixar como endereço de rede. Neste tipo de notação, a rede 10.0.0.0/16 é expressa como 10.0.0.0/255.255.0.0 e a rede 10.0.0.0/24 como 10.0.0.0/255.255.255.0.

Por último, é importante observar que o endereço IP mais alto em qualquer rede fica reservado como "endereço de broadcast". Este endereço é usado para enviar mensagens para todos que estiverem na rede, ou seja, dispara-se uma mensagem e todos a recebem.

Forma curtaForma completa Número máximo de máquinasComentário
/8/255.0.0.0 16.777.215Costuma-se chamar de "Classe-A"
/16/255.255.0.0 65.535Costuma-se chamar de "Classe-B"
/17/255.255.128.0 32.767
/18/255.255.192.0 16.383
/19/255.255.224.0 8.191
/20/255.255.240.0 4.095
/21/255.255.248.0 2.047
/22/255.255.252.0 1.023
/23/255.255.254.0 511
/24/255.255.255.0 255Costuma ser chamada de "Classe-C"
/25/255.255.255.128 127
/26/255.255.255.192 63
/27/255.255.255.224 31
/28/255.255.255.240 15
/29/255.255.255.248 7
/30/255.255.255.252 3

Nomes de máquinas e endereços IP

Cada interface de rede em cada um dos nós possui um endereço IP. Acontece que, como é muito mais fácil se lembrar de nomes do que de números, resolveu-se criar um sistema de tradução de nomes para números e vice-versa. Este sistema é conhecido como DNS (Domain Name System - Sistema de Nomes de Domínios) e é o responsável pela tradução de, por exemplo, "www.numaboa.com" em 200.195.184.106.

Existem milhares de computadores na Internet que oferecem este serviço, todos trabalhando em conjunto - quando um não pode fazer a tradução, aciona um outro servidor que talvez tenha a resposta; se o segundo também não puder, aciona um terceiro e assim sucessivamente até que se obtenha a resposta desejada.

Para que se possa utilizar este sistema de tradução, a máquina precisa indicar pelo menos um "servidor de nomes" - a lista deles costuma estar no arquivo /etc/resolv.conf.

Como as solicitações e as respostas DNS são bastante pequenas (1 pacote para cada uma), usar o protocolo TCP é um exagero porque a retransmissão automática, o ordenamento e a confiabilidade oferecidas por este protocolo têm um preço - geram pacotes extras. O protocolo utilizado pelo DNS é o UDP (User Datagram Protocol), despojado mas muito eficiente.

Serviços diferentes: Email, Web, FTP, Servidor de Nomes

No exemplo anterior foi mostrado um navegador enviando uma solicitação TCP para um servidor web num outro nó. Agora imagine que este nó que tem um servidor web também atue como servidor de email, servidor FTP e como servidor de nomes. Como é que ele sabe qual servidor deve responder à conexão TCP?

É aqui que entram as "portas" do TCP e do UDP. Cada pacote possui um espaço para a "porta de destino", o qual informa o serviço desejado. Por exemplo, a porta 25 do TCP é para o servidor de email, a porta 80 para o servidor web. A lista de portas pode ser encontrada em /etc/services.

Existe também o problema inverso: se duas janela do mesmo navegador estiverem recebendo partes diferentes de um site, como é que o Linux sabe para qual janela se destina cada pacote recebido? Através das "portas de origem". Cada uma das conexões TCP recebe uma porta de origem diferente, mesmo que a conexão seja para o mesmo endereço IP e para a mesma porta de destino. Geralmente a primeira porta de origem é a 1024 e o número de identificação vai aumentando com o número de conexões realizadas.

O jeitão dos pacotes

Os super-curiosos, com certeza querem saber como são os tais dos pacotes. Existem várias ferramentas que ficam rastreando os pacotes que passam pelo Linux. A mais comum é o "tcpdump", mas o "ethereal" é mais legal. Estes programas são conhecidos como "packet sniffers" ou "farejadores de pacotes".

O início de cada pacote informa seu destino, de onde ele foi enviado, o tipo de pacote e outros detalhes administrativos. Esta parte é chamada de "cabeçalho do pacote". O resto do pacote, que contém os dados que estão sendo transmitidos, é conhecido como "packet body" - "corpo do pacote".

O cabeçalho possui pelo menos 20 bytes e, de acordo com a RFC 791, tem a seguinte estrutura:

.-------+-------+---------------+-------------------------------.
|Versão |  IHL  |Tipo of Serviço|     Comprimento Total         |
|-------+-------+---------------+-------------------------------|
|         Identificação         |Flags|     Fragmento Offset    |
|---------------+---------------+-------------------------------|
|  Time to Live |    Protocolo  |    Checksum do Cabeçalho      |
|---------------+---------------+-------------------------------|
|                    Endereço da Origem                         |
|---------------------------------------------------------------|
|                    Endereço do Destino                        |
`---------------------------------------------------------------'

Os campos importantes são o Protocolo, que indica se se trata de um pacote TCP (número 6), UDP (número 17) ou algum outro, o endereço IP de origem e o endereço IP do destino.

Se o campo do protocolo informar que se trata de um pacote TCP, então segue imediatamente um cabeçalho TCP, também com, no mínimo, 20 bytes:

.-------------------------------+-------------------------------.
|      Porta de Origem          |       Porta de Destino        |
|-------------------------------+-------------------------------|
|                      Número da Sequência                      |
|---------------------------------------------------------------|
|                    Número de Reconhecimento                   |
|-------------------+-+-+-+-+-+-+-------------------------------|
|  Data |           |U|A|P|R|S|F|                               |
| Offset| Reservado |R|C|S|S|Y|I|            Janela             |
|       |           |G|K|H|T|N|N|                               |
|-------+-----------+-+-+-+-+-+-+-------------------------------|
|           Checksum            |         Urgent Pointer        |
`---------------------------------------------------------------'

Os campos mais importantes são a porta de origem e a porta de destino, as quais indicam quais são os serviços para os quais o pacote se destina (ou se origina, no caso dos pacotes de resposta). Os números da sequência e de reconhecimento são usados para ordenar os pacotes e informar a outra ponta quais pacotes já foram recebidos. As flags ACK, SYN, RST e FIN são bits únicos usados para negociar a abertura (SYN) e o fechamento (RST ou FIN) de conexões.

Depois deste cabeçalho vem a mensagem propriamente dita, enviada pelo aplicativo (o corpo do pacote). Um pacote normal pode ter até 1500 bytes. Isto significa que, descontados os cabeçalhos, o máximo de espaço disponível para os dados é de 1460 bytes, ou seja, mais de 97% do total.


Resumo de comandos e informações

  • /sbin/ifconfig: ifconfig vem de InterFaceCONFIG e fornece todas as interfaces de rede disponíveis no seu sistema.
  • /sbin/route: este comando lista todas as rotas definidas na máquina.
  • /etc/resolv.conf: este arquivo contém os endereços IP dos servidores de nomes.
  • /etc/services: arquivo com a lista de portas dos diversos protocolos.

Referências

Texto de Rusty Russel sob licença GNU GPL com tradução livre da vovó vovo

Вадим Логофетсковорода гриль индукциялобановский александр отзывывозрождение церковьлюстра потолочнаястоимость пиломатериалалобановский александр