11.8. Chi stabilisce come funziona
Internet? Dove trovo la documentazione?
- - E -
A differenza di altri mezzi di comunicazione, Internet si è sviluppata grazie alla collaborazione reciproca e in assenza di una autorità centrale che la governasse. D'altro canto, affinchè la rete possa funzionare è necessario un gran numero di convenzioni ferree da rispettare - ad esempio l'assegnazione dei nomi, il funzionamento dei protocolli...
Inizialmente, e fino a non troppi anni fa, il numero di reti locali collegate a Internet era relativamente ridotto, ed era quindi abbastanza facile mettere tutti d'accordo sull'uso di determinate convenzioni. Per questo motivo, fu creata presso l'InterNIC (Internet Network Information Center, ossia il centro di coordinamento delle reti americane, che ancor oggi è il principale riferimento per la gestione della rete) la cosiddetta IETF (Internet Engineering Task Force), che si preoccupava di sviluppare nuovi protocolli e nuove applicazioni per la rete.
Quando qualcuna delle persone che collaboravano ai processi di coordinamento della rete voleva proporre un nuovo standard per una particolare applicazione, spediva loro una RFC (Request For Comments) contenente i risultati del proprio lavoro. Queste RFC, allo scopo di evitare confusioni, venivano progressivamente numerate, secondo l'ordine di pubblicazione; se era necessario aggiornare il contenuto di una RFC, semplicemente qualcuno scriveva la nuova versione e la pubblicava in una nuova RFC, a cui veniva assegnato un nuovo numero. In ogni momento, l'ultima pubblicata valeva come standard di fatto, anche se quasi nulla veniva "imposto".
Il risultato di questo modo di procedere fu che, se uno ad esempio aveva la necessità di conoscere esattamente come funzionava un determinato protocollo, doveva andarsi a ripescare vari documenti l'uno collegato all'altro; inoltre, poichè le varie RFC erano prodotte da persone diverse talvolta esse risultavano in contraddizione tra loro. Per questo motivo, si decise di selezionare alcune delle RFC e di trasformarle in standard obbligatori su tutta la rete: a queste RFC, oltre al loro numero d'ordine, è stata assegnata la sigla STD seguita da un numero. Mentre, come detto, ciascuna RFC una volta pubblicata non viene più modificata, e in caso di aggiornamenti essi vengono pubblicati con un nuovo numero di serie, il numero degli STD riguarda l'argomento e viene progressivamente assegnato a diverse RFC man mano che esse vengono aggiornate. Ad esempio, fino a giugno 1995 lo STD 1 (che corrisponde alla definizione di tutti i protocolli ufficialmente parlati su Internet) corrispondeva alla RFC 1780; l'11 luglio 1995 è stata pubblicata la RFC 1800, e da quel giorno essa è diventata lo STD 1, rendendo obsoleta la RFC 1780; successivamente, sono uscite ancora altre RFC, con numeri superiori a 1800, che hanno soppiantato la 1800. Analogamente, alcune RFC sono entrate a far parte della serie delle FYI (For Your Information), numerate in modo analogo agli STD, che costituiscono invece una serie di documenti informativi poco tecnici e dedicati agli utenti comuni.
Allo scopo di evitare la proliferazione di RFC, inoltre, la IETF ha iniziato a pubblicare gli Internet drafts (bozze per Internet), ossia documenti che vengono forniti come lavoro in corso di definizione ed hanno una validità di pochi mesi. Soltanto quando il lavoro è giunto a conclusione la bozza viene pubblicata come RFC.
11.10. Cosa sono la Internet Society
e il W3 Consortium (W3C)?
- - E -
Attualmente, l'InterNIC e altri organismi di gestione della rete hanno costituito la Internet Society (http://info.isoc.org ), che si occupa di mandare avanti la IETF e tutte le operazioni connesse al "governo tecnico" della rete; presso la Internet Society esiste anche la IANA (Internet Assigned Numbers Authority), che si occupa di registrare tutti i valori dei parametri numerici assegnati su Internet, come ad esempio i numeri di porta usati dai vari protocolli. Per gli aspetti tecnici più direttamente legati al World Wide Web, invece, ci si può rivolgere al W3C (World Wide Web Consortium: http://www.w3.org ).
Sebbene quanto detto in questo paragrafo possa sembrare molto serio e poco utile all'utente comune, va invece detto che l'insieme di RFC costituisce la principale fonte di informazioni sul funzionamento di Internet a qualsiasi livello. È vero, alcune RFC sono estremamente teoriche o riguardano problemi particolarmente tecnici di cui l'utente finale nemmeno sospetta l'esistenza; tuttavia ne esistono altre - particolarmente quelle pubblicate come FYI - che sono mirate proprio agli utenti comuni e forniscono informazioni importanti. Esistono persino delle RFC divertenti - in particolare quelle pubblicate il primo di aprile...
Le RFC possono essere recuperate presso il GARR, via FTP (ftp://ftp.nis.garr.it/rfc/ ) o WWW (http://www.nis.garr.it/netinfo ), oppure collegandosi all'InterNIC (http://www.internic.net ) o alla Internet Society.
11.11. Perchè Internet è
"la rete delle reti"?
- - E -
Come già detto, Internet è una enorme rete di calcolatori, formata connettendo tra loro varie reti più piccole, alcune locali, alcune regionali, altre continentali o mondiali (magari a loro volta formate connettendo tra loro reti più piccole...). Per questo motivo si dice normalmente che Internet è "la rete delle reti": mentre una singola rete locale collega tra loro vari computer, Internet collega tra loro varie reti locali!
In generale, ogni rete locale di calcolatori (LAN o Local Area Network) è formata da un certo numero di computer collegati tra loro tramite un ben determinato mezzo fisico (ad esempio un cavo coassiale). Una LAN può avere strutture molto diverse: i computer possono essere collegati tra loro ad anello, ossia ciascuno manda messaggi al successivo e li riceve dal precedente (rete token ring), oppure tramite un bus (ossia, c'è un unico lungo cavo a cui sono collegati tutti i computer, che, uno alla volta, lo usano per mandare i loro messaggi). Anche il mezzo fisico su cui viaggiano i segnali può essere molto diverso (cavo coassiale, fibra ottica, doppino telefonico...); inoltre la trasmissione dei dati sul cavo avviene seguendo convenzioni (ossia "protocolli fisici") diversi da rete a rete: su una certa LAN i messaggi verranno trasmessi su un cavo coassiale e immettendo su di esso una tensione di +5 Volt per dire "1" e -5 Volt per dire "0", su un'altra i messaggi verranno trasmessi su una fibra ottica mandando un impulso luminoso per dire "1" e nessun impulso per dire "0", e così via.
11.12. Che cos'è un gateway
?
- - E -
Poichè su reti locali diverse i computer parlano "linguaggi" diversi, almeno a livello fisico, per collegare tra loro due reti locali non è sufficiente metterle in comunicazione tramite un cavo, come si farebbe tra due computer. È necessario che tra una rete e l'altra venga posto un apposito computer, detto gateway (cancello), che parli entrambi i protocolli fisici delle due reti e provveda a tradurre i dati che lo attraversano. (Il nome di "gateway", per estensione, viene dato anche ad un qualsiasi computer o programma che traduca dati da un protocollo ad un altro: ad esempio un computer che provvede a ricevere via E-mail articoli che poi pubblica sui newsgroup è detto un gateway da E-mail a news.) Sulla rete Internet, i gateway svolgono anche il ruolo di router, ossia indirizzano i vari messaggi verso le diverse destinazioni (come si vedrà più approfonditamente quando si parlerà dell'indirizzamento dei messaggi).
11.13. Che cos'è un backbone
?
- - E -
Allo scopo di permettere a grosse quantità di dati di percorrere facilmente lunghi tratti (ad esempio la traversata oceanica), sono inoltre stati predisposti dei tratti di rete speciali, detti backbones (dorsali), che collegano tra loro punti molto distanti con un mezzo fisico (che può essere un cavo, ma anche un ponte via satellite) capace di trasportare velocemente grandi quantità di dati.
In conclusione, i dati di un ipertesto memorizzato su un computer di un'Università americana dovranno, per poter essere ricevuti ad esempio da un utente della Bocconi, seguire un percorso che probabilmente prevede qualcosa di simile (come vedremo in seguito, i percorsi tra due punti della rete non sono unici, ma vengono decisi sul momento in base a vari fattori; inoltre, non prendete per buono il percorso sottoindicato, in quanto si tratta di una topologia inventata solo per esempio):
Troppo complicato? Beh, in realtà abbiamo semplificato...
11.14. Che cos'è un IP numerico?
- - E -
La sigla IP - che indica uno dei protocolli usati su Internet - è solitamente usata per indicare anche quel numero binario di 32 bit (4 byte) che identifica univocamente un qualsiasi computer connesso a Internet.
Questo numero è definito in modo da contenere almeno un qualche indizio sulla collocazione fisica del computer a cui si riferisce, in modo da facilitare le operazioni di collegamento. Poichè, come detto, Internet è formata dall'unione di tante reti locali, ciò si ottiene dividendo il numero in due parti: la prima (quella più a sinistra) indica la rete locale a cui appartiene il computer, mentre quella più a destra permette di determinare a quale particolare computer di quella rete locale si riferisca quel particolare IP. In questo modo, i computer che indirizzano i pacchetti sulla rete si preoccupano solamente di leggere la prima parte dell'IP e di spedire i pacchetti alla corrispondente rete locale; una volta arrivati là, sarà poi compito dell'hardware di gestione della rete locale di indirizzare i pacchetti al giusto computer.
Si ha però un problema: se ad esempio usassimo due byte per indicare la rete e gli altri due per indicare il computer all'interno della rete (o "nodo" della rete locale), potremmo avere al massimo 65536 reti locali in Internet (il massimo numero esprimibile con due byte); ma ce ne sono molte di più. D'altra parte, se decidessimo di usare tre byte per identificare la rete, potremmo avere molte più reti locali, ma per identificare il nodo avanzerebbe un solo byte, e potremmo quindi avere al massimo 256 nodi per ciascuna rete; ma in molte delle reti locali (es. in una grande azienda) i computer connessi alla rete sono molti di più. Per questo motivo è stata pensata una struttura "flessibile", in cui l'indirizzo è effettivamente suddiviso in due parti, una caratteristica della rete e una del nodo, ma la dimensione delle due parti è variabile.
Gli IP, pertanto, sono suddivisi in classi, a seconda della grandezza della "parte di IP" usata per esprimere la rete; le classi si distinguono a seconda del valore del primo byte dell'IP. Ed ecco la tabella esatta: si noti che i numeri 0 e 255 sono riservati per scopi speciali, per cui i quattro byte dell'IP possono variare ciascuno tra 1 e 254. Nella tabella, le x indicano la parte di indirizzo riservata all'individuazione del nodo all'interno della rete, e possono essere un qualsiasi numero compreso tra 1 e 254. Per ogni classe di IP sono indicati il massimo numero di reti e il massimo numero di computer per rete (nodi).
Classe | Da | A | Max. reti | Max. nodi | Note |
---|---|---|---|---|---|
A | 1.x.x.x | 126.x.x.x | 126 | 16.387.064 | Usato per poche grandi reti |
B | 128.1.x.x | 191.254.x.x | 16.256 | 64.516 | Solitamente usato per le reti di medie dimensioni (università, grosse aziende) |
C | 192.1.1.x | 223.254.254.x | 2.064.512 | 254 | Usato per le reti di piccole dimensioni |
D | 224.x.x.x | 239.x.x.x | Indirizzi per multicasting (trasmissione contemporanea a più di un computer) | ||
E | 240.x.x.x | 254.x.x.x | Attualmente indefiniti (tranne qualche numero particolare) |
Con questo sistema si ha una elevata flessibilità, e diventa possibile assegnare ad ogni ente che si collega ad Internet un numero di IP relativamente adeguato alle sue esigenze, riducendo i numeri "sprecati" (ovviamente, nessun ente utilizza tutti gli IP assegnatigli, dal primo all'ultimo: ad esempio, se un ente ha 2000 computer, poichè la classe C è insufficiente, è costretto a richiedere un indirizzo di classe B, sprecando così ben 62516 numeri). Il problema non è irrilevante, perchè facendo i conti si trova che il massimo numero di computer collegabili a Internet, limitato dagli IP teoricamente disponibili, è di 3 miliardi 654 milioni e rotti; tenendo conto che un forte spreco di IP è inevitabile, questo numero è inadeguato agli sviluppi previsti per la rete, tanto che sono allo studio nuovi sistemi di indirizzamento. In particolare, è già cominciata la transizione dall'attuale IP versione 4 all'IP versione 6 (o IP Next Generation) che permetterà di avere ben 16 byte di indirizzo, contro i quattro attuali, e quindi avrà teoricamente posto per un numero di computer pari a 2 elevato a 128. Per contro, esso renderà abbastanza difficile ricordarsi a memoria il proprio numero IP...
Vediamo un esempio pratico: consideriamo l'IP 131.192.8.30. Poiche' il primo byte vale 131, questo e' un indirizzo di classe B: pertanto i primi due byte (131.192) individueranno univocamente la rete locale a cui appartiene il computer, e saranno uguali per tutti i computer che appartengono a tale rete locale. Gli altri due byte (8.30), invece, servono ad individuare il particolare computer all'interno della rete locale. Questa struttura servirà a semplificare la ricerca del singolo computer: difatti le istruzioni per contattare tutti i computer con IP che inizia per 131.192 potranno essere concentrate in un unico punto (l'"ingresso" della corrispondente rete locale); l'individuazione del singolo computer sara' poi demandata alle macchine che gestiscono tale rete locale.
Tuttavia, molte reti locali sono a loro volta formate da tante sottoreti (subnets); ad esempio, la rete di una grande azienda contiene solitamente sottoreti separate per le sue varie sedi, e così via. Per contemplare questa possibilità, nelle classi di tipo A o B è possibile che una parte dei byte dedicati all'individuazione del singolo nodo venga in realtà usata per distinguere tra le varie sottoreti. Ad esempio, nell'IP precedentemente citato, il terzo byte (8) potrebbe servire ad individuare la sottorete, e a questo punto l'ultimo (30) servirebbe ad individuare il particolare computer nella sottorete. Di fatto, la sottorete si comporterebbe quindi come una rete di classe C individuata dai tre byte 131.192.8 e avente al più 254 computer; si potrebbe quindi pensare che, nel caso si abbiano tante sottoreti, tanto varrebbe utilizzare tante reti di classe C invece di una sola rete di classe B. Usando una unica rete, tuttavia, si ha il grosso vantaggio che il resto di Internet "vede" tale rete come un blocco unico, permettendo ad esempio di modificare la distribuzione delle sottoreti senza disturbare tutto il resto di Internet e di mantenere riservata la struttura interna della rete. Inoltre, più reti di classe C sarebbero viste dall'esterno come slegate tra di loro, e appesantirebbero il sistema di indirizzamento dei messaggi, perchè messaggi che vanno a finire sostanzialmente nello stesso posto sembrano indirizzati a reti che non c'entrano niente l'una con l'altra, richiedendo sostanzialmente di memorizzare più volte (una per ciascuna rete di classe C) la stessa "strada" di indirizzamento dei messaggi.
Esistono infine alcuni IP particolari. Ad esempio, l'IP 255.255.255.255 indica tutti i computer sulla rete locale del computer dell'utente; analogamente, "riempiendo" con dei 255 le x (vedi tabella) di un indirizzo si ottiene un IP che indica tutti i computer sulla rete locale corrispondente; ad esempio 131.192.255.255 indica tutti i computer sulla rete locale individuata dai due byte 131.192. Messaggi indirizzati a questi IP saranno letti da tutti i computer! Nel caso esista la suddivisione in sottoreti, è possibile applicare lo stesso principio: 131.192.8.255 indica tutti i computer sulla sottorete 8 di 131.192 (ammettendo che 131.192 sia suddivisa in sottoreti). Ovviamente, questo tipo di IP può essere usato solo come destinazione per un pacchetto.
Gli zeri, al contrario, servono per indicare i valori incogniti: 0.0.0.0 indica il computer dell'utente, e può essere usato soltanto per indicare il mittente del pacchetto. Gli indirizzi che iniziano con 127 (tipicamente, 127.0.0.1) servono come "loopback": un pacchetto spedito da un computer a questo IP viene rimandato al mittente. Se state su una macchina su cui è attivo un sito FTP, provate l'URL ftp://127.0.0.1/ ... (questo è un tipico consiglio dato dagli hacker ai neofiti che li scocciano chiedendo quali siano i siti dove si può trovare del buon software).
11.15. Che cos'è il DNS?
Come si identifica il computer "xxx.yy"?
- - E -
Il DNS (Domain Name System) è il sistema utilizzato dai computer che gestiscono Internet per tradurre gli indirizzi letterali (es. direct.ibm.it) nel corrispondente IP (es. 131.192.8.30) e viceversa. Tale sistema si basa sull'esistenza di computer di servizio, detti name server, che vengono interpellati ogni volta che si rende necessaria una traduzione; per questo motivo, nella configurazione dei programmi di comunicazione (es. Winsock) viene richiesto di indicare un name server, senza il quale non è possibile utilizzare gli indirizzi letterali.
Poichè è impensabile che un name server conservi un elenco di tutti i nomi letterali con relativo IP, la traduzione avviene in forma distribuita. Ad esempio, supponiamo di voler accedere all'indirizzo www.internet.ibm.com. Per prima cosa, il nostro programma di comunicazione interpella il nostro name server definito nella configurazione, il quale conserva un elenco di tutti i domini di primo livello associati ad un altro name server; il nostro name server cercherà il dominio com e restituirà l'IP del name server ad esso associato. Il nostro computer contatterà allora questo server, che conserverà un elenco di tutti i domini di secondo livello situati dentro com, e che segnalerà l'IP del server per il sottodominio ibm.com. Contattando questo ulteriore server, il nostro computer riceverà l'IP del server per il sottodominio internet.ibm.com; contattando tale server, finalmente il nostro computer riuscirà a sapere l'IP del computer www.
Poichè tutto ciò è lungo e complicato, esistono alcune scorciatoie. Innanzi tutto non esiste mai un solo name server per dominio, per evitare che, in caso esso smetta di funzionare, il dominio venga tagliato fuori dalla rete. Inoltre, il nostro name server è capace di imparare: dopo aver svolto per la prima volta tutta la trafila di cui sopra, esso memorizzerà gli IP dei vari server intermedi incontrati lungo il cammino, associati al relativo sottodominio, e nel caso di future richieste per gli stessi sottodomini si rivolgerà direttamente a loro. Per questo motivo, solitamente si "saltano" vari livelli nella procedura, e rivolgendosi a uno o al più due server diversi è possibile ritrovare l'IP del computer. Tuttavia, le associazioni IP - nome letterale vengono automaticamente eliminate dopo un periodo di tempo prefissato, in modo da costringere il name server a ripetere la trafila e quindi a controllare se per caso l'IP associato a quel nome è cambiato nel frattempo.
Negli elenchi DNS conservati sui name server sono anche conservate altre informazioni, come elenchi di indirizzi di posta elettronica e alias, ossia equivalenze tra un nome letterale ed un altro nome letterale, utili per semplificare gli indirizzi letterali o per avere più indirizzi letterali associati ad un singolo computer.
11.16. Qual è l'elenco dei
domini Internet di primo livello?
- - E -
I codici seguenti sono stati standardizzati dall'ISO e riguardano tutti gli stati esistenti al mondo (salvo alcuni, che riguardano regioni geografiche o domini di tipo particolare). Comunque, una buona parte di questi stati non è ancora collegata a Internet. Inoltre, alcuni domini si sovrappongono geograficamente tra di loro: ad esempio i domini FR e FX, oppure il dominio CS (Cecoslovacchia) con i domini CZ (Rep. Ceca) e SK (Slovacchia).
11.17. Che cos'è un "IP
dinamico"? Cosa sono BOOTP e RARP?
- - E -
Un computer collegato in permanenza alla rete, come visto, è univocamente identificato da un numero detto IP. Ma, poichè si stanno diffondendo le connessioni dirette via linea commutata, una parte sempre maggiore dei computer in rete sono connessi a Internet soltanto saltuariamente, ossia quando l'utente si collega con il server via telefono: è questo il caso dei comuni accessi via modem, molto diffusi tra gli utenti casalinghi. In questo caso, è comunque necessario che il computer disponga di un proprio IP, in modo da poter essere individuato dal resto della rete nei periodi in cui il collegamento è attivo.
Prendiamo ad esempio il caso di un provider che abbia 500 utenti e 10 linee telefoniche. I cinquecento utenti useranno per collegarsi più o meno cinquecento computer diversi; si potrebbe quindi pensare di assegnare ad ognuno di questi computer un proprio IP, che funzionerà soltanto quando quel particolare utente si collega con il provider, e resterà inutilizzato quando non è collegato. In questo caso, dal punto di vista del resto della rete, è esattamente come se il computer dell'utente fosse collegato in permanenza a Internet, ma fosse spento durante tutti quei periodi in cui l'utente non è connesso con il provider. L'IP è quindi allocato staticamente, ossia corrisponde sempre e solo al particolare computer usato dall'utente per collegarsi.
Questo tipo di fornitura degli IP è molto usato negli Stati Uniti, dove la rete si è diffusa prima, ma rappresenta un grosso spreco: difatti il provider deve riservare per sè e i propri utenti 500 IP (ossia una rete di classe B), ma ne userà soltanto dieci alla volta: poichè le linee telefoniche sono dieci, non ci potranno mai essere più di dieci utenti collegati contemporaneamente. Per questo motivo, negli ultimi anni sta prevalendo il modello dell'IP allocato dinamicamente (in gergo, IP dinamico). In questo caso, il provider riserva per i propri utenti un numero di IP pari al numero delle linee telefoniche, e assegna ciascun IP non ad un utente, ma ad una linea telefonica. Quando un utente si collega, esso accede ad una delle linee telefoniche e "riceve" l'IP corrispondente a tale linea; quell'IP individuerà il suo computer per tutto il tempo in cui egli resterà collegato, ma quando egli si sarà disconnesso e un nuovo utente avrà occupato quella linea telefonica quello stesso IP passerà ad indicare il computer del nuovo utente. Lo stesso IP, quindi, indicherà computer diversi in momenti diversi. In questo modo, inoltre, il provider avrà bisogno di un numero molto minore di indirizzi (una rete di classe C è solitamente sufficiente), il che è anche un vantaggio per l'economia generale di Internet.
Questo sistema, tuttavia, presenta dal punto di vista dell'utente un grosso svantaggio: poichè la particolare linea telefonica su cui si collega l'utente varia imprevedibilmente ad ogni connessione, anche l'IP dell'utente non è conoscibile a priori, il che significa che l'utente non può configurare i programmi di connessione a basso livello perchè non sa quale IP avrà nella successiva connessione (per tralasciare il fastidio di dover alterare l'IP ad ogni connessione per farlo corrispondere a quello che si riceve). Il problema è stato risolto in due modi:
11.18. Che cos'è il TCP/IP?
Cos'è un pacchetto?
- - E -
Con il nome di TCP/IP si indica normalmente un insieme di protocolli di comunicazione, che più correttamente andrebbe chiamato Internet protocol suite (collezione di protocolli Internet), che regolano le comunicazioni tra i vari computer connessi alla rete.
I protocolli contenuti in questo insieme sono essenzialmente di due tipi: alcuni di essi si occupano delle operazioni di "basso livello", ossia della spedizione di numeri binari tra i due computer che stanno dialogando, indipendentemente da cosa effettivamente significhino quei dati, mentre altri si occupano delle operazioni di "alto livello", ossia di compiere operazioni più complesse come copiare un file, spedire un E-mail, controllare un computer a distanza, indipendentemente dal modo con cui queste operazioni e i loro dati verranno trasmessi sulla rete. Tra i protocolli di basso livello i principali sono il TCP, l'IP e l'UDP, mentre tra quelli di alto livello vengono annoverati i vari FTP, HTTP, TELNET, SMTP... Si noti sia la differenza tra TCP/IP (un insieme di protocolli) e TCP e IP (che sono singoli protocolli), sia che il nome IP, che designa correttamente un protocollo, è stato nell'uso comune assunto anche come nome del numero binario che identifica univocamente ciascun computer posto in rete.
Questo modello a livelli è stato standardizzato, a livello astratto, dal cosiddetto protocollo ISO/OSI; tuttavia, senza troppe pretese di rigore, può essere facilmente spiegato nel modo seguente. Supponiamo che un utente debba copiare un file lungo 100000 byte dal proprio computer ad un altro tramite il protocollo FTP. Per prima cosa egli dà il relativo comando al suo programma cliente FTP. Il protocollo FTP, che è di alto livello, prevede un modo molto semplice di spedire un file: sostanzialmente, il cliente manda al server un comando prestabilito seguito dai dati contenuti nel file da spedire. Ora, il protocollo FTP ha il problema di far giungere il comando e i dati al computer remoto: poichè esso non è capace di farlo da solo, si rivolge ad un protocollo di livello inferiore, che è il TCP, dicendogli: "Senti, io devo mandare al computer identificato dal numero binario X questo messaggio:" e quindi aggiunge la sequenza di bit corrispondente ai dati che deve mandare.
Il TCP, dal canto suo, non ha la minima idea di cosa significhi quella stringa binaria; sa solo che il suo lavoro è farla arrivare così come è e senza errori al computer numero X. Pertanto esso prende questa stringa, e per motivi che chiariremo quando parleremo più specificamente del TCP la divide in tanti pezzetti di dimensione più piccola (normalmente detti pacchetti (packets), anche se sarebbe più corretto parlare di datagrammi (datagrams): si tornerà in seguito sull'argomento), ad esempio di 500 byte, e li numera in modo che poi possano essere riappiccicati nell'ordine giusto. Dopo di ciò si accorge che sì, lui sa fare tante belle cose, ma non sa spedire i singoli pacchetti di dati lungo la rete, anche perchè non sa stabilire che strada fargli percorrere per arrivare fino al computer X; allora si rivolge ad un protocollo di livello inferiore, che è l'IP, e gli passa, uno alla volta, i singoli pacchetti dicendogli: "Ehi, senti, potresti spedire al computer numero X questo pacchetto?".
L'IP, dal canto suo, non solo non ha la minima idea di che tipo di dati siano contenuti nei singoli pacchetti, ma non ha neanche idea che da qualche parte esista un protocollo chiamato FTP, nè sa che in quel pacchetto da mandare ci sono un po' di dati del file da spedire e un po' di dati aggiunti dal TCP, come ad esempio il numero d'ordine del pacchetto; non solo, ma non sa neanche che quello è il ventiquattresimo pacchetto di una serie di duecento che contengono il file originario: tutto quello che lui fa è prendere quel pacchetto e mandarlo al computer X; cosa ci debba fare il computer X con quel pacchetto è problema che non lo riguarda. L'IP, in particolare, determina che strada debba fare quel singolo pacchetto (si noti che, visto che per l'IP ciascun pacchetto è completamente separato dagli altri, i vari pacchetti dello stesso file possono seguire strade diverse!); una volta decisa la strada, arriva fino alla presa di rete - o al modem, se siete collegati via telefono - e poi dice: "Però, diavolo, qui c'è - ad esempio - un cavo coassiale: io non so mica come fare a spedire dei numeri binari su un cavo coassiale". Cosa fa allora l'IP? Semplice: chiama un protocollo di livello ancora inferiore, che dipende dal tipo di rete ed è diverso a seconda che il mezzo fisico che unisce i due computer sia un cavo coassiale, un ponte radio, una fibra ottica... ed è spesso indicato come "protocollo fisico". Questo protocollo, ad esempio, potrebbe stabilire che ogni volta che si deve spedire un 1 bisogna immettere sul cavo coassiale una tensione di +5 Volt e mantenerla costante per un microsecondo, ogni volta che deve si deve spedire uno 0 bisogna immettere -5 Volt sempre per un microsecondo: il relativo programma, o meglio ancora l'hardware del computer o del modem, provvede a tradurre la stringa di numeri binari in una serie di tensioni successivamente immesse sul cavo.
Che cosa succede sul computer X? Beh, su di esso sta funzionando un altro programma che supporta il protocollo fisico, sta in ascolto e sente che sul cavo arriva una sequenza di tensioni, ad esempio +5 +5 -5 +5 -5 -5 -5 +5...; il suo lavoro è quella di tradurla nella corrispondente stringa binaria 11010001... (In realtà, per quanto detto nella risposta alla domanda precedente, il computer X potrebbe essere posto su una rete locale in cui il protocollo fisico è diverso, per cui il pacchetto potrebbe arrivargli ad esempio sotto forma di impulsi luminosi su una fibra ottica.) Dopo aver fatto questo, il suo lavoro è terminato: pertanto esso prende questa stringa e la passa al livello superiore, ossia al programma di IP che sta funzionando sul suo computer. Questo IP prende la stringa di numeri binari e capisce che essa forma un pacchetto - del resto, il suo lavoro è trasportare pacchetti - e pertanto ricostruisce il pacchetto e lo passa al TCP del suo computer, che provvede a rimettere in ordine i pacchetti secondo il numero apposto dal TCP del computer dell'utente, a controllare se ci sono tutti e, in tal caso, a spedire un messaggio di "tutto OK" al mittente (ossia, prepara una stringa che significa convenzionalmente "tutto OK", se è troppo lunga la divide in pacchetti, la passa al suo IP che determina che strada deve seguire...); quindi passa il messaggio vero e proprio al server FTP, che interpreta il comando e scrive il file sul computer remoto. Va notato che il programma server FTP non ha la minima idea di come effettivamente quel file sia arrivato fin lì: per lui, i livelli inferiori potrebbero anche non esistere, perchè quello che vede arrivare è semplicemente il comando FTP "scrivi questo file sul tuo hard disk". Inoltre con questa struttura si ha ad esempio il vantaggio che, se cambia il mezzo fisico con cui sono collegati i computer, basta cambiare il protocollo di livello più basso, mentre gli altri (IP, TCP, FTP...) possono funzionare ugualmente e allo stesso modo su tutta Internet indipendentemente dal tipo di collegamento fisico esistente tra i computer.
Se ancora non aveste capito, una similitudine può essere fatta con quanto avviene per una persona che deve parlare ad un'altra: una parte del cervello pensa ai concetti che devono essere espressi, quindi, non sapendo come esprimerli, li passa ad un'altra parte (il livello inferiore) che trasforma i concetti in una frase in un determinato linguaggio, quindi divide la frase nelle singole parole e passa, in modo separato, ciascuna parola ad una terza parte del cervello, che decide come dovranno muoversi i vari muscoli del corpo per poter pronunciare la singola parola e farla giungere al destinatario, quindi passa i vari comandi ai muscoli (il livello fisico) che provvedono effettivamente alla trasformazione della parola (un concetto astratto, come una stringa di numeri binari) in qualcosa di fisico (ossia una serie di movimenti e onde di pressione nell'aria) che può effettivamente venire trasmesso.
Abbiamo sacrificato la precisione alla semplificazione in modo da risultare comprensibili anche dai meno esperti; tuttavia, per i più interessati, le domande successive descrivono più in dettaglio vari aspetti della comunicazione, come il concetto di porta, il funzionamento del TCP e dell'IP e il modo con cui vengono determinati i percorsi da far percorrere ai pacchetti.
11.19. Che cos'è il "numero
di porta" in una comunicazione?
- - E -
Ciascun computer connesso alla rete può avere in corso un certo numero di conversazioni con molti computer diversi, e inoltre uno stesso computer può stare svolgendo con esso più conversazioni parallele (pensate ad esempio cosa succede quando vi collegate contemporaneamente con un cliente FTP e con un cliente TELNET allo stesso computer, oppure quando dal vostro browser aprite due finestre e con esse richiedete di leggere due ipertesti diversi ma posti sullo stesso computer).
È quindi necessario che le varie conversazioni non si mescolino tra loro. Per ottenere questo, si fa finta che ciascun computer disponga di un certo numero di porte per comunicare con la rete - un po' come ad esempio un ripetitore irradia nell'etere su un certo numero di "canali" diversi - e si assegna a ciascuna conversazione che il computer sta intavolando un numero di porta diverso. Il tutto funziona un po' come se, attraverso un corridoio, due uomini dovessero trasportare un certo numero di oggetti dalla stanza 1 alla stanza 2; per evitare confusioni le due stanze potrebbero avere ognuna due porte che danno sul corridoio, una rossa e una blu, e si potrebbe fare in modo che uno dei due uomini usi sempre le porte rosse mentre l'altro usi sempre le porte blu. In realtà, i numeri di porta impegnati in ciascuna conversazione sono due - uno su ciascun computer. Perchè due conversazioni possano essere distinte è allora sufficiente che anche uno solo dei due numeri di porta sia diverso. (Contrariamente all'esempio degli uomini e del corridoio, le "porte" di un computer non esistono fisicamente: tutte le comunicazioni passano attraverso la stessa presa di rete. Pertanto non c'è nessun problema ad avere più di una comunicazione in corso sulla stessa porta, basta che esse avvengano con computer diversi o anche con lo stesso computer ma con un suo numero di porta diverso). Quando su un computer sono in esecuzione un certo numero di programmi diversi che devono dialogare con la rete, comunque, ciascuno di essi usa un numero di porta diverso.
Ciascun computer, su Internet, può avere 65536 porte diverse. Si pone allora il seguente problema: un utente, con il suo computer, vuole recuperare un file da un archivio FTP. Egli conosce l'indirizzo del sito FTP; tuttavia, come fa a sapere quale delle 65536 porte di quel computer è stata assegnata al programma server FTP con cui il suo cliente FTP deve dialogare? La risposta è semplice: 21. Ossia, questo problema è stato risolto prevedendo alcuni numeri di porta standard (well known port numbers) assegnati ai server per i vari protocolli: in particolare, quando si intavola una connessione FTP, se non diversamente specificato, il cliente manderà i suoi messaggi alla porta 21 del ricevente (mentre sul proprio computer userà un numero di porta libero e a piacere, tipicamente da 1000 in poi). Naturalmente, è possibile anche far girare un server FTP su un qualsiasi altro numero di porta, ma se gli utenti non lo conoscono non potranno accedere al sito, perchè i loro client FTP, a meno che non gli si dica altrimenti, richiederanno i file alla porta 21. (Tra l'altro, questo è un metodo molto usato per proteggere da occhi indiscreti siti FTP a cui solo gli utenti autorizzati possono accedere - tipo i siti dei pirati informatici...).
11.20. Come funziona il TCP? Perchè
si dividono i messaggi in pacchetti?
- - E -
Il TCP (Transmission Control Protocol) è il protocollo che si occupa del controllo e della preparazione dei dati per la trasmissione vera e propria (che viene effettuata da protocolli di livello inferiore come l'IP). Esso riceve dai protocolli di livello superiore una stringa di dati da trasmettere e l'indirizzo binario (IP) del computer a cui essa deve essere spedita.
Per prima cosa, il TCP provvede a spezzare la stringa di dati da trasmettere, se troppo lunga, in un certo numero di datagrammi (nel seguito e comunemente detti pacchetti, anche se come vedremo i due termini non sono perfettamente sinonimi) che verranno poi spediti separatamente.
I vantaggi di spedire un grosso insieme di dati binari "spezzettato" invece che in una volta sola sono molteplici:
È ovviamente necessario aggiungere a ciascun pacchetto una intestazione (header), standardizzata e di dimensione fissa, contenente alcune informazioni, per permettere poi l'"incollatura" dei pacchetti presso il destinatario e il controllo degli errori (spesso si dice che l'intestazione funge da "busta elettronica": una busta vera, difatti, viene letta prima del messaggio e contiene informazioni necessarie per la consegna e indipendenti dal contenuto della lettera). Questo è uno degli svantaggi del sistema a pacchetti: tanto più i pacchetti sono piccoli, tanto più una parte rilevante del tempo di trasmissione è impiegata nel trasmettere le intestazioni invece che i dati che esse contengono (è un po' come spedire 10 kg di materiale avendo a disposizione solo contenitori che pesano ciascuno mezzo chilo: se si mettono i 10 kg in un pacco solo il postino dovrà trasportare 10,5 kg di roba, se si fanno 100 pacchi da un etto il postino dovrà trasportare 60 kg).
Le principali informazioni contenute nell'intestazione aggiunta dal TCP sono:
Non tutti questi campi sono significativi in tutti i pacchetti. In particolare, la trasmissione di un insieme di dati binari dal computer A al computer B funziona nel modo seguente:
Il TCP non prevede, nel caso si verifichi un errore di trasmissione, la correzione dell'errore direttamente da parte del destinatario (cosa per cui sarebbe necessario aggiungere ulteriori informazioni), ma piuttosto prevede che il destinatario richieda al mittente la ritrasmissione dei pacchetti che non sono giunti correttamente. Questo tipo di protocolli viene normalmente indicato con il termine connection oriented. La quantità di dati contenuta in ciascun pacchetto, infine, non è sempre la stessa; difatti i due computer che devono parlarsi possono essere molto diversi ed avere quindi capacità diverse. In generale, ciascun computer ha una propria dimensione ottimale dei pacchetti (ad esempio, su un PC equipaggiato con Trumpet Winsock questa dimensione è determinata dai parametri MSS e MTU del setup di Winsock); quando i due computer stabiliscono il collegamento, prima di cominciare a mandarsi i pacchetti veri e propri, decidono, seguendo una procedura standard, quale sarà la grandezza dei pacchetti stessi, scegliendo la minore delle due dimensioni ottimali per i due computer.
11.21. Che cos'è e come funziona
il protocollo IP ?
- - E -
L'IP (Internet Protocol) è il protocollo che si occupa di consegnare al computer remoto i singoli pacchetti (o, meglio, i datagrammi) generati dal TCP (o, più raramente, da altri protocolli di controllo della trasmissione). A questo scopo, esso prende ogni singolo pacchetto e vi aggiunge una ulteriore intestazione (che va a posizionarsi prima dell'header del TCP, che a sua volta precede il blocco di dati vero e proprio) contenente dati come gli indirizzi IP numerici del computer mittente e del computer destinatario. Inoltre sono presenti altri campi, come un numero di protocollo che indica a quale protocollo di livello superiore va riconsegnato il pacchetto (normalmente è il TCP); una checksum che permette di individuare gli errori di trasmissione; un tempo di vita (time to live) che serve, come si vedrà, a evitare cicli infiniti. Inoltre, esiste un numero di versione; a questo proposito, è attualmente in corso - e durerà molti anni - la transizione dalla versione 4 alla versione 6 (detta anche IPng o IP Next Generation), che permetterà di collegare alla rete un numero molto maggiore di computer.
Compito dell'IP è anche quello di esaminare le tabelle di indirizzamento per decidere quale strada far prendere ai singoli pacchetti; una volta deciso a quale computer essi andranno spediti nell'immediato, esso passa pacchetto e indirizzo IP del successivo destinatario al protocollo fisico della rete locale, che provvede alla consegna.
11.22. Come viene decisa la strada
che percorrono i pacchetti?
- - E -
Il compito di indirizzare i pacchetti verso la destinazione finale è, su molte reti di calcolatori, assolto dai router (indirizzatori), ossia da computer dedicati e costruiti a questo scopo, a cui tutti gli utenti trasmettono i messaggi perchè essi vengano girati ai destinatari. Teoricamente è sufficiente un normale computer con software adatto, ma di fatto esistono industrie che costruiscono macchine specializzate per garantire alte prestazioni in questi campi: un normale PC non potrebbe certo reggere efficientemente il traffico generato da un centinaio o un migliaio di altri PC collegati alla rete... In realtà, il modello a router non è l'unico possibile: ad esempio la rete Ethernet (lo standard di basso livello più diffuso per le reti locali) indirizza i messaggi in modo molto semplice: tutti i messaggi vengono spediti a tutti i computer, e poi ciascuno controlla se il messaggio è diretto a lui. Ovviamente, su una rete di grandi dimensioni questa politica non otterrebbi grossi risultati...
Su Internet, il compito dei router è assunto dai gateway, ossia dai computer che collegano tra loro più reti locali: in questo modo, con un solo elaboratore è possibile sia costruire un "ponte" tra le varie LAN, sia gestire l'indirizzamento del traffico. Il computer dell'utente, difatti, spedisce i propri pacchetti al gateway che collega la sua rete locale al resto di Internet; il gateway è a sua volta collegato ad almeno un'altra rete locale (e, per poter essere accessibile da ciascuna delle reti a cui è connesso, possiede un diverso indirizzo IP numerico per ognuna di esse). Il gateway può spedire direttamente dati a tutti i computer collegati alle reti locali a cui è connesso, e quindi anche a tutti gli altri gateway che sono collegati ad esse. Esso dispone quindi di una lunga tabella contenente un elenco il più possibile completo delle migliaia di reti locali connesse ad Internet; per ciascuna di esse, nell'elenco figura l'indirizzo IP di uno degli altri gateway a cui è collegato direttamente, che rappresenta la "direzione giusta" verso tale rete. Esso spedirà quindi i propri pacchetti a tale gateway, che a sua volta avrà una tabella con le ulteriori "direzioni giuste".
In sostanza, ogni gateway è un "incrocio" di reti locali, e la tabella rappresenta un grosso insieme di cartelli indicatori che indicano la strada migliore da prendere per raggiungere le varie destinazioni finali; ciascun gateway non ha la minima idea di come sia fatta la rete al di là delle singole reti locali a cui è connesso, ma sa che ogni volta che gli arrivano pacchetti per una determinata destinazione li deve indirizzare in una determinata direzione. Di gateway in gateway, alla fine i pacchetti arrivano ad un gateway che è direttamente collegato alla rete locale del computer destinatario, e vengono consegnati.
Poichè nessuno è perfetto, tuttavia, può succedere che per qualche motivo alcuni pacchetti continuino a girare in circolo (il gateway A li manda al gateway B, B al gateway C e C ad A). Per evitare che piano piano questo tipo di pacchetti, continuando a girare in tondo e accumulandosi, saturi la rete, ad ogni pacchetto IP è associato un tempo di vita (time to live), che rappresenta il massimo numero di gateway che esso può incontrare nel suo cammino. Ogni gateway attraverso cui transita il pacchetto sottrae uno al suo tempo di vita; quando esso arriva a zero, il pacchetto viene distrutto.
Le cose sono ulteriormente complicate dal fatto che la rete è in continua evoluzione: esistono metodi e protocolli che permettono ai vari gateway di imparare nuove strade. Se un gateway non conosce la rete locale a cui sono destinati i pacchetti, ad esempio, solitamente li spedisce ad un "gateway di default" che è supposto essere il più aggiornato. Inoltre, un gateway può rispedire i pacchetti ricevuti al gateway da cui provengono, con l'indicazione "questa non è la strada giusta, la prossima volta usa un'altra".
Teoricamente, anche il computer dell'utente dovrebbe avere una tabella di routing, almeno nel caso in cui la sua rete locale ha più di un gateway. In realtà, per non caricare i computer degli utenti anche con questo tipo di problemi, solitamente i programmi di TCP/IP (es. Trumpet Winsock) utilizzano un gateway di default a cui mandano tutti i pacchetti; soltanto lì le strade dei vari pacchetti si divideranno. Con certi sistemi, ad esempio lo SLIP, non è neppure richiesto il default gateway.
Se vi interessa sapere quale strada percorrono i vostri pacchetti, è sufficiente che vi procuriate un programma di traceroute.
11.23. Qual è la differenza
tra un pacchetto e un datagramma?
- - E -
I due termini hanno un significato leggermente diverso. Difatti, un datagramma (datagram) è il più piccolo pezzo di dati trasmesso tra due computer in senso logico, mentre un pacchetto (packet) è il più piccolo pezzo di dati trasmesso tra due computer in senso fisico. Poichè facilmente non avrete capito nulla di questa distinzione, essa può essere spiegata nel modo seguente: come visto nei paragrafi precedenti, un generico messaggio indefinitamente lungo che deve essere spedito dal cliente di un protocollo di alto livello (es. FTP) al relativo server viene passato al TCP, che provvede a spezzarlo in una serie di parti (che sono i datagrammi) che poi l'IP spedisce una alla volta. Queste parti sono logiche, ossia "virtuali": difatti sono ancora costituite da numeri binari contenuti da qualche parte nella memoria di un calcolatore. Per poter essere spedite, esse devono essere convertite in unità fisiche, ossia formate da una sequenza di tensioni (se il dialogo avviene attraverso un cavo), di impulsi luminosi (fibra ottica), eccetera: queste sono i pacchetti.
Questa conversione non è effettuata dal TCP/IP, ma dai vari protocolli fisici, che possono essere diversi in vari punti della rete. Per il TCP/IP, difatti, gli unici due computer che partecipano al dialogo sono il mittente e il destinatario, ma nella realtà non è così: il computer mittente sarà collegato con un cavo - ad esempio il cavo di una rete locale Ethernet - ad un gateway, che sarà a sua volta connesso con un cavo diverso ad un altro gateway, che sarà connesso con una fibra ottica ad ancora un altro gateway... e così via. Il datagramma dovrà allora passare attraverso molti mezzi fisici diversi, ciascuno con un suo protocollo fisico, e molti gateway, che dovranno convertire i segnali fisici quando essi cambiano mezzo di trasmissione. Con la maggior parte dei mezzi fisici, il modo più efficiente di trasmettere un singolo datagramma è di convertirlo in un singolo pacchetto: per questo il termine "pacchetto" è spesso usato al posto di "datagramma".
Tuttavia, esistono altri protocolli fisici con i quali, ad esempio, i pacchetti hanno dimensione di 50 byte: se allora tramite essi bisogna trasmettere un datagramma lungo 500 byte, questo (che già è una suddivisione del messaggio originario) viene diviso in dieci pacchetti, questi pacchetti vengono trasmessi, e il gateway successivo provvederà a riappiccicare i dieci pacchetti e ricostituire il datagramma, convertendolo quindi per poter essere trasmesso sul mezzo fisico successivo. In questo caso viene a mancare l'equivalenza tra pacchetto e datagramma.
11.24. Cosa sono UDP e ICMP?
- - E -
Il TCP è il principale protocollo per la gestione dei messaggi, ma non è l'unico: talvolta accade difatti di avere messaggi estremamente corti, come le segnalazioni d'errore o le richieste di conversione DNS da nome a numero IP e viceversa. Per questo tipo di messaggi, è inutile usare il grosso e complesso TCP; si possono usare altri protocolli di controllo della trasmissione, che continueranno peraltro a servirsi del protocollo IP per l'indirizzamento.
La scelta più gettonata è l'UDP (User Datagram Protocol), che spedisce messaggi che non siano più lunghi di un pacchetto, e sostanzialmente si limita ad assegnare al messaggio un numero di porta e una checksum. Per i messaggi diretti al software di gestione della rete, come ad esempio i messaggi d'errore dei gateway, esiste poi l'ICMP (Internet Control Message Protocol). Comunque, quasi tutti i protocolli di alto livello (HTTP, FTP, SMTP...) si servono del TCP come protocollo per il controllo di trasmissione.
Consigli di navigazione:
|
Principianti: | 12. L'hardware per Internet |
Naviganti: | 12. L'hardware per Internet | |
Esperti: | 15. Erori... | |
Valutanti: | Un esempio: la formazione a distanza |
Michele Daniele, E&T