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):
- O cliente envia um segmento com a flag SYN e um número de sequência inicial.
- 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.
- 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
};