O campo Window (Janela), também conhecido como Tamanho da Janela de Recepção (Receiver Window ou rwnd), é um campo de 16 bits localizado no cabeçalho TCP. Sua função é fundamental para o Controle de Fluxo, impedindo que o remetente envie dados mais rápido do que o receptor consegue processar.

Em uma comunicação TCP, o Window Size anuncia ao parceiro quantos bytes de dados o receptor está disposto a aceitar no momento, além dos dados que já foram confirmados (ACKed). É o mecanismo que impede que um transmissor rápido “afogue” um receptor lento.

1. O Problema do Congestionamento do Receptor

Se o remetente (ex: um servidor web poderoso) puder enviar dados a 10 Gbps, mas o receptor (ex: um smartphone antigo) só conseguir processar dados a 100 Mbps, a diferença de velocidade causaria problemas.

  • Sem Controle de Fluxo: O receptor receberia pacotes mais rápido do que poderia ler e processar a aplicação. Os pacotes se acumulariam no buffer de memória do receptor. Se o buffer encher, o sistema operacional seria forçado a descartar novos pacotes.
  • Resultado: A largura de banda seria desperdiçada enviando dados que seriam perdidos, e o remetente teria que retransmitir tudo, gerando ineficiência total na rede.

2. Como Funciona a Janela Deslizante (Sliding Window)

O campo Window implementa o conceito de Janela Deslizante. Pense na janela como um “limite de crédito” de envio.

  • O Valor: O valor no campo Window indica o número de bytes de espaço livre disponível no buffer de recepção do host que enviou o segmento.
  • Anúncio: O receptor envia esse valor em todo segmento TCP (no cabeçalho) junto com o ACK Number.
    • Exemplo: Se o receptor envia ACK 1000 e Window 5000, ele está dizendo: “Recebi tudo até o 999. Tenho espaço no meu buffer para mais 5000 bytes. Você pode me enviar do byte 1000 até o 5999.”

3. Dinâmica da Janela (A Janela Desliza)

À medida que a aplicação no receptor lê os dados do buffer, espaço é liberado, e o valor da Janela aumenta. À medida que o remetente envia dados, o valor da janela disponível diminui. O conceito de “deslizante” refere-se ao movimento desse intervalo permitido:

  1. Envio: O remetente envia dados dentro da janela permitida. A janela “fechando” (o espaço livre diminui).
  2. Recepção: O receptor recebe os dados e os coloca no buffer.
  3. Processamento: A aplicação lê os dados do buffer.
  4. Atualização: O receptor envia um novo ACK com um valor de Janela maior (abrindo a janela).
  5. Deslizamento: O remetente agora pode enviar mais dados. O intervalo de bytes permitidos “deslizou” para frente no fluxo.

4. Janela Zero (Zero Window) - O Bloqueio

Se a aplicação do receptor estiver muito lenta (ex: um processo travado ou lendo dados de um disco rígido lento), o buffer de recepção pode encher completamente.

  • Window = 0: O receptor envia um segmento com Window 0. Isso é um comando de PARE. O remetente não deve enviar nenhum novo byte de dados.
  • Persistência: O remetente entra em modo de persistência. Ele não envia dados, mas envia pequenos segmentos de teste chamados Zero Window Probes (sondas de janela zero) periodicamente para perguntar: “Você já liberou algum espaço?”.
  • Desbloqueio: Assim que a aplicação ler alguns dados, o receptor responde à sonda com um Window > 0, e a transmissão retoma.

5. Limitação do Campo de 16 Bits e Escala de Janela (Window Scale)

O campo Window tem 16 bits, o que limita o tamanho máximo da janela anunciada a 65.535 bytes (aproximadamente 64 KB).

  • O Problema: Em redes modernas de alta latência e alta largura de banda (ex: links de satélite ou backbones de 10 Gbps), uma janela de 64 KB é ridículamente pequena. O remetente enviaria 64 KB e teria que parar e esperar o ACK (latência), subutilizando drasticamente a capacidade do link.
  • A Solução (Window Scale - RFC 7323): Durante o Three-Way Handshake (no pacote SYN), os hosts podem negociar uma opção chamada Window Scale. Essa opção multiplica o valor do campo Window por um fator de escala (

    2S

    , onde

    S

    é o valor do shift).
    - Com um scale de 14, o limite da janela vai de 65KB para aproximadamente 1 GB.
    - Isso permite que o TCP preencha “tubos” longos e largos (Long Fat Networks - LFN), mantendo o pipe cheio de dados.

6. Distinção entre Janela de Recepção (rwnd) e Janela de Congestionamento (cwnd)

Embora este tópico foque no campo Window (rwnd), é vital entender que o remetente TCP respeita dois limites simultaneamente:

  1. rwnd (Receiver Window): O que o receptor consegue aguentar (definido pelo campo Window no cabeçalho). Evita sobrecarga do host.
  2. cwnd (Congestion Window): O que a rede consegue suportar (definido pelo algoritmo de controle de congestionamento do remetente). Evita colapso da rede.

O remetente só pode enviar dados até o limite do menor dos dois:

Envio Efetivo=min(rwnd,cwnd)