Um datagrama é uma unidade de transferência básica associada a uma rede de comutação de pacotes. Os datagramas são normalmente estruturados em seções de cabeçalho e carga útil. Os datagramas fornecem um serviço de comunicação sem conexão em uma rede comutada por pacotes. A entrega, a hora de chegada e a ordem de chegada dos datagramas não precisam ser garantidas pela rede.

História

editar

No início dos anos 1970, o termo datagrama foi criado pela combinação das palavras data e telegram (dado e telegrama) pelo relator do CCITT sobre comutação de pacotes,[1] Halvor Bothner-By.[2][3]

Embora a palavra fosse nova, o conceito já tinha uma longa história.

Em 1962, Paul Baran descreveu, em um relatório da Corporação de Pesquisa e Desenvolvimento (RAND Corporation), uma rede militar hipotética tendo que resistir a um ataque nuclear. Pequenos "blocos de mensagem" padronizados, contendo endereços de origem e destino, foram armazenados e encaminhados em nós de computadores de uma rede de computadores em malha altamente redundante.[4] "O usuário da rede que acessou uma 'conexão virtual' com uma estação final e transmitiu mensagens ... também pode ver o sistema como uma caixa preta fornecendo uma conexão de circuito aparente".

Em 1967, Donald Davies publicou um artigo seminal no qual introduziu as palavras agora amplamente utilizadas pacote e comutação de pacotes.[5] Sua rede principal é semelhante à de Paul Baran, embora tenha sido projetada de forma independente. Para lidar com permutações de datagramas (devido a preferências de roteamento atualizadas dinamicamente) e perdas de datagramas (inevitáveis quando as fontes rápidas enviam para destinos lentos), ele assume que "todos os usuários da rede fornecer-se-ão algum tipo de controle de erro" (o que será chamado mais tarde em um serviço de "datagrama puro"). Seu alvo é, pela primeira vez na comutação de pacotes, uma "rede de comunicação de operadora comum". Para oferecer suporte ao acesso remoto a serviços de computador por terminais de usuário, que naquela época transmitia em geral carácter por carácter, ele incluiu na interface de rede computadores que convertem fluxos de caracteres em fluxos de pacotes e vice-versa.

Em 1970, Lawrence Roberts e Barry D. Wessler publicou um artigo sobre a Rede da Agência para Projetos de Pesquisa Avançada (ARPANET), a primeira rede de comutação de pacotes de vários nós.[6] Um documento acompanhante descreveu seus nós de comutação (os IMPs) e seus formatos de pacote.[7] O núcleo da rede executou a comutação de datagramas como no modelo de Baran e Davies, mas uma provisão foi adicionada dentro da rede, em seu contorno exterior, para lidar com perdas e permutações de datagramas. Um serviço confiável de transferência de mensagens foi, portanto, oferecido aos computadores dos usuários, simplificando muito seu próprio trabalho e o mantendo menos dependente de pesquisas futuras.

Em 1973, Louis Pouzin apresentou seu projeto para a CYCLADES, a primeira rede de tamanho real implementando o modelo de datagrama puro de Donald Davies.[8] A equipe da CYCLADES foi, portanto, a primeira a enfrentar o problema altamente complexo de fornecer às aplicações do usuário um serviço de circuito virtual confiável (o equivalente a uma conexão à Internet por meio do Protocolo de Controle de Transmissão [TCP]),[9] enquanto usa um serviço de rede ponto a ponto conhecido por possivelmente produzir perdas não desprezíveis de datagramas e permutações. Embora a preocupação de Pouzin "em um primeiro estágio não seja fazer um avanço na tecnologia de comutação de pacotes, mas construir uma ferramenta de comunicação confiável para a CYCLADES", dois membros de sua equipe, Hubert Zimmerman e Gérard Le Lann, deram contribuições significativas para o design do TCP que Vint Cerf, seu principal designer, reconheceu.[10]

Em 1981, a Agência de Projetos de Pesquisa Avançada de Defesa (DARPA) emitiu a primeira especificação do Protocolo de Internet (IP), a qual introduziu uma grande evolução do conceito de datagrama: fragmentação.[11] Com a fragmentação, algumas partes da rede global podem usar grandes tamanhos de pacote (normalmente redes locais para minimizar o poder de processamento), enquanto outras podem impor tamanhos menores de pacotes (normalmente redes de longa distância para minimizar o tempo de resposta). Os nós da rede podem dividir um pacote de datagrama em vários pacotes menores do mesmo datagrama.

Em 1999, a Força Tarefa de Engenharia da Internet (IETF) oficializou o uso da Tradução de Endereços de Rede (NAT) — já amplamente implantada — por meio da qual cada endereço público pode ser compartilhado por vários dispositivos privados.[12] Com isso, foi atrasado o iminente esgotamento dos endereços IPv4 da Internet, deixando tempo suficiente para introduzir o Protocolo de Internet versão 6 (IPv6), a nova geração de pacotes de Internet que suportam endereços mais longos (maiores). O princípio inicial de transparência de rede ponta a ponta para datagramas foi relaxado para isso: os nós da NAT tiveram que gerenciar estados por conexão, os tornando em parte orientados à conexão.

Em 2015, a IETF atualizou sua recomendação "informativa" fraca de 1998, de que os nós de comutação de datagrama executam gerenciamento ativo de fila (AQM), para a tornar uma recomendação de "melhor prática atual" mais forte e detalhada.[13] Embora o modelo inicial de enfileiramento de datagramas fosse simples de implementar e não precisasse de mais ajustes do que comprimentos de fila, o suporte de mecanismos mais sofisticados e parametrizados foi considerado necessário "para melhorar e preservar o desempenho da Internet" (detecção inicial aleatória (RED), notificação de congestionamento explícita (ECN) e etc.). Também foram necessárias novas pesquisas sobre o assunto, com uma lista de itens identificados.

Definição

editar

A RFC 1594 define o termo datagrama da seguinte forma:

“Uma entidade independente e autocontida de dados que transporta informações suficientes para serem roteadas da origem ao computador de destino sem depender de trocas anteriores entre este computador de origem e de destino e a rede de transporte”.

Um datagrama precisa ser autocontido, sem depender de trocas anteriores, porque não há conexão de duração fixa entre os dois pontos de comunicação como há, por exemplo, na maioria das conversas telefônicas de voz.[14]

O serviço de datagrama é frequentemente comparado a um serviço de entrega de correio: o usuário fornece apenas o endereço de destino, mas não recebe qualquer garantia ou confirmação de entrega após uma entrega bem sucedida. O serviço de datagrama é, portanto, considerado não confiável. O serviço de datagrama roteia datagramas sem primeiro criar um caminho predeterminado. O serviço de datagrama é, portanto, considerado sem conexão. Também não há consideração dada à ordem em que ele e outros datagramas são enviados ou recebidos. De fato, muitos datagramas no mesmo grupo podem viajar por caminhos diferentes antes de chegar ao mesmo destino em uma ordem diferente.[15]

Estrutura

editar

Cada datagrama possui dois componentes, um cabeçalho e uma carga útil de dados. O cabeçalho contém todas as informações suficientes para o roteamento do equipamento de origem ao destino, sem depender de trocas prévias entre o equipamento e a rede. Os cabeçalhos podem incluir endereços de origem e destino, bem como um campo de tipo. A carga útil são os dados a serem transportados. Esse processo de aninhamento de cargas úteis de dados em um cabeçalho marcado é chamado de encapsulamento.

Exemplos

editar
Nomenclatura do datagrama
Camada do OSI Nome
Camada 4 Segmento de dados
Camada 3 Pacote de dados
Camada 2 Quadro (IEEE 802.3)
Quadros (IEEE 802.11)
Célula (ATM)
Camada 1 Chip (CDMA)

Protocolo de Internet (IP)

editar

O IP define padrões para vários tipos de datagramas. A camada de Internet é um serviço de datagrama fornecido por meio de endereços IP; o UDP (Protocolo de Datagrama do Usuário), por exemplo, é executado por um serviço de datagrama na camada de Internet. O IP é um serviço de entrega de mensagens totalmente sem conexão, de melhor esforço e não confiável, enquanto que o TCP é um protocolo de nível superior executado em cima do IP que fornece um serviço orientado a conexão confiável.

Ver também

editar

Referências

editar
  1. «O CCITT estuda a comutação de pacotes como parte do desenvolvimento da rede pública de dados» (em inglês) 
  2. «Circuitos virtuais X.25 - Transpac na França - Rede de dados pré Internet» (em inglês) 
  3. «Como eu inventei o datagrama» (em francês). Arquivado do original em 28 de fevereiro de 2019 
  4. «Em redes de comunicações distribuídas» (PDF) (em inglês). Arquivado do original (PDF) em 26 de outubro de 2016 
  5. «Uma rede de comunicação digital para computadores com resposta rápida em terminais remotos» (PDF) (em inglês) 
  6. Lawrence Roberts; Barry D. Wessler (1970). «Desenvolvimento de rede de computadores para alcançar o compartilhamento de recursos» (PDF) (em inglês). doi:10.1145/1476936.1477020 
  7. Frank E Heart; R E Kahn; Severo M Ornstein; William R Crowther; David C Walden. «O processador de mensagens de interface para a rede de computadores ARPA» (em inglês). doi:10.1145/1476936.1477021 
  8. «Apresentação e os principais aspectos do projeto da rede Cyclades» (em inglês). Cópia arquivada em 27 de setembro de 2007 
  9. «Estendendo o TCP para transações - Conceitos» (em inglês). RFC 1379 . doi:10.17487/RFC1379 
  10. «Especificação do programa de controle de transmissão da Internet» (em inglês). RFC 675 . doi:10.17487/RFC0675 
  11. «Protocolo de Internet - especificação do protocolo do programa de Internet Darpa» (em inglês). RFC 791 . doi:10.17487/RFC0791 
  12. «Terminologia e considerações do tradutor de endereço de rede IP (NAT (em inglês). RFC 2663 . doi:10.17487/RFC2663 
  13. «Recomendações da IETF sobre o gerenciamento de fila ativa» (em inglês). RFC 7567 . doi:10.17487/RFC7567 
  14. Tanenbaum, Andrew S.; Wetherall, David J. (2011). Redes de computadores, quinta edição (em inglês). [S.l.: s.n.] p. 59. ISBN 978-0-13-255317-9 
  15. Packet Reordering Metrics. November 2006. doi:10.17487/RFC4737 . Solicitação de comentários (S.D.C.) 4737  Verifique data em: |data= (ajuda)