Come funziona davvero internet
Dal sito a te non viaggia niente. La pagina viene tagliata in migliaia di pezzi numerati, ognuno si cerca la strada da solo attraverso il pianeta, e la tua macchina li rimette in ordine.
Che cosa succede fra il clic e la pagina
Livello Base — linguaggio semplice, senza matematica
Quando scrivi un indirizzo e premi invio, la prima cosa che il tuo computer deve fare è ammettere di non sapere dove sia quel posto. labinatab.com è un nome, e i nomi per la rete non significano niente. Quindi chiede, e il chiedere è già un piccolo viaggio: dal tuo router al tuo operatore fino a una macchina che tiene l'elenco principale, finché non torna una risposta, cioè un numero. Quel numero è l'indirizzo, e solo adesso si può spedire qualcosa.
Poi arriva la parte sorprendente. La pagina non viene spedita come pagina. Viene tagliata in pezzi da circa millecinquecento caratteri l'uno, e ogni singolo pezzo viene messo in una busta con la destinazione scritta sopra e un numero d'ordine scritto dentro. Una foto può essere quattrocento buste. Ognuna parte per conto suo, e nessuno le tiene insieme.
Viaggiano passandosele. La tua busta arriva a una macchina che guarda l'indirizzo, decide quale dei suoi cavi punta più o meno nella direzione giusta, la butta in quel cavo e poi se ne dimentica completamente. Dieci o venti macchine fanno questo a turno, e nessuna di loro conosce l'intero percorso. È il sistema postale, non una telefonata: fra te e il server non viene mai aperta nessuna linea.
Qualche busta si perde. Una macchina è troppo occupata, un cavo fa i capricci, e il pezzo semplicemente non arriva. Il tuo computer si accorge del buco nei numeri d'ordine e richiede quel pezzo: ecco perché una connessione scadente non ti dà mezza foto, te la dà lenta. Muovi i cursori e guarda dove finisce davvero il tempo. Quasi mai dove la gente pensa.
Da sapere
- Ogni pezzo di ogni pagina che apri porta addosso l'indirizzo completo della destinazione, perché nessuna macchina lungo la strada ricorda niente di quelle passate prima.
- Circa il 99% del traffico internet intercontinentale passa per cavi sottomarini, non per satelliti. Un cavo grosso come un tubo da giardino può portare il traffico di un paese.
- Nella fibra la luce viaggia a circa due terzi della sua velocità nel vuoto, il che mette un pavimento rigido di circa 60 ms sul viaggio di andata e ritorno fra l'Europa e la costa ovest americana. Non c'è somma di denaro che lo accorci.
DNS, pacchetti, strette di mano e perché la latenza batte la banda
Livello Studente — le equazioni principali
Il caricamento di una pagina è fatto di quattro cose distinte in sequenza, e capire quale domina è quasi tutta la conoscenza pratica. Prima il DNS: il nome viene risolto in un indirizzo IP percorrendo una gerarchia - i server radice, poi il dominio di primo livello, poi il server autoritativo del dominio - a meno che la risposta non sia già in cache, nel qual caso costa quasi nulla. Poi la stretta di mano TCP, tre messaggi che stabiliscono la connessione e costano un round trip e mezzo prima che si muova un solo byte di contenuto. Poi il TLS, che costa altri round trip. Solo allora scorrono i dati.
I dati vengono divisi in pacchetti dimensionati dall'MTU, tipicamente 1500 byte, di cui circa 1460 sono carico utile. Una pagina da 240 kB fa quindi circa 170 pacchetti. Vengono spediti a finestra - diversi in volo insieme, perché aspettare una conferma dopo ognuno sarebbe catastroficamente lento - e la finestra cresce man mano che la connessione si dimostra affidabile. È per questo che il primo secondo di una connessione è più lento del resto.
L'instradamento è salto per salto e senza stato. Ogni router legge la destinazione, consulta una tabella di inoltro e manda il pacchetto fuori da una interfaccia. Pacchetti della stessa pagina possono prendere strade diverse e arrivare in disordine; il TCP li riordina con i numeri di sequenza e richiede la ritrasmissione di quel che manca. Un pacchetto perso costa almeno un round trip completo per accorgersene e sostituirlo, ed è per questo che la perdita fa molto più male di quanto la sua percentuale suggerisca.
Da qui la regola che sorprende: per le pagine web normali conta più la latenza della banda. Passare da 10 a 100 Mbps cambia a malapena il tempo di caricamento, perché la pagina non è mai stata abbastanza grossa da saturare il tubo. Dimezzare il tempo di andata e ritorno lo cambia enormemente, perché il caricamento è una catena di andate e ritorni. È esattamente per questo che esistono le reti di distribuzione dei contenuti: non per spedire più veloce, ma per stare più vicine.
Formule chiave
| Ritardo di propagazione | \(t_{\text{prop}} = \dfrac{2d}{c_{\text{fibra}}}\) | c ≈ 200 000 km/s nel vetro |
|---|---|---|
| Pacchetti necessari | \(N = \lceil S / \text{MTU} \rceil\) | S = dimensione della pagina |
| Tempo al primo byte | \(t_{\text{TTFB}} \approx t_{\text{DNS}} + 1.5\,\text{RTT} + t_{\text{TLS}}\) | |
| Tempo di trasferimento | \(t \approx \dfrac{S}{B} + \text{RTT}\log_2\!\left(\dfrac{S}{\text{IW}}\right)\) | slow start, IW = finestra iniziale |
Da sapere
- Aprire una connessione HTTPS costa circa 3 round trip prima che arrivi qualsiasi contenuto. A 100 ms di RTT sono 300 ms spesi per mettersi d'accordo sul parlare, che su una pagina breve possono superare il tempo speso a spedirla.
- L'1% di perdita di pacchetti può tagliare la portata del TCP di più della metà, perché l'algoritmo di controllo della congestione tratta la perdita come un segnale di rallentare, non soltanto come un pezzo da rispedire.
- Un traceroute verso un server a 1000 km mostra tipicamente da 8 a 15 salti. Nessuno di quei router conosce il percorso completo: ognuno sa solo quale vicino è più vicino alla meta.
Il modello a livelli, il controllo di congestione e perché internet non crolla
Livello Esperto — profondità matematica completa
01I livelli, e quello che ciascuno si rifiuta di sapere
Il trucco centrale dell'architettura è l'ignoranza deliberata. IP, il livello di rete, promette solo il massimo sforzo: proverà a consegnare un datagramma e non ti dirà niente se fallisce. Non garantisce ordine, consegna né tempistica. Tutto quello che la gente vuole da una rete - affidabilità, ordinamento, controllo di flusso, sicurezza - è costruito sopra, in TCP e TLS, agli estremi. È il principio end-to-end, ed è il motivo per cui la rete ha scalato: i router sono rimasti semplici e senza stato mentre la complessità interessante viveva nelle macchine ai bordi, dove poteva essere aggiornata senza toccare il centro.
02Il controllo di congestione come algoritmo distribuito
Nessuna autorità centrale alloca la banda. Invece ogni mittente TCP esegue un anello di controllo che aumenta il ritmo di invio finché non vede perdita, poi lo dimezza: incremento additivo, decremento moltiplicativo. Milioni di mittenti indipendenti che seguono questa regola convergono su una divisione grossolanamente equa di ogni collegamento condiviso, il che è un risultato distribuito davvero notevole. Le varianti moderne lo complicano in modo utile: CUBIC recupera più in fretta sui percorsi con alto prodotto banda-ritardo, e BBR abbandona del tutto la perdita come segnale, modellando direttamente banda e tempo di andata e ritorno del collo di bottiglia, perché in un'epoca di buffer generosi la perdita arriva molto dopo che la coda ha già rovinato la latenza.
03Bufferbloat e la tirannia della coda
La memoria a basso costo ha prodotto una patologia. I router con buffer sovradimensionati assorbono le raffiche invece di scartarle, quindi il controllo di congestione basato sulla perdita riceve il suo segnale in ritardo e la coda resta permanentemente piena. La portata sembra ottima mentre la latenza interattiva collassa: è il sintomo classico di un caricamento video che distrugge una chiamata vocale sullo stesso collegamento. Il rimedio è la gestione attiva della coda, CoDel e FQ-CoDel, che scartano o marcano i pacchetti in base a quanto tempo sono stati in coda invece che a quanti ce ne sono.
04BGP, e il fatto che l'instradamento è una questione di politica
Fra reti diverse i percorsi vengono scelti dal Border Gateway Protocol, che non è un algoritmo di cammino minimo ma un sistema per annunciare raggiungibilità e applicare politiche commerciali. Un sistema autonomo preferisce le rotte attraverso i clienti rispetto ai pari e ai fornitori, per ragioni di denaro più che di distanza. Le conseguenze sono strutturali: internet non ha una mappa, i cambi di rotta si propagano come pettegolezzi e possono metterci minuti a stabilizzarsi, e un annuncio sbagliato può tirare il traffico di un paese attraverso il continente sbagliato, cosa già accaduta più di una volta.
05Che cosa ha cambiato HTTP/3
Far correre flussi affidabili su una sola connessione TCP creava il blocco in testa alla coda: un pacchetto perso ferma tutti i flussi che condividono quella connessione. QUIC sposta il macchinario di affidabilità e cifratura nello spazio utente sopra UDP, dando flussi indipendenti, una stretta di mano che fonde configurazione di trasporto e crittografica in un solo round trip, e identificatori di connessione che sopravvivono a un cambio di indirizzo IP - così un telefono che passa dal wi-fi alla rete cellulare mantiene la connessione invece di ricostruirla.
Formule chiave
| AIMD | \(w \leftarrow w + \tfrac{1}{w}\ \ \text{per ACK};\quad w \leftarrow \tfrac{w}{2}\ \ \text{alla perdita}\) | |
|---|---|---|
| Portata TCP | \(B \approx \dfrac{\text{MSS}}{\text{RTT}\sqrt{p}}\) | legge della radice; p = tasso di perdita |
| Prodotto banda-ritardo | \(\text{BDP} = B \times \text{RTT}\) | byte in volo per riempire il tubo |
| Ritardo di coda | \(t_q = \dfrac{Q}{B}\) | perché un buffer grande è un buffer lento |
Da sapere
- AIMD - incremento additivo, decremento moltiplicativo - è dimostrabilmente equo e stabile per flussi che competono su uno stesso collo di bottiglia. È uno dei pochi casi in cui una semplice regola locale produce in modo affidabile un buon risultato globale.
- Il bufferbloat può aggiungere secondi di latenza a un collegamento la cui portata misura perfettamente. È il motivo per cui uno speed test può dire 200 Mbps mentre una videochiamata è inutilizzabile.
- BGP non ha alcuna verifica incorporata di chi possieda quale blocco di indirizzi. La validazione dell'origine delle rotte si sta diffondendo, ma per gran parte della storia di internet qualsiasi rete poteva annunciare qualsiasi prefisso ed essere creduta.