Um datagrama é uma unidade básica de transferência associada a uma rede de comutação de pacotes. Os datagramas são tipicamente estruturados em seções de cabeçalho (header) e carga útil (payload). Os datagramas fornecem um serviço de comunicação sem conexão através de uma rede de comutação de pacotes. A entrega, o tempo de chegada e a ordem de chegada dos datagramas não precisam ser garantidos pela rede.
História
No início da década de 1970, o termo datagrama foi criado pela combinação das palavras dado (data) e telegrama pelo relator do CCITT sobre comutação de pacotes, Halvor Bothner-By. Embora a palavra fosse nova, o conceito já possuía uma longa história.
Em 1964, Paul Baran descreveu, em um relatório da RAND Corporation, uma rede militar hipotética que deveria resistir a um ataque nuclear. Pequenos "blocos de mensagens" padronizados, contendo endereços de origem e destino, eram armazenados e encaminhados em nós de computadores de uma rede em malha altamente redundante. Baran escreveu: "O usuário da rede que solicitou uma conexão virtual a uma estação final e transmitiu mensagens... também pode visualizar o sistema como uma caixa preta que fornece uma conexão de circuito aparente". O conceito do que hoje chamamos de circuito virtual aparece no projeto, embora nenhuma rede tenha sido construída na época.
Em 1967, Donald Davies publicou um artigo seminal no qual introduziu o pacote e a comutação de pacotes. Sua proposta de rede central é semelhante à proposta por Paul Baran, embora desenvolvida de forma independente. Ele assume que "todos os usuários da rede se proverão de algum tipo de controle de erros". Seu objetivo é uma "rede de comunicação de operadora comum". Para suportar o acesso remoto a serviços de computação por terminais de usuário, que naquela época transmitiam caractere por caractere, ele incluiu, na periferia da rede, computadores de interface que convertem fluxos de caracteres em fluxos de pacotes e vice-versa. Davies escreveu: "éramos realmente contra o circuito virtual, porque acreditávamos que uma rede de comunicação deveria se preocupar apenas com pacotes, e que quaisquer protocolos envolvidos na montagem desses pacotes deveriam ser feitos de ponta a ponta, entre os próprios clientes."
Em 1970, Lawrence Roberts e Barry D. Wessler publicaram um artigo sobre a ARPANET, a primeira rede de comutação de pacotes com múltiplos nós. Um documento complementar descreveu seus nós de comutação (os IMPs) e seus formatos de pacotes. O núcleo da rede realizava a comutação de datagramas como no modelo de Baran e Davies, mas o serviço oferecido aos hosts pela rede era orientado à conexão. Um serviço confiável de transferência de mensagens era, portanto, oferecido aos computadores dos usuários, simplificando muito o design da rede. Isso tornou a ARPANET o que viria a ser chamado de uma rede de circuito virtual.
Roberts apresentou a ideia da comutação de pacotes aos profissionais de comunicação e enfrentou raiva e hostilidade. Antes da ARPANET operar, eles argumentavam que os buffers dos roteadores se esgotariam rapidamente. Depois que a ARPANET entrou em operação, argumentaram que a comutação de pacotes nunca seria econômica sem o subsídio do governo. Baran enfrentou a mesma rejeição e, portanto, não conseguiu convencer os militares a construir uma rede de comutação de pacotes.
Em 1973, Louis Pouzin apresentou seu projeto para a CYCLADES, a primeira rede de larga escala a implementar o modelo puro de datagrama de Davies. A equipe da CYCLADES foi, assim, a primeira a enfrentar o problema altamente complexo de fornecer às aplicações dos usuários um serviço de circuito virtual confiável enquanto utilizava o princípio fim-a-fim em um serviço de rede conhecido por possivelmente produzir perdas e reordenações não negligenciáveis de datagramas. Embora a preocupação de Pouzin "em um primeiro estágio não fosse realizar um avanço [sic] 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, fizeram contribuições significativas para o design do TCP da Internet que Vint Cerf, seu principal designer, reconheceu.RFC 675
Em 1981, a Agência de Projetos de Pesquisa Avançada de Defesa (DARPA) emitiu a primeira especificação do Protocolo de Internet (IP). Ela introduziu uma grande evolução no conceito de datagrama: a fragmentação.RFC 791 Com a fragmentação, algumas partes da rede global podem usar pacotes de tamanho grande (tipicamente redes locais para minimizar a sobrecarga de processamento), enquanto outras podem impor tamanhos de pacote menores (tipicamente redes de longa distância para minimizar o tempo de resposta). Os nós da rede podem fragmentar um datagrama em vários pacotes menores.
Em 1999, a Força-Tarefa de Engenharia da Internet (IETF) sancionou o uso do NAT (tradução de endereços de rede), já amplamente implantado, pelo qual cada endereço público pode ser compartilhado por vários dispositivos privados.RFC 2663 Com isso, a iminente exaustão de endereços de Internet foi adiada, deixando tempo suficiente para introduzir o IPv6, a nova geração do Protocolo de Internet que suporta endereços mais longos. O princípio inicial de transparência total da rede ponta a ponta para datagramas foi relaxado para isso: os nós NAT precisavam gerenciar estados por conexão, tornando-os em parte orientados à conexão.
Em 2015, a IETF atualizou sua RFC 2309 informativa de 1998, estabelecendo que os nós de comutação de datagramas realizem gerenciamento ativo de fila, para torná-la uma recomendação de melhores práticas atuais mais forte e detalhada através da publicação da RFC 7567. Embora o modelo inicial de enfileiramento de datagramas fosse simples de implementar e não precisasse de mais ajustes do que o comprimento das filas, o suporte a mecanismos mais sofisticados e parametrizados foi considerado necessário "para melhorar e preservar o desempenho da Internet" (RED, ECN etc.). Pesquisas adicionais sobre o assunto também foram solicitadas, com uma lista de itens identificados.RFC 7567
Definição O termo datagrama é definido da seguinte forma:RFC 1594
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 ocorre, por exemplo, na maioria das conversas telefônicas de voz.
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 garantia de entrega nem confirmação após o recebimento bem-sucedido. O serviço de datagrama é, portanto, considerado não confiável. O serviço de datagrama roteia os dados sem criar primeiro um caminho predeterminado. O serviço de datagrama é, portanto, considerado sem conexão. Também não há consideração quanto à ordem em que ele e outros datagramas são enviados ou recebidos. De fato, muitos datagramas do mesmo grupo podem viajar por caminhos diferentes antes de chegar ao mesmo destino em uma ordem diferente.
Estrutura Cada datagrama possui dois componentes: um cabeçalho (header) e uma carga útil de dados (payload). 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 campos de tipo e comprimento. A carga útil são os dados a serem transportados. Esse processo de aninhar cargas úteis de dados em um cabeçalho marcado é chamado de encapsulamento.
Exemplos + Nomenclatura de datagramas Camada OSI Nome Camada 4 Segmento TCP Camada 3 Pacote de rede Camada 2 Quadro Ethernet (IEEE 802.3)Quadro LAN sem fio (IEEE 802.11) Camada 1 Chip (CDMA)
Protocolo de Internet O Protocolo de Internet (IP) define padrões para vários tipos de datagramas. A camada de internet é um serviço de datagrama fornecido por um IP. Por exemplo, o UDP é executado por um serviço de datagrama na camada de internet. O IP é um serviço de entrega de mensagens inteiramente sem conexão, de melhor esforço (best effort) e não confiável. O TCP é um protocolo de nível superior executado sobre o IP que fornece um serviço confiável orientado à conexão.
Ver também Guerras de Protocolos Pacote de rede Quadro (redes) Socket de datagrama
Referências
Categoria:Pacotes (tecnologia da informação) Categoria:Unidades de informação