Quais são o menor e o maior tamanho possíveis para um cabeçalho IP?

Este artigo irá se basear apenas nas principais camadas de apoio ao
roteamento.

Aplicação:

No TCP/IP, a camada de aplicação vai fazer a incorporação das camadas de apresentação e sessão do modelo OSI. 

Dica: A própria aplicação vai cuidar da apresentação e da diferenciação das sessões. 

 De acordo com o seu modo de operação, as aplicações podem ser classificadas em 3 modos. 

  • Cliente (EX: Navegador WEB) 
  • Servidor (EX: Servidor WEB Apache) 
  • Ambos (EX: Aplicação P2P) 

Cliente: É um navegador WEB buscando dados com um servidor WEB. 

Servidor: Atuando neste modo, a máquina irá fornecer conexão para o "cliente" puxar as informações, ou seja, operando no modo servidor significa que você fornece conteúdos. 

Ambos: Você atua como cliente e servidor. Você é cliente quando estiver buscando dados numa outra máquina e servidor quando alguém estiver buscando informações na sua máquina. 

HOST-TO-HOST (Transporte) 

Nesta camada temos dois principais protocolos: O TCP e o UDP.  

TCP: (Transmission Control Protocol) permite uma transmissão confiável e é um tipo de protocolo exigido por algumas aplicações.   

Dica: Em contrapartida, por ter um overhead maior (Cabeçalho mais complexo de 20 Bytes de extensão), ele não é tão ágil.  

UDP: (User Datagram Protocol) é uma versão mais light do TCP, seu cabeçalho tem apenas 8 Bytes, o que o torna um protocolo de transporte muito mais rápido. 

Diferença - TCP e UDP 

A principal diferença é que o TCP estabelece uma comunicação confiável e o UDP não. 

Dica: Com o TCP você tem certeza de que o pacote foi entregue. Já com o UDP você não tem certeza se o pacote foi entregue. Ou seja, com o UDP não existe informações referente ao pacote ser entregue ou não para o destino. Você não tem a confirmação. 

Quando você envia dados de 1GB via TCP, o protocolo quebra esses pacotes em vários fragmentos, o TCP faz a segmentação dos pacotes.

Cada fragmento é numerado, e quando esses fragmentos chegam no destino, o TCP da outra ponta sabe remontar aquele fluxo de dados e então é jogado para a aplicação, e a aplicação por sua vez consegue ler isso tranquilamente.

Dica: O TCP foca em confiabilidade e o UDP foca em performance. 

No UDP não existe essa numeração dos pacotes segmentados, o UDP quebra esses pacotes em vários segmentos. Sem a numeração descritas nos pacotes poderá acarretar no seguinte fato...Se o primeiro fragmento chegar na outra ponta depois do segundo, pelo fato de ter pegado rotas diferentes, o UDP da outra ponta vai jogar esses fragmentos para a aplicação de acordo com o que vier chegando.

Baseando-se nisso, a aplicação não consegue remontar o fluxo de dados original pelo fato de que o primeiro fragmento chegou depois do segundo.

Dica: Aplicações comum que rodam UDP é: Voz e Vídeo. Ou seja, mesmo que perca 10 fragmentos, isso não causa uma perda insignificante.

Cabeçalho TCP

Os campos selecionados em vermelho são os principais campos do cabeçalho TCP.

O fluxo de dados contidos dentro do cabeçalho TCP irá ser encapsulado e vai ser jogado para a aplicação.

O pacote encapsulado irá receber no cabeçalho todos estes controles se estiver usando o TCP como um protocolo de transmissão de dados.

Dica: O protocolo TCP tem um cabeçalho de 20 bytes só para controles.

Campos Porta origem e destino.

Os campos porta de origem e porta de destino baseiam-se nas portas lógicas que identificam a camada superior. Ou seja, de qual origem estes dados estão saindo e para qual destino de aplicação esses dados vão chegar.

Dica: Essa parte do cabeçalho TCP são identificadores da camada superior, que seria a camada de aplicação. Ou seja, nestes dois campos são identificados o tipo de aplicação que está gerando esses dados olhando a porta. Também é identificado para qual aplicação estes dados estão sendo destinado olhando a porta. Iremos ver como isso funciona na prática mais adiante.

Campo Sequence Number.

No TCP, este é o campo responsável por numerar os segmentos. Ele pega os fragmentos gerados, deixa os fragmentos em modo sequencial, leva para a outra ponta, a ponta do outro lado confirma os recebimentos dos pacotes e então essa mesma ponta entrega esses pacotes para a aplicação. Aplicação por sua vez recebe esses pacotes numerados e remonta todos eles em modo sequencial.

Dica: Isso só existe no TCP, no UDP não contém este campo.

Campo Acknowledgment Number.

Este é o campo que baseia-se em um modo de controle de recebimento e confirmação. (Ex.) – Eu enviei (32) segmentos, o destino vai receber e confirmar esses 32 recebimentos. A etapa de confirmação é codificada neste campo, este campo também tem ligação com o campo Window.

O Window envia uma determinada quantia de pacotes, essa quantia vai depender muito das confirmações que a outra ponta irá efetuar, se a outra ponta não conseguir dar conta de confirmar inúmeras sequências de pacotes numerados, a ponta que originou estes pacotes irá fazer uma alteração na transmissão, e então, irá ser enviados uma sequência menor de pacotes para que a ponta de destino consiga dar conta de confirmar os pacotes recebidos. Estes pacotes recebidos são confirmados pelo campo Acknowledgment Number.

Campo Window

Este é o campo que baseia-se no controle de tamanho da janela de comunicação. Isso identifica a quantidade de segmentos que ele pode enviar para a outra ponta de uma vez só, antes mesmo de esperar uma confirmação.

Dica: Essa janela vai se ajustando dinamicamente conforme essa transmissão for acontecendo.

Ele sempre começa enviando o máximo de segmentos para a outra ponta, conforme a ponta de origem não recebe a confirmação dos pacotes enviados, durante a transmissão, a origem diminui a quantidade de pacotes para que o destino consiga dar conta de receber e confirmar os recebidos.

      Dica: O objetivo é sempre mandar o máximo de pacotes possíveis.

Cabeçalho UDP

Os campos selecionados em vermelho abaixo faz referência aos principais campos descritos no cabeçalho UDP. O UDP baseia-se apenas nos campos de porta de origem e porta de destino.

Dica: O cabeçalho UDP é formado por 8 bytes, isso quer dizer que o tempo para processar os dados é muito mais rápido que o TCP, porém, o UDP contém muitas dependências. 

Portas lógicas TCP e UDP

Quando você faz uma requisição para o servidor, a porta lógica que identifica o seu browser é acima de 1024, esse valor é gerado aleatoriamente.

Dica: As portas lógicas acima de 1024 são destinadas para as máquinas que atuam em modo cliente, ou seja, é a porta de origem.

A porta lógica de destino são as portas conhecidas, exemplo, se for um servidor SSL (https) na outra ponta, a porta que iria ser descrita no cabeçalho TCP e UDP é a porta 443.

Dica: As portas lógicas identificadas de 1 à 1023 são destinadas à serviços. Ou seja, são as portas mais conhecidas.

Portas lógicas conhecidas – Exemplo

Dica: Portas de 1 a 1023 = Well known ports (Aplicações Servidoras).

Dica: Portas de 1024 para cima = Portas Dinâmicas (Aplicações Cliente).

Portas lógicas de aplicações que usam TCP e UDP como protocolo de transporte:

FTP: Se aloca na porta 21 e utiliza o TCP como protocolo de transporte. Telnet, SMTP, HTTP e POP3 também utilizam o TCP como protocolo de transporte.

O SNMP se aloca na porta 161 e utiliza o UDP como protocolo de transporte. TFTP e SYSLOG também utilizam o UDP como protocolo de transporte.

O DNS é um caso à parte....Se aloca na porta 53 e utiliza o UDP e TCP como protocolo de transporte. Normalmente, o DNS utiliza o UDP como protocolo de transporte.

Dica: O DNS via UDP é utilizado quando o cliente se comunica com o servidor. O DNS via TCP é utilizado quando tem 2 servidores se comunicando entre eles.

Exemplo de comunicação: 

Nesta imagem mostra uma requisição feita pelo meu PC. Estou com a janela do browser aberta e ao mesmo tempo tentando acessar um Web Site.

Quando eu gero essa requisição HTTP, o meu browser irá adotar a porta 1144 para esta sessão. Lembre-se que, em modo Cliente as portas lógicas adotadas são acima de 1024, o meu browser adotou a 1144. O protocolo que vai ser usado é o TCP por que é esse protocolo que o HTTP utiliza para transportar as informações.

Percebe-se que a porta de destino é a porta 80. O servidor já está esperando essa requisição. Por isso que nós acostumamos a falar que o servidor web está “ouvindo” na porta 80, ele foi configurado para ter a porta 80 aberta e esperando conexões.

O servidor recebe essa requisição, processa e envia de volta, ele envia como origem a porta em que ele se aloca e como destino é atribuído a porta do meu browser (1144).

A imagem acima nada mais é que o cabeçalho TCP, ou seja, o cabeçalho TCP é exatamente está imagem. Percebe-se que não tem endereço IP, o endereço IP aparece na camada de rede.

Este cabeçalho da camada de transporte irá ser encapsulado encima de um pacote IP. Também irá ser contido junto nesse "pacotão" o cabeçalho IP. Dentro desse cabeçalho irá ser descrito o endereço IP de origem e o endereço IP de destino como uns dos principais campos dentro do cabeçalho IP.

Dica: A camada de transporte lida apenas com portas lógicas e não com endereços IP.

Network (Rede)

Existem 3 protocolos de apoio que rodam junto com o protocolo IP. São eles, ARP, RARP e o ICMP.

Dica: O RARP já não é mais utilizado, ficou apenas como legado.

Os campos em vermelho selecionados abaixo são os principais campos contidos dentro do cabeçalho IP.

Campo Version

O campo Version identifica a versão do IP que você está utilizando. Se é versão 4 ou ipv6.

Campo Priority and Type of Services

É a onde são codificados os elementos Qos para que um determinado pacote IP seja priorizado dentro da rede.

Campo Time to Live

Este é o campo que determina o tempo de vida de um pacote IP dentro da rede com base nos saltos que ele atravessa.

(Ex.): Se o pacote IP saltou em 30 elementos de rede e não chegou ao seu destino, automaticamente ele é descartado.

 Campo Protocol

Este é o campo que identifica a camada superior.

O cabeçalho IP – Campo “Protocol”

Para fazer a identificação do protocolo da camada superior, o campo “protocol” utiliza esses números descritos acima.

Esses valores são declarados no formato hexadecimal. O IP identifica o TCP pelo número 6 e o UDP pelo número 17. 0x06 ou 0x17.

O protocolo ICMP (Internet Control Message Protocol).

É um protocolo mensageiro, transporta mensagens entre elementos de uma rede.

Mensagens Transportadas

  • Destination Unreachable (Destino Inalcançável).
  • Buffer Full (Buffer Cheio).
  • TTL Expired (Mensagem Obituária).

Todas estas mensagens, o protocolo retorna para a origem descrevendo o que aconteceu. O Ping e Traceroute utilizam o ICMP como suporte para identificar se um determinado nó de rede está lá ou não.

O protocolo ARP (Address Resolution Protocol).

Tem a função de mapear endereços lógicos (IP) para endereços físicos (MAC).

ARP – Exemplo

O HostA conhece o IP do HostB, mas isso não é o suficiente para que eles se comuniquem. Então o HostA envia o pacote ARP para a rede, o switch não tem o MAC do HostB em sua tabela CAM (Content Addressable Memory), então ele propaga para todas as suas interfaces ativas. Quando este pacote chega na interface que o HostB está associado, o HostB irá desencapsular apenas a parte que contém o cabeçalho IP, o HostB identificou que no cabeçalho consta o seu endereço IP, então ele manda o pacote de resposta contendo o seu endereço MAC descrito no cabeçalho.

Dica: Em layer 2, o ARP só é visto em redes Ethernet (Padrão utilizado atualmente).

Dica: O Frame-Relay é um tipo de rede que não usa o ARP para mapear endereços lógicos para endereços físicos. Ele utiliza o IARP. No conceito de Frame-Relay, o endereço físico não é chamado de MAC, é chamado de DLC.

O protocolo RARP (Reverse Address Resolution Protocol).

Tem a função de mapear endereços físicos (MAC) para endereços lógicos (IP).

 RARP – Exemplo

O RARP é a evolução do DHCP, porém, o DHCP atua na camada de aplicação e o RARP atua na camada de rede.

Ucast / Acast / Mcast / Bcast: (Padrões de comunicação)

Unicast: É uma conexão de um para um, sempre. Ponta A falando com a ponta B.

Anycast: Não é algo exclusivo do IPV6, IPV4 também existe este conceito de comunicação.

Esses nós no Anycast baseia-se numa requisição feita por um usuário em um serviço específico. Esses três elementos (Nós) têm o mesmo endereço IP. Ou seja, o que estiver mais próximo da requisição de origem irá responder.

Um exemplo clássico de Anycast é o DNS público do Google (8.8.8.8). Todos nós temos o hábito de utilizar este serviço para resolução de nomes pelo fato de ser “impossível” que ele caia.

Existe milhares de servidores DNS configurados com o mesmo IP. E o que vai responder sua requisição é o que tiver mais próximo de você fisicamente.

Se o primeiro cair, o segundo irá te responder rapidamente. Ou seja, isso é baseado em uma infraestrutura de alta disponibilidade.

Dica: Sabemos que um servidor não pode ter o mesmo IP igual ao do outro servidor, mas a estrutura do Anycast permite isso. Existe uma filtragem de roteamento por trás.

Existe um carinha chamado BGP configurado por trás para filtrar isso de forma que os anúncios vão ser inteligentes para saber que em uma determinada região existe inúmeros servidores configurados com o mesmo endereço IP. Mas em termos de roteamento, é definido o servidor mais específico como referência para aquela determinada região.

Multicast: Se refere à pacotes que são destinados para um determinado grupo.

Exemplo de Multicast é o protocolo OSPF, quando ele faz atualização de rotas, ele envia os pacotes do tipo HELLO para todos os routers que está rodando OSPF na rede. Ou seja, roteadores recebem Broadcast e Multicast, porém, eles não os propagam.

 Broadcast: São pacotes que tem como destino todos os elementos da rede.

Exemplo de Broadcast é o ARP, O Broadcast ARP envia pacotes para todos os elementos da rede e somente um deles irá retornar uma resposta.

Qual é o tamanho mínimo do cabeçalho IP?

tamanho mínimo, que é de 5 palavras (20 bytes). de tamanho de cabeçalho (padding).

Qual o maior tamanho que o cabeçalho IP pode assumir?

O cabeçalho IPv4 é composto por 12 campos fixos, que podem ou não conter opções responsáveis por fazer com que o tamanho varie de 20 a 60 Bytes.

Quais são o menor e o maior tamanho possíveis para um pacote IP?

O tamanho da área de dados pode ser calculando subtraindo-se de COMPRIMENTO TOTAL o comprimento do cabeçalho (HLEN). Já que o campo COMPRIMENTO TOTAL possui 16 bits de comprimento, o maior tamanho possível para um datagrama IP é 216 ou 65-535 octetos. Na maioria dos aplicativos, essa não é uma limitação rígida.

Qual a largura do cabeçalho IP?

O protocolo IPv4 possui 32 bits de largura (de 0 a 31). Como cada byte tem 8 bits, podemos dizer que o cabeçalho IPv4 possui 4 bytes de largura, e cada espaço existente em cada linha no cabeçalho deverá receber um algarismo binário.

Qual tamanho máximo de um pacote IP?

O protocolo TCP/IP permite o uso de pacotes com até 64 kbytes, mas normalmente são usados pacotes com até 1500 bytes, que é o tamanho máximo de um frame Ethernet. Pacotes maiores podem ser transmitidos normalmente através da rede, mas precisam ser fragmentados, ou seja, divididos em pedaços menores, com até 1500 bytes.

Quantos endereços IP podem ser encontrados no cabeçalho de um pacote IP?

Formato do Cabeçalho do IPv4.