|
Guida TCP/IP

Introduzione
Miliardi di bit
viaggiano ogni giorno sulla Rete. Vi siete mai chiesti come fanno ad arrivare al
corretto destinatario? In questo articolo, primo di una serie vi presentiamo "la
suite di protocolli TCP/IP" cioè le regole utilizzate per la trasmissione su
Internet. Non è certo fondamentale sapere come funziona uno spinterogeno o un
albero di trasmissione per guidare un'automobile. Analogamente, al giorno
d'oggi, non serve sapere come funziona un computer per poterlo utilizzare. La
tecnologia ci scherma sempre di più dal come una cosa funziona spostando
l'attenzione sul cosa fare per utilizzarla. Così, quella che era una volta
tecnologia per un'élite abbastanza ristretta di studiosi, ricercatori e
studenti, è oggi una realtà a disposizione di tutti. Non solo è diventato
semplice navigare nella Ragnatela, ma oggi chiunque può facilmente costruirsi le
sue pagine e agganciarle a uno dei tanti siti Web che ospitano pagine private.
Non c'è più neanche bisogno di conoscere l'HTML, grazie alla proliferazione di
editor HTML commerciali e di pubblico dominio. In quanto ai risultati estetici,
beh, lì non c'è programma che tenga. Ma cosa c'è sotto a tutto ciò? Per chi è
ancora e nonostante tutto interessato a capire come funzionano le cose, e se
vogliamo anche per coloro ai quali la cosa non interessa per niente, ma hanno
qualche minuto per leggere un paio di paginette e poi, chissà, potrebbe sempre
tornare utile...Insomma, per chi vuole, ecco a voi il "TCP/IP, questo
sconosciuto".
Presentazione TCP/IP
Il nome completo è TCP/IP Internet Protocol Suite, ed è un insieme
di protocolli di trasmissione di cui i due principali sono appunto il TCP (Transmission
Control Protocol) e l'IP (Internet Protocol). Ma che cosa è esattamente un
protocollo? Essenzialmente è una serie di regole per comporre dei messaggi e per
far sì che essi possano essere scambiati tra due macchine. Non stiamo parlando
solo di computer. Anche una centrale telefonica meccanica può ricadere in questa
definizione. Un protocollo può contenere regole estremamente dettagliate, come
quelle che identificano il significato di ogni singolo bit nella costruzione di
un messaggio, oppure fornire uno scenario di alto livello, come per esempio
definire come avviene il trasferimento di un file da un computer a un altro.
Fondamentalmente un protocollo sta alla trasmissione dati come un linguaggio di
alto livello quale il C++ sta alla programmazione. Infatti, un linguaggio di
programmazione comprende sia regole estremamente dettagliate che devono essere
seguite alla lettera - guai a dimenticare anche un solo punto e virgola alla
fine di un'istruzione C++ - sia strutture di alto livello che vanno costruite
nel modo corretto, pena errori nella struttura logica del programma. Una
generica architettura di trasmissione è formata da una torre a più piani, dove
ogni piano rappresenta una precisa responsabilità nella trasmissione dei
messaggi. Alla base della torre sta la porta di accesso alla rete fisica, che
potremmo pensare come una rete di strade. Ogni piano prende il messaggio che
arriva dal piano superiore, lo mette in una busta con alcune informazioni
aggiuntive, e lo passa come messaggio al piano inferiore. Le regole di
comunicazione tra i vari piani sono dette interfacce. Il messaggio risultante,
formato da tante buste una dentro l'altra, viene immesso nella rete dalla porta
che si trova alla base della torre. Una volta arrivato al piano terreno infatti,
esso viene trasportato alla torre di destinazione e da qui risale un piano dopo
l'altro fino all'ultimo piano, detto anche livello applicativo. Ogni piano della
torre di destinazione apre solo la busta che gli compete e usa le informazioni
aggiuntive per recapitare la busta successiva al piano superiore. Le
informazioni aggiuntive rappresentano il protocollo di comunicazione. Ogni piano
comunica quindi solo con il piano corrispondente. Esempio: Il direttore della
Pippo e Figli manda una lettera riservata al direttore della Pluto e Consorte.
Il modo con cui i due comunicano, per esempio i riferimenti a lettere
precedenti, lo stile della lettera, il modo di salutare alla fine della lettera,
e così via, rappresenta il protocollo ad alto livello, cioè quello applicativo.
Per spedire la lettera il direttore lo passa alla sua segretaria. Ciò avviene secondo le regole interne della Pippo e figli, ed è perciò un'interfaccia. La segretaria prende la lettera, la mette in una busta aggiungendo il nome del
destinatario e la scritta RISERVATO. Queste informazioni sono per la sua
controparte nella Pluto e consorte, ed è quindi anch'esso un protocollo. La
busta viene quindi passata all'Ufficio Posta dell'edificio secondo la procedura
ordinaria (altra interfaccia), il quale aggiunge l'indirizzo completo, il CAP e
altre informazioni necessarie alla spedizione, e la passa quindi al corriere,
che rappresenta il meccanismo fisico di trasferimento del messaggio. Terzo
protocollo. Quando la lettera arriva, questa viene gestita dall'Ufficio Posta
della Pluto e consorte che, dopo aver buttato la busta esterna con l'indirizzo
dell'edificio, la passa alla segreteria del direttore. Questa registra l'arrivo
della missiva, la toglie dalla busta più interna, e poi consegna la lettera vera
e propria al direttore della Pluto e consorte. È evidente che perché il sistema
funzioni bisogna che i vari protocolli siano rispettati da entrambe le aziende.
Mentre infatti le interfacce possono essere diverse (ogni azienda ha le sue
procedure interne), i protocolli devono essere stati concordati prima,
altrimenti alcune informazioni potrebbero andare perse, o addirittura la lettera
potrebbe non essere recapitata in tempo. Pensate a una segretaria italiana che
riceve una busta da una consociata asiatica con sopra scritto URGENTE in cinese!
Ne nasce una considerazione importante. La base di ogni protocollo è il concetto
di standardizzazione. Più vasta è l'accettazione dello standard, più forte e
diffuso è il protocollo. Gli standard internazionali sono in genere i più
importanti, ma non sempre. Un esempio è proprio il TCP/IP, nato per volontà
dell'agenzia americana DARPA (Defense Advanced Research Projects Agency) e poi
diventato di fatto il maggior sistema di protocolli per l'interconnessione di
reti a livello mondiale. Internet è fatta a strati Internet è basato su tre
livelli concettuali: il livello applicativo (Application Services), quello del
trasporto (Reliable Stream Transport Service) e quello della spedizione dei
pacchetti (Connectionless Packet Delivery Service).
Cos'è Internet
Per capire il TCP/IP, è
necessario a questo punto capire bene che cosa è Internet. Tanto per cominciare
Internet non è una rete di comunicazione. Una rete di comunicazione è in genere
legata alle necessità specifiche di chi l'ha disegnata e dell'hardware
utilizzato per implementarla. Costruire una rete ideale che vada bene per
qualsiasi esigenza, o pensare di poter limitare a un solo tipo di hardware
l'implementazione di una qualunque rete non solo non è fattibile, ma neanche
auspicabile, date le limitazioni delle tecnologie attuali. A volte è necessario
far correre i dati molto velocemente in un ambito molto ristretto, come per
esempio all'interno di un edificio. Altre volte si ha l'esigenza di trasmettere
dati a migliaia di chilometri di distanza in modo molto affidabile, anche se
questo può significare un rallentamento nella velocità di trasmissione. Se si
cercasse di utilizzare lo stesso hardware in entrambi i casi, i costi sarebbero
assolutamente inaccettabili. La soluzione è l'interconnessione delle reti, o
internetworking. Grazie a ponti di collegamento (detti gateway) e la definizione
di opportuni protocolli, si possono collegare fra di loro reti anche molto
diverse, fornendone agli utenti una visione comune. Questa è la forza di
Internet rispetto alle varie reti proprietarie, e di conseguenza del TCP/IP sui
vari protocolli proprietari. Il TCP/IP è un insieme di regole pubbliche, aperte
a tutti, o come si dice nell'ambiente, un sistema aperto (open system), che
permette l'interconnessione di reti anche molto differenti, indipendentemente
dalla tecnologia usata da ogni rete. I suoi principali vantaggi sono appunto
l'indipendenza dalle tecnologie delle singole reti interconnesse, la possibilità
di far comunicare fra di loro ogni computer connesso al sistema, la possibilità
di trasmettere conferme di ricezione (acknowledgement) direttamente dal
destinatario al mittente, e soprattutto una notevole quantità di protocolli
applicativi per qualunque possibile bisogno, come vedremo più avanti.
Come avviene la trasmissione dati: cosa sono e che fanno i router, Cenni sugli indirizzi IP e cosa sono le Classi di IP
Il TCP/IP
definisce quindi una unità di trasmissione dati chiamata datagram, e le regole
da seguire per trasmettere un datagram in una particolare rete. Il principio che
sta alla base dell'interconnessione è quello di schermare le applicazioni dalle
caratteristiche fisiche delle reti in modo semplice e flessibile. Questo avviene
attraverso un livello intermedio che si occupa di spedire e ricevere piccoli
pacchetti di dati fra due punti qualsiasi del sistema di reti. Questo meccanismo
si chiama packet-switching. Esso consiste nella divisione di ogni messaggio in
un certo numero di pacchetti di dati. Ogni pacchetto è formato da poche
centinaia di byte, e contiene una intestazione che fornisce informazioni sul
destinatario e su come raggiungerlo. Questo meccanismo ha il vantaggio di
ottimizzare l'utilizzo della rete, parallelizzando la trasmissione di più
messaggi contemporaneamente. Lo svantaggio è che ogni nuovo sistema che si
aggancia alla rete per trasferire dati riduce la disponibilità della rete per
tutti gli altri sistemi già connessi. Una rete infatti ha una certa capacità ben
definita, che dipende sostanzialmente dalla tecnologia hardware e software che
utilizza. Tale capacità viene misurata in bit per second (bps). Questa grandezza
non rappresenta la velocità dei dati in rete, come si potrebbe pensare in prima
istanza, bensì dà una misura del numero massimo di bit che possono essere
trasmessi nella rete in un secondo. La velocità reale di un singolo messaggio
dipende da tanti fattori, come il numero di sistemi che stanno utilizzando la
rete, la qualità delle connessioni e di conseguenza il numero di tentativi
necessari per trasferire correttamente i dati, le modalità di trasmissione e i
dati aggiuntivi necessari al trasferimento degli stessi. Ci sono altri modi per
trasferire dati in una rete: per esempio, quando fate una telefonata, la rete
stabilisce un collegamento diretto fra il vostro telefono e quello della persona
chiamata. A questo punto il telefono incomincia a campionare il microfono della
vostra cornetta in modo continuo, trasferendo il segnare al ricevitore all'altro
capo. Il tutto a 64.000 bit per secondo, che è la velocità di campionamento
necessaria a digitalizzare la voce. Questo avviene comunque, indipendentemente
dal fatto che stiate parlando o meno. Anche se state in silenzio la linea è
saturata al massimo della sua capacità. Questo meccanismo è detto
circuit-switching. Al contrario del meccanismo usato dal TCP/IP, quello cioè a
pacchetti, la linea è completamente assegnata alla comunicazione in atto, per
cui il fatto che altri stiano telefonando non riduce la capacità della
connessione. D'altra parte la linea è utilizzata completamente indipendentemente
dal fatto che ci siano o meno dati da trasferire. Di qui gli elevati costi di
tale meccanismo. La telefonata, infatti, la pagate lo stesso sia che parliate
molto velocemente, sia che stiate completamente in silenzio. Questo meccanismo è
troppo costoso per una rete informatica, specialmente se si tiene conto che la
disponibilità di tecnologie hardware sempre più raffinate e veloci per il
trasferimento dei dati bilanciano in buona parte quello che è uno dei punti
deboli del sistema a pacchetti, e cioè l'impossibilità di garantire a ogni
utente e in ogni momento una certa capacità di trasferimento ben definita.
Torniamo al sistema a pacchetti. Per trasferire dati da un sistema a un altro
ogni sistema ha un nome unico ben definito. Non esistono cioè due sistemi con lo
stesso nome, anche se in reti diverse, indipendentemente da quale è il nome
locale di un sistema nella sua rete di appartenenza. All'interno di ciascuna
rete, i vari computer usano la tecnologia hardware e software specifica di
quella rete. Tuttavia, grazie a questo strato intermedio di software, le varie
applicazioni hanno una visione unica e globale del sistema interconnesso di
reti, detto appunto internet. Notate la "i" minuscola. Il concetto di internet è
infatti quello appena descritto. Viceversa Internet con la "I" maiuscola,
identifica quel sistema di reti, basato sull'architettura internet, che viene
detto anche Connected Internet. La connessione tra due reti avviene attraverso
macchine opportune che sono collegate fisicamente a entrambe le reti, e hanno la
responsabilità di far passare i vari pacchetti da una rete all'altra e
viceversa. Tali macchine sono dette internet gateway, o anche IP router. Sono
loro il vero elemento portante di una internet. Ogni router non solo deve sapere
che determinati pacchetti vanno passati da una rete a un'altra, ma deve passare
dall'altra parte anche pacchetti destinati a ulteriori reti connesse attraverso
altri router. Essi però ragionano solo in termini di reti, non di destinazione
finale. A un router non interessa chi è effettivamente il destinatario di un
pacchetto, ma solo a quale rete appartiene. Questo semplifica molto
l'implementazione di un router. Alla base del meccanismo dei router c'è
l'indirizzo IP, o IP address. Ogni cosa che conosciamo ha un nome. Cane, casa,
auto, e via dicendo. Se ci interessa specificare meglio ciò di cui stiamo
parlando, possiamo assegnare un nome anche a un sottogruppo di cose. Così
abbiamo che i cani bassotti sono alquanto diversi dai San Bernardo, una
catapecchia non è certo una villa, e una Ferrari costa un po' più di una
Cinquecento. Se poi dobbiamo identificare una cosa in modo chiaro e univoco, è
necessario assegnarle un nome che solo quella cosa ha. Già un nome come Mario
Rossi non va bene, perché non è unico, e comunque, anche se scegliessimo oggi un
nome veramente strano e originale, non avremmo la garanzia in futuro di non
ritrovarci con un caso di omonimia. Ecco allora le targhe per le automobili, i
codici fiscali per le persone, i numeri di telefono, e via dicendo. Ognuno di
questi nomi ha tre caratteristiche. La prima è che esiste un organo competente
centrale che li assegna, proprio per garantirne l'univocità. La seconda, è che
hanno una struttura a sottogruppi. Esistono cioè degli elementi che garantiscono
l'univocità a un certo livello, all'interno del quale esiste una certa libertà
di scelta, e così via, livello dopo livello. Per esempio, il codice fiscale
viene costruito in modo che un uomo e una donna non possano mai avere lo stesso
codice, anche se fossero nati lo stesso giorno, nella stessa città e si
chiamassero nello stesso modo. Similmente, i numeri di telefono di due città
diverse si distinguono per il prefisso e se queste si trovano anche in stati
diversi, per il prefisso internazionale. Affinché internet possa rappresentare
un sistema universale di comunicazione, permetta cioè di far comunicare
qualunque macchina connessa a una delle sue reti con una qualsivoglia altra
macchina connessa alla stessa o a un'altra rete, è necessario fornire ogni
macchina di un nome unico a livello globale. Internet fornisce ogni sistema di
un nome, che identifica il sistema stesso, di un indirizzo, che mi dice dove si
trova il sistema, e di un cammino, che mi dice come raggiungere il sistema. Ogni
macchina connessa a una rete è detta host, nella terminologia internet. Lo
stesso termine ha significati differenti in altri contesti informatici, come per
esempio in quello client/server, o nel caso di mainframe. Attenzione a non fare
confusione quindi. In internet un host può essere anche un vecchio 8088 con 640K
di RAM e 10M di disco fisso. L'indirizzo, o IP address, è un campo composto da
32 bit. I primi bit permettono di distinguere 5 forme standard identificate da
una lettera del alfabeto, e dette classi. Le prime tre classi dell'IP address
contengono sia l'indirizzo di una rete (netid), sia quello di una macchina nella
stessa (hostid). In realtà l'indirizzo non identifica necessariamente una
macchina, ma una connessione alla rete. Per esempio, un router ha almeno due
indirizzi, avendo connessioni ad almeno due reti. Questo in quanto un router
appartiene a entrambe le reti, e quindi sono necessari due indirizzi dato che un
IP address ha posto per un solo indirizzo di rete. Se l'indirizzo dell'host è 0,
allora l'IP address si riferisce alla rete stessa. Se viceversa tutti i bit
riservati all'indirizzo dell'host sono 1, allora l'indirizzo viene utilizzato
per identificare tutti gli host della rete (broadcasting). Uno speciale
indirizzo formato da 32 bit posti a uno è chiamato local network broadcast
address e serve solo in casi molto particolari. Il concetto di broadcasting è
quello della diffusione a tutto raggio, un po' come fa un'emittente radiofonica.
In generale internet interpreta i campi formati da tutti uno come all, cioè
"tutti", mentre quelli formati da tutti zero come this, cioè "questo", "qui".
Questo per quanto riguarda le classi A, B e C. La classe D è usata per un
particolare tipo di distribuzione dei dati detto multicasting. La classe E è
riservata a usi futuri. Dato che specificare ogni singolo bit di un indirizzo IP
sarebbe alquanto poco pratico e di scarsa leggibilità, la convenzione è quella
di leggere ogni ottetto, cioè ogni gruppo di 8 bit, come un intero, e di
separare i quattro ottetti con un punto. Oltre a i casi speciali già descritti,
l'indirizzo di classe A 127.0.0.0 è riservato per un particolare processo di
test che rimanda indietro i dati al mittente senza propagarli nella rete. Uno
dei vantaggi di questo schema è la possibilità da parte dell'organismo centrale
che assegna gli indirizzi (Network Information Center) di delegare ai
responsabili delle singole reti l'assegnazione di una parte dell'indirizzo
all'interno della rete stessa. La cosa avviene un poco come con i numeri di
telefono. A livello internazionale ogni stato ha il suo prefisso internazionale.
Per esempio, per l'Italia, è 39. All'interno ogni stato divide il paese in aree
geografiche a cui assegna un ulteriore codice. Per esempio, Roma è identificata
dal 6, Milano dal 2, Firenze da 55, e così via. All'interno poi della provincia
o della città possono essere definite ulteriormente sottoaree a cui si assegnano
due, tre o quattro cifre. Per esempio 529 oppure 7054. Infine ogni telefono in
tali aree avrà il suo numero. Così, se Mr. Smith deve chiamare dagli Stati Uniti
il signor Mario Rossi abitante all'EUR, a Roma, comporrà per esempio il numero
011.39.6.529.4467. In questo caso lo 011 serve per uscire dagli USA, un po' come
il nostro 00. Analogamente in internet i numeri di classe C sono assegnati alla
piccole reti, quelle cioè con meno di 256 host, quelli di classe B alle reti con
al massimo 65536 host, e quelli di classe A alle reti con oltre 16 milioni di
host. Ogni rete decide poi come suddividere gli indirizzi che gli sono stati
riservati al suo interno come meglio crede. Ovviamente, una internet privata non
ha la necessità di seguire queste regole, né a utilizzare indirizzi assegnati
dal NIC, ma il non farlo potrebbe impedire in futuro la connessione alla TCP/IP
Internet.
I Nomi di Dominio DNS (Domain Name Services)
Dato che l'indirizzo può essere a volte abbastanza ostico da
ricordare, è possibili associare a ogni host anche un nome, che può essere
utilizzato come mnemonico per un IP address, e la cui risoluzione è
responsabilità di particolari macchine chiamate name server (DNS). In realtà il name
server è un programma software che può girare in qualunque macchina connessa
alla rete, e che mantiene l'associazione tra nomi e indirizzi IP, fornendo tali
corrispondenze quando richiesto da un altro programma chiamato name resolver. Di
fatto, si preferisce far girare il name server su una macchina dedicata, che
prende anch'essa, a questo punto, il nome di name server. Potete pensare al name
server come a una agenda telefonica elettronica, che contiene una lista parziale
di nomi e numeri telefonici. In internet infatti, non esiste un singolo elenco
telefonico, ma tanti name server che cooperano per fornire quello che è un vero
e proprio elenco distribuito. In realtà il sistema funziona in modo gerarchico,
un po' come se una certa agenda contenesse solo i prefissi internazionali e il
puntatore alle agende di ogni singolo stato, le quali a loro volta contengono i
prefissi regionali e i puntatori agli elenchi regionali, e così via, fino ad
arrivare all'agenda che contiene solo le estensioni telefoniche di un singolo
edificio. I nomi Internet sono basati su una serie di regole dette Domain Name
System (DNS), che si basa appunto su uno schema gerarchico in cui il nome è
suddiviso in varie parti separate fra loro da punti. Per esempio, www.tuttoreti.com.
Ogni suffisso è a sua volta un dominio. Quindi, nel nostro esempio, tuttoreti.com è un
dominio di secondo livello, mentre com è un dominio di terzo livello. I domini
ufficiali riconosciuti dal NIC al livello più elevato sono riportati in tabella
1. Una rete può richiedere di essere registrata come categoria, oppure usando il
dominio geografico. Per esempio, l'Italia ha come dominio base it. Supponiamo
che il governo decida di costruire un insieme di reti cittadine interconesse fra
loro e connesse a Internet. Si può pensare di assegnare a ogni provincia un
dominio xxxxxx.it. Per esempio, Firenze avrebbe come dominio firenze.it.
L'università di Firenze potrebbe registrare la sue rete come unifi.edu, e in tal
caso sarebbe direttamente il NIC a dover dare l'autorizzazione per tale nome,
essendo il dominio edu sotto responsabilità dell'organismo centrale di
controllo, oppure potrebbe decidere di far parte del dominio cittadino, come
unifi.firenze.it, e quindi potrebbe richiedere il permesso di registrare tale
nome direttamente all'amministratore del dominio di Firenze. A questo punto, se
il dipartimento di Fisica di Arcetri vuole registrare un proprio dominio, deve
chiederlo solo all'Università stessa, ricevendo così, per esempio,
arcetri.usf.fi.it oppure fisica.usf.fi.it. Esiste una piccola complicazione.
Ogni oggetto connesso alla rete ha un tipo. Oggetti di tipo diverso possono
avere lo stesso nome. Per cui, per poter risolvere un nome e ottenere indietro
l'indirizzo IP, è necessario anche specificare il tipo di oggetto: macchina,
utente, casella postale, e via dicendo. Dal solo nome non è possibile evincere
il tipo di oggetto. Il DNS definisce anche come associare i nomi agli indirizzi
IP, e come ottenere quest'ultimi dal nome. In realtà lo schema è ancora più
generale di quanto può sembrare, in quanto permette di estendere la sintassi del
nome per usi specifici, sfruttando anche il concetto di tipo. Per esempio, nel
caso di una casella postale (tipo MX), il nome sarà del tipo utente@dominio. Per
esempio fabioc@tuttoreti.com Innanzi tutto una internet è un sistema di
interconnessione fra reti differenti che utilizza sia sistemi dedicati per la
connessione, detti gateway, sia uno strato (layer) di protocolli che mostrano
alle applicazioni una visione omogenea di una rete virtuale e che sono basati
sulla trasmissione di piccoli pacchetti di dati. Ogni pacchetto porta con sé
l'indirizzo del destinatario il quale identifica univocamente sia la rete di
destinazione che la connessione alla quale deve essere recapitato il pacchetto.
Un sistema connesso a più reti della stessa internet avrà quindi più indirizzi
IP. Un opportuno software, spesso installato su macchine dedicate, permette di
associare a ogni indirizzo un nome di più facile utilizzo da parte degli utenti
del sistema. Il formato di questo nome si basa su un insieme di regole dette DNS.
Trattazione dei protocolli TCP/IP
Quella che è universalmente conosciuta come Internet è di fatto la principale
rete interconnessa esistente, che si estende praticamente su tutto il pianeta.
Data questa premessa, vediamo di approfondire la trattazione dei protocolli TCP/IP.
Innanzitutto qualunque trasferimento di dati implica la trasmissione di bit da
un sistema a un altro. Tali dati devono essere correttamente interpretati dai
vari sistemi connessi alla rete. Data l'enorme varietà di hardware e di sistemi
operativi questo è tutt'altro che banale. Nei protocolli di trasmissione i bit
vengono convenzionalmente raggruppati per multipli di otto, detti ottetti. Una
volta questo corrispondeva al bus da 8 bit, cioè un byte, tipico dei computer.
Oggi la maggior parte dei computer usa parole di almeno 32 bit. Tuttavia non
tutte le macchine memorizzano tali parole nello stesso modo. Esistono vari modi
per memorizzare un intero rappresentato da 32 bit. In quello detto Little Endian,
la posizione più bassa in memoria contiene il byte di ordine più basso
dell'intero. Nei sistemi Big Endian avviene esattamente il contrario, cioè la
posizione più bassa in memoria contiene il byte di ordine più elevato. In altri
sistemi ancora il raggruppamento viene fatto con parole da 16 bit, in cui la
parola meno significativa viene appunto prima. Il risultato è lo stesso del
Little Endian ma con i byte invertiti all'interno di ogni singola parola. È
evidente che non è pensabile che sia la rete a gestire tutti questi modi diversi
di interpretare i dati, anche perché di solito i protocolli di trasmissione non
entrano nel merito di come ragionano i singoli sistemi, ma si occupano solamente
di trasferire in modo più o meno affidabile i dati a loro affidati. Ne consegue
la necessità di definire un formato standard valido per tutti i dati che corrono
lungo i collegamenti, lasciando a i vari sistemi il compito di effettuare le
opportune conversioni locali. Lo standard internet prevede che gli interi
vengano trasmessi a partire dal byte più significativo, secondo lo stile del Big
Endian. Così in un pacchetto, un intero ha il byte più significativo verso la
testa del pacchetto e quello meno significativo verso la coda dello stesso. A
questo punto i sistemi sono in grado di scambiarsi i dati in modo non equivoco.
Associazione tra l'indirizzo IP e l'indirizzo fisico di rete, risoluzione dinamica dell' indirizzo fisico tramite il protocollo ARP
Ma come fa a sapere la rete internet che un sistema è collegato, e soprattutto,
come avviene l'associazione tra l'IP address e l'indirizzo fisico di rete? Ogni
rete fisica infatti ha un suo formato per gli indirizzi fisici assegnati alle
connessioni di rete. In generale esistono due modi di assegnare indirizzi fisici
alle macchine connesse in rete. In una rete piccola, come può essere una Token
Ring, cioè un anello di un paio di centinaia di macchine al massimo, a ogni
connessione può essere assegnato un intero basso, per esempio compreso tra 1 e
254. Questo sistema ha il vantaggio di associare l'indirizzo fisico alla
connessione piuttosto che alla scheda che permette la stessa. Per cui, se la
scheda si rompe, l'utente può cambiarla senza dover tuttavia modificare
l'indirizzo fisico di rete, purché imposti sulla nuova scheda lo stesso
indirizzo di quella vecchia. Lo svantaggio è che non esiste alcun controllo che
impedisca a due utenti sulla stessa rete di impostare lo stesso indirizzo
fisico, creando così una collisione. In altri tipi di reti, come per esempio
Ethernet, ogni scheda ha già preimpostato da parte del costruttore un indirizzo
fisico fisso, per cui non c'è alcun rischio di collisione, ma cambiare la scheda
vuol dire dover necessariamente cambiare indirizzo fisico. Inoltre, dato che
questo indirizzo è unico non solo fra le schede installate su una certa rete, ma
in assoluto fra tutte le schede costruite, esso è generalmente molto lungo. Nel
caso di Ethernet è di ben 48 bit. Associare un IP address a un sistema con
indirizzi formati da piccoli numeri e per giunta tali che a parità di
connessione l'indirizzo non cambia mai, come nel caso di una rete proNET-10, è
molto semplice. Per esempio, per un IP address di classe C, si può usare
l'indirizzo fisico come host identifier. Così, se la rete ha IP address del tipo
10.214.32.x, l'host con indirizzo fisico 16 avrà IP address 10.214.32.16. Un
altro paio di maniche è gestire indirizzi molto più lunghi dei 32 bit utilizzati
per gli indirizzi internet, e per giunta che possono cambiare nel tempo a parità
di connessione. Ovviamente si potrebbe tenere da qualche parte una tabella per
gli accoppiamenti, e di fatto si fa così, ma non è certo molto pratico pensare
che qualcuno la tenga aggiornata a mano. Il problema è stato risolto
efficacemente utilizzando un meccanismo di risoluzione dinamica implementato dal
protocollo ARP, o Address Resolution Protocol. ARP funziona più o meno così.
Quando un host deve spedire un pacchetto a un certo destinatario, spedisce a
tutti gli host nella stessa rete fisica un messaggio in cui chiede chi è l'host
con quel ben preciso IP address. Nello stesso messaggio mette anche i propri
indirizzi, sia quello fisico che quello IP. Si adopera cioè una tecnica di
broadcasting. L'host il cui IP è quello cercato, rimanda indietro al richiedente
il proprio indirizzo fisico, permettendo così l'associazione tra i due. Ciò è
possibile in quanto esso ha comunque ricevuto anche l'indirizzo fisico del
mittente. Ma allora per ogni pacchetto che va spedito a un certo IP address è
necessario prima mandare un pacchetto a tutti gli host nella rete? E perché
allora non mandare direttamente il pacchetto da trasmettere a tutti, invece di
chiedere prima chi è che ha un certo indirizzo IP? Ovviamente la cosa non
funziona così, anche perché si rischierebbe di appesantire inutilmente la rete
con pacchetti che vengono recapitati ai sistemi sbagliati. Quello che si fa è di
mantenere presso ogni host una tabella con tutti gli accoppiamenti già trovati,
e di aggiornarla periodicamente per evitare che diventi obsoleta. A questo punto
i meccanismi di broadcasting servono ad aggiornare tali tabelle. Per esempio, se
un host deve spedire un pacchetto a un certo indirizzo IP, prima controlla nella
sua tabella se non ha già l'indirizzo fisico del destinatario. Solo nel caso
l'informazioni manchi, l'host spedisce a tutti gli altri host il messaggio di
richiesta. Quando questo arriva a un qualunque host, sia esso il vero
destinatario o no, ogni host aggiorna la sua tabella con l'indirizzo fisico e
quello IP del mittente, tanto per guadagnare tempo. Il destinatario, in più,
spedisce indietro anche il suo indirizzo fisico al mittente, così da potergli
permettere di aggiornare la sua tabella di indirizzi. Un'ulteriore tecnica che
si usa per assicurarsi che tali tabelle siano sempre aggiornate, è quella di far
distribuire la propria coppia di indirizzi, fisico ed IP, ogni qual volta un
sistema si connette alla rete, per esempio al reboot. ARP non viene considerato
propriamente un protocollo internet, quanto un meccanismo della rete fisica. Su
ARP si basa il protocollo IP per far comunicare fra loro le varie macchine
quando non è possibile risolvere in altro modo gli indirizzi IP in indirizzi
fisici. Un protocollo analogo è il RARP, o Reverse Address Resolution Protocol,
con il quale una macchina senza disco fisso (diskless) è in grado di conoscere
il proprio indirizzo IP a partire da quello fisico. Per far ciò la rete deve
avere uno o più RARP Server, i quali contengono una tabella di associazione fra
gli indirizzi IP e quelli fisici di tutte le macchine diskless. Anche questo
protocollo si basa su un messaggio mandato in broadcasting. L'esistenza di
questo protocollo è legata al fatto che una macchina diskless non può
memorizzare il proprio indirizzo IP in alcun posto, non avendo memoria
secondaria.
Vai a Guida TCP/IP Parte 2
|