Il software del TCP/IP è organizzato in 3 livelli concettuali, che poggiano sui livelli data-link e fisico i quali non sono specificati dall'architettura TCP/IP.
Architettura di rete TCP/IP
APPLICAZIONE: gli utenti chiamano
i programmi applicativi che accedono ai servizi disponibili nei
livelli sottostanti.
Un'applicazione interagisce con i
protocolli a livello di Trasporto per ricevere od inviare i dati.
Inoltre un'applicazione sceglie lo stile di trasporto desiderato
richiamando un particolare protocollo invece di un altro.
TRASPORTO: ha la responsabilità
di stabilire, mantenere e terminare la connessione di rete tra due
elaboratori e di trasferire dati lungo tale connessione, definita
end to end.
I dati sono una stringa di bit detta stream, che
viene suddivisa e trasmessa in piccoli pezzi denominati pacchetti.
La comunicazione può essere resa affidabile, vale a dire
garantendo che i dati arrivino senza errori ed in sequenza,
utilizzando il protocollo TCP, oppure può non esserlo se si
utilizza il protocollo UDP. In seguito saranno analizzati in
dettaglio.
NETWORK: è il livello che si occupa dell'instradamento
dei pacchetti da un nodo ad un altro. Il protocollo IP risiede in
questo livello, occupandosi degli indirizzi di rete ed utilizzando
un algoritmo di instradamento per decidere se inviare il pacchetto
ad un gateway o ad un host della rete direttamente raggiungibile.
A
questo livello appartiene inoltre il protocollo ICMP, che gestisce i
messaggi di errore e di controllo della rete.
Precedentemente si è analizzato lo standard ETHERNET 802.3, che è il livello più basso della rete TCP/IP del dipartimento di Parma, si è detto che ogni scheda di rete possiede un proprio indirizzo univoco ed assegnato dalla casa costruttrice. L'indirizzamento è una componente essenziale della rete, senza il quale non sarebbe possibile stabilire alcuna connessione tra due hosts. Inoltre i protocolli superiori al livello interfaccia di rete della macchina di destinazione devono avere la possibilità in ricezione di distinguere i pacchetti destinati a loro dagli altri presenti sulla rete.
Il TCP/IP utilizza, ad ogni livello superiore a quello di interfaccia di rete, un indirizzo, detto indirizzo IP, diverso da quello Ethernet di 6 byte, per nascondere la rete fisica all'utente.
L'indirizzo IP è costituito da 32 bit. Concettualmente lo si può pensare come suddiviso in due parti, il netid e l'hostid, dove il netid identifica una rete e l'hostid identifica una singola macchina.
Vi sono tre classi primarie di indirizzi IP, ognuna delle quali si differenzia dalle altre per la dimensione del netid e per i primi tre bit significativi.
Classi di indirizzi IP
I primi tre bit servono affinché la scheda di rete ed i router riescano immediatamente ad identificare di che tipo di indirizzo si tratta. Infatti, ricordiamoci che le informazioni, i bit, viaggiano sul mezzo trasmissivo in maniera seriale.
L'indirizzo di classe A ha il primo bit messo a zero, ha la porzione di netid lunga 7 bit, mentre quella dell'hostid è lunga 24.
Può allora identificare 127 reti diverse, ognuna delle quali con circa 16 milioni (255*255*255) di host indirizzabili.
Similmente un indirizzo di classe B può identificare 16000 reti, ognuna con 255*255 host, mentre la classe C, invece, 2 milioni di reti con un massimo di 255 host collegati per ciascuna rete.
L'indirizzo IP viene visualizzato per facilitarne la comprensione
in gruppi di quattro numeri decimali, separati da un punto.
Gli
indirizzi non individuano un host, ma una interfaccia di rete; un
router, che possiede diverse interfacce di rete, avra` almeno un
indirizzo per ogni interfaccia.
Inoltre, ad ogni indirizzo può essere associato un nome proprio, anch'esso suddiviso in quattro parti, separate da un punto. A questo proposito deve esistere in ogni rete una base dati distribuita per realizzare una corrispondenza univoca tra indirizzi IP e nomi propri, denominata DNS (Domain Name System).
Tutti gli host appartenenti alla stessa rete possono comunicare tra loro direttamente; gli host appartenenti a reti diverse comunicano indirettamante grazie ad un Intermediate System (router).
Per garantire l'unicita` degli indirizzi esiste una autorita` centrale, il NIC (Network Information Center), delegata all'assegnazione degli indirizzi di rete alle organazzazioni che ne facciano richiesta. Tali organizzazioni avranno la responsabilita` della distribuzione degli indirizzi di host all'interno della rete assegnata.
Per ottimizzare la gestione di una rete e` possibile realizzare una ulteriore suddivisione della rete stessa in sottoreti ognuna indipendente dalle altre, ma appartenente allo stesso indirizzo di classe A, B, o C. La suddivisione riguarda solo l'interno della rete e non viene vista all'esterno.
Per operare questa suddivisione è necessario dividere ulteriormente l'hostid in due parti, l'hostid stesso e la subnet. L'ampiezza dei due campi può essere definita in maniera molto flessibile tramite un parametro di 32 bit, detto netmask, che contiene i bit ad uno in corrispondenza dei campi netid e subnet, ed i bit a zero in corrispondenza del campo hostid.
Una rete così definita viene definita /nn, dove nn è il n° di bit uguali ad uno. Per esempio, una rete /26 di classe C significa che è suddivisa in 4 sottoreti, ognuna con 62 (26-2) hosts.
La netmask corrispondente è 255.255.255.192. La figura seguente aiuta a capire l'utilizzo di questo parametro.
Netmask /27
L'appartenenza di un indirizzo ad una delle 4 possibili subnet è
definita dai primi 2 bit dell'ultimo byte (00, 01, 10, 11).
Ad
esempio la rete
di classe B dell'Universita` di Parma e` suddivisa localmente in
255 sottoreti di classe C mediante un Netmask pari a 255.255.255.0.
A questo punto, bisogna notare che un indirizzo IP identifica in maniera univoca non un host, ma una connessione, un collegamento alla rete fisica.
Infatti, l'unico indirizzo assegnato a priori è quello Ethernet della scheda di rete, che diventa l'indirizzo fisico dell'host sul quale la scheda è montata. L'indirizzo IP dipende dal netid della rete locale alla quale l'host è collegato. Questo significa che un host che viene trasferito da una rete locale ad un'altra, deve cambiare indirizzo IP.
Secondo lo standard Ethernet, i dati provenienti dai protocolli del TCP/IP vengono incapsulati nel campo DATA di un pacchetto Ethernet, il quale contiene anche gli indirizzi fisici di destinazione e di provenienza. I corrispondenti indirizzi IP fanno, quindi, parte dei dati del TCP/IP.
Un host, allora, per instradare un pacchetto deve conoscere entrambi gli indirizzi di destinazione, quello fisico e quello IP.
Per rendere il livello fisico completamente trasparente all'utente, è stato implementato un protocollo, detto ARP (Address Resolution Protocol), che si occupa appunto di tradurre un indirizzo IP nel corrispondente indirizzo fisico.
Visto che gli indirizzi Ethernet sono lunghi 48 bit, mentre quelli IP, invece, solo 32 bit, l'insieme di tutti i possibili indirizzi Ethernet è sicuramente maggiore di quello IP. È, quindi, impossibile operare una conversione tramite una formula matematica, poiché non sussisterebbe una corrispondenza biunivoca tra i due insiemi.
L'ARP offre una soluzione semplice, affidabile e di facile implementazione.
L'host trasmittente invia un pacchetto ARP in modalità broadcast, contenente i propri indirizzi e l'indirizzo IP di destinazione che si vuole tradurre in fisico.
Essendo in broadcast, ogni macchina esaminerà il pacchetto, ma solo quello di destinazione risponderà inviando la propria coppia di indirizzi.
Purtroppo il broadcast è troppo costoso dal punto di vista della comunicazione per permettere che le macchine che vogliono inviare dati utilizzino prima una richiesta ARP.
Per ridurre i costi di comunicazione, ogni host, allora, tiene in una cache le coppie di indirizzi acquisite di recente, cosicché la volta successiva non deve utilizzare ARP, ma soltanto esaminare la tabella in memoria.
Inoltre, si può sfruttare il broadcast in maniera più efficiente: quando un host esamina la richiesta ARP, aggiornerà la sua cache con la coppia di indirizzi dell'host trasmittente, anche se la richiesta non riguarda lui direttamente.
L'ARP diventa, inoltre, molto utile al momento di aprire una nuova connessione, cioè al momento di interconnettere un nuovo host alla rete.
Se quest'ultimo invia un frame dati ARP, contenente la propria coppia di indirizzi, anticiperà le successive richieste da parte delle macchine che vogliono trasmettere.
Di solito un host mantiene il proprio indirizzo IP nella sua memoria secondaria, ma se invece di un host prendiamo in considerazione una macchina senza dischi, quale un terminale, al momento dell'accensione come fa a sapere il suo indirizzo IP?
Il problema è analogo al precedente. Esiste un protocollo RARP, Revers Address Resolution Protocol, che funziona come il precedente, ma stavolta l'incognita è l'indirizzo IP. La richiesta RARP sarà trasmessa in broadcast e la macchina vi specificherà se stessa, tramite l'indirizzo Ethernet, sia come trasmettitore, sia come destinazione.
Tutte le macchine esaminano la richiesta, ma soltanto quelle autorizzate dai gestori della rete a fornire il servizio RARP risponderanno, completando le coppie di indirizzi trasmittente e destinatario con l'indirizzo IP richiesto.
Tali macchine sono note come server RARP e, per fornire questo servizio, bisogna che la rete ne disponga di almeno uno.
Una volta che la macchina ha ottenuto il proprio indirizzo IP, lo memorizzerà e non utilizzerà di nuovo il RARP finché non sarà riavviata.
Quindi, riassumendo, l'ARP ed il RARP sono un protocollo a basso livello che nascondono l'indirizzamento fisico della rete sottostante, consentendo agli utenti di utilizzare gli indirizzi IP di più facile comprensione scelti da loro stessi per ogni macchina. Si possono immaginare come una parte del livello di interfaccia di rete, non come un protocollo proprio di TCP/IP.
Entrambi devono essere implementati su una singola rete fisica.
Il protocollo IP è il protocollo principale del livello 3 dell'architettura di rete TCP/IP. Opera in modalità non connessa e costituisce un interfaccia tra i livelli successivi (TCP, UDP e le applicazioni) ed il livello di rete. Il TCP/IP, infatti, permette l'esistenza di più pile di protocolli alternative fra loro, atte ad ottimizzare la gestione dei dati.
IP si occupa quindi di indirizzare ai protocolli superiori il pacchetto dati ricevuto. Si riporta in figura il formato del pacchetto IP.
IP Formato della trama
Il significato dei campi è il seguente:
Version: è il numero della versione del protocollo IP che ha generato il pacchetto. Attualmente questo campo vale 4.
HLEN: lunghezza dell'header IP, esclusa la porzione dei dati, variabile in funzione del campo Option, espressa come numero di parole di 32 bit.
Service Type: è composto da 8 bit, dove i primi 3 specificano un livello di priorità per i dati contenuti nel pacchetto che va da 0 (precedenza normale) a 7 (controllo della rete). Altri tre bit vengono denominati D, T, R. Quando sono attivati il bit D richiede un basso ritardo, il bit T un alto troughput, il bit R un'alta affidabilità. Gli altri due bit non sono usati.
Total Length: lunghezza totale del pacchetto.
Identification: contiene un numero intero che identifica il pacchetto. Serve per riassemblare il pacchetto se frammentato. Tale campo è uguale per ogni frammento del datagramma originale. La frammentazione avviene se il pacchetto deve attraversare una rete con una MTU (Maximum Transfer Unit) più piccola della lunghezza totale dello stesso.
Flags: specificano se il datagramma può essere frammentato oppure se è l'ultimo frammento di un pacchetto. E' composto da tre bit, il primo è quello di "non frammentazione" (DF), gli altri due indicano se il datagramma è l'ultimo oppure bisogna aspettarne di ulteriori.
Fragment Offset: numerazione interna dei frammenti.
Time To Live: è un contatore che ogni gateway decrementa ad ogni passaggio. Quando scade il pacchetto viene scartato ed il gateway invia un messaggio di errore alla provenienza. Serve per evitare i loopback.
Protocol: identifica il protocollo superiore al quale IP deve passare i dati.
Header Checksum: CRC dell'intestazione IP.
Source e Destination IP Address: indirizzi IP di provenienza e destinazione.
Option: ogni opzione consiste in un ottetto, detto codice di opzione, seguito eventualmente da un altro ottetto che specifica la lunghezza e da una serie di ottetti di dati relativi a tale opzione. Nel datagramma ogni opzione appare contigua, senza simboli speciali di separazione. Le opzioni sono necessarie soprattutto per testare la rete. Le principali sono: percorso di provenienza, registrazione del percorso e contrassegno temporale. La prima specifica negli ottetti di dati gli indirizzi IP che il pacchetto è obbligato ad attraversare per giungere a destinazione. Serve per esempio per testare il troughput di un particolare percorso. La seconda invece consente ad ogni gateway che incontra il pacchetto di inserire il proprio IP Address per registrare il percorso compiuto. La terza è molto simile alla seconda, poiché il gateway inserisce oltre all'IP Address, anche un contrassegno temporale di 32 bit che fornisce la data e l'ora in cui il gateway ha elaborato il pacchetto.
Dati: PDU di livello superiore.
L'instradamento IP concerne la decisione su dove inviare un dato datagramma in base al suo indirizzo IP di destinazione. La consegna è diretta se l'host di destinazione si trova nella stessa rete dell'host trasmittente, altrimenti viene detta indiretta ed il datagramma deve attraversare uno o più gateway. Il pacchetto IP viene incapsulato in un frame Ethernet con specificati l'indirizzo dell'host di destinazione. Il gateway presente sulla rete riceve il pacchetto, lo analizza e, se diretto all'esterno della rete stessa, lo invia ad un altro gateway, altrimenti lo ignora (consegna diretta). Quest'ultimo viene identificato in base alle tabelle di instradamento. Si nota che l'instradamento avviene utilizzando gli indirizzi IP di reti fisiche, anziché sull'indirizzo di un singolo host, con il risultato di mantenere piccole e contenute le tabelle stesse.
Un altro fatto molto importante è che l'host non ha bisogno di tabelle molto complesse, poiché gli basta sapere l'indirizzo di un gateway di default collegato alla sua stessa rete. Gli host iniziano a trasmettere con il minimo di informazioni di instradamento ed apprendono nuovi percorsi dai gateway tramite messaggi ICMP, descritti nel paragrafo successivo. I gateway si assumono poi la responsabilità di portare a destinazione i messaggi sulle reti remote.
Per consentire agli host ed ai gateway di accorgersi di eventuali malfunzionamenti della rete, o di mancata consegna di un datagramma, è nato l'ICMP, l'Internet Message Control Protocol. L'IP, infatti, può non riuscire a consegnare i pacchetti quando l'host di destinazione è temporaneamente fuori servizio, quando scade il TTL (Time to Live) o quando si verificano congestioni su alcuni percorsi.
L'ICMP consente agli host ed ai gateway di inviare messaggi di errore o di controllo e di avvertire l'host trasmittente che c'è qualcosa che non va. E' il modulo ICMP di questo host che deve porre in relazione gli errori con i singoli programmi applicativi che hanno generato i datagrammi ed intraprendere le opportune misure correttive.
La maggiorparte di problemi che si riscontrano derivano dalla provenienza iniziale. Tuttavia esso non può venire usato per informare i gateway intermedi dell'esistenza di altri problemi, poiché normalmente i pacchetti non mantengono memoria del percorso. Quindi, l'host o gateway che si accorge di qualche anomalia invia alla provenienza un pacchetto ICMP, facendo affidamento sulla cooperazione degli amministratori di rete per eliminare la causa del problema.
Il formato del frame ICMP è costituito da una intestazione e da un'area dati. La prima è composta da tre campi, TIPO, CODICE e CHECKSUM.
Il campo TIPO è un numero di 8 bit che identifica il messaggio; il campo CODICE, sempre di 8 bit, fornisce ulteriori informazioni sul tipo di messaggio; il campo CHEKSUM, di 16 bit, è il CRC del frame ICMP.
L'area Dati varia in funzione del tipo di messaggio. La maggiorparte dei messaggi riportano in questo campo l'intestazione del datagramma che ha causato l'errore. Il campo TIPO può assumere i seguenti valori:
TIPO |
Tipo di messaggio ICMP |
0 |
Risposta di eco |
3 |
Destinazione irraggiungibile |
4 |
Smorzamento della provenienza |
5 |
Ridirezione |
8 |
Richiesta di eco |
11 |
Tempo scaduto per un datagramma |
12 |
Problema di parametro su un datagramma |
13 |
Richiesta di contrassegno temporale |
14 |
Risposta di contrassegno temporale |
15 |
Richiesta di informazione |
16 |
Risposta di informazione |
17 |
Richiesta di maschera dell'indirizzo |
18 |
Risposta di maschera dell'indirizzo |
Il campo TIPO in ICMP
I messaggi di richiesta e risposta di eco servono per verificare il funzionamento dei principali componenti del sistema di trasporto di un host remoto. Con il comando ping un host invia una richiesta di eco e ne attende la risposta dall'host remoto. Il tipo di messaggio di destinazione irraggiungibile viene inviato da un gateway, quando non riesce a consegnare il pacchetto all'host destinatario. Il campo CODICE assume diversi valori per identificare più in dettaglio il problema. Per esempio il valore 8 dice alla provenienza che l'indirizzo IP è sconosciuto e l'host non esiste ( Si veda l'appendice B per ulteriori chiarimenti).
Il tipo di messaggio smorzamento della provenienza viene usato da un gateway o da un host per fare in modo che la provenienza rallenti la trasmissione. Viene usato nei casi di congestione.
Il tipo ridirezione viene inviato dai gateway quando non sono più in grado di instradare pacchetti su una rete per vari motivi. Gli host non possono sapere di eventuali cambiamenti della struttura della rete ed apprendono così i nuovi percorsi.
Il tipo tempo scaduto per un datagramma viene inviato da un gateway alla provenienza quando il campo TTL del datagramma è scaduto. Serve per eliminare dalla rete i pacchetti entrati in loopback.
I Tipi richiesta e risposta di contrassegno temporale servono per sincronizzare gli orologi delle macchine in comunicazione. Infatti, ogni host mantiene la propria nozione del tempo ed opera in maniera indipendente dal resto della rete.
Il tipo problema di parametro su un datagramma viene usato quando il tipo di errore non rientra nella casistica appena descritta. Una possibile causa di tali problemi si ha quando qualche argomento di un'opzione è scorretto.
I tipi di richiesta e risposta di informazioni ormai sono obsoleti, poiché venivano usati affinché un host apprendesse l'indirizzo IP all'avviamento. Oggi il protocollo utilizzato è il RARP.
I tipi richiesta e risposta di maschera di indirizzo sono usati per ottenere la netmask di un particolare host.
Si riportano in appendice B le trame dei messaggi ICMP.
In TCP/IP i router sono suddivisi in due classi, Exterior Router ed Interior Router. I primi interconnettono due insiemi di reti distinti. Ogni insieme di reti, gestito da una singola autorità amministrativa, è un Autonomous System ed i router interni ad essi sono proprio gli Interior.
Un sistema è detto autonomo, poiché è libero di scegliere un'architettura di instradamento interna, ma deve raccogliere informazioni su tutte le sue reti e progettare uno o più gateway, gli Exterior Router, che passino le informazioni di raggiungibilità ad altri sistemi autonomi.
Gli Exterior Router utilizzano protocolli denominati EGP (Exterior Gateway Protocol), mentre gli Interior Router scambiano informazioni di instradamento tramite gli IGP (Interior Gateway Protocol).
E' un algoritmo EGP di tipo Distance Vector, ma invece del concetto di costo, specifica soltanto se la destinazione è raggiungibile oppure no. Questo ne impedisce il funzionamento in topologie magliate. Tutti gli Autonomous System devono, quindi essere collegati con topologia a stella.
L'EGP ha tre caratteristiche fondamentali:
gestisce un meccanismo per l'acquisizione di un router vicino
esegue periodicamente dei test per verificare il corretto funzionamento dei router vicini
scambia periodicamente informazioni sulla raggiungibilità delle reti, passandosi i messaggi di aggiornamento dell'instradamento
Per svolgere le funzioni sovradescritte, l'EGP definisce nove tipi di messaggi riportati in tabella
Tipo di messaggio |
Descrizione |
Acquisition Request |
Richiede al gateway di diventare un vicino |
Acquisition Confirm |
Risposta positiva alla richiesta di acquisizione |
Acquisition Refuse |
Risposta negativa alla richiesta di acquisizione |
Cease Confirm |
Risposta di conferma alla richiesta di cessazione |
Hello |
Richiede al vicino di rispondere se è vivo |
I Heard You |
Risposta al messaggio di Hello |
Poll Request |
Richiede l'aggiornamento dell'instradamento di rete |
Routing Update |
Informazioni sulla raggiungibilità delle reti |
Error |
Risposta ad un messaggio scorretto |
Tipo di messaggi EGP
È un protocollo IGP di tipo Distance Vector. La metrica utilizzata non permette di definire i costi o le velocità delle linee, ma basa l'instradamento solo sulla minimizzazione degli hops. Il n° massimo di hops ammesso è 15, quindi non può essere utilizzato in reti di grandi dimensioni.
Esso ripartisce i partecipanti in macchine attive e passive. Le attive annunciano i loro percorsi ad altre, le passive si limitano soltanto ad aggiornare i propri. Di solito i router eseguono il RIP in modo attivo, gli host in modo passivo, e lo scambi dei messaggi avviene ogni 30 secondi.
È un protocollo IGP di tipo Link State Packet e rappresenta attualmente lo stato dell'arte.
È il protocollo più promettente per TCP/IP e si propone di raggiungere alcuni ambiziosi obiettivi:
Instradamento del tipo di servizio: i gestori della rete possono configurare differenti percorsi in base al tipo di servizio; per esempio possono riservare un canale ad alta velocità per applicazioni di tipo multimediale.
Bilanciamento del carico: se più percorsi verso una stessa destinazione hanno il medesimo costo, OSPF distribuisce il traffico equamente su tutti i percorsi.
Il concetto di gerarchia: per consentire una più facile manutenzione e gestione della rete, OSPF consente di ripartire la rete stessa in più aree, ognuna di esse autonoma dalle altre. La topologia di un'area è sconosciuta alle altre aree, vale a dire che ciascun gruppo mantiene la capacità di modificare indipendentemente la topologia interna, senza provocare aggiornamenti di tabelle di instradamento.
La maggiorparte dei sistemi operativi gestiscono la multiprogrammazione, cioè consentono a più programmi applicativi di essere eseguiti contemporaneamente.
Sembra naturale dire che un processo è la destinazione finale di un messaggio. Tuttavia, in un host, i processi vengono creati e distrutti automaticamente e un host trasmittente non ha strumenti per identificare i processi attivi su un'altra macchina. Inoltre, un processo dovrebbe informare l'host remoto di essere attivo.
Bisogna, quindi, fare in modo che la destinazione di un datagramma sia identificata in base alla funzione che implementa.
Un insieme di punti astratti, le cosiddette porte del protocollo, ciascuno identificato da un numero intero positivo, può fungere da interfaccia tra le applicazioni e l'informazione giunta dalla rete. I messaggi conterranno, quindi, un n° di porta di destinazione ed uno di provenienza per identificare rispettivamente l'applicazione a cui sono indirizzati i dati e l'applicazione a cui indirizzare un'eventuale risposta.
I protocolli che usano questo stratagemma nel livello trasporto sono due, UDP e TCP.
L'UDP fornisce un servizio di consegna non affidabile e senza connessione, poiché si limita a fornire ai programmi applicativi un insieme di numeri di porta, in modo che possano comunicare appoggiandosi interamente al protocollo IP. I messaggi UDP possono, quindi, essere persi, duplicati, arrivare fuori ordine o arrivare più velocemente di quanto il destinatario possa elaborarli.
Il livello IP è responsabile solamente del trasferimento dei dati tra una coppia di host, il livello UDP è responsabile soltanto della differenziazione tra varie provenienze o destinazioni all'interno di un singolo host.
Ciascuna applicazione che si appoggia ad UDP, per poter trasmettere un messaggio, deve negoziare dapprima un n° di porta. Una porta può essere immaginata come un buffer, dove l'UDP accoda i messaggi che arrivano. Se nel messaggio è specificato un n° di porta non esistente, l'UDP invia all'host trasmittente un messaggio ICMP di porta irraggiungibile.
Vi sono essenzialmente due metodi per assegnare un n° di porta. Il primo è quello dell'assegnazione universale: a priori una autorità centrale assegna questi numeri a seconda delle necessità, dopodichè il software viene costruito di conseguenza.
Il secondo si basa su un legame dinamico: le porte non sono globalmente note e sono assegnate dal software di rete. Per conoscere un numero di porta di un applicativo remoto sarà necessario inviare un'opportuna richiesta.
Nel TCP/IP è stato adottato un metodo ibrido: alcuni numeri di porta sono già assegnati e sono detti ben noti, la maggiorparte, invece, sono lasciati a disposizione dei programmi.
Si riportano il formato della trama e la lista dei n° di porta ben noti.
UDP: formato della trama
Il TCP è un protocollo di comunicazione di tipo connection oriented (consegna affidabile), con un servizio full duplex (bidirezionale contemporaneo), con conferma di ricezione e controllo di flusso.
La consegna affidabile implica che la stream di dati, inviata dal TCP trasmettitore ai protocolli inferiori, sia esattamente uguale a quella che i protocolli inferiori passano al TCP nella macchina ricevitore. Per stream si intende una sequenza di bit suddivisa in ottetti (byte).
Inoltre, per poter garantire l'affidabilità, due host che vogliono comunicare prima di tutto devono stabilire una connessione virtuale. È un po' come una telefonata, dove prima di poter parlare bisogna stabilire una connessione che, in questo caso, è un circuito hardware dedicato. La connessione dedicata in Internet è soltanto un'illusione abilmente provocata dal TCP, poiché fra trasmettitore e ricevitore la maggiorparte delle volte ci sono numerosi gateway ed il percorso dei datagrammi può variare durante la trasmissione.
Abbiamo visto che in UDP una connessione tra due host era identificata dai numeri di porta di provenienza e destinazione, con i quali è consentito avere più applicazioni attive contemporaneamente, ma ognuna identificata da un numero di porta differente.
In TCP una connessione è identificata da una coppia di punti terminali, a loro volta costituiti da una coppia di numeri, indirizzo IP host e porta di protocollo (Es.: [194.20.32.45, 25]). Quindi, una connessione identifica univocamente i due host in comunicazione e le rispettive applicazioni.
Come l'UDP, la connessione è bufferizzata, vale a dire i pacchetti sono accodati e trasmessi appena possibile, mentre la differenza fondamentale con UDP è che una porta può essere utilizzata contemporaneamente in due connessioni differenti, con due host differenti. Questo concetto è alla base del servizio di posta elettronica, dove più utenti spediscono i loro messaggi al servizio di E-Mail identificato sul server dallo stesso n° di porta (SMTP 25) per ogni connessione.
L'affidabilità è, inoltre, garantita anche dall'utilizzo di una tecnica nota come riscontro positivo con ritrasmissione. In poche parole l'host ricevente invia un messaggio (Acknowledgements) al trasmettitore per indicare che ha ricevuto correttamente la stream di dati.
Prima di parlarne adeguatamente, vediamo come TCP gestisce la stream di dati in trasmissione.
Se un acknowledgement fosse richiesto ad ogni trasmissione di un frame, la rete sarà completamente inoperosa quando il trasmettitore ritarda l'invio di un ulteriore pacchetto, finché non ha ricevuto un riscontro del pacchetto precedente. Un protocollo di questo tipo spreca una sostanziale quantità di larghezza di banda.
Il TCP utilizza un metodo, noto come finestra scorrevole, che ottimizza e rende più efficiente la trasmissione, poiché sfrutta meglio la larghezza di banda disponibile.
Consideriamo una stream di ottetti da trasmettere come in figura. Ogni numero individua un ottetto. Un pacchetto trasmesso può contenere anche più di un ottetto. La porzione di dati trasmessa è chiamata segmento.
Il meccanismo con cui l'host trasmittente associa un riscontro alla relativa porzione di dati inviata verrà spiegato in seguito quando descriverò il formato della trama ed i relativi campi.
Finestra scorrevole in TCP:
a) Inizio
trasmissione, b) ricezione Ack 1 2 e 3, c) flusso di datagrammi sulla
linea
Il TCP trasmittente sovrappone una piccola finestra alla sequenza ed invia tutti i pacchetti all'interno di essa. Quando riceve il primo riscontro, la finestra scorre in avanti ed il TCP invia il pacchetto successivo. Fintanto che arrivano i riscontri la finestra scorre.
Le prestazioni di un protocollo a finestra scorrevole dipendono dalle dimensioni della finestra stessa e dalla velocità con cui la rete accetta i datagrammi. Più la finestra è larga, più la banda è utilizzata ed il troughput elevato.
Il ricevitore gestisce una finestra simile, accettando e riscontrando i pacchetti che arrivano.
La dimensione della finestra è variabile. Ogni riscontro, che specifica il n° di ottetti ricevuti, contiene un annuncio di finestra che specifica il n° di ottetti di dati che il ricevitore è pronto ad accettare.
L'annuncio di finestra è come un'indicazione sulla quantità di buffer libero del ricevitore e fornisce anche un controllo di flusso. Il trasmettitore, infatti, regolerà la dimensione della finestra ogni volta che riceve un riscontro, fino a sospendere la trasmissione di dati se il ricevitore è congestionato.
Formato della trama TCP
Il campo Numero Sequenziale indica la posizione del primo
byte nel campo dati del messaggio.
Il campo Numero Riscontro
identifica il numero dell'ottetto che la provenienza si aspetta di
ricevere.
Ricordo che un datagramma può contenere più
di un ottetto. Allora il n° sequenziale si riferisce all'ultimo
ottetto contenuto nel campo Dati, mentre il numero riscontro
specifica il n° sequenziale del prossimo ottetto che il
ricevitore si aspetta di ricevere.
Il campo HLEN(data
offset) contiene un numero intero che specifica la lunghezza del
datagramma, misurata in multipli di 32 bit.
Il campo Riservato
non è attualmente utilizzato.
Il campo Bit di Codice
serve per determinare lo scopo ed il contenuto del pacchetto.
Infatti, lo stesso frame è utilizzato per trasmettere i dati,
per trasmettere un riscontro, per stabilire o chiudere una
connessione. Inoltre, non sono mutuamente esclusivi, poiché,
per esempio, un frame può essere un riscontro pur trasmettendo
dei dati. Questa funzionalità del software TCP viene
denominata PiggyBacking.
I 6 bit, quando posti ad uno, dicono come
interpretare gli altri campi in base alla tabella.
Bit (da sinistra a destra) |
Significato |
URG |
Il campo puntatore urgente è valido |
ACK |
Il campo riscontro è valido |
PSH |
Questo segmento richiede una spinta |
RST |
Effettua il reset di una connessione |
SYN |
Sincronizza i numeri di sequenza |
FIN |
Il trasmettitore ha raggiunto la fine della stream |
Bit di Codice in TCP
Il campo Puntatore Urgente ed il relativo bit di
codice URG servono per trasmettere dati che non possono
aspettare in coda di essere trasmessi, quali ad esempio una sequenza
che fa abortire il programma sull'host remoto. È necessario
che questi dati prevarichino gli altri, altrimenti non si potrebbe
interrompere un programma che funziona in maniera non corretta.
Quando il bit URG è attivato, il puntatore
specifica la posizione della fine dei dati urgenti nella finestra.
Il
bit PSH serve per forzare la consegna dei dati. Il TCP, infatti,
prima di trasmettere un segmento, aspetta che il buffer si sia
riempito. Se i dati non sono sufficienti, ma necessitano ugualmente
di essere trasferiti, il programma applicativo pone ad uno tale
bit.
Il campo SYN serve per stabilire una connessione. La sequenza
di messaggi per attivarla è illustrata nella figura n°
6.9.
Attivazione di una connessione
Il bit FIN serve invece per chiudere una connessione al termine della stream di dati. La figura 6.10 illustra la sequenza di messaggi necessaria.
Chiusura di una connessione
Il bit RST, se posto ad uno, fa in modo che la connessione si
interrompa immediatamente, senza la spedizione di ulteriori messaggi.
Il campo Finestra contiene un intero senza segno di 32 bit
ed indica la quantità di dati che il TCP ricevente è
disposto ad accettare.
Il campo Opzioni è
facoltativo. Viene utilizzato ,ad esempio, per concordare con l'host
remoto la dimensione massima del segmento MSS (Maximum Segment Size).
Il Simple Network Management Protocol (SNMP) è un
protocollo gestionale che consente agli amministratori di rete di
controllare l'operato dei gateway e degli host. I dati SNMP vengono
incapsulati in un frame UDP/IP.
La caratteristica principale di
questo protocollo è che utilizza soltanto due comandi,
prelievo o deposito di un valore in un elemento dati. Tutte le altre
operazioni sono effetti collaterali di questi due comandi.
Ad
esempio, per effettuare il reboot di un host remoto, si può
definire un elemento dati che gestisce il reboot periodico
dell'host., al quale gli si può passare anche il valore
zero.
Comunque, l'SNMP ha un interfaccia software user friendly
che può esprimere questi comandi in maniera imperativa
(reboot).
X-Window è un software di rete client-server che permette di presentare e gestire l'output in display a mappa di bit. Il proprio display sarà suddiviso in finestre che contengono l'output in formato grafico o testuale.
Telnet è un protocollo che permette ad un utente di
collegarsi tramite un elaboratore ad un qualsiasi altro elaboratore
remoto connesso alla rete.
La connessione viene attivata digitando
telnet seguito dal nome o indirizzo IP dell'elaboratore remoto.
I
comandi vengono passati direttamente all'elaboratore remoto, mentre
l'output viene visualizzato sullo schermo locale.
Ogni programma
operativo eseguito tramite Telnet diventa un client che stabilisce
una connessione TCP con il server a cui ci si è
collegati.
Rlogin è un protocollo con funzionalità
analoghe, ma è superiore a Telnet, poiché passa alla
macchina remota anche le informazioni sull'ambiente dell'utente e sul
tipo di terminale che si sta utilizzando. Ad esempio, se un utente ha
due account (login e password) su macchine diverse, con Rlogin è
possibile collegarsi dall'una all'altra senza digitare la password.
RSH ed REXEC chiamano un interprete di comandi su una macchina
Unix e vi passano l'argomento della chiamata. Quindi, digitando rsh,
seguito dal nome della macchina remota e da un comando (ad esempio
"ls"), il comando verrà eseguito sulla macchina
remota, tralasciando completamente la procedura di login.
Rwho
permette di visualizzare sul proprio schermo quali e quanti utenti
sono collegati ad un elaboratore connesso in rete.
FTP (File Transfer Process) è un protocollo che consente di
visualizzare le directory ed il loro contenuto di un elaboratore
remoto, come pure di trasferire i file in entrambe le direzioni. La
sicurezza è gestita chiedendo all'utente di fornire uno
username ed una password. È possibile collegarsi in modo
anonimo, ove consentito dai gestori locali della rete, digitando come
username la parola anonymous e come password il proprio
account username@nome_host_locale.
FTP permette
anche di specificare il tipo ed il formato dei dati da trasferire. Ad
esempio, si può specificare se un file è binario o se
contiene testo ed in quest'ultimo caso se la codifica è ASCII
o EBCDIC.
FTP si appoggia a l protocollo TCP.
TFTP (Trivial
File Transfer Process) è un protocollo molto più
semplice di FTP. Molte applicazioni non necessitano delle
funzionalità di FTP e si appoggiano a TFTP che limita le
operazioni a semplici trasferimenti di file, senza bisogno di
autenticazione ed appoggiandosi ad UDP/IP.
Network File System fornisce un accesso in linea, trasparente ed
integrato, al file condiviso. Consente a più elaboratori di
condividere lo stesso file system messo a disposizione da un server
remoto. RPC e XDR sono moduli software indipendenti, facenti parte
del protocollo NFS, che forniscono dei meccanismi che i programmatori
possono utilizzare per creare programmi distribuiti.
RPC (Remote
Procedure Call) consente ad un programma client di chiamare ed
eseguire una procedura remota gestita da un programma server.
Il
programmatore deve definire alcune procedure come remote, obbligando
il compilatore ad incorporare il codice RPC.
RPC, al momento
dell'esecuzione, raccoglie automaticamente i valori degli argomenti e
li passa alla procedura remota.
XDR (eXternal Data Representation)
consente di passare i dati fra macchine eterogenee, senza bisogno che
il programmatore scriva procedure che effettuino la conversione dei
formati, rendendo così quest'ultima automatica.
Il Simple Mail Transfer Protocol è probabilmente
l'applicativo più importante del TCP/IP. Esso permette di
inviare posta elettronica agli utenti della rete.
Ogni utente è
identificato da un codice NomeUtente@NomeElaboratore che rappresenta
una vera e propria cassetta postale. Il sistema postale memorizza i
dati in arrivo ed in partenza, rendendo possibile il trasferimento in
background fra il client ed il server.