Cos'è la sindrome della finestra sciocca - Spiegazione e prevenzione

I dati(Data) vengono trasferiti sulla rete e su Internet(Internet) utilizzando il TCP/IP Protocol . Il TCP/IP non è perfetto ma è più facile da implementare rispetto ad altri protocolli teorizzati per la comunicazione dei dati… come il modello ISO OSI(ISO OSI) . Come per qualsiasi cosa tecnica, anche TCP/IP ha alcuni difetti e la Sindrome di Silly Window(Silly Window Syndrome) è una creazione di uno di questi difetti. Per capire cos'è la Silly Window Syndrome o SWS , dovrai prima capire il meccanismo alla base della comunicazione dei dati in TCP/IP .

Sindrome della finestra stupida

sindrome della finestra stupida

Comprendere la finestra e le sue dimensioni

Quando due punti comunicano in TCP/IP , implica un meccanismo di riconoscimento. Questo meccanismo di riconoscimento è ciò che causa la sindrome della finestra sciocca(Silly Window Syndrome) , come spiegato ulteriormente. I punti possono riferirsi a due computer, client e server, ecc.

SWS is caused by the receiver advancing the right window edge whenever it has any new buffer space available to receive data and by the sender using any incremental window, no matter how small, to send more data. The result can be a stable pattern of sending tiny data segments, even though both sender and receiver have a large total buffer space for the connection, says MSDN.

Quando un computer, diciamo A, invia un pacchetto di dati a un altro computer B, quest'ultimo deve riconoscere e rispondere di aver ricevuto il pacchetto di dati. Insieme al riconoscimento, deve anche inviare la dimensione del buffer impostata a parte per quel thread di comunicazione. Questo è generalmente il numero di byte liberati per la comunicazione.

Quindi, quando B dice che 100B è disponibile per il messaggio successivo, 100B è la finestra nella sindrome(Silly Window Syndrome) della finestra stupida . Cioè, è la dimensione del buffer. Con il suo stesso difetto, il meccanismo TCP/IP può ridurre la dimensione del buffer per ogni comunicazione/dati provenienti da A. Cioè, ogni volta che A invia un messaggio, B presume che la dimensione del buffer sia ridotta e invia un numero inferiore. Pertanto, la dimensione della finestra continua a essere ridotta e ad un certo punto la comunicazione si interrompe quando B invia 0B come dimensione della finestra.

Come funziona la sindrome della finestra sciocca

Secondo l'esempio sopra di A e B, se B invia 1000B come dimensione della finestra, A lo dividerà in due 500B e invierà due pacchetti di 500B. Al ricevimento del primo pacchetto, B invierà una conferma dicendo che 500B è disponibile per la finestra poiché il secondo pacchetto deve ancora essere ricevuto. A presume che 500B sia la dimensione della finestra e di conseguenza invia due pacchetti da 250B. Mentre in B, viene utilizzato 500B e viene appena ricevuto 500, invierà 0B come disponibile. A questo punto, A presumerà che non sia disponibile alcuna finestra anche se potrebbe accadere che il buffer sia vuoto poiché il processore ha utilizzato i dati lì. A invierà comunque un pacchetto più piccolo per vedere se è disponibile una finestra. Se il contenuto del buffer in B non è stato ancora rimosso, riceverà comunque 0 come risposta/riconoscimento.

Pertanto, la dimensione della finestra continua a ridursi poiché B invia un riconoscimento ogni volta che riceve un pacchetto da A. Questa dimensione è solitamente inferiore al riconoscimento precedente poiché B sta ricevendo pacchetti di dati in parti. Non ci sarebbero problemi se A potesse inviare un pacchetto abbastanza grande da coprire la dimensione del buffer su B alla volta. Ma che richiederebbe meccanismi aggiuntivi e quindi la sindrome della finestra stupida(Silly Window Syndrome) . La comunicazione si interrompe dopo che A riceve 0 due o tre volte.

Come prevenire la Sindrome della Finestra Silly(Silly Window Syndrome) ( SWS )

C'è un semplice algoritmo da implementare per sbarazzarsi di SWS . Dopo aver ricevuto il pacchetto iniziale, B invia metà dello spazio realmente disponibile come finestra. Ciò farà in modo che A invii pacchetti più piccoli. Di conseguenza, quando i pacchetti diventano troppo piccoli, B invia la dimensione totale del buffer in modo che A possa ricominciare a inviare byte di dati più grandi.

In altre parole, se è disponibile 1000B, B invia 500B come conferma. Di conseguenza, A invia 250B x ​​2 pacchetti. Per questo, A riceve 100B come riconoscimento. Quando riceve un pacchetto da 50B, B invia 1000B – 50B ad A. Ciò rende nuovamente operativa l'intera conversazione. Ciò potrebbe indurre un piccolo ritardo nell'elaborazione, ma impedirà il verificarsi della Sindrome della finestra sciocca(Silly Window Syndrome) e interromperà l'intera conversazione.

Per riassumere, SWS si basa sulla dimensione del buffer a disposizione del destinatario e sulla dimensione presunta calcolata dal mittente. Per prevenire SWS , viene introdotto un ritardo e viene contraccambiata una dimensione della finestra deliberatamente più piccola fino a quando la dimensione del pacchetto diventa troppo piccola. Quindi il destinatario rivela le dimensioni della finestra effettivamente disponibili. L'intero processo continua a ripetersi fino al completamento della comunicazione.

Anche se potrei aver usato le parole finestra e buffer in modo intercambiabile. Non intendo alcuna differenza tra loro. Negli studi SWS , il buffer è la finestra.



About the author

Sono uno sviluppatore iOS con oltre 10 anni di esperienza. Sono specializzato nello sviluppo di app per iPhone e iPad. Ho esperienza nella creazione di flussi utente, nella creazione di kit di sviluppo personalizzati (CDK) e nell'utilizzo di vari framework di sviluppo di app. Nel mio lavoro precedente, ho anche sviluppato strumenti per aiutare a gestire l'App Store di Apple, che includono uno strumento di gestione del prodotto e uno strumento di invio delle app.



Related posts