Resumo
- A Silly Window Syndrome é um ciclo estável: um pequeno avanço da janela libera um segmento pequeno, cujo reconhecimento prepara outro avanço semelhante.
- O TCP quebra o ciclo com contenção nos dois extremos, enquanto um temporizador de exceção evita que a espera por eficiência vire bloqueio.
Imagine um aplicativo receptor que retira somente 50 bytes de um buffer quase cheio. O espaço existe e o TCP poderia anunciá-lo de imediato. O emissor, com muitos dados na fila, recebe permissão para mandar 50 bytes. Quando eles chegam e o aplicativo os consome, surgem outros 50 bytes de espaço. O ACK devolve ao emissor uma oportunidade do mesmo tamanho. Nenhum pacote viola o controle de fluxo; ainda assim, a conexão passou a andar em passos minúsculos que se reproduzem.
David Clark chamou esse padrão de Silly Window Syndrome, ou SWS, na RFC 813, de 1982. A definição não transforma todo segmento curto em defeito. Ela descreve uma degeneração estável durante uma transferência longa. Um limite natural dos dados pode dividir uma janela utilizável uma vez; depois, as confirmações e os avanços da borda direita mantêm a divisão. Enquanto o emissor não fica sem dados e a sequência não é interrompida, não aparece uma ocasião natural para reunir os fragmentos.
A RFC 813 tornou o problema legível ao separar a janela oferecida pelo receptor da janela utilizável pelo emissor. A primeira informa quanto o receptor aceita. A segunda desconta os bytes já enviados e ainda não reconhecidos. Se o receptor anuncia 1.000 bytes, mas 950 continuam em trânsito, restam apenas 50 para um novo envio. Quando o reconhecimento desloca a borda direita em mais 50, a oportunidade seguinte continua pequena. O valor absoluto da janela pode parecer amplo; a granularidade de seu movimento é que aprisiona a transmissão.
O custo histórico foi maior do que a simples proporção entre cabeçalho e carga. A RFC 813 relatou quedas de várias vezes no desempenho e na eficiência de CPU, além de casos em que o segmento médio tinha um décimo do tamanho aceito pelos dois extremos e as retransmissões se multiplicavam. Esses números pertencem às observações daquele documento, não medem a incidência nas redes atuais. Eles mostram por que o ciclo exigia uma resposta no projeto do transporte.
No receptor, a resposta consiste em não confundir memória livre com crédito que precisa ser publicado agora. Quando o aplicativo libera poucos bytes, o TCP mantém fixa a borda direita anunciada. Guarda o novo espaço sem oferecê-lo e espera uma quantidade útil se acumular. Esperar demais pode esvaziar temporariamente o fluxo e acrescentar latência. Abrir cedo demais sustenta a fragmentação e gasta rede e processamento. A RFC 813 recomendou favorecer a contenção e reabrir por uma quantidade capaz de acomodar um segmento razoavelmente grande.
A RFC 1122 transformou a ideia em requisito. A seção 4.2.3.3 exige um algoritmo de prevenção de SWS no receptor. A regra sugerida mantém RCV.NXT + RCV.WND fixo até que o espaço disponível, mas ainda não anunciado, atinja o menor valor entre uma fração do buffer e um MSS efetivo de envio. A fração recomendada é um meio. Em buffers realistas, a janela tende assim a avançar em unidades próximas de um segmento, não byte por byte.
O emissor também precisa poder recusar uma oportunidade legal, porém ineficiente. A seção 4.2.3.4 da RFC 1122 exige prevenção de SWS no lado transmissor. O conjunto recomendado autoriza o envio quando cabe um segmento de tamanho máximo; quando todos os dados marcados para envio imediato podem sair nas condições indicadas; quando pelo menos metade da maior janela observada pode ser usada; ou quando vence um temporizador de exceção. Uma pequena janela utilizável é uma permissão que pode aguardar, não uma ordem para transmitir naquele instante.
O temporizador corrige uma assimetria. O receptor conhece o próprio buffer; o emissor precisa estimá-lo pela maior janela observada durante a conexão. Essa estimativa pode envelhecer se o receptor reduzir seu buffer. Esperar para sempre uma fração de um máximo que já não existe transformaria a agregação em impasse. A exceção obriga o envio apesar da regra. A RFC 9293 preserva uma faixa recomendada de 0,1 a 1,0 segundo, sem que isso prove quais valores cada implementação moderna realmente usa.
A RFC 9293 também mantém a obrigação em ambos os lados e esclarece uma distinção importante. O algoritmo de Nagle reduz segmentos pequenos quando o aplicativo fornece dados em incrementos pequenos. A prevenção de SWS no emissor reduz segmentos pequenos quando a borda da janela de recepção avança em incrementos pequenos. As técnicas podem atuar juntas, mas respondem a origens diferentes.
Briefing para membros
Contexto aprofundado do perfil
Faça login com o nível de assinatura correto para desbloquear o briefing completo e as notas das fontes.
Apenas para Strategic Circle
Strategic Circle
Aberto a todos os leitores. Desbloqueie Briefings de perfil após se inscrever e fazer login.
Junte-se ao Strategic CircleSomente para Leadership Alliance
Leadership Alliance
Para proprietários e gestores qualificados de ativos de PI; faça login para desbloquear os briefings da Leadership Alliance.
Junte-se ao Leadership Alliance
