O UDP (User Datagram Protocol) é o transporte mais simples da pilha: ele apenas faz multiplexação/demultiplexação entre processos e pode incluir verificação de erros básica. Não há construção de conexão nem confirmação de entrega. Em termos práticos, isso significa que:
Por que usar UDP? Em aplicações sensíveis a atraso ou que podem tolerar alguma perda de dados, o UDP serve para ter menor sobrecarga, controle direto na camada de aplicação (quando necessário) e evitar o atraso de estabelecimento de conexão. Exemplos:
Estrutura do segmento UDP (RFC 768):
Exemplo prático: o DNS envia consultas e respostas como mensagens UDP, sem negociação de conexão, para manter a latência baixa. Se a consulta não for respondida, a aplicação pode consultar outro servidor de nomes.
O cabeçalho UDP tem 4 campos de 2 bytes cada, totalizando 8 bytes de overhead. O checksum utiliza também o campo de dados para detecção de erros, mas o UDP não reserva muitos recursos além disso. O campo comprimento garante que o datagrama UDP caiba no MTU do enlace.
O TCP (Transmission Control Protocol) fornece serviço confiável, orientado a conexão. Antes de trocar dados, dois hosts devem estabelecer uma conexão via o chamado handshake de três vias (3-way handshake):
Após o estabelecimento, dados são enviados em segmentos TCP. Cada segmento carrega números de sequência e de reconhecimento. O número de sequência se aplica a cada byte da cadeia de dados, não ao conjunto de segmentos. O destinatário envia reconhecimento cumulativo para indicar até qual byte recebeu com sucesso.
Exemplo de Telnet (padrão RFC 854) para ilustrar: suponha seq. inicial 42 (cliente) e 79 (servidor). O cliente envia o caractere 'C' (byte 1) com seq 42; o servidor reconhece com ack 43 e envia 'C' de volta com seq 79; o cliente envia um ACK com ack 80 para confirmar os bytes recebidos. Esse é o conceito de reconhecimento piggyback quando um segmento carrega dados e reconhecimento ao mesmo tempo.
O segmento TCP possui:
Números de sequência e reconhecimento:
Exemplo com números aleatórios de sequência, como descrito no material: o cliente envia 'C' com seq 42, o servidor responde com ack 43 carregando também dados, e o cliente encerra com ack 80. Isso ilustra como a contagem de bytes e os ack trabalham juntos na conexão TCP.
O segmento TCP é mais pesado que UDP (tipicamente 20 bytes a mais para cabeçalho); essencial para a confiabilidade, controle de fluxo e controle de congestão.
O datagrama IPv4 contém:
Fragmentação: quando MTU de um enlace é menor que o datagrama, o IP pode fragmentar o datagrama em fragmentos. A reconstrução fica para o hospedeiro destino. Cada fragmento carrega um identificador, deslocamento e um bit de flag de "mais fragmentos" (MF). Exemplo típico: datagrama de 4.000 bytes de payload pode ser fragmentado em 3 fragmentos com deslocamentos 0, 185 e 370 (em unidades de 8 bytes).
Observação: o datagrama IP típico chega sem opções, com cabeçalho de 20 bytes, mas o tamanho pode variar.
Endereçamento IP usa 32 bits divididos em rede e host. CIDR (Classless Inter-Domain Routing) generaliza a ideia de sub-rede com o formato a.b.c.d/x, onde x é o comprimento do prefixo da rede.
Sub-redes agrupam interfaces com prefixos comuns (ex.: 223.1.1.0/24). CIDR reduz o tamanho das tabelas de roteamento na Internet, permitindo anunciar prefixos agregados. Endereços IP são atribuídos por organizações via ARIN/RIPE/APNIC/ etc.
Exemplos de representação de sub-redes e endereços privados (NAT) e a ideia de NAT (tradução de endereços) para permitir múltiplas máquinas comuns compartilharem uma única saída para a Internet.
DHCP: atribuição dinâmica de endereços e informações de rede para hosts; NAT oferece uma solução prática para escassez de endereços públicas.
Observação sobre NAT: facilita conectividade de redes domésticas, mas pode interferir com algumas aplicações P2P/VoIP e viola conceitos de fim-a-fim.
IPv6 amplia o espaço de endereços para 128 bits (unicast, multicast, anycast). Cabeçalho fixo de 40 bytes, sem somas de verificação de cabeçalho, e sem fragmentação em roteadores (fragmentação fica para os hosts finais).
Principais mudanças: endereços 128 bits, class de tráfego, fluxo, próximas camadas, e suporte a novos recursos como multicast amplo. Transição: operações com pilha dupla (dual-stack) ou encapsulamento/túneis para permitir interoperabilidade IPv4/IPv6.
Resposta correta: C) Não estabelece conexão e não mantém estado, oferecendo multiplexação/demultiplexação simples.
Observação: UDP opera com mínimo overhead, não há handshake nem confidência de entrega; aplicações podem implementar confiabilidade na camada de aplicação se desejarem.
Resposta correta: A) O número de sequência é o inteiro do primeiro byte do segmento de dados.
Observação: no TCP, os números de sequência são aplicados sobre a cadeia de bytes do fluxo, não ao conjunto de segmentos.
Resposta correta: C) Fragmentação e remontagem são feitas apenas nos hospedeiros finais.
Observação: IPv6 elimina a fragmentação em roteadores para acelerar o encaminhamento; se o datagrama for muito grande, o remetente/host final reenvia com MTU adequado.
Resposta correta: B) Fragmentos: payload 1480, 1480, 1040; deslocamentos 0, 185, 370.
Justificativa: cada fragmento, exceto o último, deve ter payload múltiplo de 8 bytes. Aqui, 4000 = 1480 + 1480 + 1040; deslocamentos são calculados em unidades de 8 bytes: 0, 1480/8 = 185, 2960/8 = 370.