# Protocolo de Internet

Na informática, o Protocolo de Internet (em inglês: Internet Protocol, ou o acrónimo IP), popularmente chamado endereço IP, é um protocolo de comunicação na rede e na internet (modelo TCP/IP e modelo OSI), é usado para identificar cada equipamento computacional conectado garantindo assim que as informações cheguem no destino (roteamento dos dados). Tecnicamente são as regras de endereçamento/roteamento dos pacotes de dados. O importante protocolo da internet IP está na camada intitulada camada de rede.

## Funcionamento

Os dados numa rede IP que são enviados em blocos referidos como ficheiros (os termos são basicamente sinónimos no IP, sendo usados para os dados em diferentes locais nas camadas IP). Em particular, no IP nenhuma definição é necessária antes do nó tentar enviar ficheiros para um nó com o qual não comunicou previamente.
O IP oferece um serviço de datagramas (pacotes) não confiável (também chamado de melhor esforço); ou seja, o pacote vem quase sem garantias. O pacote pode chegar desordenado (comparado com outros pacotes enviados entre os mesmos nós), também podem chegar duplicados, ou podem ser perdidos por inteiro. Se a aplicação requer maior confiabilidade, esta é adicionada na camada de transporte.
Os roteadores são usados para reencaminhar datagramas IP através das redes interconectadas na segunda camada. A falta de qualquer garantia de entrega significa que o desenho da troca de pacotes é feito de forma mais simplificada. (Note que se a rede cai, reordena ou de outra forma danifica um grande número de pacotes, o desempenho observado pelo utilizador será pobre, logo a maioria dos elementos de rede tentam arduamente não fazer este tipo de coisas - melhor esforço. Contudo, um erro ocasional não irá produzir nenhum efeito notável.)
O IP é o elemento comum encontrado na Internet pública dos dias de hoje. É descrito no RFC 791 da IETF, que foi pela primeira vez publicado em Setembro de 1981. Este documento descreve o protocolo da camada de rede mais popular e atualmente em uso. Esta versão do protocolo é designada de versão 4, ou IPv4. O IPv6 tem endereçamento de origem e destino de 128 bits, oferecendo mais endereçamentos que os 32 bits do IPv4.

## Formato do Cabeçalho do IPv4

| + | 0 - 3 | 0 - 3 | 0 - 3 | 0 - 3 | 4 - 7 | 4 - 7 | 4 - 7 | 4 - 7 | 8 - 15 | 8 - 15 | 8 - 15 | 8 - 15 | 8 - 15 | 8 - 15 | 8 - 15 | 8 - 15 | 16 - 18 | 16 - 18 | 16 - 18 | 19 - 31 | 19 - 31 | 19 - 31 | 19 - 31 | 19 - 31 | 19 - 31 | 19 - 31 | 19 - 31 | 19 - 31 | 19 - 31 | 19 - 31 | 19 - 31 | 19 - 31 |
| 0 | Versão | Versão | Versão | Versão | Tamanho do cabeçalho | Tamanho do cabeçalho | Tamanho do cabeçalho | Tamanho do cabeçalho | Tipo de Serviço (ToS) (agora DiffServ e ECN) | Tipo de Serviço (ToS) (agora DiffServ e ECN) | Tipo de Serviço (ToS) (agora DiffServ e ECN) | Tipo de Serviço (ToS) (agora DiffServ e ECN) | Tipo de Serviço (ToS) (agora DiffServ e ECN) | Tipo de Serviço (ToS) (agora DiffServ e ECN) | Tipo de Serviço (ToS) (agora DiffServ e ECN) | Tipo de Serviço (ToS) (agora DiffServ e ECN) | Comprimento (pacote) | Comprimento (pacote) | Comprimento (pacote) | Comprimento (pacote) | Comprimento (pacote) | Comprimento (pacote) | Comprimento (pacote) | Comprimento (pacote) | Comprimento (pacote) | Comprimento (pacote) | Comprimento (pacote) | Comprimento (pacote) | Comprimento (pacote) | Comprimento (pacote) | Comprimento (pacote) | Comprimento (pacote) |
| 32 | Identificador | Identificador | Identificador | Identificador | Identificador | Identificador | Identificador | Identificador | Identificador | Identificador | Identificador | Identificador | Identificador | Identificador | Identificador | Identificador | Flags | Flags | Flags | Offset | Offset | Offset | Offset | Offset | Offset | Offset | Offset | Offset | Offset | Offset | Offset | Offset |
| 64 | Tempo de Vida (TTL) | Tempo de Vida (TTL) | Tempo de Vida (TTL) | Tempo de Vida (TTL) | Tempo de Vida (TTL) | Tempo de Vida (TTL) | Tempo de Vida (TTL) | Tempo de Vida (TTL) | Protocolo | Protocolo | Protocolo | Protocolo | Protocolo | Protocolo | Protocolo | Protocolo | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum |
| 96 | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem | Endereço origem |
| 128 | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino | Endereço destino |
| 160 | Opções | Opções | Opções | Opções | Opções | Opções | Opções | Opções | Opções | Opções | Opções | Opções | Opções | Opções | Opções | Opções | Opções | Opções | Opções | Opções | Opções | Opções | Opções | Opções | Opções | Opções | Opções | Opções | Opções | Opções | Opções | Opções |
| 192 | Dados | Dados | Dados | Dados | Dados | Dados | Dados | Dados | Dados | Dados | Dados | Dados | Dados | Dados | Dados | Dados | Dados | Dados | Dados | Dados | Dados | Dados | Dados | Dados | Dados | Dados | Dados | Dados | Dados | Dados | Dados | Dados |
* Versão - o primeiro campo do cabeçalho de um datagrama IPv4 é o campo de versão, com quatro bits.
* Tamanho do cabeçalho (IHL) - o segundo campo, de quatro bits, é o IHL (acrónimo para Internet Header Length, ou seja, Comprimento do Cabeçalho da Internet) em número de palavras de 32 bits (4 bytes) do cabeçalho IPv4. Como o cabeçalho IPv4 prevê o campo OPÇÕES que pode ser utilizado para estender o cabeçalho IP, o campo IHL essencialmente especifica onde exatamente termina o cabeçalho e onde iniciam os dados do datagrama IPv4. Um cabeçalho IPv4 mínimo tem vinte bytes de comprimento, logo o valor mínimo em decimal no campo IHL seria cinco, conforme: $IPv4_{HLength}=IHL*4_{bytes}\rightarrow IPv4_{HLength}=5*4_{bytes}\rightarrow IPv4_{HLength}=20_{bytes}$
* Tipo de serviço (ToS) - no RFC 791, os oito bits seguintes são alocados para um campo tipo de serviço (ToS), agora DiffServ e ECN. A intenção original era para um nó especificar uma preferência para como os datagramas poderiam ser manuseados assim que circulariam pela rede. Por exemplo, um nó pode definir o campo de valores do seu ToS dos datagramas IPv4 para preferir pequeno desfasamento de tempo, enquanto que outros podem preferir alta confiabilidade. Na prática, o campo ToS não foi largamente implementado. Contudo, trabalho experimental, de pesquisa e desenvolvimento se focou em como fazer uso destes oito bits. Estes bits têm sido redefinidos e mais recentemente através do grupo de trabalho do DiffServ na IETF e pelos pontos de código do Explicit Congestion Notification (ECN) (RFC 3168.)
* Comprimento (pacote) - o campo de dezesseis bits seguinte do IPv4 define todo o tamanho do datagrama, incluindo cabeçalho e dados, em bytes de oito bits. O datagrama de tamanho mínimo é de vinte bytes e o máximo é 64 Kb. O tamanho máximo do datagrama que qualquer nó requer para estar apto para manusear são 576 bytes, mas os nós mais modernos manuseiam pacotes bem maiores. Por vezes, as subredes impõem restrições no tamanho, em cada caso os datagramas têm que ser "fragmentados". A fragmentação é manuseada quer no nó quer no comutador de pacotes no IPv4, e apenas no nó no caso do IPv6.
* Identificador - o campo seguinte de dezesseis bits é um campo de identificação. Este campo é usado principalmente para identificar fragmentos identificativos do datagrama IP original. Alguns trabalhos experimentais sugerem usar o campo IP para outros propósitos, tais como adicionar pacotes para levar a informação para datagrama, de forma a que ajude a pesquisar datagramas para trás com endereços fonte falsificados.
* Flags - o campo de três bits que segue é usado para controlar ou identificar fragmentos.
* Offset - o campo offset do fragmento tem treze bits, e permite que um receptor determine o local de um fragmento em particular no datagrama IP original.
* Tempo de vida (TTL) - um campo de oito bits, o TTL (time to live, ou seja, tempo para viver) ajuda a prevenir que os datagramas persistam (ex. andando aos círculos) numa rede. Historicamente, o campo TTL limita a vida de um datagrama em segundos, mas tornou-se num campo de contagem de nós caminhados. Cada comutador de pacotes que um datagrama atravessa decrementa o campo TTL em um valor. Quando o campo TTL chega a zero, o pacote não é seguido por um comutador de pacotes e é descartado.
* Protocolo - um campo de protocolo de oito bits segue-se, definindo o protocolo seguinte usado numa porção de dados de um datagrama IP. A Internet Assigned Numbers Authority mantém uma lista de números de protocolos. Os protocolos comuns e os seus valores decimais incluem o ICMP (1), o TCP (6).
* Checksum - o campo seguinte é um campo de verificação para o cabeçalho do datagrama IPv4. Um pacote em trânsito é alterado por cada comutador que atravesse. Um desses comutadores pode comprometer o pacote, e a verificação é uma forma simples de detectar a consistência do cabeçalho. Este valor é ajustado ao longo do caminho e verificado a cada novo nó. Envolve apenas verificação do cabeçalho (não dos dados).
* Endereço de origem/Endereço de destino - a seguir ao campo de verificação, seguem-se os endereço de origem e de destino, de 32 bits cada um. Note que os endereços IPv6 de origem e destino são de 128 bits cada.
* Opções - Campos do cabeçalho adicionais podem seguir o campo do endereço de destino, mas estes não são normalmente usados. Os campos de opção podem ser seguidos de um campo de caminho que assegura que os dados do utilizador são alinhados numa fronteira de palavras de 32 bits. (No IPv6, as opções movem-se fora do cabeçalho padrão e são especificados pelo campo Next Protocol, semelhante à função do campo "Protocolo" no IPv4).
A seguir, três exemplos de opções que são implementadas e aceitas na maioria dos roteadores:
* Security (especifica o nível de segurança do datagrama (usado em aplicações militares));
* Timestamp (Faz com que cada roteador anexe seu endereço e sua marca temporal (32 bits), que serve para depuração de algoritmos de roteamento); e
* Record route (faz com que cada roteador anexe seu endereço).

## Endereçamento IPv4 e encaminhamento

Talvez os aspectos mais complexos do IP sejam o endereçamento e o encaminhamento. O endereçamento define como os endereços IP dos nós finais são atribuídos e como as subredes dos endereços de IP dos nós são divididos e agrupados. O encaminhamento IP é feito por todos os nós, mas mais comumente por roteadores de rede, que tipicamente usam os protocolos IGP ou EGP para ajudar na leitura de datagramas IP que reencaminhem decisões através de IPs em redes ligadas.
Na internet, e nas redes particulares que vemos hoje nas empresas ou mesmo nas residências, o protocolo de comunicação usado pelos computadores chama-se IP - sigla para Internet Protocol. Criado no fim dos anos 70, o protocolo IP tem como "missão" não só fazer dois computadores "conversarem", mas também possibilitar a interligação de duas ou mais redes separadas. Com raríssimas exceções, praticamente todas as redes do mundo acabaram, de uma forma ou de outra, sendo conectadas entre si e foi essa comunhão de redes que acabou formando o que conhecemos hoje por internet (nome que, em português, pode ser traduzido por "inter-redes" ou "redes interligadas").
O protocolo IP possui um esquema de endereçamento parecido com os números de telefone. Assim como qualquer telefone, no mundo todo, é único (considerando o DDD e o código de país), cada computador ligado na internet possui um número único, que é chamado de endereço IP ou número IP. Esse número serve para identificar o computador na internet. Se você precisar conversar com alguém pela internet, basta mandar mensagens endereçadas ao endereço IP do computador da pessoa.
Para que um email da Alice saia de seu computador e chegue ao computador do Beto, por exemplo, é preciso que os dados (no caso, o texto do email) sejam divididos em pacotinhos pequenos (chamados de pacotes IP) que possuem marcados dentro de si o endereço IP de origem (ou seja, o número único do computador da Alice) e o IP de destino (o número único do computador do Beto). A internet "se vira" para encontrar o caminho entre Alice e Beto, sem que nenhum dos dois precise se preocupar com isso.
No entanto, o protocolo IP em sua versão atual (a versão quatro, rotulada como IPv4) já é bastante antiga e tem muitos problemas.$^[$ Os mais graves são falhas de segurança, que periodicamente são descobertas e não têm solução. $^[$ A maioria dos ataques contra computadores hoje na internet só é possível devido a falhas no protocolo IP. $^[$ A nova geração do protocolo IP, o IPv6, resolve grande parte dos problemas de segurança da internet hoje, herdados justamente do projeto antiquado do IPv4.$^[$
Mas o IPv4 tem um problema ainda mais premente do que sua inerente insegurança: já esgotou sua capacidade de expansão. Cada computador ligado à internet - seja um computador pessoal, uma estação de trabalho ou um servidor que hospeda um site - precisa de um endereço único que o identifique na rede. O IPv4 define, entre outras coisas importantes para a comunicação entre computadores, que o número IP tem uma extensão de 32 bits. Com 32 bits, o IPv4 tem disponíveis em teoria cerca de quatro bilhões de endereços IP mas, na prática, o que está realmente disponível é menos da metade disso. Se contarmos que o planeta tem seis bilhões de habitantes e que cada dispositivo ligado na internet (o que inclui smartphones, PCs, notebooks e afins) precisa de um número só dele, é fácil perceber que a conta não fecha. Esse número, sendo finito, um dia acaba.
Em cima disso, os endereços IP são "travados" geograficamente. Dois endereços próximos estão necessariamente na mesma cidade ou região. Se considerarmos que cerca de três quartos dos endereços IP disponíveis para a internet estão localizados nos Estados Unidos (mesmo que nunca usados), sobram apenas pouco mais de um bilhão de endereços para o resto do mundo - aumentando ainda mais o problema de escassez.
A entrada dos smartphones e outros dispositivos móveis (que são baratos e extremamente populares) na internet contribuiu para que o número de endereços IP disponíveis seja ainda mais escasso. De fato, algumas previsões pessimistas davam conta de que os endereços IP iriam acabar por completo em 2012, transformando a internet num verdadeiro caos.
O advento do IPv6, com 128 bits, resolveria todos esses problemas. Primeiro, porque dá fim a praticamente todos os buracos de segurança conhecidos do IPv4, tornando as comunicações muitíssimo mais seguras. O IPv6 provavelmente será uma dor de cabeça sem tamanho para os hackers criminosos.
Em segundo lugar, o IPv6 define 128 bits para endereçamento, e portanto conta com cerca de 3,4 × 10^38 endereços disponíveis (ou 340 seguido de 36 zeros). Para quem não quiser fazer a conta, basta saber que são muitos bilhões de quatrilhões de endereços disponíveis, garantindo que não vai faltar números IP para os humanos por milênios.
Pelo "draft" inicial de um documento proposto pelo IETF - Internet Engineering Task Force, órgão responsável pelo desenvolvimento tecnológico da internet, a migração de IPv4 para IPv6 deveria ter começado em algum momento entre 2009 e 2010, com migração total até o fim de 2011. O cronograma ainda está atrasado devido aos vários problemas da completa conversão. Google, Yahoo! e Facebook já começam a adotar o IPv6.
Na Campus Party Brasil de 2011, em sua quarta edição brasileira, realizada em São Paulo, a Telefônica ofereceu aos campuseiros a oportunidade de se conectar à internet com IPv6. A companhia vem testando a tecnologia há dois anos e espera poder oferecê-la aos seus clientes ainda em 2011.