Blog do Urubatan
msgbartop
Desenvolvedor, Palestrante, Escritor, Nerd Assumido e Pai do Marcus :D
msgbarbottom

31 Oct 08 Coisas que todo desenvolvedor deveria saber sobre redes

Redes de Computadores

Qualquer bom desenvolvedor de sistemas, independente de linguagem, tem a obrigação de conhecer um pouco sobre configuração de redes.
Principalmente hoje em dia em que a grande maioria das aplicações, praticamente todas, tem que acessar dados via rede.
É inconcebível um desenvolvedor web que não sabe como funciona o TCP/IP, ou pior, as vezes nem sabe o que é um endereço IP.

Então para resolver parte deste problema, seguem alguns dados básicos sobre o funcionamento de redes que todos os desenvolvedores são obrigados a saber, para evitar parecer um retardado mental em um forum, ou pior, em uma entrevista de emprego :D

Este post não vai ser o compendio de todo o conhecimento sobre redes da história, mas a idéia é possibilitar pelo menos um conhecimento básico.

Rede = Mais de um computador ligado de alguma forma.
O primeiro passo para a criação de uma rede, é a conexão fisica dos computadores, para esta conexão fisica temos diversas opções, seguem alguns exemplos:

  • Dois computadores, cada um com uma placa de rede e um cabo de rede “cross”
  • Mais de dois computadores, cada um com uma placa de rede e um HUB, ou um Switch
  • Um computador com um modem se conectando a uma rede de um servidor também com um model (nesta categoria entram conexões discadas a internet, conexões diretas a rede de uma empresa e conexões de banda larga)
  • Dois computadores ligados por uma porta serial ou paralela
  • Dois computadores com placas de rede wireless criando uma rede Ponto a Ponto (é similar a utilização de um cabo “cross”)
  • Mais de dois computadores com placas de rede wireless conectados através de um access point

Todas estas opções criam redes, simples ou complexas, dois computadores ligados atravéz de um cabo formam uma rede, a internet é uma rede.

Depois do cabo ligado, ou da conexão fisica estabelecida, normalmente existe um protocolo de baixo nível que vai permitir que os protocolos de mais alto nível funcionem. Estes protocolos normalmente são especificos para cada meio de transporte, como pode ser visto na lista abaixo:

  • Redes sem fio normalmente utilizam os protocolos 802.11 a/b/g
  • Redes ethernet (placas de rede comuns) normalmente utilizam o protocolo 802.3
  • Redes que trabalham com modem e linha telefonica normalmente trabalham com o protocolo RS232 sobre a conexão telefonica que tem o seu proprio protocolo
  • Redes que utilizam a porta serial ou paralela utilizam normalmente o protocolo RS232

Depois de uma conexão fisica estabelecida, é necessário um protocolo para a utilização desta conexão fisica. Este protocolo de mais alto nível, vai ser executado sobre o protocolo de baixo nível descrito anteriormente. Neste nível em uma rede TCP/IP temos o protoclo ARP.
ARP = Address Resolution Protocol
Este protocolo permite que computadores consigam localizar outros computadores na mesma rede física. não confundir com DNS que veremos depois.
O ARP é um protocolo baseado em broadcast, e funciona mais ou menos como se um computador gritasse no cabo de rede: Quem é o dono do endereço IP 192.168.1.1?
Todos os computadores na mesma rede física receberão a pergunta, apenas o dono do endereço vai responder, algo como: Este endereço é meu, meu endereço fisico é: 3e:43:87:a2:01:23
O endereço físico da mensagem é o famoso endereço MAC
MAC = Media Access Control
o IEEE define 3 tipos de endereço MAC
Unicast – que identifica apenas uma máquina
Broadcast – identifica todas as maquinas da rede local, tem o valor fixo FF:FF:FF:FF:FF:FF
Multicast – endereços que identificam um grupo de maquinas da rede local

Com o ARP funcionando, ja é possível que as maquinas da rede local se encontrem, descubram para qual endereço físico mandar as mensagens IP. Então chegou a hora de começarmos a falar de TCP/IP
TCP/IP = Transmission Control Protocol/Internet Protocol
Existe também o UDP/IP mas se você entender o TCP o UDP vai ser barbada.

TCP/IP como pode ser visto no nome, é uma combinação de 2 protocolos, o Internet Protocol e o Transmission Control Protocol.

A pilha de protocolos IP começa no ARP, inclui o ICMP (o protocolo utilizado pelo Ping e Traceroute) e o IP.
Aqui é importante saber que existem 4 categorias de endereços IP:

  1. Endereços Públicos – são os endereços que as maquinas conectadas a internet possuem
  2. Endereços Reservados apra redes internas – São endereços normalmente utilizados por roteadores ADSL e redes internas de empresas
  3. Endereços de Multicast – São endereços utilizados para multimidia, por exemplo, streaming de video
  4. Endereços de rede e broadcast – estes últimos não são reservados de verdade, eles dependem da configuração da rede

Para explicar estas categorias vou falar um pouco de Endereçamento IP, se quiser mais detalhes siga o link para a Wikipedia.

Endereços Públicos são os que não são reservados, nem de multicast.

Existem as seguintes faixas de endereços reservados para utilização em redes internas:

Faixa de endereços de IP No de Redes No de IPs IPs por rede
10.0.0.0 – 10.255.255.255 126 16.777.215 16.777.216
172.16.0.1 – 172.31.255.254 16.382 1.048.576 65 534
192.168.0.0 – 192.168.255.255 2.091.150 65.535 256

Alem destes endereços reservados para redes privadas, a rede 127.0.0.0/8, é toda reservada para apontar para “localhost”, o endereço utilizado normalmente é 127.0.0.1 mas qualquer endereço desta rede funciona exatamente igual.

Alem destes endereços reservados, as redes são dividias em 5 classes (A, B, C, D e E) a classe D é a rede de multicast mencionada anteriormente.

Classe Gama de Endereços
A 1.0.0.0 até 127.255.255.255
B 128.0.0.0 até 191.255.255.255
C 192.0.0.0 até 223.255.255.255
D 224.0.0.0 até 239.255.255.255
E 240.0.0.0 até 247.255.255.255

Para se utilizar um endereço IP que não esteja reservado para redes privadas, é necessário pagar por ele, empresas compram faixas de endereços IP. Todos os provedores precisam ter uma faixa de endereços IP. Por isto os endereços começaram a acabar, e a pelo menos 10 anos, se fala em substituir os endereços IP de 4 bytes que utilizamos hoje, por endereços IP de 16 bytes. Mas acredito que isto vai deporar um pouco ainda.

Bom, isto é o mínimo que você precisa conhecer sobre redes, algum dia destes escrevo um pouco mais sobre algum assunto especifico, mas se você não conhecer isto sobre redes, você não deveria programar aplicações que utilizam rede (ou seja, qualquer uma hoje em dia).

O assunto ficou inacabado com certeza, mas ja escrevi bastante e perdi a vontade de falar sobre isto, provavelmente volte a vontade assim que eu ler outra atrocidade em algum forum como a que deu origem a este post :D )

Para saber mais sobre redes leia sobre o Modelo OSI, Endereçamento IP, Domain Name System, Enderaçamento CIDR e principalmente sobre Roteamento IP.

Espero que este post seja útil para alguem, e meus parabéns para os que leram até aqui!

If you enjoyed this post, make sure you subscribe to my RSS feed!

Reader's Comments

  1. |

    O que alguém poderia ter escrito em um fórum que motivaria escrever essa cola-para-prova-de-redes-da-faculdade?

    Quero dizer, manda aê as atrocidades ou o link para elas :)

    [],
    AC

    Reply to this comment
  2. |

    O link para as atrocidades iria desmoralizar o cara :D
    E se alguem passar em uma prova sobre redes só com isto, muda de faculdade :D

    Reply to this comment
  3. |

    Concondo contigo.
    Mas isto é apenas a ponta do iceberg. Existem outros assuntos que também acho são básicos para um, digamos assim, um bom uso da “Ciência do Desenvolvimento de Software” (Ih… acho que criei mais um curso para as Universidades…)

    Reply to this comment
  4. |

    Com certeza é só a ponta do iceberg,
    Saber corretamente OO, Tecnicas de Refactoring, Design Patterns, …
    Tudo é necessário …
    Falando nisto, acho que vou escrever um pouco sobre refactoring :D

    Reply to this comment
  5. |

    Só para constar, o IPv6 não vai usar seis bytes de endereçamento; vai usar 16 bytes.

    Reply to this comment
  6. |

    Obrigado pela correção :D

    Reply to this comment
  7. |

    [...] Coisas que todo desenvolvedor deveria saber sobre redesQualquer bom desenvolvedor de sistemas, independente de linguagem, tem a obrigação de conhecer um pouco sobre configuração de redes. [...]

    Reply to this comment
  8. |

    Obrigação de conhecer um pouco de tudo ! Não somente no que toca a assuntos relacionados a propria informática, mas a outros também !

    Acho que não existe lugar onde conhecimentos gerais e aleatórios sejam mais benvindos que no desenvolvimento de software.

    Um bom desenvolvedor tem de possuir bom conhecimento de redes, sistemas operacionais, psicologia, química, fisica quantica, ufologia, klingon, teologia, peteca, e por aí vai… ( Parece até aqueles anuncios de empresa que pedem MS-Word nos requisitos pra programador, rsrsrsr )

    Já repararam quanto conhecimento adquirimos ao longo dos anos em nossos projetos ? Meu caso: Medicina, Logística, Engenharia, Vendas, Aviação Militar, Biologia, Mercado Financeiro, inumeros outros…

    Cheguei a conclusão que o único bom desenvolvedor de sistemas é Deus
    ;-)

    Abraços,

    Mac

    Reply to this comment

Leave a Comment