I protocolli TCP/IP di Internet

Introduzione
E' quasi impossibile oggigiorno leggere un giornale o una rivista dove non si parli di Internet. I riferimenti ad Internet ed alle "autostrade dell'informazione" sono diventati parte della nostra vita quotidiana. Cosa ha a che vedere tutto ciò con il termine "TCP/IP"? Detto semplicemente, TCP ed IP sono la spina dorsale delle comunicazioni su Internet, ed insieme al protocollo UDP costituiscono i protocolli di base di Internet.
In termini più tecnici, TCP/IP sta per Transmission Control Protocol/Internet Protocol (Protocollo di Controllo della Trasmissione/Protocollo Internet). I protocolli TCP/IP sono un insieme di regole che consentono a computer differenti (nell'hardware e nel software) di comunicare attraverso una rete. Man mano che le reti di computer diventano sempre più diffuse, diventa di cruciale importanza la capacità di scambiare liberamente informazioni tra computer di tutti i tipi:
•	utenti di workstation Unix possono voler condividere file con altri utenti di workstation Windows;
•	gruppi di lavoro separati da migliaia di chilometri di distanza possono voler scambiare messaggi di posta elettronica per coordinare i loro progetti;
•	amministratori di sistema possono voler consentire agli utenti delle loro LAN l'utilizzo di costose stampanti laser di rete.
Tutte queste attività possono essere realizzate facilmente mediante i protocolli TCP/IP.
Cosa è possibile fare con TCP/IP?
Questo è un breve elenco delle applicazioni rese possibili dall'utilizzo dei protocolli TCP/IP:
•	TELNET (TELetypewriter NETwork): consente di accedere ad un computer remoto dal proprio sistema.
•	FTP (File Transfer Protocol): consente lo scambio di file con altri computer.
•	SMTP (Simple Mail Transfer Protocol): consente l'invio di posta elettronica ad altri utenti/computer.
•	POP (Post Office Protocol): consente la ricezione di posta elettronica, dal server di posta al proprio computer.
•	LPR (Line Printer Requester): consente di stampare su sistemi remoti o stampanti di rete.
•	LPD (Line Printer Daemon): consente a sistemi remoti di stampare sul proprio computer.
•	SNMP (Simple Network Management Protocol): consente di gestire un ambiente di rete.
•	HTTP (HyperText Transfer Protocol): consente di diffondere documenti ipertestuali ad utenti Internet che utilizzano browser Web.

Lo schema di indirizzamento IP
In questa parte viene illustrata in dettaglio la struttura degli indirizzi IP a 32 bit utilizzati in Internet, insieme alle maschere di sottorete (subnet mask).

Reti ed interconnessione di reti
I protocolli TCP/IP consentono l'interconnessione di reti. Internet è in realtà composta di migliaia di singole reti. Ma, per un qualsiasi computer connesso ad Internet, essa si presenta come se tutte queste reti siano parte di un'unica grande Rete. Analogamente, la vostra rete TCP/IP potrebbe essere composta di molte singole reti.
Queste singole reti possono essere fisicamente di differenti tipi, come ad es. Ethernet, token-ring, frame relay, etc. Ci riferiremo alle singole reti costituenti l'interconnessione come segmenti di rete. I segmenti di rete sono collegati tra di loro da speciali apparecchiature chiamate router IP, cioè sistemi che instradano (route) i dati TCP/IP tra due (o più) segmenti di rete. Di solito i router IP sono sistemi dedicati. La figura 1 seguente illustra la funzione dei router per l'interconnessione di reti:

Rete [1] a bus

199.5.83.158

199.5.83.129

Rete [2] ad anello

200.5.84.158

Rete [3] punto a punto

Rete [4] a bus

199.5.64.1

equivale a 

Internet

199.5.83.158

199.5.83.129

199.5.64.1

Figura 1 - Interconnessione di reti

 

200.5.84.158

In riferimento alla figura 1 (in cui i computer host sono raffigurati da quadrati ombreggiati ed i router da rombi bianchi), si supponga che il sistema sulla rete (1) con l'indirizzo IP 199.5.83.158 abbia bisogno di comunicare con il sistema sulla rete (4) con indirizzo IP 199.5.64.1. I dati indirizzati al sistema 199.5.64.1 verrebbero prima inviati al router IP con indirizzo 199.5.83.129. Questo router IP connette le reti (1) e (2), ed a sua volta invia i dati al router IP che collega le reti (2) e (3). Da qui i dati vengono inviati al router IP che connette le reti (3) e (4). Questo router IP invierà infine i dati sulla rete (4) al sistema di destinazione all'indirizzo IP 199.5.64.1.
Come si può vedere, l'utilizzo del protocollo IP per indirizzare un altro sistema sulla interconnessione di reti è possibile poiché esso è in grado di ritrovare il sistema in mezzo a potenzialmente migliaia di altre reti. Come è possibile? Tanto per cominciare, ciascun sistema della rete cui il proprio sistema è collegato deve avere un indirizzo IP univoco. I dati vengono inviati all'altro sistema in pacchetti etichettati con l'indirizzo IP del destinatario. Un sistema sa che un pacchetto è destinato a lui confrontando il proprio indirizzo IP con quello del pacchetto ricevuto.
Semplice? No, infatti la precedente descrizione è troppo semplice. Ci sono letteralmente milioni di sistemi collegati ad Internet. Se ogni volta che un sistema deve comunicare con un altro tutti i computer di Internet dovessero controllare i pacchetti inviati (ed i relativi indirizzi IP), nessun sistema sarebbe in grado di fare altro: la Rete impiegherebbe tutta la sua energia a verificare dove i pacchetti inviati sono destinati! Quindi, in realtà, l'indirizzamento IP è un po' più complicato.
Per migliorare l'efficienza con la quale il protocollo IP è in grado di ritrovare un sistema nella Rete, anche ciascun segmento di rete all'interno di Internet ha un indirizzo univoco. L'utilizzo di un indirizzo di rete per l'instradamento dei dati tra reti semplifica le decisioni sull'indirizzamento e migliora le prestazioni complessive.
Ma come "dire" al proprio computer qual è l'indirizzo (del suo segmento) di rete IP e quello host all'interno della rete? Come vedremo in seguito, quando si assegna un indirizzo IP ad un'interfaccia di rete, in realtà si fornisce la combinazione di entrambi; cioè, l'indirizzo IP complessivo è dato da una parte iniziale che identifica la rete, e da una parte finale che identifica il computer nella rete.
Concetti base sull'indirizzamento IP
Un indirizzo IP viene rappresentato solitamente da quattro numeri decimali (0-255) separati da un punto, come ad esempio: 128.1.15.95. Questa rappresentazione di un indirizzo IP viene chiamata forma decimale puntata. Il computer in realtà vede l'indirizzo come un'unica sequenza di 32 bit, cioè 4 byte; ciascun numero decimale (0-255) è il valore decimale del corrispondente gruppo binario di 8 bit (byte). Quindi, l'indirizzo IP 128.1.15.95 corrisponde internamente al numero binario 10000000 00000001 00001111 01011111. La rappresentazione decimale puntata è comunque quella più diffusa.
Come detto in precedenza, l'indirizzo IP assegnato ad un sistema è in realtà composto dell'indirizzo univoco del segmento di rete cui appartiene il sistema più l'indirizzo univoco di quel sistema all'interno di quel segmento di rete. L'indirizzo IP è quindi la concatenazione della "porzione rete" dell'indirizzo con la "porzione host". Ma come viene diviso un indirizzo IP nelle sue due parti rete e host? Dipende…
Ricordiamo che i protocolli TCP/IP sono utilizzati per l'interconnessione di reti di varia dimensione. Internet contiene ogni concepibile tipo di rete. Vi sono alcune reti di grandi dimensioni (milioni di host), molte reti di medie dimensioni (migliaia di host) e moltissime piccole reti (con al massimo 254 computer). Non è possibile gestire tutti questi differenti tipi di reti con un unico metodo fisso di suddivisione dell'indirizzo IP nelle sue parti costituenti (indirizzo della rete ed indirizzo dell'host nella rete). Ed infatti è stato scelto un approccio di compromesso.
Il modo in cui un indirizzo IP viene suddiviso dipende da alcuni fattori. Le due considerazioni più importanti riguardano:
1.	La classe della rete di un indirizzo IP;
2.	La maschera di sottorete per quell'indirizzo.
Classi di rete
TCP/IP definisce cinque tipi di classi di indirizzi IP. La classe della rete è determinata dal valore del primo byte dell'indirizzo IP. In altre parole, è possibile determinare la classe di un indirizzo IP esaminando il numero nella prima posizione della forma decimale puntata dell'indirizzo.
Delle cinque differenti classi di indirizzi IP solo tre vengono comunemente usate e limiteremo la nostra discussione a queste tre classi: A, B e C. La figura 2 riassume alcune delle differenze tra le tre classi. Le ultime due colonne della figura 2 danno un'idea della complessità delle reti delle varie classi. Gli indirizzi di classe A sono utilizzati in reti di grandi dimensioni con moltissimi host. Gli indirizzi di classe C sono utilizzati in reti molto piccole con pochi host. Gli indirizzi di classe B sono per reti intermedie. Ignoriamo per ora la colonna "Maschera di sottorete" nella figura 2: sarà esaminata in seguito.

Figura 2 - Le tre classi di reti di indirizzi IP più diffuse.	
Classe	Intervallo di valori del primo byte	Parte rete (R) ed host (H)	Maschera di sottorete	N.ro totale di reti	N.ro totale di host	
A	1-127	RR.hh.hh.hh	255.0.0.0	127	16.777.212	
B	128-191	RR.RR.hh.hh	255.255.0.0	16.384	65.534	
C	192-223	RR.RR.RR.hh	255.255.255.0	2.097.152	254	

Gli indirizzi di classe A utilizzano la prima parte dell'indirizzo IP come indirizzo di rete. Ad esempio, l'indirizzo IP 9.130.70.15 potrebbe essere un indirizzo valido di classe A. La "parte rete" di questo indirizzo è 9 e la "parte host" è 130.70.15. Gli indirizzi di classe A vengono utilizzati da grandi organizzazioni aventi molte reti all'interno con molti host (come ad es. le società multinazionali).
Gli indirizzi di classe B utilizzano i primi due numeri come indirizzo di rete. Un esempio di indirizzo di classe B è 128.1.92.250, in cui la "parte rete" è 128.1 e la "parte host" è 92.250. Tali indirizzi vengono usati da organizzazioni con reti moderatamente complesse (come ad es. le Università di grandi dimensioni).
Infine, gli indirizzi di classe C utilizzano i primi tre numeri dell'indirizzo per la rete. Un esempio di indirizzo di classe C è 192.10.25.31. La "parte rete" è 192.10.25; la "parte host" è 31. In questo caso, solo l'ultima parte dell'indirizzo IP è disponibile per gli host della rete.
Una delle regole per gli indirizzi IP è che né la parte rete né la parte host dell'indirizzo può essere costituita di tutti 1 o tutti 0 binari. Questo significa che una rete di classe C può avere solo gli host con i numeri da 1 a 254 (cioé da 00000001 a 11111110 in binario). Questo limita la dimensione di una rete di classe C a 254 computer. Gli indirizzi di classe C vengono utilizzati da piccole organizzazioni. Questi indirizzi sono utili solo con piccole, semplici reti contenenti pochi host.
Maschere di sottorete
In precedenza abbiamo spiegato come determinare se un indirizzo IP è di classe A, B o C. Dalla classe dell’indirizzo è possibile determinare la suddivisione dello stesso nella parte rete e nella parte host.
Una maschera di sottorete è un valore di configurazione che consente di modificare il modo in cui un sistema riconosce le parti di un indirizzo IP. Ci sono però dei limiti a queste modifiche. E’ possibile aumentare la parte rete dell’indirizzo diminuendo corrispondentemente la parte host. Il contrario (cioè, espandere la parte host e ridurre la parte rete) non è mai permesso.
Come è fatta una maschera di sottorete?
E’ una stringa binaria di 1 seguita da una stringa di 0. Gli 1 indicano la estensione della parte rete dell’indirizzo IP; gli 0 indicano l’estensione della parte host. Ad esempio, una maschera di sottorete 255.255.0.0. indica che la parte rete corrisponde ai primi due byte dell’indirizzo IP. Gli ultimi due byte sono la parte host.  
La seguente tabella contiene una lista dei valori più utilizzati nelle maschere di sottorete.

Figura 2 – I valori più comuni usati in maschera di sottorete	
decimale	Binario	
255	1111 1111	
254	1111 1110 	
252	1111 1100	
248	1111 1000	
240	1111 0000	
224	1110 0000	
192	1100 0000	
128	1000 0000	
0	0000 0000	

Una notazione alternativa per indicare la parte rete di un indirizzo IP consiste nell’aggiungere, all’indirizzo espresso in forma decimale puntata, una barra (/) ed il numero di bit corrispondenti alla parte rete. Ad esempio, l’indirizzo 191.200.100.25/24 è di classe C poiché la sua porzione rete è di 24 bit, cioè i primi tre byte 191.200.100 mentre la parte host corrisponde all’ultimo byte 25.
Torniamo ora alla colonna maschera di sottorete associata della figura 1. Questi valori sono le maschere di sottorete delle corrispondenti classi di indirizzi. Un altro modo di pensare a questi valori è che essi sono la “minima” maschera di sottorete che possa essere usata con un indirizzo IP di quella classe. La porzione rete di una maschera di sottorete per un indirizzo IP deve sempre essere almeno grande quanto quella mostrata nella figura 1 per quella classe di indirizzi. Non è possibile, ad esempio, utilizzare una maschera di sottorete 255.0.0.0 con un indirizzo di classe B.
La figura 3 elenca diversi esempi di maschere di sottorete valide ed errate per diverse classi di indirizzi IP.

Figura 3 – Esempi di maschere di sottorete valide ed errate	
Indirizzo IP	Classe	Maschera di sottorete	Parte rete	Parte host	Indirizzo IP con n.ro bit sottorete	
9.75.17.130	A	255.0.0.0	9	75.17.130	9.75.17.130/8	
9.75.17.131	A	255.255.0.0	9.75	17.131	9.75.17.131/16	
9.75.17.132	A	255.255.255.0	9.75.17	132	9.75.17.132/24	
9.75.17.133	A	254.0.0.0	Maschera non valida per questa classe di indirizzi!
La maschera dovrebbe essere almeno 255.0.0.0	
129.7.71.31	B	255.255.0.0	129.7	71.31	129.7.71.31/16	
129.7.71.32	B	255.255.255.0	129.7.71	32	129.7.71.32/24	
129.7.71.33	B	255.0.0.0	Maschera non valida per questa classe di indirizzi!
La maschera dovrebbe essere almeno 255.255.0.0	
219.231.171.111	C	255.255.255.0	219.231.171	111	219.231.171.111/24	
219.231.171.174	C	255.255.0.0	Maschera non valida per questa classe di indirizzi!
La maschera dovrebbe essere almeno 255.255.255.0	
219.231.111.154	C	255.255.255.192	219.231.111.128	26	219.231.111.154/26	

Perché occorre una maschera di sottorete?
Una maschera di sottorete è una opzione di configurazione utilizzata dagli amministratori di rete per suddividere una grande rete TCP/IP in un numero di reti più piccole. Vediamo come ciò viene realizzato.
Consideriamo l’indirizzo IP di classe A 9.75.17.130 di figura 3. Quando viene visto utilizzando la maschera di sottorete 255.0.0.0, la parte rete di questo indirizzo è 9 e la parte host è 75.17.130. Questo è come qualunque sistema esterno alla rete 9 interpreterebbe questo indirizzo.
Comunque, i sistemi interni alla rete 9 non farebbero così. Probabilmente utilizzerebbero una maschera di sottorete 255.255.255.0 e vedrebbero l’indirizzo 9.75.17.130 con la parte rete 9.75.17 e la parte host 130. Cioè, vedrebbero la rete 9 composta di molti segmenti di rete ciascuno contenente solo un piccolo numero di host.
Si osservi che solo i sistemi interni alla rete 9 hanno in realtà bisogno di sapere in dettaglio come la rete è suddivisa al suo interno. Questi dettagli sono nascosti ai sistemi esterni. Questo, a sua volta, riduce lo sforzo necessario per gestire l’intera Internet.
Per la vostra rete TCP/IP interna questo potrebbe non essere necessario. Comunque, su Internet è una necessità funzionale limitare la quantità di dettagli che ciascuna rete espone. Per questa ragione viene richiesto che tutti i sistemi che supportano TCP/IP devono anche supportare l’uso delle maschere di sottorete. Per questo motivo la maschera di sottorete è una parte indispensabile di una configurazione IP.
Indirizzi IP ed Internet
L’indirizzo utilizzato per il proprio sistema dipende dalla natura della rete cui si è collegati. Se si opera con una rete TCP/IP interna all’azienda, è possibile scegliere qualunque indirizzo non assegnato (ad esempio dalle reti 10.0.0.0 oppure 192.168.0.0 ). Questo perché le decisioni su come gestire una rete privata influenzano esclusivamente chi opera all’interno della stessa.
Se, comunque, ci si deve collegare direttamente ad una rete pubblica come Internet, allora vi sono dei vincoli da rispettare. Poiché tutti gli indirizzi IP devono essere univoci, non è possibile scegliere un indirizzo a caso. Per assicurare l’univocità, gli indirizzi di rete ed i nomi di dominio di Internet, vengono assegnati ufficialmente da un’autorità centrale di rete.
Per Internet, l’autorità centrale è l’Internet Network Information Center (InterNIC). E’ possibile ottenere maggiori informazioni su InterNIC e sui servizi che fornisce all’indirizzo http://www.internic.net/ 
I servizi di registrazione dell’InterNIC effettuano l’assegnazione degli indirizzi IP su Internet. Comunque, man mano che l’uso di Internet aumenta, l’InterNIC delega la responsabilità per l’assegnazione di indirizzi IP ai singoli Internet Service Provider (ISP). Attualmente l’InterNIC non assegna più direttamente singoli indirizzi IP. Piuttosto opera con gli amministratori dei domini, i coordinatori di rete e gli ISP per registrare reti e nomi di dominio.
Le organizzazioni che scelgono di ottenere un indirizzo IP sono incoraggiate a cooperare con un ISP. L’ISP fornisce gli indirizzi IP validi le altre informazioni di configurazione necessarie per connettersi ad Internet. In aggiunta l’ISP di solito assiste anche nella pianificazione della rete e la sua amministrazione e sicurezza.
Un’ultima considerazione relativa agli indirizzi IP ed Internet riguarda le reti non assegnate. Un blocco di indirizzi di rete Internet è stato riservato per l’utilizzo esclusivo in reti private. Gli indirizzi IP in questo intervallo, non vengono mai utilizzati come indirizzi pubblici su Internet. Se un rooter IP riceve un pacchetto indirizzato ad una di tali reti private, automaticamente lo scarta (per maggiori informazioni consultare l’RFC 1597 “Address Allocation for Private Internets” all’indirizzo  http://ds.internic.net/rfc/rfc1597.txt
E’ auspicabile e necessario utilizzare indirizzi di questo tipo per le proprie reti aziendali e private. In tal modo si evitano accessi non autorizzati alle porzioni interne di rete non pubbliche.
Gli intervalli di indirizzi riservati per le reti private sono:
10.0.0.0	-	10.255.255.255
172.16.0.0	-	172.31.255.255
192.168.0.0	-	192.168.255.255