Appunti Internet - © 1997-2003 Loris Tissino
È difficile dare una definizione corretta di Internet , una rete di reti di calcolatori, distribuita su tutti i continenti del pianeta, che comunicano attraverso una serie di protocolli standard tra cui i più importanti sono TCP e IP.
Innanzitutto, si tratta di una rete di reti. Quando alcuni calcolatori vengono posti nelle condizioni di comunicare tra di loro, si ha una rete. Una rete può però essere collegata ad un'altra rete. Sostanzialmente, ciò si ottiene facendo in modo che un calcolatore appartenga ad entrambe le reti, e si incarichi di inoltrare il traffico da una rete all'altra. La comunicazione tra due reti può anche essere definita comunicazione inter-rete.
A proposito, il calcolatore che appartiene a entrambe le reti si chiama non a caso gateway, ossia punto di passaggio. Non ce lo si deve immaginare per forza di cose come un calcolatore tipo quelli con cui normalmente abbiamo a che fare (anche se potrebbe tranquillamente esserlo). L'importante è la sua funzione, non il suo aspetto.
In inglese, si usano due termini diversi per distinguere una qualsiasi internet (inter-rete), da the Internet, con articolo determinativo e maiuscola: quest'ultima è quella che in italiano chiamiamo normalmente e semplicemente internet.
Il fatto che Internet sia diffusa su tutti i continenti è più un dato di fatto che una parte della definizione: Internet era Internet anche prima di essere utilizzata in tutti i continenti e continua ad essere Internet ora che è estesa fino alle stazioni spaziali in orbita.
Una definizione migliore potrebbe avere a che fare con l'evoluzione storica delle reti di calcolatori e delle reti di reti. Semplicemente, dalla fine degli anni '60, quando i sistemisti dei laboratori di ricerca di università e aziende si sono posti il problema di far comunicare tra loro calcolatori, non hanno reinventato la ruota ogni volta, ma hanno sfruttato idee, programmi, metodologie che qualche loro collega aveva pensato prima di loro, magari migliorandole un po' e presentando proposte al vaglio della comunità (i cosiddetti documenti RFC, Request For Comments).
Quindi, cos'è Internet? È la rete di reti che si è evoluta in questo modo, con una serie di regole condivise e via via migliorate, con nuove reti aggiunte un po' alla volta, fino a diventare la rete di reti per antonomasia.
Ci sono un sacco di altre reti di reti che coprono l'intero pianeta ma che non hanno relazioni (quanto meno dirette) con Internet: si pensi ad esempio alla reti per la gestione dei pagamenti con carta di credito, alle reti militari, e così via.
È però importante definire cosa non è Internet:
Bisognerebbe cercare di evitare, quindi, espressioni del tipo:
"Hai installato Internet sul tuo calcolatore?"
(al massimo, si potrà installare un programma o configurare il
calcolatore per accedere ad Internet.)
"Hai Internet?"
(non si può avere Internet.)
"Salvami questo documento in formato Internet"
(non esiste un formato Internet, esistono diversi formati per le
diverse cose che si possono fare su Internet.)
Avendo a che fare con Internet, sentirete spesso parlare di protocolli, ossia di regole per la comunicazione tra un calcolatore ed un altro calcolatore o, detto più precisamente, tra un programma (o una componente del sistema operativo) in funzione su un calcolatore ed un corrispondente programma (o componente del sistema operativo) in funzione su un altro calcolatore.
I protocolli servono a definire come questi programmi devono comunicare tra loro: ad esempio, come si inizia la comunicazione, in che formato indicare alcuni dati (ad esempio, la data: anno-mese-giorno o giorno-mese-anno?), cosa si deve fare se la richiesta non può essere accolta, ecc.
Essi descrivono in modo preciso e formale come le comunicazioni devono avvenire. A meno che non si debba scrivere un programma applicativo, non è necessario conoscere i dettagli. Può però rivelarsi molto utile avere almeno una vaga idea di queste cose per poter cercare di definire un problema che si pone, e fare dei test opportuni prima di chiamare un servizio di assistenza tecnica.
I protocolli hanno a che fare con diversi livelli di astrazione.
Ad un livello alto di astrazione, possiamo immaginare i calcolatori che riescono facilmente a scambiarsi messaggi di testo e documenti vari. È a questo livello, detto livello applicativo, che sono definiti i protocolli di comunicazione per le attività più immediatamente riconoscibili dall'utente (accesso a siti web, posta elettronica, ecc.)
Ad esempio, il protocollo HTTP prevede che un programma presente su un calcolatore (tipicamente il browser web , ne parleremo più avanti) mandi ad un altro programma (il cosiddetto server web) una richiesta del tipo [qui la comunicazione è tradotta in italiano ed un po' interpretata]:
Sto usando la versione 1.1 del protocollo HTTP Mandami il documento test.html che hai a disposizione nella cartella documenti Il mio nome è Librowser 2.2 Mi sto rivolgendo a te, server web che rispondi al nome www.esempio.it Mandami il documento solo se è stato modificato dopo il 2 gennaio 2003
Proseguendo nell'esempio, il programma server potrebbe rispondere:
Sono il server web FreeHTTP Daemon Questo documento non lo trovo
oppure:
Sono il server web FreeHTTP Daemon Ecco il documento L'ultima modifica risale al 14 gennaio 2003 Ti informo che si tratta di una pagina web (un file di testo in formato html) (segue il documento)
Ad un livello di astrazione più basso, possiamo voler definire come un intero blocco di dati (un file), anche di grandi dimensioni, debba essere trasferito da un calcolatore ad un altro.
Così come se si deve spostare un armadio da una stanza ad un'altra può essere necessario smontare l'armadio, numerare i pezzi, spostare i pezzi separatamente l'uno dall'altro e rimontare l'armadio a destinazione (controllando che nessun pezzo si sia perduto durante il tragitto, ed eventualmente cercando di recuperarlo), quando si devono trasferire molti dati, questi vengono suddivisi in pacchetti che, dopo essere stati numerati, vengono trasferiti indipendentemente e riassemblati una volta arrivati. Il protocollo che descrive questo procedimento si chiama TCP, Transmission Control Protocol.
Ad un livello di astrazione ancora più basso possiamo voler definire come fare a organizzare le reti di reti di calcolatori in maniera tale da consentire ad un singolo pacchetto di passare dal calcolatore di origine a quello di destinazione. Di ciò si occupa l'IP , Internet Protocol.
Mentre un protocollo definisce come un programma comunica con un altro programma suo pari (il browser web con il server web, il programma di posta con il server di posta, ecc.), un' interfaccia descrive come un programma comunica con un altro programma di diverso livello nell'ambito dello stesso calcolatore.
Vi ricordate i livelli di astrazione visti prima? È un po' come se si dicesse che un programma di alto livello non volesse avere a che fare con i dettagli (suddivisione di un file in pacchetti, trasmissione dei pacchetti, ecc.) e delegasse a livelli software inferiori l'esecuzione di questi compiti. La descrizione di questo tipo di comunicazione è appunto l'interfaccia.
La questione potrebbe risultare più chiara pensando ad un livello ancora superiore, quello della comunicazione fra utente (essere umano) e programma applicativo (browser web, programma di posta). L'utente umano non vuole avere a che fare con i dettagli di funzionamento del programma e di come questo compirà le operazioni che vengono richieste, e agirà tramite un'interfaccia (ad esempio, un'interfaccia grafica con icone, pulsanti e menù, oppure un'interfaccia a riga di comando testuale, oppure ancora un'interfaccia vocale).
È importante notare che il tipo di interfaccia utilizzata da una delle parti in comunicazione può essere tranquillamente diversa da quella utilizzata dall'altra parte: ad esempio, io posso usare un programma da riga di comando (interfaccia testuale) per spedire un messaggio di posta elettronica, che potrà essere letto dal destinatario con un programma di posta che fa uso di un'interfaccia grafica, e viceversa.
Uno dei problemi da risolvere per permettere la comunicazione tra calcolatori in una rete di reti quale è Internet è quello di garantire che ciascun calcolatore abbia un identificativo univoco, in modo da poter indicare chiaramente a chi (a quale calcolatore) deve essere indirizzato un determinato pacchetto.
Il metodo scelto per risolvere il problema consiste nell'assegnare a ciascun calcolatore collegato ad Internet un indirizzo univoco, detto indirizzo IP, per ogni rete a cui quel calcolatore appartiene [cioè viene assegnato un indirizzo a ciascuna interfaccia di rete di quel calcolatore].
Un indirizzo IP è un numero di quattro byte, solitamente indicati nella loro forma decimale: ad esempio, 62.177.1.107 . Il software che si occupa della trasmissione dei pacchetti dal calcolatore ad un altro viene informato del fatto che il calcolatore appartiene ad una determinata rete (ad esempio, la rete in cui tutti i calcolatori hanno indirizzi che iniziano per 62.177 [cosa che si fa con una maschera di sottorete], e che se deve mandare qualche comunicazione a calcolatori di altre reti dovrà rivolgersi al calcolatore che farà le veci di intermediario ( gateway), ad esempio al calcolatore con indirizzo 62.177.0.1.
Ovviamente, sarà necessario garantire che non ci siano due calcolatori su Internet con lo stesso indirizzo IP. Come si ottiene questo? Prima di assegnare un indirizzo ai calcolatori della mia rete, devo farmeli indicare da un'apposita autorità (IANA).
Se però devo assegnare degli indirizzi IP ad una rete privata (con calcolatori che non saranno quindi direttamente raggiungibili da Internet), posso utilizzare degli apposite classi di indirizzi per reti private (10.x.y.z, 172.16.x.y, 192.168.x.y).
Visto che ricordarsi come raggiungere un calcolatore tramite il suo indirizzo è un po' scomodo, nel 1984 è stato inventato un sistema che permette di associare un indirizzo mnemonico (facile da ricordare) ad un calcolatore. Questo sistema si basa su nomi di dominio e viene spesso indicato con il suo nome in inglese (Domain Name System).
Il sistema funziona all'incirca così: supponiamo che io sia l'amministratore di rete di una società che si chiama Completamente Inventata. Potrei chiamare il mio calcolatore completamenteinventata, ma se lo facessi non avrei grande sicurezza del fatto che qualcun altro, da qualche parte del mondo, non faccia la stessa cosa. Per evitare problemi, devo registrare il cosiddetto nome di dominio presso una delle autorità competenti.
Se mi rivolgo all'autorità italiana registrerò il nome di dominio completamenteinventata.it, rivolgendomi a quella francese potrei ottenere completamenteinventata.fr , e via di seguito.
Le autorità statunitensi che si occupano di questo tipo di registrazioni operano di fatto a livello internazionale e registrano nomi di dominio che terminano con i suffissi .com, .net, .org, .info, .biz, .name (e quindi potrei registrare completamenteinventata.com).
A proposito, evitiamo di chiamare questi suffissi "estensioni". Per essere precisi, si dovrebbe parlare di domini di livello primario ( top level domains).
Una volta registrato il nome di dominio (di secondo livello) per i miei calcolatori, potrò assegnare a ciascuno di essi un nome a mia scelta (ad esempio, primo.completamenteinventata.it , secondo.completamenteinventata.it). Posso anche attribuire allo stesso calcolatore più nomi se lo desidero [tecnicamente, si parla di alias].
Una prassi molto diffusa prevede che ad un calcolatore venga assegnato un nome corrispondente al servizio che quel calcolatore offre: il mio server web si chiamerà quindi (anche) www. completamenteinventata.it, il mio server di posta mail.completamenteinventata.it, e così via. Non si sottolineerà mai abbastanza che si tratta però solo di una prassi. Nulla impone che un server web debba avere un nome che inizia con www, né che un calcolatore il cui nome inizia per www ospiti un server web.
Spesso i calcolatori collegati ad internet hanno un proprio nome (il cosiddetto host name) che, legato al dominio a cui essi appartengono, forma il nome di dominio pienamente qualificato (in inglese, fully qualified domain name).
Il procedimento per ottenere la traduzione di un nome di dominio pienamente qualificato (ossia per sapere a quale indirizzo IP corrisponde un determinato nome di dominio pienamente qualificato) viene chiamato risoluzione del nome e viene svolto attraverso il colloquio con dei server DNS che assolvono proprio a questo compito. [I server DNS lavorano in collaborazione tra loro e sono organizzati in gerarchie].
Nella terminologia delle reti, si fa spesso uso dei termini client (cliente) e server (servente), che vengono però usati in contesti diversi e con significati, quindi, diversi.
Tento di spiegarmi con un paio di esempi.
Se dico: "La stampante da usare è quella collegata al server" è evidente che intendo con la parola server un calcolatore, e in particolare quello che all'interno di una rete offre particolari servizi (si parla di file server per la memorizzazione di archivi, print server per la gestione delle code di stampa, e così via).
Se invece dico: "Il server web non risponde" non parlo del calcolatore fisico, ma del programma server (si dice anche demone) in funzione su di un calcolatore.
In pratica, quando si parla di reti client/server si intende che alcuni calcolatori (i serventi) svolgono servizi per altri calcolatori (i clienti). Questo fatto viene sottolineato spesso in contrapposizione con le reti paritetiche (peer-to-peer ), in cui invece tutti i calcolatori sono sullo stesso piano.
Quando, invece, si parla di applicazioni client/server si intende il fatto che esistono programmi che comunicano tra loro: il programma cliente chiede un servizio o un'informazione al programma servente, quest'ultimo esegue e informa il cliente dell'esito dell'operazione. Non di rado, programma cliente e programma servente operano sullo stesso calcolatore.
Gran parte delle cose che si possono fare con Internet funzionano secondo il modello delle applicazioni client/server.
Contrariamente a quanti molto pensano, Internet non è costituita solo da World Wide Web (il famoso www) e posta elettronica. Nella grande rete si può anche:
...e fare molto altro. Molte applicazioni usano protocolli di comunicazione basati su TCP e IP.
Vista la gran varietà di cose che si possono fare su Internet, è nata l'esigenza di uniformare (standardizzandoli) i modi per riferirsi ad una particolare risorsa. Sono nati così gli identificatori uniformi di risorse o URI.
Un URI identifica uno schema di comunicazione e un modo per utilizzare la particolare risorsa che si vuole identificare. Tale modo è dipendente dal tipo di risorsa. Ad esempio, nel caso di pagine web verrà identificato il nome del server web e l'indirizzo completo della pagina (in questo caso si parla di URL, Uniform Resource Locator, perché la risorsa viene localizzata, nel senso che si indica dove la si trova).
Alcuni esempi:
ftp://ftp.nevada.edu/pub/guitar
(indica un server FTP da dove è possibile prelevare dei file
oppure metterceli)
telnet://argo.temple.edu
(indica un host che accetta connessioni in emulazione di
terminale)
http://www.emptywebsite.com
(indica l'indirizzo di un sito web)
mailto:info@linux.it
(indica un indirizzo al quale è possibile mandare un messaggio
di posta elettronica)
news:soc.culture.italian
(indica il nome di un gruppo di discussione al quale è
possibile accedere).
Gli URI relativi alle pagine web meritano un approfondimento, visto che sono quelli con cui si ha più a che fare.
http://www.organizzazionezeta.it/documenti/iniziative.html
indica che ci si deve rivolgere ad un server web (http)
ospitato dal calcolatore con nome DNS www.organizzazionezeta.it
per chiedere un documento (presumibilmente una pagina html) di nome
iniziative.html presente nella cartella documenti.
http://www.organizzazionezeta.it/documenti/elenco.php
http://www.organizzazionezeta.it/documenti/elenco.asp
http://www.organizzazionezeta.it/cgi-bin/elenco
sono riferimenti non ad un documento già presente nel file
system del calcolatore ma ad un programma che deve essere eseguito
su di esso; nel primo caso si tratta presumibilmente di un programma
php (PHP: Hypertext Preprocessor, nel secondo caso di
un programma asp (Active Server Pages, nel
terzo di un'applicazione scritta in qualche linguaggio come Perl o C).
I server web sono configurati in modo da poter riconoscere (in base a
dove si trova il file o alla sua estensione) se il file il cui nome è
indicato deve essere inviato così com'è o eseguito.
http://www.organizzazionezeta.it/mostra.php?articolo=18&lingua=it
indica al programma che deve essere eseguito sul server alcuni
parametri, che vengono presi in considerazione al momento
dell'esecuzione; nell'esempio, si potrebbe trattare di un programma che
mostra l'articolo con codice 18 nella versione in italiano; la parte
che segue il punto interrogativo si chiama stringa di
interrogazione (query string).
http://www.organizzazionezeta.it/statuto.html#probiviri
indica che deve essere richiesto al server web il documento
statuto.html, ma che esso dovrà essere mostrato dal browser a partire
dal punto indicato come probiviri; la parte che segue il segno
# viene chiamata frammento.
http://giorgio@www.organizzazionezeta.it/documentozeta/
indica che il server web deve essere informato che a fare la
richiesta è un utente di nome giorgio.
http://giorgio:pulcinella@www.organizzazionezeta.it/documentozeta/
indica che il server web deve essere informato che a fare la
richiesta è un utente di nome giorgio, che usa la password
pulcinella per accedere ai servizi offerti.
http://www.organizzazionezeta.it:3240
indica che la richiesta va fatta ad un server web che non è in
ascolto sulla porta standard (80), ma sulla porta 3240 [la porta
è un modo per indicare, attraverso un numero, a quale applicazione
servente in esecuzione su di un calcolatore ci si vuole rivolgere con
una richiesta da parte di un programma cliente].