INTERNET - PACCHETTI, INSTRADAMENTO & AFFIDABILITÀ Ciao, mi chiamo Lynn Root, sono un'ingegnera del software qui in Spotify e devo ammettere che sono la prima che spesso dà per scontata l'affidabilità di Internet. L'enorme quantità di dati che incessantemente sfreccia su Internet, è sbalorditiva. Ma come è possibile che ogni porzione di dati ti venga sempre consegnata in modo affidabile? Supponiamo che tu voglia ascoltare una canzone da Spotify. Potrebbe sembrare che il tuo dispositivo si connetta direttamente ai server di Spotify e che essi ti inviino direttamente la canzone tramite una linea dedicata. Ma in realtà non è affatto così che funziona Internet! Se Internet fosse stata basata su linee dirette e dedicate, sarebbe stato impossibile continuare a farla funzionare quando gli utenti collegati sono diventati milioni. Soprattutto perché non ci può essere garanzia che ogni cavo e ogni computer funzioni perfettamente in ogni momento. Invece i dati viaggiano su Internet in una maniera molto meno diretta. Molti anni fa, nei primi anni '70, io e il mio collega Bob Kahn cominciammo a lavorare alla progettazione di ciò che oggi chiamiamo Internet. Bob e io ci trovammo ad avere la responsabilità e l'opportunità di progettare i protocolli alla base di Internet e la sua architettura e abbiamo poi continuato a partecipare alla crescita di Internet e alla sua evoluzione fino ad oggi. Il modo in cui i dati vengono trasferiti da un computer a un altro è piuttosto interessante. Non devono seguire un percorso prestabilito, anzi, il percorso può cambiare anche nel mezzo di una "conversazione" tra un computer e un altro. I dati su Internet viaggiano da un dispositivo a un altro in quello che chiamiamo un pacchetto di dati e un pacchetto viaggia da un punto all'altro di Internet in un modo molto simile a come ci si può spostare da un posto ad un altro in automobile. A seconda della situazione del traffico o delle condizioni della strada, si può scegliere o essere costretti a prendere strade differenti ad ogni viaggio pur dovendo arrivare sempre alla stessa destnazione. E, proprio come è possibile trasportare diversi oggetti all'interno di un'automobile, diverse tipologie di dati digitali possono essere inviate tramite pacchetti IP, ma ci sono alcuni limiti: pensiamo, ad esempio, di dover trasferire uno Space Shuttle da dove è stato costruito a dove dovrà decollare. Lo Shuttle non ci starà su un unico camion, dovrà quindi essere smontato in pezzi e trasportato da una intera flotta di camion. Questi camion potranno prendere strade differenti e potrebbero arrivare a destinazione a orari diversi, ma una volta che tutti saranno arrivati, si potranno ri-assemblati insieme e l'intero Shuttle sarà pronto per il lancio. Su Internet le cose funzionano più o meno allo stesso modo: se vuoi inviare un'immagine molto grande ad un amico o caricarla su un sito web, e quell'immagine è fatta di decine di milioni di bit (uni e zeri), sono troppi per essere spediti in un unico pacchetto. Visto che questi dati sono in un computer, questo li può velocemente dividere in centinaia o anche migliaia di parti più piccole denominate "pacchetti". Diversamente dalle automobili e dai camion, questi pacchetti non hanno un autista e non scelgono da soli la strada: ogni pacchetto è contrassegnato dall'indirizzo Internet di provenienza e da quello di destinazione; appositi computer in Internet, chiamati Router, gestiscono il traffico, facendo muovere i pacchetti nella rete, evitando ingorghi. Se un percorso diventa congestionato alcuni singoli pacchetti potranno viaggiare diversamente attraverso Internet e arrivare a destinazione in momenti lievemente diversi e anche in un ordine diverso. Parliamo dunque di come tutto ciò funziona. Come previsto dall'Internet Protocol, ogni router tiene traccia dei molteplici percorsi per spedire i pacchetti e sceglie quello più conveniente per ogni porzione di dati sulla base dell'indirizzo IP di destinazione di quel pacchetto. "Conveniente", in questo caso, non si riferisce al costo, ma al tempo e ad altri fattori non tecnici come questioni politiche e di relazioni tra aziende. Spesso il percorso migliore per i dati non è necessariamente il più diretto. La disponibilità di più percorsi possibili, rende la rete più tollerante rispetto ai guasti, il che significa che si potrà continuare ad inviare pacchetti anche in caso di guasti molto gravi. Questa è la base di uno dei principi fondamentali di Internet: l'affidabilità. Ora, cosa accadrebbe se tu richiedessi dei dati ed una parte di essi non ti venisse consegnata? Supponiamo che tu voglia ascoltare una canzone: come possiamo essere sicuri al 100% che tutti i dati ti saranno consegnati, in modo che la canzone risulti perfetta? Vi presento il nostro nuovo migliore amico: TCP Transmission Control Protocol (protocollo di controllo della trasmissione). Il TCP gestisce l'invio e la ricezione di tutti i tuoi dati organizzati in pacchetti. Pensa a lui come il servizio di posta raccomandata con ricevuta di ritorno. Quando richiedi una canzone tramite il tuo dispositivo, Spotify invia una canzone suddivisa in tanti pacchetti. Quando i pacchetti arrivano, il TCP fa un inventario completo e manda indietro una ricevuta per ogni pacchetto arrivato. Se tutti i pacchetti sono arrivati, il TCP firma una ricevuta ed il processo è concluso. [Musica] [Musica interrotta bruscamente] Se invece il TCP si accorge che mancano alcuni pacchetti, non firmerà, altrimenti la canzone potrebbe suonare male o essere incompleta. Per ogni pacchetto mancante o incompleto Spotify tenterà un nuovo invio. Se questa volta il TCP verificherà la corretta consegna di tutti i pacchetti della canzone, questa potrà finalmente cominciare a suonare (altrimenti la procedura si ripeterà). [La musica ricomincia] Ciò che è grandioso del TCP e del sistema di instradamento (routing) è che sono scalabili. Possono funzionare con 8 o con 8 miliardi di dispositivi. Anzi, proprio per via di questi principi di tolleranza agli errori e di ridondanza, più router ci sono, più affidabile diventa Internet. Un altro aspetto grandioso è che possiamo far crescere Internet senza interrompere il servizio a chiunque lo stia usando. Internet è fatto di centinaia di migliaia di reti e di miliardi di computer e altri dispositivi fisicamente connessi. Questi differenti sistemi che compongono Internet sono connessi gli uni agli altri, comunicano gli uni con gli altri, e riescono a lavorare insieme grazie al fatto di condividere alcuni standard su come i dati devono essere inviati su Internet. I dispositivi o i router disposti lungo tutta la rete Internet permettono a tutti i pacchetti di trovare la loro strada per la destinazione ove verranno ri-assemblati, e, se necessario, riordinati. Tutto ciò avviene miliardi di volte al giorno, sia che tu o chiunque altro stiate inviando un'email, visitando una pagina web, facendo una video-chat, usando una app per smartphone, o anche quando sensori o dispositivi connessi a Internet dialogano gli uni con gli altri.