imm12a.jpg (7168 byte)

 

12.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.

 

12.9. Cos'è una RFC?
- - E - 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.


12.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.

 

12.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.

 

12.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).

 

12.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):

1.Il computer su cui sono memorizzati i dati li trasmette sulla rete locale
dell'Università americana fino al gateway che la collega al resto di Internet.
2.Probabilmente, questo gateway darà sulla rete metropolitana (MAN: si dice di
una rete che collega tra loro le varie reti locali di una singola area urbana) della
città in cui l'Università americana è posta; i dati viaggeranno allora sulla MAN
fino ad un altro gateway.
3.A questo gateway, se siamo fortunati, è collegata una dorsale capace di portare i
dati direttamente sulla costa orientale degli Stati Uniti, ad esempio a Washington.
4.Giunti a Washington, i dati, tramite un altro gateway, entreranno sulla MAN di
quella città e viaggeranno fino ad un gateway verso una dorsale oceanica, che
potrebbe ad esempio essere la IGN (IBM Global Network) tra Washington e
Roma.
5.Giunti a Roma, tramite un ulteriore gateway, i dati entreranno sulla dorsale che
collega Roma all'Italia settentrionale.
6.Giunti a Milano, tramite un gateway i dati entreranno sulla MAN milanese.
7.Da tale MAN, tramite un gateway, i dati passeranno sulla LAN della Bocconi.
8.Viaggiando su tale LAN, i dati arriveranno finalmente al computer dell'utente.

Troppo complicato? Beh, in realtà abbiamo semplificato..

 

12.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).

 

12.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.

 

12.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).

AD Andorra
AE Emirati Arabi Uniti
AF Afghanistan
AG Antigua e Barbuda
AI Anguilla
AL Albania
AM Armenia
AN Antille Olandesi
AO Angola
AQ Antartide
AR Argentina
ARPA Indirizzo scritto in formato ARPANet
AS Samoa Americane
AT Austria
AU Australia
AW Aruba
AZ Azerbaigian
BA Bosnia Erzegovina
BB Barbados
BD Bangladesh
BE Belgio
BF Burkina Faso (ex Alto Volta)
BG Bulgaria
BH Bahrein
BI Burundi
BJ Benin
BM Bermuda
BN Brunei Darussalam
BO Bolivia
BR Brasile
BS Bahamas
BT Bhutan
BV Isola Bouvet
BW Botswana
BY Bielorussia
BZ Belize
CA Canada
CC Isole Cocos (Keeling)
CF Repubblica Centrafricana
CG Congo
CH Svizzera
CI Costa d'Avorio
CK Isole Cook
CL Cile
CM Camerun
CN Cina
CO Colombia
COM Entità commerciali degli Stati Uniti
CR Costa Rica
CS Cecoslovacchia
CU Cuba
CV Capo Verde
CX Christmas Island
CY Cipro
CZ Repubblica Ceca
DE Germania
DJ Gibuti
DK Danimarca
DM Dominica
DO Repubblica Dominicana
DZ Algeria
EC Ecuador
EDU Istituzioni universitarie e di ricerca degli Stati Uniti
EE Estonia
EG Egitto
EH Sahara Occidentale
ES Spagna
ET Etiopia
FI Finlandia
FJ Isole Figi
FK Isole Falkland (Malvine)
FM Micronesia
FO Isole Faroer
FR Francia
FX Francia (Territori Europei)
GA Gabon
GB Gran Bretagna
GD Grenada
GE Georgia (quella ex-sovietica...)
GH Ghana
GI Gibilterra
GL Groenlandia
GOV Enti governativi degli Stati Uniti
GP Guadalupa (Francia)
GQ Guinea Equatoriale
GF Guyana Francese
GM Gambia
GN Guinea
GR Grecia
GT Guatemala
GU Guam (Stati Uniti)
GW Guinea Bissau
GY Guyana
HK Hong Kong
HM Isole Heard e McDonald
HN Honduras
HR Croazia
HT Haiti
HU Ungheria
ID Indonesia
IE Irlanda
IL Israele
IN India
INT Internazionale (originariamente usato negli Stati Uniti per indicare il resto
del mondo...)
IO Territori Britannici nell'Oceano Indiano
IQ Iraq
IR Iran
IS Islanda
IT Italia
JM Giamaica
JO Giordania
JP Giappone
KE Kenya
KG Kirghistan
KH Cambogia
KI Kiribati
KM Comore
KN Saint Kitts, Nevis e Anguilla
KP Corea del Nord
KR Corea del Sud
KW Kuwait
KY Isole Caimane
KZ Kazakistan
LA Laos
LB Libano
LC Saint Lucia
LI Liechtenstein
LK Sri Lanka
LR Liberia
LS Lesotho
LT Lituania
LU Lussemburgo
LV Lettonia
LY Libia
MA Marocco
MC Monaco
MD Moldavia
MG Madagascar
MH Isole Marshall
MIL Istituzioni militari degli Stati Uniti
ML Mali
MM Myanmar (ex Birmania)
MN Mongolia
MO Macao
MP Isole Marianne settentrionali
MQ Martinica (Francia)
MR Mauritania
MS Montserrat
MT Malta
MU Isole Mauritius
MV Maldive
MW Malawi
MX Messico
MY Malaysia
MZ Mozambico
NA Namibia
NATO Istituzioni della NATO
NC Nuova Caledonia (Francia)
NE Niger
NET Organizzazioni di servizio per la rete
NF Isole Norfolk
NG Nigeria
NI Nicaragua
NL Paesi Bassi
NO Norvegia
NP Nepal
NR Nauru
NT Zona Neutrale
NU Isola Niue (Nuova Zelanda)
NZ Nuova Zelanda
OM Oman
ORG Organizzazioni senza scopo di lucro
PA Panama
PE Perù
PF Polinesia Francese
PG Papua - Nuova Guinea
PH Filippine
PK Pakistan
PL Polonia
PM Saint Pierre and Miquelon
PN Isole Pitcairn
PT Portogallo
PR Portorico (Stati Uniti)
PW Palau
PY Paraguay
QA Qatar
RE Reunion (Francia)
RO Romania
RU Russia (Rep. Federale)
RW Ruanda
SA Arabia Saudita
SB Isole Salomone
SC Seychelles
SD Sudan
SE Svezia
SG Singapore
SH Saint Helena
SI Slovenia
SJ Isole Svalbard e Jan Mayen
SK Slovacchia
SL Sierra Leone
SM San Marino
SN Senegal
SO Somalia
SR Suriname
ST Sao Tomè e Principe
SU Unione Sovietica
SV El Salvador
SY Siria
SZ Swaziland
TC Isole Turks e Caicos
TD Ciad
TF Territorio Meridionale Francese
TG Togo
TH Thailandia
TJ Tagikistan
TK Isole Tokelau (anche dette Isole dell'Unione)
TM Turkmenistan
TN Tunisia
TO Isole Tonga
TP Timor Orientale
TR Turchia
TT Trinidad e Tobago
TV Tuvalu
TW Taiwan
TZ Tanzania
UA Ucraina
UG Uganda
UK Regno Unito
UM Isole Minori degli Stati Uniti
US Stati Uniti (dominio geografico, usato nella classificazione dei siti americani
per stato di appartenenza)
UY Uruguay
UZ Uzbekistan
VA Città del Vaticano
VC Saint Vincent e Grenadine
VE Venezuela
VG Isole Vergini (Britanniche)
VI Isole Vergini (Statunitensi)
VN Vietnam
VU Vanuatu
WF Isole Wallis e Futuna
WS Samoa
YE Yemen
YU Yugoslavia
ZA Sudafrica
ZM Zambia
ZR Zaire
ZW Zimbabwe

 

12.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:

1.La maggior parte dei programmi di TCP/IP stack (per es. Trumpet Winsock)
prevedono la possibilità di inserire uno script (serie di comandi eseguiti sul
momento) che permetta di leggere un messaggio spedito dal server e ricavare
automaticamente da esso l'IP (si veda l'esempio nella sezione sullo script di login
di Trumpet Winsock).
2.In alternativa, sono stati sviluppati due sistemi per la trasmissione automatica
dell'IP e di altri dati all'atto della connessione: uno è un vero e proprio protocollo
di trasmissione (RARP o Reverse Address Resolution Protocol) mentre l'altro
(BOOTP o Bootstrap Protocol) si serve dell'UDP.

 

12.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.

 

12.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...).

 

12.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:

Se più trasmissioni diverse devono condividere lo stesso mezzo fisico, è possibile
trasmettere in modo alternato un pacchetto per ciascuna: prima un pacchetto
della comunicazione 1, poi uno della 2, poi uno della 3... poi quando tutti hanno
mandato un pacchetto si spedisce un secondo pacchetto della comunicazione 1 e
così via; naturalmente si possono seguire anche schemi più complicati che
tengano conto dell'importanza dei vari messaggi. In questo modo, anche se si
dovesse trasmettere per molto tempo non si bloccherebbe mai la linea, ma al più
la si rallenterebbe;
Se, mentre si è a metà di una trasmissione, vi è la necessità di spedire un
messaggio urgente, basta fermarsi alla fine di un pacchetto, trasmettere il
messaggio urgente e quindi proseguire con i pacchetti successivi, mentre se la
trasmissione dovesse essere unica si perderebbe quanto già trasmesso;
Poichè ciascun pacchetto è indipendente dagli altri, può seguire strade diverse (in
realtà, questo grazie all'IP e non al TCP) e quindi per ogni pacchetto si può
scegliere il percorso ottimale e più veloce;
Se ad un certo punto si verifica un errore nella trasmissione, basta rispedire il
pacchetto che non è giunto correttamente, e non si deve rispedire l'intero insieme
di dati.

È 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:

1.Numero di porta usata dal mittente: indica quale porta il mittente sta usando
per trasmettere;
2.Numero di porta usata dal destinatario: indica a quale porta del destinatario
va consegnato il pacchetto;
3.Numero d'ordine del pacchetto all'interno dell'intero insieme di dati da
trasmettere: indica il numero d'ordine del primo byte di dati contenuto nel
pacchetto (ad esempio se i pacchetti sono di 500 byte, essi porteranno i numeri
d'ordine 0, 500, 1000...);
4.Numero di riconoscimento: indica quanti byte di dati sono stati ricevuti
correttamente dal mittente fino a quel momento;
5.Finestra libera del mittente: indica il numero di byte che il mittente può
ricevere, nel momento in cui spedisce questo pacchetto, prima di venire saturato
(ovvero di non avere più il tempo di leggere nuovi pacchetti perchè troppo
impegnato a trattare i precedenti);
6.Checksum: è un numero ottenuto (più o meno) sommando tutti i byte di dati
contenuti nel pacchetto, e serve a controllare gli errori: se il destinatario riceve un
pacchetto in cui, sommando tutti i byte di dati, si ottiene un numero diverso da
quello riportato nel campo "Checksum" allora certamente esso è stato alterato
durante la trasmissione, per cui si è verificato un errore e il pacchetto va
ritrasmesso;
7.Indicatore di urgenza: dice al destinatario di leggere immediatamente il
pacchetto in arrivo, lasciando perdere eventuali pacchetti arrivati in precedenza e
ancora in attesa di essere letti e trattati.

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:

1.Il computer A (o meglio il suo programma di TCP), dopo aver diviso i dati in
pacchetti, comincia a spedirli: questi pacchetti contengono al proprio interno i dati
da spedire, e nell'intestazione contengono i due numeri di porta, il numero
d'ordine, la checksum e l'eventuale indicatore d'urgenza, mentre gli altri campi
sono lasciati vuoti;
2.Il computer B, ogni volta che riceve correttamente un pacchetto, spedisce al
computer A un pacchetto che significa "tutto OK" (spesso detto ACK). Questo
pacchetto non contiene dati; è semplicemente una intestazione contenente i due
numeri di porta (che ovviamente saranno invertiti rispetto ai pacchetti normali:
per questo pacchetto, il mittente è B e il destinatario è A), il numero di
riconoscimento e la finestra. Tramite il numero di riconoscimento, B dice ad A:
"Guarda che mi sono arrivati correttamente i primi ... (500, 1000, 1500... ) byte
del messaggio"; tramite la finestra, B dice ad A: "Guarda che posso ancora
ricevere altri ... (0, 2000, 20000, 200000) byte prima di non poter più leggere i
pacchetti che mi mandi". Si noti che B deve ricevere i pacchetti in ordine: se ad
esempio riceve i primi due pacchetti e poi il quarto, i byte correttamente ricevuti
saranno 1000 e non 2000, perchè mancano i byte dal 1000 al 1499;
3.Se tutto sta andando bene, il computer A legge la finestra disponibile in B, dà
un'occhiata a quanti pacchetti ha spedito nel frattempo (ossia nel tempo in cui il
pacchetto di ACK ha viaggiato da B ad A) e decide se può spedirne altri oppure
deve aspettare un po' di tempo per lasciare che B abbia il tempo di trattare i
pacchetti già ricevuti ed aumentare quindi la sua finestra, liberando spazio per
nuovi pacchetti. Se invece A ha mandato ad esempio i primi quattro pacchetti,
ma è già trascorso un certo periodo di tempo (prefissato e detto timeout) ed ha
ricevuto il corrispondente ACK solo per i primi tre (ossia l'ultimo ACK portava
come numero di riconoscimento 1500 e non 2000), decide che qualcosa deve
essere andato storto nella trasmissione del quarto pacchetto e lo ritrasmette.

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.

 

12.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.

 

12.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.

 

12.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.

 

12.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.
Hosted by www.Geocities.ws

1