ct

    TCP, IP e UDP

    Dicas do Guia do Hardware

    Ouvimos em palestras, na literatura técnica e pelo meio em geral chamarem o TCP/IP de protocolo. Na verdade o TCP é um protocolo e o IP é outro protocolo ambos de camadas diferentes. Temos também o UDP, que se diferencia do TCP por permitir transferências mais ágeis.Alexandre Müller
    18/12/2007


    TCP/IP não é um protocolo, são protocolos.


    Transportar dados de um computador ao outro é uma tarefa não tão fácil quanto parece. Para termos uma conexão confiável de uma ponta até a outra precisamos estabelecer diversos passos ou diversas abordagens que dividem o problema em pedaços. Um protocolo é uma palavra a qual seu uso na informática não é diferente do uso coloquial. Se o presidente da República for visitar um país da África ele deve seguir o protocolo de visitação daquele país. Assim é na informática, um protocolo é um conjunto de regras que possibilita a comunicação entre duas entidades. Os protocolos TCP/IP por exemplo foram desenvolvidos pelo exército americano com objetivo de:
    • Possibilitar uma rede distribuída
      Pensando num caso militar isto é muito importante pois a rede é capaz de sofrer um ataque sem comprometer a rede como um todo. Isto é obtido através da comutação (definição do caminho) por pacotes.

    • Ser uma rede que rode em múltiplas tecnologias.
      Você pode estar usando a internet através de uma linha discada ou ADSL, ou pior que isto pode estar acessando um servidor nestas tecnologias sem sequer saber disto.

    • Priorizar acesso a custo baixo ao invés da qualidade.
      Quando este modelo foi proposto ele era muito diferente das redes tradicionais das telecomunicações. A principal diferença é que ele não garante ao usuário uma conexão confiável e direta. A rede IP é probabilística, isto significa que existe a possibilidade (remota mas existe) de que o usuário tenha seu serviço negado.

    Esta tarefa se faz dividindo o problema em pedaços. Numa rede que roda sobre TCP/IP esta divisão se faz por: Interface, Rede, Transporte e Aplicação

    Ouvimos em palestras, literatura técnica e pelo meio em geral chamarem o TCP/IP de protocolo. Na verdade o TCP é um protocolo e o IP é outro protocolo ambos de camadas diferentes. Analisamos abaixo


    Interface 


    Define a representação de 1 bit: ótico, magnético, elétrico. E sua única finalidade é transportar estes bits de uma ponta a outra. Exemplos: Ethernet, Wireless, Fax-Modem.

    Apesar de pensarmos que todos fazem a mesma coisa, eles funcionam de uma forma totalmente diferente. Por exemplo o Fax Modem exige um número de telefone para estabelecer a conexão, desta forma ele transforma sinais de computador em som para então trocar informações. O Ethernet (aquele RJ45 de cabo geralmente azul) já possui uma forma automática para o usuário de descobrir a quem ele deve se comunicar e fazendo isso muito rápido. E o Wireless por exemplo tem uma definição de bit totalmente diferente transportando-os pelo ar.


    Rede


    Considera a rede num todo e transporta dados de qualquer máquina até qualquer outra máquina. Exemplo: IP (Até hoje foi o único modelo proposto mais existe suas versões como versão 4 ou 6)

    A tarefa desta camada é fazer com que os dados cheguem ao seu destino final. Existe uma tabela de roteamento nas máquinas e roteadores que especifica qual rota deve ser tomada para cada IP ou grupo de IPs. Através desta tabela os pacotes não seguem caminhos totalmente arbitrários mas seguem um caminhos um pouco mais direcionados.
     

    Transporte


    Torna esta comunicação através de um fluxo de bytes, tornando a confiável ou usável. Exemplos: TCP, UDP.

    Como numa rede IP o pacote pode tomar diversos caminhos diferentes, existe a possibilidade de um pacote IP chegar antes de outro pacote que foi lançado anteriormente. Existe até a possibilidade do seu pacote se perder e nunca chegar no seu destino. Por isso foi proposto o TCP, que é um protocolo cuja finalidade é deixar a comunicação confiável. Enquanto a finalidade do UDP é ser ágil.
    Usando um exemplo didático podemos dizer que: Por causa desta implementação, usando-se o UDP, o programador corre o risco de enviar a palavra "ABACAXI" e receber no outro lado a palavra "CABAAX". Enquanto usando o TCP ele não corre este risco. Na prática o uso do UDP se restringe a:

    • Telefonia e aplicações interativas em tempo real.
    • Multicast.
    • Teste de perda dos pacotes.

    Caso sua aplicação não vise estes 3 usos, é muito mais inteligente optar por TCP.


    Aplicação


    Protocolo definido pelo aplicativo do usuário. Exemplos: HTTP, FTP, SMTP, POP, IMAP, Bit Torrent, etc...

    Na internet hoje usamos em geral uma porta para cada aplicação. Mas esta abordagem não é obrigatória porque o que definirá a aplicação é a sintaxe dos dados. Por exemplo podemos ter um servidor HTTP rodando sobre a porta 23 ou 3000 nada impede isto.

    Todos estes protocolos a princípio não dependem um do outro. Por exemplo uma requisição HTTP será transmitida em 1 ou vários datagramas TCP, que por sua vez será transmitida em 1 ou vários pacotes IP, que pode ser transmitidas em 1 ou vários quadros ethernets. Assim como um pacote que você coloca uma embalagem a mais em cada entidade que passa.
    Hipoteticamente poderíamos ter uma requisição HTTP rodando sobre TCP/IP rodando sobre um código Morse ;)

    Na teoria e prática indo mais afundo no exemplo:

    Interface : Quadro Ethernet:

    Prêambulo (8 bytes)
    Destino (6 Bytes)
    Origem (6 Bytes)
    Tipo (2 Bytes)
    Dados (1500 Bytes)
    Checksum (4 Bytes)

      Nota: Estes endereços (origem e destino) são MAC Address, a sua placa de rede desconhece o que é um IP

    Rede: Pacote IP versão 4

    Versão do IP
    (4 bits)
    Número de bytes do header (4 Bytes) Tipo de serviço
    (8 bits)
    Número de bytes total do pacote (16 B) Identificador
    (6 b)
    Flags (3b) Deslocamento do fragmento
    Protocolo Checksum Endereço Origem
    (32 bits)
    Endereço Destino
    (32 Bits)
    Opcionais DADOS

    Este é um protocolo cujo objetivo é saber como levar estes pacotes de um ponto ao outro. Para isso ele utiliza o IP , campo de 32 bits ou 4 bytes como conhecemos. O IP é hierárquico ou seja, ele é capaz de especificar seu lugar geográfico de acordo com seu endereço e mais que isso ele consegue estimar uma sub-região através dos seus primeiros bits.

    Transporte: Datagrama TCP

    Porta de Origem (16 bits) Porta de Destino (16 bits) Número de sequência (32 bits) ACK confirmação de recebimento Número de bytes do header (4 bits)
    Janela Checksum Apontador dados urgentes Opcionais DADOS

    O datagrama TCP é chamado de orientado ao conexão. Isto porque ele é confiável.
    O TCP faz retransmissões se for necessário e também ordena os seus pacotes (coisa que o IP não faz). Tanto o TCP como UDP são usados na programação através de um socket que é na verdade uma espécie de arquivo onde o que é "gravado" de um lado é "lido" do outro.

    Aplicação: Requisição HTTP

    O texto enviado através do TCP numa requisição HTTP pode ser da seguinte maneira:

      Metodo / HTTP/1.1
      Host: dominio
      User-Agent: Navegador
      Accept: Tipos

    Exemplo geral: Então como funciona isso, como eu abro meu orkut?
    Quando você faz uma requisição HTTP, por exemplo no servidor www.orkut.com
    O navegador monta uma requisição HTTP mais ou menos assim:

    GET /index.html HTTP/1.1
    Host: www.orkut.com
    User-Agent: Mozilla/5.0
    Accept: text/xml;application/xml;text/html;text/plain;image/png

    Então joga esta requisição nos dados do datagrama TCP. Por sua vez o datagrama TCP usará a porta 80 como porta de destino (por ser http). Este datagrama TCP inteiro irá entrar nos dados do pacote IP. O DNS traduzirá quem é o IP do domínio www.orkut.com, e colocará este endereço no pacote IP. Este pacote IP será colocado nos dados do quadro ethernet (se ele for menor que 1500 bytes). Por sua vez seu computador irá tentar descobrir quem é o endereço Mac daquele IP. Se você estiver usando uma internet através de um roteador da rede interna para internet ele usará o MAC do roteador. E então sua placa de rede monta o quadro e envia.
    O quadro será como na figura abaixo:

    tcpip
    Veja que a placa de rede não sabe nada sobre porta, nem sobre IP. Estas são abstrações providas pelo IP e pelo TCP. Então a sua placa só tem 1 identificador que é o MAC. Os roteadores só enxergam (só desempacotam) até o IP, eles não abrem (não deveriam abrir) um pacote TCP. Através do IP eles conseguem saber aonde este pacote deve ir. Quando este pacote chega na sua máquina o sistema operacional irá abrir o pacote TCP e então ele poderá ser usado pelo servidor do outro lado.

    Em geral quando se vai programar usando o IP, usa-se o TCP. Isto porque o TCP além de robusto não é pesado. Enquanto a outra alternativa (UDP) é pouco confiável e te obriga a fazer o trabalho de reenviar pacotes na mão. Sobre este assunto queria deixar algumas considerações tais como:

    • O endereço "www.guiadoharware.net/artigos" não é um host. O /artigos é tratado pelo servidor na requisição HTTP. Então o host de "www.guiadohardware.net/artigos" é www.guiadohardware.net
    • A placa de rede só conhece endereço de hardware, o IP não faz parte da implementação das placas de rede.
    • A porta é uma abstração criada pelo Sistema Operacional através da implementação do TCP/UDP, ela não faz parte da implementação do IP
    • O papel dos roteadores é tomar decisões através dos IP's, e levar eles até o seu roteador mais próximo (que ele) do destino.  Sendo assim eles conseguem levar um pacote até o Japão por exemplo redirecionando-o até 30 vezes.




    Blog:

    Add to Google

    » Gostou do texto? Veja nossos livros impressos:
    Hardware | Redes | Servidores | Kurumin 7

    ... ou encontre o que procura usando a busca:

cb
Livros de Carlos E. Morimoto HOME