Quando si parla di Internet e del traffico di dati il discorso è spesso aleatorio e, in un modo o nell’altro, si finisce per chiedersi come facciano i pacchetti che contengono le informazioni a viaggiare nell’intricato mondo di dorsali, reti e connessioni senza fili… arrivando correttamente a destinazione!
Senza voler essere troppo tecnici – e ricordando che, in caso cerchiate dettagli particolarmente approfonditi sul tema, il consiglio è quello di orientarvi verso un testo a tema “Reti di calcolatori” oppure di consultare risorse accademiche online – andremo ad affrontare l’argomento a mo’ di “raccontino”, cercando di semplificare il più possibile concetti complessi per permettere anche a chi non è del settore di comprendere a grandi linee come funziona la comunicazione online.
Perché, diciamocelo, alla fine Internet altro non è che una serie di elaboratori (che chiameremo da ora “nodi”) collegati tra loro.
Possiamo tranquillamente iniziare col dirvi che la modalità con cui viaggiano i dati in rete è regolata da una serie di standard e protocolli che prendono il nome di TCP/IP.
Due dei protocolli più importanti di questa suite sono, appunto, TCP e IP (proprio da lì per convenzione si è scelto di chiamare in quel modo l’intero insieme).
Il protocollo “TCP” – che sta per Transfer Control Protocol – in particolare si occupa di come i dati vengono trasferiti da un punto all’altro della rete in termini di affidabilità e gestione degli errori, il protocollo IP – che sta per Internet Protocol – si occupa invece dell’identificazione dei vari nodi che formano la rete.
ISO/OSI e TCP
Prima di poter comprendere meglio TCP, bisogna introdurre un altro standard che regola completamente l’architettura delle reti di calcolatori: questo standard prende il nome di ISO/OSI e, detto in termini spiccioli, serve per gestire e trasformare i dati da quando sono semplicemente degli impulsi elettrici fino a diventare informazioni mostrate sui nostri dispositivi.
Lo standard ISO/OSI, infatti, domina ben sette livelli logici di rete che gestiscono altrettanti aspetti della comunicazione, in particolare:
- livello fisico: il dato, dal nodo mittente, viene inviato grezzo “sul cavo”;
- livello datalink (o collegamento): il dato grezzo viene preparato per affrontare correttamente gli errori di trasmissione e per l’ordinamento (incapsulamento) affinché possa essere correttamente elaborato e smistato dal livello successivo;
- livello di rete: si occupa di indirizzare il dato preparato nel livello inferiore verso il nodo destinatario;
- livello di trasporto: si occupa di proseguire il lavoro iniziato dal livello di rete, accompagnando il dato nel suo viaggio e gestendo nel miglior modo possibile gli eventuali errori dovuti allo stato della rete;
- livello di sessione: si occupa di sincronizzare tra mittente e destinatario il dato ricevuto, facendo arrivare l’informazione esattamente quando il destinatario se l’aspetta;
- livello di presentazione: il dato, che è arrivato a destinazione, viene “estratto” dall’incapsulamento effettuato nel livello datalink e reso in un formato standard che possa essere interpretato dal livello superiore;
- livello di applicazione: è l’ultimo livello di ISO/OSI e si occupa di rendere il dato ricevuto dal livello inferiore compatibile con la tipologia di applicazione presente sull’elaboratore destinatario (ad esempio trasformandolo in un messaggio di posta, in parte di un file da ricevere o in testo da poter essere elaborato dal browser).
Detto ciò, torniamo a noi: il protocollo TCP agisce a cavallo tra i livelli datalink, rete e sessione (ovvero quelli che si occupano di fatto di “gestire lo spostamento” dei dati da un nodo all’altro), costruendo un canale di comunicazione in grado di gestire errori di collegamento, ritardi e di sincronizzare correttamente la ricezione dei dati “spezzettati”, contribuendo all’ordinamento e alla ri-formazione dell’informazione iniziale.
Senza scendere nei dettagli implementativi, il protocollo TCP è stato progettato per:
- poter creare una connessione, che resti attiva fino a che non viene esplicitamente richiesta la chiusura, tra mittente e destinatario (connection-oriented);
- garantire affidabilità, ovvero occuparsi di consegnare con successo i dati alla destinazione – garanzia ottenuta grazie ad una serie di messaggi di richiesta e conferma, in gergo REQ (request) e ACK (acknowledgment), occupandosi eventualmente della ritrasmissione dei dati qualora questi non giungano a destinazione;
- poter agire in entrambe le direzioni, quindi gestire sia le richieste di dati che le risposte (full-duplex);
- far sì che i dati, se giungono correttamente a destinazione, lo facciano in maniera ordinata ed una sola volta (at-most-once).
Una volta chiaro il modo in cui il viaggio dei nostri dati si svolge nell’immensa giungla che è la rete, vediamo di comprendere come fanno ad identificarsi i nodi (ovvero i dispositivi) che la popolano.
IP (protocollo)
L’identificazione è il compito principale del protocollo IP: come vi abbiamo già raccontato Internet è fatta di nodi e reti che non sempre sono uguali tra di loro (in realtà non lo sono quasi mai), e questo protocollo fa da “collante” tra le reti che fanno viaggiare i dati e i nodi che li attendono.
Di fatto, il protocollo IP si occupa di assegnare un indirizzo logico ad ogni macchina collegata alla rete (indirizzo IP) e di definire il percorso (routing, vedremo in seguito come) che i dati devono compiere per spostarsi dal mittente al destinatario affrontando sottoreti diverse.
Indirizzo IP
Nella fattispecie, l’indirizzo IP è una sequenza di caratteri che identifica univocamente, in relazione alla rete entro cui è analizzato, un qualsiasi tipo di macchina collegata alla rete stessa. In parole povere, affermiamo tranquillamente che l’indirizzo IP è lo “indirizzo di residenza, con tanto di civico” di un computer, tablet, smartphone, smartwatch o qualsiasi altra cosa sia collegata ad Internet.
L’indirizzo IP assegnato è associato a doppio filo con l’indirizzo fisico del dispositivo, tale indirizzo MAC; ogni dispositivo in grado di accedere ad Internet è dotato di un indirizzo MAC, e quest’ultimo è univoco nell’intero pianeta.
Al momento esistono due tipologie di indirizzi IP, l’indirizzo IPv4 e l’indirizzo IPv6, che a livello logico sono più o meno la stessa cosa (sebbene l’instradamento tra le reti v4 e v6 sia differente): gli indirizzi IPv6 sono stati introdotti in tempi relativamente recenti (parliamo del 2004) come successori degli IPv4, poiché questi ultimi non bastano più ad identificare i miliardi di macchine collegati in rete.
Indirizzo IPv4
L’indirizzo IPv4 è formato da quattro terzine di caratteri numerici (8 bit a terzina, per un totale di 32 bit), separate da un punto, del tipo 145.21.0.79; il valore numerico di ogni terzina è compreso tra 1 e 255: ciò significa che 245.21.98.114 è un indirizzo IP valido, mentre 187.321.0.4 non lo è.
IPv4 può identificare 232 (circa 4,3 × 109) macchine, cifra che ad oggi – vista l’enorme quantità di dispositivi connessi ed il fatto che alcuni IPv4 siano riservati e non utilizzabili – non basta più.
Indirizzo IPv6
E’ per questo che nasce l’indirizzo IPv6: esso è invece composto da otto quartine di cifre esadecimali, quindi miste tra cifre da 0 a 9 e lettere da “a” ad “f”, separate da un “:”, per un totale di 128 bit, del tipo 2001:03b8:0000:0400:d4a0:0000:0fc3:7721.
IPv6 può identificare un numero nettamente maggiore di macchine rispetto ad IPv4, per la precisione 2128 (circa 3,4 × 1038).
Chi distribuisce gli indirizzi IP?
Chiaramente la distribuzione degli indirizzi IP non è un compito che viene gestito dai protocolli che regolano l’architettura di rete visti fino ad ora e non è assolutamente qualcosa di arbitrario.
Questa viene regolata gestita dall’Autorità IANA (Internet Assigned Numbers Authority) e funziona pressappoco in questa maniera: un blocco di indirizzi IP viene “assegnato” ad uno specifico ente, che può decidere se utilizzarlo “direttamente” o “subaffittarlo” ad un secondo ente, e così via fino all’esaurimento.
Cerchiamo di chiarire quanto detto con un esempio:
- la nazione Italia fa richiesta allo IANA per un blocco di IP, e lo IANA assegna all’Italia il blocco di indirizzi IP richiesto;
- in Italia hanno intenzione di aprire battenti due provider: TIM e Wind; entrambi quindi fanno richiesta alle autorità della nazione Italia per una parte degli indirizzi IP che la nazione ha fittato dallo IANA;
- previo pagamento di una somma affittuaria, l’Italia assegna a Telecom Italia e a Wind gli indirizzi IP richiesti;
- Alice, a questo punto, decide di sottoscrivere un abbonamento dati a Telecom Italia che le assicuri in tutti i casi un indirizzo IP: Telecom accetta la richiesta e, previo pagamento di un abbonamento, permette ad Alice di connettersi alla rete assegnando al suo (o ai suoi) dispositivo(i) un indirizzo IP.
IP pubblico vs IP privato
Compreso quanto detto sino ad ora su TCP/IP e sugli indirizzi IP, per comprendere come fanno i dati a partire dalla Patagonia e raggiungere il nostro computer c’è bisogno di introdurre altri due concetti: quello di IP pubblico e quello di IP privato.
L’indirizzo IP pubblico è quello che il fornitore di servizi (fibra o telefonia mobile e quant’altro) assegna a qualsiasi macchina ogni qual volta questa esegue accesso diretto alla rete Internet; ad esempio, uno smartphone può essere connesso ad Internet tramite rete Vodafone con IP 24.142.3.41. Tale indirizzo IP è univoco, ovvero all’interno della rete Internet contraddistingue solo e soltanto un solo dispositivo per volta.
Storia diversa per l’indirizzo IP privato, che viene assegnato da un apparato di indirizzamento (ad esempio un router) all’interno di una rete privata.
Prendiamo l’esempio di una WiFi casalinga: supponiamo l’esistenza di un AP wireless che rende disponibile una certa “ReteDiCasa”, alla quale sono collegati due computer – rispettivamente con indirizzi IP 192.168.0.3 e 192.168.0.4.
Ebbene, questi due indirizzi IP riconoscono separatamente ed in maniera univoca i due computer soltanto all’interno della ReteDiCasa, ed è l’apparato di rete ad ottenere un IP pubblico ed occuparsi di “suddividere” la connessione tra i due computer facendo arrivare a ciascuno di essi i dati che richiede.
In altre parole, per il fornitore di servizi c’è un solo dispositivo connesso ad Internet (il router o l’Access Point, ad esempio), ed è proprio quel dispositivo ad occuparsi di tenere in comunicazione col mondo esterno le macchine collegate alla ReteDiCasa (capiremo tra breve come).
IP Statico VS IP Dinamico
Al fine di comprendere ancor meglio come avviene l’instradamento dalla rete ai vari dispositivi e che cosa significhino le magiche paroline “port forwarding”, con le quali concluderemo il nostro viaggio alla scoperta di come viaggiano i dati, abbiamo bisogno di introdurre anche i concetti di indirizzo IP statico e dinamico.
La differenza è semplicissima: una macchina configurata con IP statico (pubblico o privato che sia) è una macchina che, anche se si scollega e si collega successivamente alla rete, ottiene sempre lo stesso indirizzo IP.
Una macchina configurata con IP dinamico ottiene invece ad ogni connessione alla rete un IP diverso. Tranne in specifiche tipologie id contratto, gli ISP prevedono l’assegnazione di IP pubblici dinamici.
Indirizzamento e apparati
Ovviamente il viaggio dei dati in rete non avviene con la forza del pensiero, ma esistono dei precisi apparati fisici che agiscono nei vari livelli di ISO/OSI, in collaborazione con i protocolli della suite TCP/IP, utilizzati per indirizzare i dati da un punto all’altro della stessa sottorete, da una sottorete all’altra o ancora da un nodo all’altro di una rete attraversando diverse sottoreti.
Alcuni di questi apparati vengono utilizzati esclusivamente per collegare sottoreti di Internet ad altre sottoreti di Internet, mentre altri sono presenti fisicamente anche nelle nostre case o sui nostri smartphone. Vediamone insieme alcuni.
Hub
Un hub è un dispositivo dotato di numerose porte fisiche, a ciascuna delle quali viene connesso il cavo dedicato ad una sottorete; esso agisce a livello datalink di ISO/OSI e serve, di fatto, a trasmettere qualsiasi dato venga ricevuto su una porta fisica verso tutte le altre porte fisiche presenti senza che la rete stessa “si accorga” della sua presenza; in gergo, questa viene detta operazione di “broadcasting”.
Questo meccanismo può chiaramente provocare collisioni e micro-ritardi, entrambi gestiti comunque dai protocolli TCP/IP, e viene utilizzato nel collegamento tra varie sottoreti di Internet.
Switch
Anche lo switch agisce a livello datalink di ISO/OSI ed è dotato di diverse porte fisiche dedicate ai cavi delle sottoreti ma, a differenza dell’hub, non è un dispositivo di broadcasting ma trasmette l’informazione ricevuta da una delle sue porte soltanto a quella a cui è connesso il destinatario dell’informazione.
Questo succede grazie un meccanismo interno che gli permette di “memorizzare” provvisoriamente l’informazione ricevuta, quel tanto che basta per decidere su quale porta fisica indirizzarlo (in base al destinatario) e provvedere alla trasmissione verso quella porta fisica.
Anche lo switch agisce in modalità trasparente.
Router
Il router è qualcosa di logicamente simile allo switch ma di profondamente diverso nell’approccio pratico: innanzitutto esso agisce al livello di rete dell’architettura ISO/OSI (diversamente da hub e switch, che agiscono a livello inferiore) e, grazie alla presenza di alcune tabelle interne (tavole di routing) in grado di memorizzare i percorsi di instradamento associando indirizzi IP ad indirizzi fisici, può connettere sottoreti diverse disomogenee ed instradare correttamente l’informazione “spezzettata” in pacchetti tra di esse.
Di fatto, il router fa sì che sottoreti anche fisicamente differenti possano essere raggiungibili attraverso nodi differenti della rete; un router può connettere tra loro reti fisiche diverse, reti fisiche omogenee, macchine singole ad una rete fisica, macchine singole ad una sottorete, sottoreti a sottoreti e via discorrendo, gestendo in tutti i casi lo smistamento corretto dei pacchetti grazie all’interazione tra porte fisiche e porte logiche con un meccanismo che si chiama traduzione degli indirizzi di rete (o NAT).
Di norma il router non agisce come apparato trasparente e può bloccare le comunicazioni in broadcast per limitare errori, collisione e congestione.
La variante casalinga del router è spesso quella utilizzata per connettere più computer, smartphone, smartwatch e via discorrendo ad una rete Internet tramite l’ausilio di un modem, integrato o esterno.
Modem
Il modem è quel dispositivo che agisce a livello fisico e che rende possibile la comunicazione di più sistemi grazie ad un canale analogico, e si occupa di fatto della traduzione dei dati da analogico (dato che viaggia sul cavo) a digitale (dato che arriva nel computer) e viceversa.
Il modem è necessario per collegare qualsiasi apparato informatico (PC, smartphone, smartwatch, router e via discorrendo) alla rete Internet: esso è incluso nei moduli LTE, HSDPA e via discorrendo dei dispositivi mobile permettendone il collegamento diretto a Internet e, spesso, è “nascosto” anche nei più comuni router casalinghi – che in tal caso prendono il nome di modem/router.
Chiaramente è disponibile anche come dispositivo a sé stante che può connettere una sola macchina per volta ad Internet (ove necessario, il modem viene collegato fisicamente al router per permettere la connessione tra la sottorete casalinga ed Internet).
Da Internet ai dispositivi in casa: il NAT
Il discorso su IP pubblici e privati non è stato casuale: la rete WiFi che avete creato a casa è essa stessa una sottorete che connette tra loro computer, smartphone, tablet e quant’altro grazie al router che è in grado di smistare i pacchetti tra i vari IP privati, ed è sempre grazie al modem/router (o ad un router collegato ad un modem) – e alle sue tavole di routing – che l’intera sottorete è in grado di comunicare con Internet.
In pratica, ciascuno dei dispositivi connessi comunica con Internet grazie al modem/router ed Internet comunica con ciascuno dei dispositivi connessi grazie… sempre al modem/router: Internet riconosce i dispositiv attraverso l’ip pubblico del modem/router ed una porta logica, mentre il modem/router riconosce i vari computer attraverso i loro indirizzi IP privati.
Il modem/router, quindi, ha due indirizzi IP: quello pubblico, che gli permette di comunicare con l’esterno, e quello privato, che gli permette di comunicare con i dispositivi collegati alla rete. In parole spicciole, il router fa da “ponte” tra i vari device e la rete Internet, effettuando quella che si chiama NAT (network address translation).
Cosa è questa NAT e come fa il router a capire a quale macchina della rete indirizzarlo?
A questo ci pensano le porte logiche: queste, numerate da 1 a 65335 e gestite dal sistema operativo del dispositivo di destinazione, permettono di distinguere univocamente un PC, smartphone o altro all’interno della rete, permettendo contemporaneamente al router di sapere a chi deve andare che cosa.
Ecco un esempio di comunicazione tramite NAT:
- lo smartphone collegato alla rete apre il browser sulla pagina www.google.it;
- lo smartphone comunica la volontà di ricevere i pacchetti della pagina di Google sulla porta 2310, e manda un pacchetto al router che contiene come destinatario il router stesso (192.168.1.1) e come mittente il suo IP più la porta (192.168.1.5:2310); lo smartphone, quindi, manda un pacchetto del tipo MITT > 192.168.1.5:2310, DEST > 192.168.1.1:80
- il router riceve il pacchetto, e memorizza in una tabella che alla porta 2310 corrisponde una richiesta di 192.168.1.5;
- il router “traduce l’indirizzo” con la tabella e manda la richiesta a Google sulla rete Internet, specificando come mittente il suo indirizzo IP + la porta del PC da cui è arrivata la richiesta, e come destinatario il sever www.google.it sulla porta 80 (quella su cui, di solito, attendono richieste i webserver); il pacchetto spedito dal router sarà quindi fatto così: MITT > 91.3.5.92:2310, DEST www.google.it:80;
- a questo punto Google risponde con le informazioni richieste, i cui mittenti e destinatari saranno fatti in questo modo: MITT > www.google.it:80, DEST > 91.3.5.92:2310;
- le informazioni arrivano al router, che riconosce la porta 2310 all’interno della tabella precedente e sa che deve rispedire l’informazione allo smartphone; il router, quindi, “traduce” (ecco perchè NAT) l’indirizzo ricevuto da Google nell’indirizzo originario dello smartphone, creando un pacchetto del tipo MITT > 192.168.1.1:80, DEST > 192.168.1.5:2310.
Conclusione: in uno scenario di connessione tramite modem/router alla rete (scenario casalingo e molto spesso anche aziendale, sebbene in maniera un po’ più complessa), tutte le macchine sono collegate ad internet utilizzando un solo IP pubblico, ed è il router che smista le varie informazioni tra le macchine.
Come i server “bypassano” i router: il port forwarding
Seguendo il nostro discorso, qualsiasi cosa sia collegata ad Internet tramite router deve ricevere una richiesta affinché questa possa essere soddisfatta, inviando insieme alla richiesta la porta a cui inoltrare la risposta.
In realtà i server non agiscono così: non è il server a chiedere al router di istanziare una connessione verso un nodo della rete, ma è il nodo della rete a chiedere al server di soddisfare la sua richiesta senza specificare una porta logica di destinazione. Richiesta che un server collegato alla rete attraverso un router, seguendo unicamente quanto detto fino ad ora, non sarebbe in teoria in grado di gestire.
In teoria, perché in pratica c’è qualcosa che si chiama “port forwarding” (in stretta collaborazione col cugino “triggering”) che permette di istruire il router in modo che possa accogliere delle richieste definendo a priori una porta logica su cui quella tipologia di richieste debba essere accolta, senza che venga specificata ogni volta.
Il port forwarding, materialmente, sta nel configurare il router affinchè associ una precisa porta ad un preciso indirizzo IP privato, ed invii tutti i pacchetti in entrata su quella porta all’indirizzo IP specificato.
Il tutto sarà più chiaro con un esempio pratico:
Decido di trasformare il mio computer connesso a Internet tramite router in un server (IP privato: 192.168.1.13) che possa trasmettere musica grazie al programma Shoutcast sulla porta logica 54123, attendendo che qualcuno dall’esterno vi si colleghi utilizzando l’indirizzo IP pubblico del router (ip pubblico: 91.3.5.92) e la porta logica 54123.
Cosa succede a questo punto? Chiunque vorrà ascoltare la mia musica dovrà installare uno specifico programma (il quale sa che la porta del mio shoutcast è la 54123), programma che cercherà di inviare in Internet un pacchetto del tipo MITT > 234.21.1.2 e DEST > 91.3.5.92; senza aver eseguito a priori il port forwarding, quando il router cercherà l’indirizzo IP associato alla porta 54123, non lo troverà poiché l’associazione IP/PORTA non sarà stata creata in fase di richiesta (poiché il server accoglie richieste ma non ne crea).
Grazie al “port forwarding” specificabile nel router, sarà possibile comunicare manualmente al router (nell’ambito casalingo è questione di click) che qualsiasi pacchetto arrivi con porta logica di destinazione “54123” debba essere smistato solo ed unicamente all’indirizzo IP privato 192.168.1.2, sul quale è presente il server Shoutcast, creando in tal modo l’associazione IP/PORTA nelle tabelle di routing e rendendo possibile l’accoglimento delle richieste.
Questa è la modalità logica con cui vengono configurati praticamente tutti i server che offrono servizi online (siti web, provider email, terminali remoti e via dicendo), sebbene con dinamiche leggermente più complesse vista la portata delle richieste da accogliere.
I server DNS
Appurato come i dati viaggiano attraverso la rete, cosa è un indirizzo IP e come funziona un server, la domanda sorge spontanea: se fino ad ora abbiamo parlato di numeri e lettere disposti in modo particolare per identificare una macchina nella rete, per quale motivo allora per raggiungere il server di Chimera Revo dovrò scrivere nel browser l’indirizzo www.chimerarevo.com e non il corrispondente IPv4 o IPv6?
La domanda è di semplice risposta: proprio per rendere più semplice la navigazione all’interno della rete (sia essa navigazione web, consultazione di email e via discorrendo), è stato introdotto un sistema per “tradurre” gli indirizzi IP della rete in nomi veri e propri (in gergo nomi di dominio, ad esempio come chimerarevo.com) e viceversa.
Questo sistema prende il nome di DNS, e la traduzione di fatto avviene tramite una serie di server – server DNS, appunto – organizzati in maniera gerarchica. L’associazione tra indirizzo IP e relativo nome di dominio è memorizzata in una serie di database, che ciascun server DNS consulta ad ogni richiesta per associare il nome di dominio invocato all’indirizzo IP corrispondente.
Quindi, quando scrivete www.chimerarevo.com nella barra degli indirizzi del vostro browser, sarà il gestore (o il server DNS specificato manualmente) a tradurlo in indirizzo IP, e la connessione verrà istanziata soltanto a traduzione avvenuta.
Conclusioni
Questa parte del nostro viaggio termina qui: abbiamo scoperto, utilizzando termini meno tecnici possibili pur senza rinunciare alla dovuta chiarezza, quali sono i meccanismi che regolano il viaggio dei dati attraverso quell’universo sconfinato che è Internet.
Abbiamo scoperto insieme i livelli logici con cui è stata suddivisa l’organizzazione della comunicazione in rete, abbiamo compreso che Internet stessa è un’insieme di piccole sottoreti unite da una specifica serie di apparati e, infine, ci siamo resi conto di come i dati arrivino direttamente sulla nostra rete domestica e/o sul nostro smartphone, tablet e quant’altro.
Questo articolo è parte della nostra grande guida ad Internet e all’home networking, che potrete consultare integralmente seguendo il link in basso.