Sobes.tech
Middle

Fale sobre a camada de transporte (transport layer) do modelo TCP/IP.

sobes.tech IA

Resposta da IA

O nível de transporte TCP/IP fornece comunicação entre processos em hosts diferentes. As principais tarefas:

  • Identificação de aplicações/processos no host (através de portas).
  • Fornecimento de serviços de entrega de dados:
    • Entrega fiável e ordenada (TCP).
    • Entrega não fiável e sem garantias (UDP).

Dois protocolos principais:

  • Protocolo de Controlo de Transmissão (TCP):
    • Orientado a conexão.
    • Garante a entrega de pacotes, mantém a ordem, controla o fluxo e gere a congestão.
    • Usado para aplicações que requerem transmissão fiável (HTTP, FTP, SMTP).
  • Protocolo de Datagramas de Utilizador (UDP):
    • Sem conexão.
    • Não garante a entrega, a ordem ou o controlo de fluxo.
    • Baixa latência, adequado para aplicações sensíveis ao tempo onde uma pequena perda de dados é aceitável (DNS, VoIP, streaming de vídeo).

Os segmentos TCP incluem campos para: portas de origem/destino, números de sequência, números de reconhecimento, flags (SYN, ACK, FIN), soma de verificação.

Os datagramas UDP incluem campos para: portas de origem/destino, comprimento e soma de verificação.

Ports (portas): números de 16 bits usados para multiplexar/desmultiplexar dados entre processos.

  • Ports bem conhecidos (0-1023): Reservados para serviços padrão (80 para HTTP, 443 para HTTPS, 22 para SSH).
  • Ports registados (1024-49151): Usados para aplicações privadas registadas na IANA.
  • Ports dinâmicos/privados (49152-65535): Usados por clientes para ligações de saída.

Exemplo de estabelecimento de ligação TCP (Three-way Handshake):

  1. O cliente envia um segmento com a flag SYN e um número de sequência inicial.
  2. O servidor recebe o SYN, responde com um segmento com flags SYN e ACK, o seu número de sequência inicial e um número de reconhecimento igual a client_seq + 1.
  3. O cliente recebe o SYN+ACK, responde com um segmento com a flag ACK e um número de reconhecimento igual a server_seq + 1. A ligação está estabelecida.
// Exemplo de estrutura de cabeçalho TCP (simplificada)
struct tcp_header {
    unsigned short src_port;       // Porta de origem
    unsigned short dest_port;      // Porta de destino
    unsigned int   seq_num;        // Número de sequência
    unsigned int   ack_num;        // Número de reconhecimento
    unsigned short flags;          // Flags (SYN, ACK, FIN, etc.)
    // outros campos...
};
// Exemplo de estrutura de cabeçalho UDP (simplificada)
struct udp_header {
    unsigned short src_port;       // Porta de origem
    unsigned short dest_port;      // Porta de destino
    unsigned short length;         // Comprimento do datagrama UDP
    unsigned short checksum;       // Soma de verificação
};