Uma breve explicação do modelo OSI
Imagine que o objetivo de uma rede é simplesmente transportar os bits uns e zeros usados pelos programas de um ponto a outro. Da mesma forma que as trilhas da placa-mãe transportam informações do processador para a memória RAM, um cabo de par trançado,ou uma rede wireless pode transportar as mesmas informações de um PC a outro.
Do ponto de vista do aplicativo, faz pouca diferença acessar um arquivo gravado diretamente no HD ou acessá-lo a partir de um compartilhamento dentro da rede, ou na internet. Em ambos os casos, o próprio sistema operacional (com a ajuda do TCP/IP e das demais camadas que formam a rede) é quem acessa o programa e o entrega completo ao programa.
Entra em cena então, o famoso modelo OSI, que tenta explicar o funcionamento da rede, dividindo-a em sete camadas:
7 - Aplicação (aqui está o programa que envia e recebe dados através da rede);
6 - Apresentação;
5 - Sessão;
4 - Transporte (aqui entra o sistema operacional, que controla a transmissão dos dados, detectando problemas na transmissão e corrigindo erros);
3 - Camada de rede (aqui está o protocolo TCP/IP);
2 - Link de dados (aqui está a placa de rede e os switches);
1 - Camada física (aqui estão os cabos e hubs).
O modelo OSI é interessante, pois serve como deixa para explicar diversos aspectos teóricos do funcionamento da rede. Existem livros e cursos dedicados inteiramente ao assunto, que tentam explicar tudo detalhadamente, classificando cada coisa dentro de uma das camadas. Mas, se deixarmos o preciosismo de lado, é muito fácil entender como essas camadas funcionam:
Tudo começa com o aplicativo que precisa acessar alguma informação na rede. Digamos que você abriu o navegador e está acessando o http://www.hardware.com.br/.
Estamos na camada 7 (aplicação), onde o programa simplesmente solicita os arquivos para o sistema operacional, sem se preocupar com o que precisa ser feito para obtê-lo. É como quando você compra alguma coisa pela loja online: você não está preocupado com a logística envolvida, sabe apenas que daqui a dois dias o produto vai chegar na sua casa via sedex.
Ao receber a solicitação, o sistema operacional abre uma sessão (camada 5). Ela funciona de forma semelhante a um tícket de suporte: é aberta ao receber a solicitação e fechada apenas quando o problema é resolvido, ou seja, quando o programa recebe de volta os dados que solicitou.
Como um bom atendente, o sistema operacional ficará de prontidão durante todo o processo, aguardando resposta do servidor e verificando se todos os arquivos chegaram corretamente ao aplicativo. Caso necessário, ele solicita retransmissão dos pacotes que se perderam.
Depois de abrir a sessão, o sistema "vai a luta": Verifica qual é o endereço IP do site, qual protocolo será usado e outras informações necessárias, para então enviar a requisição ao servidor que hospeda o site, solicitando o envio dos arquivos que compõem a página. Aqui já estamos na camada 4 (transporte), onde o sistema operacional faz o trabalho do atendente, que faz o pedido para a central de distribuição, contendo o item que será entregue e o endereço de destino.
Você pode se perguntar o que aconteceu com a camada 6. Não a citei no exemplo porque nem sempre ela é usada. Ela funciona como uma camada extra, que é usada quando é necessário fazer algum trabalho adicional. Um exemplo de uso para a camada 6 são os túneis encriptados criados usando o SSH. Eles fazem com que os dados sejam transmitidos de forma encriptada pela rede, aumentando a segurança de forma transparente tanto para o aplicativo quanto para o sistema operacional.
Chegamos a camada 3 (rede), onde entra em ação o endereçamento IP. A requisição é transformada num pacote de dados e endereçada ao endereço IP do servidor do guia do hardware. É como se, ao invés de usar email ou telefone, o pedido precisasse ser enviado via carta à central de distribuição, que responderia enviando o produto. O sistema operacional atua como o atendente que faz o pedido (camada 4, transporte) e verifica o status do envio (camada 5, sessão). O TCP/IP seria representado, no exemplo, pelo trabalho dos correios, incluindo o envelope e endereços.
Uma observação importante sobre o TCP/IP é que ele é, na verdade, composto por dois protocolos. O "TCP" trabalha no nível 4, auxiliando o sistema operacional na criação, no envio e na checagem dos pacotes, enquanto o "IP" trabalha no nível 3 e é responsável pelo endereçamento. Os dois trabalham em conjunto, como se fosse uma coisa só mas tecnicamente existe essa distinção.
Voltando à explicação, depois de criado e endereçado corretamente, o pacote é transportado através da rede local, passando pela placa de rede, pelos cabos e pelo hub (switch), até chegar ao gateway da rede e, a partir daí, à internet. É nesta fase que chegamos às camadas 1 e 2, onde é feito o trabalho pesado.
Em primeiro lugar, a placa de rede não entende pacotes TCP/IP, é por isso que ela é chamada de "Placa Ethernet" e não "Placa TCP/IP". Ela não sabe nem mesmo diferenciar um endereço IP do outro. Tudo que ela conhece são endereços MAC (os endereços físicos das placas de rede, gravados ainda em fábrica). Para despachar o pacote pela rede local (de forma que ele chegue até o gateway), ela o transforma em um "frame", contendo o endereço MAC da placa destino. É como se ela colocasse o envelope original dentro de outro, que usa um endereçamento mais simples.
Inicialmente, as redes ethernet foram desenvolvidas para trabalhar usando cabos coaxiais, onde um micro é diretamente ligado ao outro. Os cabos são ligados a cada placa de rede usando um conector "T", formando um único cabo contínuo:
Quando uma estação precisa transmitir dados para outra, ela simplesmente manda o sinal pelo cabo. Como todas estão ligadas ao mesmo cabo, todas recebem a transmissão, mas apenas o destinatário correto (identificado pelo endereço MAC da placa de rede) lê os dados dentro do pacote. As demais estações simplesmente a ignoram.
Os cabos coaxiais não são mais usados atualmente, dando lugar aos cabos de par trançado e as redes wireless. Porém, graças as origens, as redes Ethernet utilizam até hoje uma topologia lógica de barramento, independentemente da forma como os micros estão fisicamente interligados, eles se comportam como se estivessem todos ligados no mesmo cabo.
Voltando ao tema original, os pacotes são endereçados usando o endereço MAC de cada placa de rede, um endereço de 12 dígitos que vem gravado de fábrica na EPROM pela própria placa. A menos que intencionalmente modificado, cada placa de rede possui um endereço MAC diferente. É como no dinheiro: Duas cédulas só possuem o mesmo número de série se pelo menos uma delas for falsa.
Omo apenas uma estação pode falar de cada vez, antes de transmitir dados a estação irá "ouvir" o cabo. Se perceber que nenhuma estação está transmitindo, enviará seu pacote, caso contrário, esperará até que o cabo esteja livre. Este processo é chamado de "Crrier Sense" ou "Sensor Mensageiro".
Contudo, quando duas estações ouvem o cabo ao mesmo tempo, ambas acabam percebendo que o cabo está livre e enviam seus pacotes simultaneamente. Temos, então, uma colisão de dados.
Dois pacotes sendo enviados ao mesmo tempo geram um sinal elétrico mais forte, que pode ser facilmente percebido pelas placas próximas. A primeira placa que perceber essa colisão irradiará para toda a rede um sinal especial de alta frequência que cancelará todos os outros sinais que estejam trafegando através do cabo e alertará as demais placas do ocorrido.
Sendo avisadas de que a colisão ocorreu, as duas placas "faladoras" esperarão um número aleatório de milissegundos antes de tentarem transmitir novamente. Este processo é chamado de TBEB (Truncated Binary Exponential Backoff). Inicialmente, as placas escolherão entre 1 ou 2, se houver outra colisão escolherão entre 1 e 4, em seguida entre 1 e 8 milissegundos, sempre dobrando os números possíveis até que consigam transmitir os dados. Apesar de as placas poderem fazer até 16 tentativas antes de desistirem, normalmente os dados são transmitidos na segunda ou na terceira tentativa.
Veja que, apesar de não causarem perda ou corrupção de dados, as colisões provocam uma grande perda de tempo, resultando na diminuição do desempenho da rede. Quanto maior for o número de estações, maior será a quantidade de colisões e menor será o desempenho da rede. Por isso existia o limite de 30 micros por segmento em uma rede de cabo coaxial, e não é permitido interligar diretamente mais do que 7 hubs em uma rede atual, com cabos de par trançado.
Pode parecer estranho estar falando sobre os cabos coaxiais que, felizmente, deixamos de usar há mais de uma década, mas esses mesmos princípios continuam válidos nas redes wireless, onde todos os micros estão ligados no mesmo "cabo" (o ar) e as transmissões de todos os micros da rede são recebidas por todos os demais, com a possibilidade de haver colisão e roubo de dados, como nas antigas redes de cabo coaxial.
Em uma rede cabeada atual, temos a figura do hub, ou switch, que atua como a figura central, que interliga todos os micros:
Se temos cabos separados para cada micro, você pode imaginar que não existe o problema das colisões, pois, afinal, o hub pode encaminhar as transmissões diretamente de um micro a outro. É aqui que entra a diferença entre os hubs e os switches, que usamos atualmente. Explicar a diferença entre os dois é uma boa forma de explicar a diferença entre as camadas 1 e 2 do modelo OSI.
Os hubs são dispositivos burros, que operam na camada 1. Eles não entendem pacotes nem endereços de rede, simplesmente pegam os uns e zeros que recebem em uma porta e os retransmitem para todas as outras. O hub atua simplesmente como um centralizador e repetidor, não é mais inteligente que um pedaço de cabo. Ao usar um hub, as colisões continuam ocorrendo, exatamente como acontecia se você estivesse usando uma rede antiga, com cabo coaxial.
Os switches, por sua vez, trabalham na camada 2. Eles entendem frames e endereços MAC e por isso são capazes de "fechar circuitos", transmitindo os pacotes apenas para o micro ligado na placa correta.
Apesar disso, os switches não entendem TCP/IP. Isso é trabalho para os roteadores, que trabalham na camada 3 e tomam suas decisões basedas nos endereços IP dos emissores e destinatários dos pacotes, tentando sempre usar a rota mais curta.
Protocolo TCP/IP
O TCP/IP é um conjunto de protocolos de comunicação entre computadores em rede(Também chamado de pilha de protocolos TCP/IP). Seu nome vem de dois protocolos: o TCP(Transmission Control Protocol - Protocolo de Controle de Transmissão) e o IP(Internet Protocol - Protocolo de Internet). O conjunto de protocolos pode ser visto como um modelo de camadas, onde cada camada é responsável por um grupo de tarefas, fornecendo um conjunto de serviços bem definidos para o protocolo da camada superior. As camadas mais altas estão logicamente mais próximas do usuário(chamada camada de aplicação) e lidam com dados mais abstratos, confiando em protocolos de camadas mais baixas para tarefas de menor nível de abstração.
Protocolos para Internet
Os protocolos para internet formam o grupo de protocolos de comunicação que implementam a pilha de protocolos sobre a qual a internet e a maioria das redes comerciais funcionam. Eles são algumas vezes chamados de "protocolos TCP/IP", já que os dois protocolos: o protocolo TCP - Transmission Control Protocol(Protocolo de Controle de Transmissão), e o IP - Internet Protocol(Protocolo de Internet) foram os primeiros a serem definidos.
O modelo OSI descreve um grupo fixo de sete camadas que pode ser comparado, a grosso modo, com o modelo TCP/IP. Essa comparação pode causar confusão ou trazer detalhes mais internos para o TCP/IP.
O modelo inicial do TCP/IP é baseado em quatro níveis: Hst/rede, inter-rede, transporte e aplicação. Surgiu, então, um modelo híbrido, com cinco camadas, que retira o excesso do modelo OSI e melhora o modelo TCP/IP: Física, Enlace, Rede, Transporte e Aplicação.
Resumidamente, o modelo é o que podemos chamar de uma "solução prática para problemas de transmissão de dados". Textualmente isso pode parecer muito genérico, pois na realidade para melhor compreensão de um protocolo TCP/IP devemos usar exemplos práticos.
Camada Exemplo
4 – Aplicação – (camada OSI de 5 a 7) | HTTP, FTP, DNS (Protocolos de routing como BGP e RIP, que, por algumas razões, são executados sobre TCP e UDP respectivamente, podem também ser considerados parte da camada de rede). |
3 – Transporte (Camadas OSI de 4 e 5) | TCP, UDP, RTP, SCTP (Protocolos como OSPF, que é executado sobre IP, podem também ser considerados parte da camada de rede). |
2 – Internet ou Inter – Rede (Camada OSI 3) | Para TCP/IP o protocolo é IP, MPLS (Protocolos requeridos como ICMP e IGMP é executado sobre IP, mas podem ainda ser considerados parte da camada de rede; ARP não roda sobre IP). |
1 – Interface com a rede (Camada OSI 1 e 2) | Ethernet, Wi-Fi, Modem, etc. |
As camadas mais próximas do topo estão logicamente mais próximas do usuário, enquanto aquelas mais abaixo estão logicamente mais perto da transmissão física do dado. Cada camada tem um protocolo de camada acima e um protocolo de camada abaixo (Exceto as camadas da ponta, obviamente), que podem usar serviços de camadas anteriores ou fornecer um serviço, respectivamente.
Enxergar as camadas como fornecedores ou consumidores de serviço é um método de abstração para isolar protocolos de camadas acima dos pequenos detalhes de transmitir bits através, digamos, de ethernet, e a detecção de colisão enquanto as camadas abaixo evitam ter de conhecer os detalhes de todas as aplicações e seus protocolos.
Essa abstração também permite que camadas de cima forneçam serviços que as camadas de baixo não podem fornecer. Por exemplo, o IP é projetado para não ser confiável e é um protocolo best effort delivery. Isso significa que toda camada de transporte deve indicar se irá ou não fornecer confiabilidade e em qual nível.
O TCP , é um protocolo orientado a conexões confiável que permite a entrega sem erros de um fluxo de bytes.
O UDP fornece integridade de dados (VIA CHECKSUN) mas não fornece entrega garantida; já o TCP fornece tanto integridade dos dados quanto garantia de entrega (retransmitindo até que o destinatário receba o pacote).
Camada de Aplicação
A camada de aplicação é a camada que a maioria dos programas de rede usa de forma a se comunicar através de uma rede com outros programas. Processos que rodam nessa camada são específicos da aplicação. O dado é passado do programa de rede, no formato usado internamente por essa aplicação, e é codificado dentro do padrão de um protocolo.
Alguns programas específicos são levados em conta nessa camada. Eles provêem serviços que suportam diretamente aplicações do usuário. Esses programas e seus correspondentes protocolos incluem o HTTP, FTP, SMTP, SSH, DNS e outros.
Uma vez que o dado de uma aplicação foi codificado dentro do padrão de um protocolo da camada de aplicação ele será passado para a próxima camada da pilha IP.
Na camada de transporte, aplicações irão em sua maioria fazer uso de TCP ou UDP, e aplicações servidoras são frequentemente associadas com um número de porta. Portas para aplicações servidoras são oficialmente alocadas pela IANA(Internet Assigned Numbers Authority) mas desenvolvedores de novos protocolos hoje em dia freqüentemente escolhem os números de portas por eles mesmos. Uma vez que é raro ter mais que alguns poucos programas servidores no mesmo sistema, problemas com conflito de portas são raros. Aplicações também geralmente permitem que o usuário especifique números de portas arbitrários através de parâmetros em tempo de execução.
Aplicações cliente conectando para fora geralmente usam um número de porta aleatório determinado pelo sistema operacional.
O pacote relacionado à camada de aplicação é chamado Mensagem.
Camada de Transporte
Os protocolos na camada de transporte podem resolver problemas como confiabilidade (o dado alcançou seu destino?) e integridade (os dados chegaram na ordem correta?). Na suíte de protocolos TCP/IP os protocolos de transporte também determinam para qual aplicação um dado qualquer é destinado.
Os protocolos dinâmicos de routing, que tecnicamente cabem nessa camada do TCP/IP, são geralmente considerados parte da camada de rede. Como exemplo tem-se o OSPF (protocolo IP número 89).
O TCP, número 6 do protocolo IP, é um mecanismo de transporte "confiável", orientado à conexão e que fornece um stream de bytesconfiável, garantindo assim que os dados cheguem íntegros (não danificados e em ordem). O TCP tenta continuamente medir o quão carregada a rede está e desacelera sua taxa de envio para evitar sobrecarga. Além disso, o TCP irá tentar entregar todos os dados corretamente na seqüência especificada. Essas são as principais diferenças dele para com o UDP, e pode se tornar desvantajoso emstreaming, em tempo real ou aplicações de routing com altas taxas de perda na camada internet.
Recentemente criou-se SCTP (Stream Control Transmission Protocol, Protocolo de Transmissão de Controle de Stream), que também consiste em um mecanismo de transporte "confiável". Ele provê suporte a multihoming, onde o final de uma conexão pode ser representada por múltiplos endereços IP (representando múltiplas interfaces físicas), de maneira que, se algum falhar, a conexão não é interrompida. Ele foi desenvolvido inicialmente para transportar SS7 sobre IP em redes telefónicas, mas também pode ser usado para outras aplicações.
O UDP (User Datagram Protocol), número 17 do protocolo IP, é um protocolo de datagrama sem conexão. Ele é um protocolo de "melhor esforço" ou "não confiável". Não porque ele é particularmente não confiável, mas porque ele não verifica se os pacotes alcançaram seu destino, e não dá qualquer garantia que eles irão chegar na ordem. Se uma aplicação requer estas características, então ela mesma terá que provê-las ou usar o protocolo TCP.
O UDP é tipicamente usado por aplicações como as de mídia de streaming (áudio, vídeo etc), onde a chegada na hora é mais importante do que confiabilidade, ou para aplicações de simples requisição/resposta como pesquisas de DNS, onde o overhead de configurar uma conexão confiável é desproporcionalmente largo.
O DCCP está atualmente em desenvolvimento pelo IETF. Ele provê controle de fluxo das semânticas do TCP, enquanto mantém o modelo de serviço de datagramas do UDP visível para o usuário. O DHCP é incrementado automaticamente sem intervenção do usuário.
Tanto o TCP quanto o UDP são usados para transmitir um número de aplicações de alto nível. As aplicações em qualquer endereço de rede são distinguidas por seus endereços de porta TCP ou UDP. Por convenção, certas portas "bem conhecidas" estão associadas com aplicações específicas.
O pacote da camada de transporte é chamado Segmento.
Camada de Rede
Como definido anteriormente, a camada de rede resolve o problema de obter pacotes através de uma rede simples. Exemplos de protocolos são o X.25 e o Host/IMP da ARPANET.
Com o advento da internet novas funcionalidades foram adicionadas nesta camada, especialmente para a obtenção de dados da rede de origem e da rede de destino. Isso geralmente envolve rotear o pacote através de redes distintas que se relacionam através da internet.
Na suíte de protocolos para a internet, o IP executa a tarefa básica de levar pacotes de dados da origem para o destino. O protocolo IP pode transmitir dados para diferentes protocolos de níveis mais altos, esses protocolos são identificados por um único número de protocolo IP.
Alguns dos protocolos transmitidos por IP, como o ICMP (usado para transmitir informação de diagnóstico sobre a transmissão IP) e o IGMP(usado para gerenciar dados multicast) são colocados acima do IP mas executam funções da camada internet. Isso ilustra uma incompatibilidade entre os modelos da internet e OSI. Todos os protocolos de routing, como o BGP, o OSPF e o RIP são também parte da camada de internet, muito embora eles possam ser vistos como pertencentes a camadas mais altas na pilha.
O datagrama (PDU) da camada de rede é geralmente conhecido como "pacote". Lembrando que todas as camadas tem seu PDU que variam o nome em : Dados (Aplicação), Segmento (Transporte), Pacote (Rede), Quadros (Enlace) e Bits (Física e LLC que é sub-camada de enlace)
Camada de Enlace
A camada da pele enlace não é realmente parte do modelo TCP/IP, mas é o método usado para passar quadros da camada de rede de um dispositivo para a camada de rede de outro. Esse processo pode ser controlado tanto em software (device driver) para a placa de rede quanto em firmware ou chipsets especializados. Esses irão executar as funções da camada de enlace de dados como adicionar um header de pacote para prepará-lo para transmissão, então de fato transmitir o quadro através da camada física. Do outro lado, a camada de enlace irá receber quadros de dados, retirar os headers adicionados e encaminhar os pacotes recebidos para a camada de rede. Essa camada é a primeira normatizada do modelo, é responsável pelo endereçamento, roteamento e controle de envio e recepção. Ela não é orientada à conexão, se comunica pelos datagramas (pacotes de dados).
Entretanto, a camada de enlace não é sempre tão simples. Ela pode também ser um VPN (Virtual Private Network, Rede Privada Virtual) ou túnel, onde pacotes da camada de internet, ao invés de serem enviados através de uma interface física, são enviados usando um protocolo de tunneling e outra (ou a mesma) suíte de protocolos. O VPN ou túnel é usualmente estabelecido além do tempo, e tem características especiais que a transmissão direta por interface física não possui (por exemplo, ele pode criptografar os dados que passam através dele). Esse uso recursivo de suíte de protocolos pode ser confuso uma vez que a "camada" de enlace é agora uma rede inteira. Mas é um método elegante para implementar funções freqüentemente complexas. Embora seja necessário muito cuidado para prevenir que um pacote já empacotado e enviado através de um túnel seja mais uma vez empacotado e reenviado pelo mesmo.
O pacote da camada de enlace é conhecido como Quadro.
Camada Física
A camada física do Protocolo TCP/IP trata das características elétricas e mecânicas do meio, como tipos de conectores e cabos utilizado para estabelecer uma comunicação.





