Passa ai contenuti principali

Studiare il flow control di TCP (qualche volta) può servire...

Un ex studente mi ha inviato un mail che mi ha fatto molto piacere. Ha risolto un grosso problema pratico grazie al fatto di avere studiato TCP...ci è riuscito anche perché lui è molto in gamba, ma se non avesse saputo come funziona TCP il problema sarebbe stato completamente oscuro...

Buondi' Alberto!

Non ho mai avuto il tempo di raccontarti un aneddoto del lavoro, accaduto ormai diversi anni fa, dove quanto studiato nel corso "reti di calcolatori" e' stato fondamentale per risolvere un problema.

Oggi ti racconto solo il caso, senza la soluzione...

Il nostro collegamento internet e', ovviamente, una linea dedicata ad alta velocita' che arriva fino a noi, una serie di routers (alcuni del provider, altri nostri), una serie di passaggi tra firewalls, antivirus, proxy... 
Insomma, la piu' tipica delle configurazioni per un uso "professionale".

Un bel giorno decidono di sostituire il proxy con una macchina piu' nuova. La macchina vecchia era un linux RedHat 4 credo, la nuova una versione piu' recente sempre RedHat Linux, non ricordo se 5 o 6.

Configurato tutto si comincia  a testare questo nuovo proxy, ma ci si accorge subito che la velocita' di download di questo nuovo proxy e' sempre piu' bassa del vecchio. A volte di poco, a volte notevolmente piu' bassa.
per dare un'idea, nello scaricamento di un file pesante, tipo un iso, se il vecchio teneva una media di 5MB/s, il nuovo andava a 2 o anche meno. In alcuni casi la velocita' era "ridicola".
Il software di proxy non ricordo se era squid o altro, ma non era questo a fare la differenza. Anche scaricando  sulla macchina stessa, senza usare il software di proxy, ma per capirci, facendo un wget "qualcosa" diretto, le velocita' erano queste sopra dette.

Fatte tutte le verifiche sullo switch, su firewall... nessuna differenza per le due macchine. Entrambe sulla stessa lan, con le stesse impostazioni. Entrambe in gigabit full duplex. 
Provato anche a sostituire fisicamente le due macchine, quindi provato la nuova con l'IP della vecchia (per evitare che ci fossero regole sul firewall magari disperse nella configurazione...), stesso cavo di rete...

Configurazione di linux come da "fabbrica", nessuna operazione particolare fatta se non quanto strettamente necessario alla configurazione del proxy, ma niente da fare. La nuova era sempre sensibilmente piu' lenta....

Io non ero piu' nel gruppo reti, e nemmeno nel "gruppo dei proxy", ma mi sono trovato per caso in un ufficio di colleghi mentre discutevano di questo problema.
Ho riflettuto un poco e mi e' venuta un'idea....

La mia risposta è stata:

a questo punto è PROIBITO NON DIRMI LA SOLUZIONE !!!! -:)

dimmela quando vuoi, ma dimmela... (rcvbufsize ?)

Il problema era effettivamente legato ai parametri del flow control in TCP (come avevo immaginato) ma la faccenda era davvero intricata.

allora... quello che mi ha fatto scattare l'intuizione era una frase del Tanenbaum che diceva che banda, latenza e la "tcp windows size" sono intimamente legate.. 
cioè anche avendo  a disposizione una notevole banda, ma con una latenza non trascurabile, se non si imposta un'opportuna "tcp windows size" il risultato sara' comunque scadente.
La banda attuale e' cresciuta di molti ordini di grandezza rispetto quelle del tempo... la latenza sara' anche migliorata ma non piu' di tanto non si puo' fare.... a 0 non andra' mai... 
quindi di conseguenza la "window" dovrebbe essere generosamente aumentata.
E ho subito pensato a questa benedetta window. Ho sniffato un po' di traffico ed effettivamente i valori che vedevo nell'header del nuovo server erano molto bassi.
Non ricordo esattamente, ma era veramente un valore molto molto basso! 

Mentre nel vecchio avevo valori molto piu' alti.

Sintetizzo la parte rimanente:
  1. Il field window size dello header TCP è lungo 16 bit, quindi permette di gestire buffer di ricezione di dimensione massima 64 KB. Questa dimensione può essere eccessivamente piccola, ad esempio nelle network ad alto bandwidth-latency product, pertanto esiste una opzione di TCP che permette di definire window size molto più grandi: (RFC 1323): The window scale extension expands the definition of the TCP window to 32 bits and then uses a scale factor to carry this 32-bit value in the 16-bit Window field of the TCP header. The scale factor is carried in a new TCP option, Window Scale. 
  2. Alcuni router hanno un bug software a causa del quale i bit che definiscono la window scale sono scartati (!). Loro avevano proprio un router di questi. Pertanto il loro proxy inviava una window size ed il partner percepiva una window size completamente diversa. Il problema non finiva qui, infatti:
  3. Il vecchio proxy impostava un fattore di scala diverso da quello del nuovo proxy; e, colmo della sfortuna, la window size percepita con il vecchio proxy era intorno ai 32 KB (non bellissima ma accettabile) mentre quella percepita con il nuovo era 1 KB (!).
Ovvio che con il nuovo proxy la velocità di trasferimento imposta dal flow control fosse inaccettabilmente bassa...invio 1 KB e attendo riscontro; invio 1 KB e attendo riscontro...

Notare che il bug al punto 2 è davvero sorprendente....

Commenti

Popular Posts

"Ingegneria deve essere difficile"

Il ritaglio di giornale qui sotto ricorda uno degli eventi più non-trovo-un-aggettivo-appropriato del mio periodo di studente di Ingegneria a Pisa. Ricordo che una mattina iniziò a spargersi la voce "hanno murato la porta del dipartimento!".  Andammo subito a vedere ed arrivammo un pò prima dei giornalisti che scattarono questa foto. La porta era murata, intonacata, pitturata di bianco e sovrastata da una scritta "INGEGNERIA DEVE ESSERE DIFFICILE". Le "E" di "INGEGNERIA" erano scritte al contrario perché era una sorta di "marchio di fabbrica" della facoltà di Ingegneria di Pisa. L'aula più grande, quella in cui pressoché tutti gli studenti seguivano i corsi dei primi anni, aveva infatti alcuni bellissimi "affreschi scherzosi" che furono fatti nel corso delle proteste studentesche di qualche anno prima ed in cui la parola "Ingegneria" era appuntoi scritta in quel modo. Si era anche già sparsa la voce di cosa era

Il patch che non era un patch

Quanto segue è un patetico quanto inutile tentativo di distrarmi e non pensare alla pessima prestazione calcistica di ieri sera, decisamente non all'altezza dell'evento e dei nostri gloriosi colori. Nella lezione di "Computer Networks and Principles of Cybersecurity" di ieri, mi è stata posta la domanda " E' possibile che un patch introduca nuove vulnerabilità? ". La mia risposta è stata affermativa, ho evidenziato che un patch è un software, quindi può introdurre errori, vulnerabilità, può fare riemergere errori o vulnerabilità presenti e risolti in versioni precedenti, può correggere la specifica vulnerabilità presumibilmente risolta da quel patch solo in parte. Non è frequente, ma può accadere ed è quindi una possibilità da tenere presente. Uno dei numerosi motivi che rendono così complessa la gestione delle vulnerabilità è anche questo. Stamattina ho letto un esempio molto interessante di quanto abbiamo detto. Pochissime settimane fa Microsoft ha ril

Perché studiare Analisi Matematica???

Un mio caro amico mi ha scritto: ...sono con mia figlia che studia Analisi 1...A cosa serve, al giorno d'oggi, studiare Analisi (a parte sfoltire i ranghi degli aspiranti ingegneri)? Riporto la mia risposta di seguito, forse può "motivare" qualche altro studente. ... Per un ingegnere la matematica è fondamentale perché è un linguaggio ; ed è il linguaggio essenziale per trattare gli argomenti che dovrà affrontare come ingegnere; non sono importanti i contenuti specifici; è importante, anzi fondamentale, che riesca a capirli, ricostruirli etc. ad esempio, chi deve usare l'inglese, lo usa perché in un modo o nell'altro lo conosce; nessuno di noi ha usato esattamente le frasi o i dialoghi o le regole che ha incontrato negli esercizi di inglese o di tedesco; nella matematica è lo stesso; non sono importanti i limiti, le serie, i teoremi di cauchy o che so io; ma se uno non è in grado di capire quel linguaggio allora non sarà in grado di capire davvero quas

40 anni di Internet: Cosa non ha funzionato e perché

Leggo molti documenti tecnico-scientifici per lavoro e, in parte, per "piacere". Molti sono interessanti, alcuni molto interessanti. E' raro che trovi un documento che mi appare illuminante. Questo indicato sotto è uno dei pochi documenti in questa categoria. Sembra banale, in quanto è molto discorsivo e parla di molte cose note: IP, DNS, NAT.... In realtà è profondissimo. Una miniera di riflessioni profonde, sintetiche, focalizzate ed, appunto, illuminanti. A mio parere imperdibile per chiunque abbia un qualche interesse negli aspetti tecnici di Internet. Chi non ha la pazienza di leggerlo per intero, legga almeno gli ultimi due paragrafi. Failed Expectations (l'autore, Geoff Houston , fa parte della Internet Hall of Fame )

ChatGPT: supererebbe il mio esame di Reti di Calcolatori?

Molto probabilmente chi ha a che fare con i corsi di laurea scientifici e tecnologici, come me, ha preso atto della notizia che ChatGPT ha superato esami universitari in giurisprudenza ed economia con un pò, diciamo così, di sufficienza. Pensando "da noi non potrebbe mai succedere; figuriamoci". E' quello che ho pensato io. Poi però ho fatto a ChatGPT qualche domanda di Reti di Calcolatori. Ho quasi cambiato idea. "Quasi" perché nello scritto di Reti di Calcolatori faccio sempre esercizi. Pur non avendoli sottoposti a ChatGPT sono certo che questi esercizi non li sa risolvere. Ma alle "domande tipiche da orale" ha fornito risposte che mi hanno davvero stupefatto. Riporto qui sotto solo un esempio di "dialogo", relativo a validazione di firma digitale e certificati auto-firmati. Risposte sostanzialmente corrette e pertinenti, molto più sintetiche e focalizzate di quelle che ricevo normalmente. E più rapide. Alla fine ha riconosciuto di esser