• Nenhum resultado encontrado

Protocolo de Internet: entrega de datagrama sem conexão (IPv4,

IPv6)

CONTEÚDOS DO CAPÍTULO

Introdução Uma rede virtual

Arquitetura e filosofia da Internet Princípios por trás da estrutura

Características do sistema de entrega sem conexão Propósito e importância do protocolo de Internet O datagrama IP

Tipo de serviço de datagrama e serviços diferenciados Encapsulamento de datagrama

Tamanho de datagrama, rede MTU e fragmentação Reconstituição de datagrama

Campos de cabeçalho usados para reconstrução de datagrama Tempo de vida (IPv4) e limite de salto (IPv6)

Itens IP opcionais

Opções de processamento durante fragmentação Ordem de byte da rede

7.1

7.2

Introdução

Os capítulos anteriores revisaram partes do hardware e software de rede que possibilitam a comunicação na internet, explicando as tecnologias de rede subjacentes e a resolução de endereço. Este capítulo explica o princípio fundamental da entrega sem conexão e discute como ele é fornecido pelo Internet Protocol (IP), que é um dos dois principais protocolos usados nas internets (TCP sendo o outro). Estudaremos o formato dos pacotes IP e veremos como eles formam a base para toda a comunicação na internet. Os próximos dois capítulos continuarão nosso exame do Internet Protocol, discutindo o encaminhamento de pacotes e tratamento de erros.

Uma rede virtual

O Capítulo 3 discute a arquitetura da internet em que os roteadores conectam várias redes físicas. A verificação da arquitetura pode ser enganosa, pois o foco da tecnologia de internet é a abstração que uma internet fornece para aplicações e usuários, e não a tecnologia de interconexão subjacente.

A tecnologia da internet apresenta a abstração de uma única rede virtual que interliga todos os hosts, e através da qual a comunicação é possível. A arquitetura subjacente é tanto escondida como irrelevante.

7.3

Figura 7.1

7.4

De certa forma, uma internet é uma abstração de uma grande rede física porque, no nível mais inferior, tem a mesma funcionalidade: aceitar e entregar pacotes. Níveis mais altos de software de internet acrescentam a maior parte da funcionalidade rica que os usuários percebem.

Arquitetura e filosofia da Internet

Conceitualmente, uma internet TCP/IP provê três conjuntos de serviços. A Figura 7.1 lista as três categorias e ilustra a dependência entre elas.

Os três níveis conceituais dos serviços de internet.

No nível mais baixo, um serviço de entrega sem conexão provê um alicerce no qual tudo se apoia. No nível seguinte, um serviço de transporte confiável oferece uma plataforma de nível superior da qual as aplicações dependem. Logo, exploraremos cada um desses serviços, entenderemos o que eles oferecem e veremos os protocolos associados a eles.

Princípios por trás da estrutura

Embora possamos associar software de protocolo a cada um dos níveis na Figura 7.1, o motivo para identificá-los como partes conceituais da tecnologia TCP/IP da Internet é que eles claramente indicam dois fundamentos filosóficos do projeto. Primeiro, a figura mostra que o projeto constrói serviços confiáveis no topo de uma não confiável base sem conexão. Segundo, ela mostra como o projeto foi tão amplamente aceito: o serviço em nível mais baixo ajusta perfeitamente as facilidades fornecidas pelo hardware subjacente de rede e o segundo nível fornece o serviço que o aplicativo espera.

Os três níveis de conceito explicam muito do sucesso da Internet; como consequência do projeto básico, a tecnologia da Internet tem sido surpreendentemente robusta e adaptável. O serviço sem conexão ocorre em

7.5

hardware de rede arbitrário, e o serviço de transporte confiável tem sido suficiente para uma ampla variedade de aplicações. Podemos fazer o resumo a seguir.

Protocolos de Internet são projetados em torno de três níveis conceituais de serviço. Um serviço de conexão no nível mais baixo corresponde bem a hardware subjacente, um serviço de transporte confiável fornece o serviço a aplicativos, e uma variedade de aplicações fornece os serviços que os usuários esperam.

O projeto na Figura 7.1 é significativo porque representa uma mudança dramática do pensamento anterior sobre comunicação de dados. As primeiras redes seguiram a abordagem de construir confiabilidade em cada nível. Os protocolos de Internet são organizados para começar com um serviço básico de entrega de pacotes e, em seguida, adicionar a confiabilidade. Quando o projeto foi inicialmente proposto, muitos profissionais duvidaram de que ele pudesse funcionar.

Uma vantagem da separação conceitual é que ela permite um serviço a ser melhorado ou substituído sem perturbar os outros. No início de Internet, pesquisa e desenvolvimento evoluíram simultaneamente em todos os três níveis. A separação será especialmente importante durante a transição do IPv4 para o IPv6, pois permite que os protocolos da camada superior e aplicações se mantenham inalterados.

Características do sistema de entrega sem conexão O serviço de Internet mais fundamental consiste em um sistema de entrega de pacotes. Tecnicamente, o serviço é definido como ”esforçado”, mas não confiável sistema de entrega de pacotes sem conexão. O serviço é análogo ao serviço prestado pela maioria dos hardwares de rede, porque as tecnologias de comutação de pacotes, tais como Ethernet, operam em um paradigma de entrega de melhor esforço. Nós usamos o termo técnico não confiável para dizer que a entrega não é garantida. Um pacote pode ser perdido, duplicado, atrasado, ou entregue fora de ordem. O serviço sem conexão não detectará tais condições, nem informará ao remetente ou ao destinatário. O serviço básico é classificado como sem conexão porque cada pacote é tratado de forma independente de todos os outros. Uma

7.6

7.7

sequência de pacotes enviados de um computador para outro pode percorrer caminhos diferentes, ou alguns podem ser perdidos enquanto outros são entregues. Finalmente, diz-se que o serviço usa a entrega de melhor esforço porque o software Internet faz uma tentativa séria para entregar os pacotes. Ou seja, a Internet não descarta pacotes caprichosamente; insegurança surge apenas quando os recursos se esgotam ou as redes subjacentes falham.

Propósito e importância do protocolo de Internet O protocolo que define o mecanismo de entrega sem conexão não confiável é chamado de Protocolo de Internet (IP). Vamos seguir a convenção usada em documentos de padrões usando os termos Protocolo de Internet e IP quando as declarações se aplicam amplamente, e usar IPv4 ou IPv6 apenas quando um detalhe especial é aplicado a uma versão, mas não a outra.

O Protocolo de Internet fornece três especificações importantes. Primeiro, o IP define a unidade básica de transferência de dados usada em toda a internet TCP/IP. Assim, ele especifica o formato exato do pacote usado para todos os dados, enquanto os dados passam através de uma internet. Em segundo lugar, o software de IP executa a função de encaminhamento, escolhendo um caminho ao longo do qual um pacote será enviado. As normas especificam como o encaminhamento é realizado. Em terceiro lugar, além da especificação precisa e formal de formatos de dados e encaminhamento, o IP inclui um conjunto de regras que incorporam a base de entrega não confiável. As regras definem como hosts e roteadores devem processar os pacotes, como e quando as mensagens de erro devem ser geradas e as condições em que os pacotes podem ser descartados. O Protocolo de Internet é uma parte tão fundamental do projeto que a Internet é muitas vezes chamada uma tecnologia baseada em IP.

Começamos nossas considerações sobre IP olhando para o formato do pacote que ele especifica. O Capítulo 1 analisa o formato de pacotes IPv4 e, em seguida, considera o formato utilizado com IPv6. Deixaremos para capítulos posteriores os temas de encaminhamento de pacotes e tratamento de erros.

Figura 7.2

7.7.1

Em uma rede física, a unidade de transferência é um frame que contém um cabeçalho e dados, e esse cabeçalho fornece informações, tais como a origem (física) e endereços de destino. A Internet chama sua unidade de transferência básica de datagrama Internet, geralmente abreviado datagrama IP.* Na verdade, a tecnologia TCP/IP tornou-se tão bem- sucedida que, quando alguém usa o termo datagrama sem qualquer qualificação, é geralmente aceito que significa datagrama IP.

A analogia entre um datagrama e um pacote de rede é forte. Como a Figura 7.2 ilustra, um datagrama é dividido em um cabeçalho e carga útil, como um frame típico de rede. Também como um frame, o cabeçalho do datagrama contém metadados, tais como endereços de origem e destino e um campo de tipo que identifica o conteúdo do datagrama. A diferença, claro, é que o cabeçalho do datagrama contém endereços IP, enquanto o cabeçalho do frame contém os endereços de hardware.

CABEÇALHO DO DATAGRAMA CARGA ÚTIL DO DATAGRAMA

Forma geral de um datagrama IP, a analogia Internet de um frame de rede.

Formato do datagrama IPv4

Agora que já descrevemos o layout geral de um datagrama IP, podemos olhar para o conteúdo com mais detalhes. A Figura 7.3 mostra a disposição de campos em um datagrama IPv4. Os próximos parágrafos discutem alguns dos campos de cabeçalho; seções posteriores à fragmentação e as opções de cobrir os campos restantes.

Figura 7.3 Formato de um datagrama IPv4, a unidade básica de transferência em uma internet TCP/IP.

Porque uma internet é virtual, o conteúdo e o formato não são limitados pelo hardware de rede. Por exemplo, o primeiro campo de 4 bits num datagrama (VERS) contém a versão do protocolo IP que foi utilizado para criar o datagrama. Assim, para o IPv4, o campo versão contém o valor 4. O campo é utilizado para verificar se o remetente, o receptor e quaisquer roteadores entre eles concordam com o formato do datagrama. Todo software IP é necessário para verificar o campo de versão antes de processar um datagrama para garantir que corresponde ao formato que o software espera. Veremos que, embora o cabeçalho do datagrama IPv6 seja diferente do cabeçalho IPv4, o IPv6 usa também os primeiros quatro bits para um número de versão, tornando possível para um roteador ou computador host distinguir entre as duas versões. Em geral, um computador irá rejeitar qualquer datagrama se não tiver o software para lidar com a versão especificada no datagrama. Isso impede que computadores façam má interpretação do conteúdo dos datagramas ou apliquem um formato desatualizado.

O campo de comprimento do cabeçalho (HLEN), também de 4 bits, dá o comprimento do cabeçalho do datagrama medido em palavras de 32 bits. Como veremos, todos os campos do cabeçalho têm comprimento fixo, exceto para as OPÇÕES DE IP e campos de preenchimento (PADDING) correspondentes. O cabeçalho do datagrama mais comum, que não contém opções e nenhum preenchimento, mede 20 octetos e tem um tamanho de campo de cabeçalho igual a 5.

O campo TAMANHO TOTAL dá o comprimento do datagrama IP medido em octetos, incluindo octetos de cabeçalho e de carga útil. O tamanho da área de carga útil pode ser calculado subtraindo o comprimento de cabeçalho (trinta e duas vezes HLEN) do COMPRIMENTO TOTAL. Como o campo de COMPRIMENTO TOTAL é de 16 bits, o tamanho máximo possível de um datagrama IP é 216 ou 65.535 octetos. Para a maioria das aplicações, o limite não representa um problema. Na verdade, a maioria das tecnologias de rede subjacentes usam tamanhos de frame muito menores; vamos discutir a relação entre o tamanho do datagrama e o tamanho do frame mais tarde.

O campo PROTOCOLO é análogo ao campo de tipo em um frame de rede; o valor especifica qual protocolo de alto nível foi utilizado para criar a mensagem transmitida na área de CARGA ÚTIL do datagrama. Em

essência, o valor do PROTOCOLO especifica o formato da área de CARGA ÚTIL. O mapeamento entre um protocolo de alto nível e o valor inteiro utilizado no campo PROTOCOLO deve ser administrado por uma autoridade central para garantir acordo em toda a Internet.

O campo HEADER CHECKSUM garante a integridade dos valores do cabeçalho. O header checksum IP é formado tratando o cabeçalho como uma sequência de inteiros de 16 bits (em ordem de byte de rede), juntando- os, usando um complemento aritmético e, em seguida, obtendo do resultado o complemento. Para fins de cálculo do checksum, o campo HEADER CHECKSUM é assumido como contendo zeros.

É importante notar que o checksum só se aplica para valores no cabeçalho IP e para a carga. Separar os checksums para cabeçalhos e para cargas apresenta vantagens e desvantagens. Como o cabeçalho geralmente ocupa menos octetos do que a capacidade de carga, ter um checksum separado reduz o tempo de processamento em roteadores que só precisam calcular checksum de cabeçalho. A separação também permite que os protocolos de nível superior escolham seu próprioesquema de checksum para as mensagens que enviam. A principal desvantagem é que protocolos de nível superior são obrigados a adicionar seus próprios despercebida.

Campos de ENDEREÇO IP DE ORIGEM e ENDEREÇO IP DE DESTINO contêm os endereços IP de 32 bits do remetente do datagrama e do destinatário desejado. Embora o datagrama possa ser transmitido através de vários roteadores intermediários, os campos de origem e de destino nunca mudam; eles especificam os endereços IP da fonte original e de destino final.* Note que os endereços de roteadores intermediários não aparecem no datagrama. A ideia é fundamental para a concepção global é descrita a seguir.

O campo de endereço de origem em um datagrama sempre se refere à fonte original, e o campo de endereço de destino refere-se ao último destino.

O campo denominado CARGA DE DADOS, na Figura 7.3, mostra apenas o início da área do datagrama que transporta os dados. O tamanho da carga depende, é claro, do que está sendo enviado no datagrama. O campo OPÇÕES IP, discutido a seguir, é de comprimento variável. O campo PREENCHIMENTO depende das opções selecionadas. Ela representa os bits contendo zero, que podem ser necessários para garantir ao cabeçalho

7.7.2

Figura 7.4

do datagrama se estender a um múltiplo exato de 32 bits. (Lembre-se de que o campo de tamanho de cabeçalho é especificado em unidades de palavras de 32 bits.)

Formato do datagrama IPv6

O IPv6 revê completamente o formato do datagrama substituindo seu cabeçalho IPv4. Em vez de tentar especificar todos os detalhes em um único cabeçalho, o IPv6 usa uma capacidade de extensão que permite que o IETF adapte o protocolo. A Figura 7.4 ilustra o conceito: um datagrama IPv6 começa com um cabeçalho-base de tamanho fixo, seguido por zero, ou mais cabeçalhos de extensão, seguidos por uma carga de dados.

A forma geral de um datagrama IPv6 com um cabeçalho-base seguido por cabeçalhos de extensão opcionais.

Como pode um receptor saber quais cabeçalhos de extensão foram incluídos em um determinado datagrama? Cada cabeçalho IPv6 contém um campo PRÓXIMO CABEÇALHO (NEXT HEADER) que especifica o tipo de cabeçalho que vem a seguir. O último cabeçalho utiliza o campo PRÓXIMO CABEÇALHO para especificar o tipo de carga útil. A Figura 7.5 ilustra o uso de campos PRÓXIMO CABEÇALHO.

Figura 7.5

7.7.3

Ilustração dos campos NEXT HEADER nos datagramas IPv6 com (a) somente um cabeçalho-base, (b) um cabeçalho-base e uma extensão e (c) um cabeçalho-base e dois cabeçalhos de

extensão.

O paradigma de cabeçalho-base fixo seguido por um conjunto de cabeçalhos de extensão foi escolhido como um compromisso entre generalidade e eficiência. Para ser totalmente geral, o IPv6 precisa incluir mecanismos para apoiar funções como fragmentação, roteamento de origem e autenticação. No entanto, escolher alocar campos fixos no cabeçalho do datagrama para todos os mecanismos é ineficiente, já que a maioria dos datagramas não usa todos os mecanismos; o grande tamanho do endereço IPv6 agrava a ineficiência. Por exemplo, ao enviar um datagrama através de uma única rede de área local, um cabeçalho que contém campos de endereço não utilizados pode ocupar uma fração substancial de cada frame. Mais importante, os desenvolvedores perceberam que ninguém pode prever que instalações serão necessárias. Portanto, optaram por cabeçalhos de extensão como forma de proporcionar generalidade sem forçar todos os datagramas a terem grandes cabeçalhos.

Alguns dos cabeçalhos de extensão são destinados ao processamento pelo destino final e alguns dos cabeçalhos de extensão são usados por roteadores intermediários ao longo do caminho. Observe que o uso de campos de PRÓXIMOS CABEÇALHOS significa que as extensões são processadas sequencialmente. Para acelerar o processamento, o IPv6 exige cabeçalhos de extensão que são usados por roteadores intermediários precedendo cabeçalhos de extensão utilizados pelo destino final. Usamos o termo cabeçalho hop-by-hop (salto a salto) para nos referirmos a um cabeçalho de extensão que um roteador intermediário deve processar. Assim, os cabeçalhos hop-by-hop precedem cabeçalhos end-to-end (fim a fim).

Formato-base de cabeçalho IPv6

Cada datagrama IPv6 começa com um cabeçalho-base de 40-octetos, como ilustra a Figura 7.6. Apesar de ser duas vezes maior que um cabeçalho típico de datagrama IPv4, o cabeçalho base IPv6 contém menos informação, pois informações fragmentadas foram movidas para cabeçalhos de extensão. Além disso, o IPv6 muda o alinhamento de múltiplos de 32-bit para múltiplos de 64-bit.

Figura 7.6 O formato-base de cabeçalho; o tamanho é fixado em 40 octetos. Como no IPv4, o campo inicial VERS de 4 bits especifica a versão do protocolo; 6 especifica um datagrama IPv6. Conforme descrito a seguir, o campo TRAFFIC CLASS (CLASSE DE TRÁFEGO) é interpretado exatamente como o campo TIPO DE SERVIÇO IPv4. O campo FLOW LABEL (RÓTULO DO FLUXO) se destina a permitir que o IPv6 seja usado com tecnologias que suportam a reserva de recursos. A abstração subjacente, um fluxo, consiste em um caminho através de uma internet. Roteadores intermediários ao longo do trajeto garantem para os pacotes uma qualidade de serviço específico sobre o fluxo. O RÓTULO DE FLUXO tem uma identificação que permite que um roteador o identifique no fluxo, que é usado em vez do endereço de destino ao encaminhar um datagrama. O Capítulo 16 explica com mais detalhe as potenciais utilizações de um rótulo de fluxo. O IPv6 utiliza um campo de TAMANHO DE CARGA ÚTIL, em vez de um campo de comprimento do datagrama; a diferença é que TAMANHO DE CARGA ÚTIL refere-se apenas aos dados que estão sendo transportados e não inclui o tamanho do cabeçalho-base ou do(s) cabeçalho(s) de extensão. Para permitir a uma carga exceder 216 octetos, o IPv6 define um cabeçalho de extensão que especifica que um datagrama é um jumbogram. Um campo de PRÓXIMO CABEÇALHO aparece em todos os cabeçalhos (o cabeçalho-base, como mostrado e cada cabeçalho de extensão); o campo especifica o tipo do próximo cabeçalho de extensão e, no cabeçalho final, dá o tipo de carga útil. O campo HOP LIMIT especifica

7.8

Figura 7.7

o número máximo de redes que o datagrama pode percorrer antes de ser descartado. Por fim, os campos de ENDEREÇO DE ORIGEM e de ENDEREÇO DE DESTINO especificam os endereços IPv6 do remetente original e de destino final.

Tipo de serviço de datagrama e serviços diferenciados

Informalmente chamado de Tipo de Serviço – Type Of Service (TOS) –, o campo TIPO SERVIÇO de 8 bits em um cabeçalho IPv4 e o campo TRÁFEGO DE CLASSE em um cabeçalho IPv6 especificam como o datagrama deve ser tratado. No IPv4, o campo foi originalmente dividido em subcampos que especificam a precedência do datagrama e as características do caminho desejado (baixo atraso ou alto rendimento). No final dos anos 1990, o IETF redefiniu o significado do campo para acomodar um conjunto de serviços diferenciados – differentiated services (DiffServ). A Figura 7.7 ilustra a definição resultante que se aplica ao IPv6, bem como ao IPv4.

Os serviços diferenciados (DiffServ) de interpretação de bits no TIPO SERVIÇO IPv4 e campos de cabeçalho CLASSE DE TRÁFEGO IPv6.

Sobre o DiffServ, os primeiros seis bits do campo constituem um codepoint, que é por vezes abreviado DSCP, e os últimos dois bits não são utilizados. Um valor codepoint mapeia uma definição de serviço subjacente, normalmente por meio de uma série de indicadores. Embora seja possível definir 64 serviços distintos, os desenvolvedores sugerem que um determinado roteador só vai precisar de alguns serviços, e vários codepoints mapearão cada serviço. Por exemplo, um roteador pode ser configurado com um serviço de voz, um serviço de vídeo, um serviço de gestão de rede e um serviço normal de dados. Para manter compatibilidade com a definição original, as normas distinguem entre os primeiros três bits do codepoint (bits que eram usados anteriormente para precedência) e os três últimos bits. Quando os últimos três bits contêm

Figura 7.8

zero, os bits de precedência definem oito grandes classes de serviço que aderem às mesmas linhas mestras, como a definição original: datagramas com um número maior em seu campo precedência têm tratamento preferencial com relação a datagramas com um número menor. Ou seja, as classes de ordem oito são definidas por valores codepoint da seguinte forma:

xxx000