Sobes.tech
Middle

O que pode contar-me sobre a janela TCP?

sobes.tech IA

Resposta da IA

A janela TCP (ou janela de recepção TCP) é um mecanismo de controlo de fluxo de dados no protocolo TCP. Ela define o volume de dados que o remetente pode enviar sem esperar por uma confirmação do destinatário (ACK). O tamanho da janela adapta-se dinamicamente, prevenindo o transbordamento do buffer do destinatário e controlando a velocidade de transmissão.

Pontos principais:

  • Controlo de fluxo: A função principal é evitar que o remetente envie dados mais rapidamente do que o destinatário pode processar.
  • Tamanho da janela: Anunciado pelo destinatário em cada segmento TCP (no campo "Window Size") e indica quantos bytes o destinatário está disposto a aceitar, começando pelo próximo byte esperado.
  • Dinamicidade: O tamanho da janela pode mudar durante a ligação dependendo da carga do buffer do destinatário.
  • Buffer de recepção: O tamanho real da janela é limitado pelo tamanho do buffer de recepção do lado do destinatário.
  • Escalonamento de janela (Window Scaling): Opção TCP que permite usar janelas de maior tamanho (até 1 GB) para redes de alta velocidade ou com alta latência, usando um multiplicador anunciado durante o estabelecimento da ligação (SYN/SYN-ACK).
  • "Síndrome da Janela Estreita" (Slim Window): Situação em que o tamanho da janela se torna muito pequeno, o que pode levar a uma transmissão de dados ineficiente.
  • Janela Zero: Se o buffer do destinatário estiver completamente cheio, o tamanho da janela é anunciado como 0. O remetente deve parar a transmissão de dados, exceto por segmentos Keep-Alive (se a opção estiver ativada), e reenviar o último segmento para solicitar uma atualização do tamanho da janela.
// Exemplo de cabeçalho TCP, onde é indicado o tamanho da janela
// (campo "Window Size")
// Porta de origem: 12345
// Porta de destino: 80
// Número de sequência: 1000
// Número de reconhecimento: 2000
// Deslocamento de dados: 20 bytes (5 palavras)
// Reservado: 0
// Flags: [ACK, PSH]
// Tamanho da janela: 65535 // Tamanho máximo de janela sem escalonamento
// Checksum: 0xABCD
// Ponteiro Urgente: 0