|
|
Tutorial 2 Dopo aver parlato di Internet in generale, in questa lezione approfondiamo il funzionamento delle reti. I protocolli I protocolli sono la parte più astratta di Internet. Essi sono gli standard che definiscono il modo in cui i computer comunicano l'un l'altro. Sebbene i protocolli esistano solo sulla carta, e quindi possano sembrare piuttosto astratti (a differenza di un router o di un server, non si può toccare un protocollo), sono essenziali per Internet, poiché consentono a milioni di macchine nel mondo di comunicare e scambiare dati. Infatti, prodotti diversi di differenti venditori sono in grado di comunicare perché si conformano agli stessi standard. Uno degli aspetti più interessanti di Internet, infatti, è che la comunicazione tra i componenti è garantita dal protocollo e non dalla marca del computer o del sistema operativo che si sta usando. Come si è detto, il protocollo TCP/IP è lo standard di comunicazione che tutti i computer collegati a Internet devono usare. Oltre a TCP/IP, vi sono i protocolli applicativi come HTTP (Hypertext Transport Protocol) per il World Wide Web, NNTP (Network News Transport Protocol) per Usenet, SMTP (Simple Mail Transport Protocol) per la posta elettronica di cui parleremo nel seguito del corso. Questi protocolli sono posti "sopra" TCP nel senso che definiscono come dev'essere fatto il contenuto dei pacchetti TCP a seconda della specifica applicazione. Tutti questi protocolli sono incorporati nel software del vostro computer, o meglio rispettati da chi lo scrive. Che si tratti di Netscape Navigator, di Microsoft Explorer o di Windows 95, chi ha scritto i programmi ha dovuto seguire le regole del protocollo in questione. Come funzionano le reti In questo paragrafo diamo qualche dettaglio su come colloquiano a distanza i calcolatori elettronici. A differenza del resto della lezione, queste informazioni non sono indispensabili per usare Internet a livello personale; ma chi si occupa della rete per conto di unorganizzazione, Ente o azienda che sia, farà bene a dare almeno una lettura ai paragrafi che seguono. Anche se lanalogia con il telefono fatta nel tutorial precedente ha chiarito un po le idee, infatti, non bisogna portare troppo avanti il paragone: la trasmissione dei dati su una rete di calcolatori presenta alcune importanti differenze rispetto a unusuale comunicazione telefonica. Quando si inizia una conversazione telefonica, le apparecchiature di gestione della rete si incaricano di realizzare un collegamento elettrico "ad hoc" tra trasmittente e ricevente tramite un'opportuna commutazione elettromeccanica degli interruttori delle centrali di smistamento. Una volta, come si vede nei vecchi film di Hollywood, questa funzione era svolta da operatori umani che realizzavano manualmente la commutazione inserendo uno spinotto nella sede opportuna. In seguito, per questo scopo vennero realizzati commutatori elettromeccanici e, più recentemente, commutatori elettronici. Comunque, il colloquio telefonico è basato sull'esistenza di un cammino che collega elettricamente trasmittente e ricevente. Tale cammino elettrico viene realizzato per ogni singola chiamata telefonica e cessa di esistere al termine della conversazione. Questo metodo di collegamento, chiamato commutazione di circuito (circuit switching), è caratterizzato dall'elevato tempo di attesa che risulta necessario per la realizzazione della connessione, una caratteristica che lo rende poco adatto alle reti di calcolatori. D'altro canto, una volta che la connessione è stabilita, la comunicazione può aver luogo alla massima velocità di trasmissione consentita dalla linea, senza problemi di traffico. La tecnica più largamente usata nelle reti di trasmissione dati come Internet è invece è quella detta a commutazione di pacchetto (packet switching) . In questo caso, come si è detto, il messaggio viene diviso in blocchi (i pacchetti) di dimensioni prefissate che costituiscono l'unità di trasmissione. Con questo metodo, nessun messaggio può monopolizzare la linea di comunicazione poiché è possibile intervallare pacchetti appartenenti a messaggi diversi, ottimizzando così l'utilizzo della linea. Inoltre i pacchetti possono venire facilmente elaborati nelle stazioni intermedie per consentire le conversioni di codice che si rendono talvolta necessarie nelle reti di calcolatori. E' per questo motivo che si parla di cammino virtuale tra trasmittente e ricevente, anche se i singoli pacchetti possono seguire percorsi fisicamente diversi. Nel caso si debba realizzare una normale conversazione telefonica utilizzando la commutazione a pacchetto, come accade nel "telefono via Internet" o Internet Phone, ci si trova di fronte al problema di realizzare la trasmissione dei pacchetti rispettando l'ordine di invio e di garantire il loro recapito entro un tempo prefissato ai fini di consentire l'interattività trasmittente-ricevente necessaria per questo tipo di comunicazione. Purtroppo, come abbiamo visto nella lezione precedente, il tempo di recapito dei pacchetti è in genere influenzato dalle condizioni di carico della rete, e quindi le reti a pacchetto sono cattivi vettori per il traffico telefonico. La seconda tecnica in uso nelle connessioni tra calcolatori, è la commutazione di messaggio (message switching). Questa tecnica, chiamata anche store and forward , non prevede che il trasmittente sia connesso direttamente al ricevente, ma piuttosto che si limiti ad affidare il messaggio al più vicino centro di smistamento. Questo lo affiderà ad un altro e così via fino a che l'ultimo non lo consegnerà al destinatario. Si noti che la necessità di molteplici memorizzazioni intermedie dell'intero messaggio pone dei seri problemi alla realizzazione pratica di questo tipo di rete. In pratica questa tecnica è oggi d'attualità soprattutto per la realizzazione dei sistemi di posta elettronica su scala internazionale ed intercontinentale. Queste rapide considerazioni dovrebbero già aver
reso lidea che i protocolli di tramissione sono molti e di tipi diversi. Infatti
esistono protocolli che stabiliscono caratteristiche fisiche della trasmissione a livello
di segnali elettrici, altri che riguardano la struttura dei pacchetti, altri ancora che
definiscono proprietà di "alto livello" del messaggio come il modo di
specificare il destinatario ed il mittente. Per fortuna, nella pratica è possibile
definire il protocollo di un dato livello in modo pressocché indipendente da come sono
realizzati i livelli sottostanti. Grazie a questa indipendenza, lo stesso protocollo che
definisce la struttura dei pacchetti può appoggiarsi su protocolli fisici diversi
orientati ai diversi mezzi di trasmissione esistenti come il cavo coassiale, il doppino
telefonico o i cavi in fibra ottica. La struttura a livelli dei protocolli di trasmissione
è descritta in dettaglio nellapprofondimento seguente. **Approfondimento tecnico** Il modello ISO-OSI L'ISO, l'organismo internazionale (International Standards Organization) incaricato della standardizzazione in campo informatico, ha messo a punto un modello standard largamente accettato che viene chiamato OSI (Open System Interconnection) e definisce sette strati di protocolli. Per meglio capire la natura di un protocollo multistrato, facciamo l'esempio dell'usuale servizio postale. Supponiamo che un uomo d'affari italiano voglia inviare una missiva ad un collega cinese. Dopo aver scritto il messaggio in italiano, lo passerà all'ufficio esteri della sua azienda. Dopo un certo tempo il nostro uomo d'affari troverà sulla sua scrivania un foglio con la risposta in italiano. E' chiaro che per la realizzazione di questa comunicazione apparentemente diretta sono stati necessari diversi interventi. In primo luogo la lettera è stata tradotta in inglese; poi il traduttore ha passato la lettera tradotta a una segretaria che provvede alla spedizione. Tramite gli enti postali interessati, la lettera raggiunge poi l'azienda cinese, dove percorre una analoga trafila a ritroso, passando inizialmente per le mani di una segretaria, poi in quelle di un traduttore dall'inglese al cinese per giungere infine al destinatario. La risposta dell'uomo d'affari cinese seguirà poi lo stesso percorso per raggiungere l'azienda italiana. E' però importante sottolineare alcune caratteristiche che rendono il nostro esempio effettivamente analogo a un protocollo multilivello. Innanzitutto, si noti che i due corrispondenti possono tranquillamente ignorare quale lingua verrà utilizzata dai traduttori. Questi a loro volta non sono interessati a sapere se la missiva verrà inviata per posta o tramite un corriere. La stessa segretaria che provvede all'invio non è poi tenuta a sapere se il trasporto del plico dall'Italia al Giappone avverrà lungo la rotta polare o lungo quella diretta. In altre parole, le caratteristiche di un livello del protocollo possono cambiare, almeno in linea di principio, all'insaputa degli altri livelli. Inoltre, mentre allo strato più basso viene realizzata una comunicazione fisica (il viaggio della lettera) ad ognuno dei livelli superiori esiste una comunicazione apparentemente diretta, ma in realtà basata sui livelli sottostanti. Questo tipo di comunicazione è chiamata connessione logica. La specifica ISO per la connessione tra sistemi aperti definisce ben sette di questi strati, di cui il primo è fisico e gli altri realizzano sei connessioni logiche. Si osservi che l'ISO non ha affatto definito i contenuti dei protocolli per ogni livello (la cui standardizzazione è compito di altri enti ), ma ha stabilito quali sono le grandezze che, per ogni strato, uno standard di comunicazione deve fissare. Vediamone una rassegna cominciando dal livello più alto. I sette livelli ISO/OSI. Lo strato di applicazione (application layer) è completamente definito dall'utente finale, poichè è composto dai programmi che hanno l'esigenza di accedere alla rete, ad esempio per trasferire un file o un messaggio di posta elettronica da una macchina allaltra. Di questi programmi parleremo in dettaglio nei prossimi paragrafi; osservate però che anche a questo livello si può parlare di standard. Ad esempio, una specifica categoria di programmi utente può stabilire le regole da rispettare per effettuare la comunicazione; si pensi alle applicazioni usate in ambiente finanziario, che accedono alla rete per sapere quotazioni e dati delle Borse mondiali; questi programmi avranno una fase iniziale standard per farsi riconoscere e accreditare dai computer del centro finanziario a cui si rivolgono. Abbiamo poi lo strato di presentazione (presentation layer) che (come i traduttori del nostro esempio) si occupa della conversione tra i diversi codici per la rappresentazione dei caratteri, ma specialmente di tutte le funzioni di formattazione dei testi e di gestione dei terminali. Lo strato di sessione (session layer) si occupa di identificare l'utente del programma che desidera accedere alla rete, per essere sicuri che ne abbia lautorità. Lo strato di trasporto (transport layer) è quello divide il messaggio che proviene dallo strato superiore (il file, o il messaggio di posta elettronica) in porzioni più piccole da trasmettere separatamente (i pacchetti di cui abbiamo parlato in precedenza). A differenza di quanto avviene negli strati superiori, il software dello strato di trasporto può gestire contemporaneamente più messaggi provenienti da sessioni diverse in corso sullo stesso computer. Sarà quindi sua cura trasferire nei singoli pacchetti le informazioni relative alla sessione cui i pacchetti appartengono e il loro numero d'ordine all'interno della propria sessione. Questo numero consentirà allo strato di trasporto del computer destinatario di ricostruire correttamente i messaggi a prescindere dall'ordine d'arrivo dei pacchetti. L'insieme dei tre restanti strati viene spesso chiamato subnet ed è realizzato in parte sotto forma di software, in parte di hardware. Vediamo gli strati OSI da cui sono costituite le subnet. Lo strato di rete (network layer) gestisce l'instradamento dei pacchetti creati da quello di trasporto e assicura la correttezza della comunicazione richiedendo la ritrasmissione dei pacchetti eventualmente danneggiati. Lo strato di data link include i pacchetti in strutture più lunghi dette frame. I frame comprendono numerosi campi per le informazioni di controllo. Inoltre, il messaggio viene completato con nuovi frame (frame di acknowledgment) che contengono solo informazioni di servizio, ad esempio per la conferma della avvenuta ricezione degli altri frame. Infine lo strato fisico (physical layer) definisce un insieme di regole relative all'hardware di comunicazione come ad esempio le tensioni e le correnti usate, le regole per stabilire il primo contatto (handshaking) e la direzionalità della comunicazione. E' anche importante dare un'idea di come, nella maggior parte dei casi, le funzioni hardware e software sono ripartite tra i livelli ISO/OSI. In modo del tutto informale, possiamo dire che i due livelli più bassi sono decisamente legati all'aspetto circuitale. Le funzioni di livello superiore (rete e trasporto) sono solitamente realizzate via software come parte del sistema operativo installato su ciascun computer, mentre i livelli superiori (sessione e presentazione) sono realizzati da programmi applicativi anchessi forniti con il sistema operativo. Infine il livello di applicazione è costituito dal singolo programma utente che deve comunicare facendo uso della rete. **Fine Approfondimento** Le reti locali Nei decenni passati i computer sono entrati in tutte le aziende, non solo come risorse di calcolo, ma come strumento per la gestione dell'informazione. In un primo tempo il modello di gran lunga prevalente fu larchitettura a stella, ovvero un grande calcolatore (mainframe) al quale accedevano numerosi utenti con esigenze diverse, con la modalità operativa a partizione di tempo. La caratteristica di questa tecnica è che gli utenti si alternano nel possesso della macchina così rapidamente che ciascuno di essi ha l'illusione di esserne l'unico proprietario.
Negli ultimi anni, la tendenza al ribasso dei costi delle risorse di calcolo e delle memorie, contrapposta ad una sostanziale stabilità dei costi dei canali di comunicazione, ha fatto diventare conveniente distribuire le risorse di calcolo presso i singoli utenti dando a ciascuno di essi un personal computer in sostituzione del terminale. La necessità sempre presente di consentire la comunicazione tra applicazioni in esecuzione su macchine diverse ha fatto nascere il problema di collegare questi personal tra di loro, formando delle reti locali di calcolatori. E proprio linterconnessione di tutte queste reti locali a livello mondiale a costituire il "fenomeno" Internet. Architetture di rete. Le reti locali si presentano con una gran varietà di forme, ciascuna delle quali può essere realizzata con diversi tipi di linea. La caratteristica comune di tutte queste reti è che al loro interno non cè bisogno di instradamento: tutti i messaggi generati da ciascuna macchina arruvano a tutte le macchine della rete locale. Ognuna di esse decide poi se il messaggio la riguarda, e lo legge oppure lo scarta. La topologia che inizialmente ebbe il sopravvento fu quella a stella, direttamente derivata da quella adottata per i mainframe. In una LAN a stella tutti i messaggi devono passare per un computer centrale che controlla il flusso dei dati. Per ovvi motivi, in una rete a stella è facile l'aggiunta e la rimozione di computer periferici. D'altra parte è altrettanto ovvio che in una rete a stella se il computer centrale smette di funzionare la intera rete (come tale) diviene inutilizzabile. Un'architettura oggi assai più diffusa è quella a bus.
Con questa topologia i computer sono tutti connessi a un tronco di linea principale, detta appunto bus, che può essere realizzata con un cavo coassiale o su fibre ottiche. Questo tipo di rete è caratterizzato dal fatto che i computer sono paritetici e quindi anche se uno o più di essi si guastano, la rete continua a funzionare. Oggi le reti a bus, soprattutto in ambiente dufficio, sono spesso realizzate collegando ciascun computer mediante un filo in doppino di rame a un apposito scatolotto, detto hub di interconnessione o semplicemente hub. La struttura che ne risulta sembra una stella, ma lo hub svolge la funzione del bus condiviso. Una terza topologia di rete, diffusa soprattutto in ambiente industriale, è quella ad anello.
in cui i computer sono connessi ad un bus richiuso su se stesso. In questo tipo di rete i messaggi passano da un computer all'altro seguendo la stessa direzione rotatoria. Il problema fondamentale di una rete ad anello è quello di assicurare la stessa possibilità di accesso al bus a tutti i computer. Per tale motivo le reti ad anello vengono utilizzate soltanto con un particolare tipo di protocollo a token di cui ci occuperemo tra breve. Anche la rete ad anello presenta una elevata resistenza ai guasti, ed inoltre diverse reti di questo tipo possono facilmente collegarsi tra loro. I livelli di rete e di trasporto. Supponiamo che abbiate appena acquistato uno hub per il vostro ufficio. Se allo hub colleghiamo più computer che desiderano colloquiare tra di loro sarà necessario che il dispositivo sappia evitare la sovrapposizione delle comunicazioni (collisione). Vi sono due schemi fondamentali di
"regolamentazione del traffico" che consentono di evitare le collisioni: il token
passing, e il CSMA/CD (Carrier Sense Multiple Access/Collision Detection ),
caratteristico delle diffusissime reti Ethernet. Quando una stazione desidera trasmettere dà liberamente inizio alla trasmissione, dopo di che si pone in ascolto sulla linea. Se rileva che il pacchetto in circolazione è stato danneggiato da una collisione, attende un intervallo di tempo casuale e poi riprova. In questa forma l'algoritmo, purché perfettamente funzionante, ha bassa efficienza poiché una stazione può iniziare a trasmettere quando un'altra ha quasi finito di scrivere il suo pacchetto di dati sulla linea. Ma il problema è facilmente risolvibile: le prestazioni possono venire migliorate semplicemente facendo sì che la trasmissione possa avere inizio soltanto se la linea risulta libera ed introducendo l'ascolto (per rilevare le collisioni) già durante la trasmissione. Circuiti virtuali e datagram Il complesso dei tre livelli di subnet costituisce, nella grande maggioranza dei casi, il prodotto effettivamente offerto dai costruttori di reti locali. In genere vi sono due tipi fondamentali di comunicazione consentiti dalle subnet: il circuito virtuale, ed il datagram. Nel primo caso, quello del TCP/IP propriamente detto, il programma che accede alla rete può utilizzare un canale di comunicazione "tipo linea telefonica", che gli sembrerà esente da errori. Anche se i dati viaggeranno in realtà suddivisi in pacchetti, per l'applicazione si tratterà di un flusso continuo di dati in viaggio sul canale. Sarà compito dell'applicazione eseguire le operazioni iniziali necessarie ad aprire il canale stesso. Questo schema riproduce loperazione di "fare il numero" delle normali chiamate telefoniche. Vediamo come funziona. Due programmi, per poter comunicare tra di loro inviandosi reciprocamente dei dati devono prima sincronizzarsi, cioè "mettersi daccordo". TCP/IP prevede la seguente sincronizzazione, detta anche three way handshake: Chi prende liniziativa della connessione, ovvero il client, invia un pacchetto convenzionale, il SYN packet, che dice al suo interlocutore, il server: "Voglio comunicare con te". Il server risponde al client: "Ok! Aspetto conferma" e il client risponde al server: "Confermo!". A questo punto inizia la comunicazione vera e propria. Questa sincronizzazione viene fatta automaticamente dai programmi e in maniera trasparente agli utenti. Nel caso del datagram invece, il messaggio è ripartito su più blocchi ciascuno dei quali è consegnato separatamente al destinatario, senza che sia stat stabilita alcuna connessione. E nel caso di questo tipo di comunicazioni, anchesse possibili in ambito TCP/IP con il nome UDP (User Datagram Protocol) che linstradamento viene fatto dai router pacchetto per pacchetto. Si noti che, mentre il circuito virtuale simula un canale esente da errori, poichè la consegna di ogni pacchetto è confermata dal destinatario, la consegna del datagram non è affatto garantita. Questo particolare rende ancora più credibile l'analogia tra questo tipo di servizio e l'usuale servizio postale. Le inter-reti e linstradamento Supponiamo ora di avere tante reti locali sparse per il mondo, ognuna con la sua subnet, e di volerle collegare tra loro tramite router. In questo paragrafo ci occuperemo dei meccanismi che consentono ai router di risolvere il fondamentale problema che riguarda l'inoltro di un messaggio generato su una certa rete al destinatario posto su unaltra. Sulla singola rete locale il problema non si pone, visto che la comunicazione è di tipo broadcast , cioè ogni pacchetti viene inviato a tutti i computer della rete, ciascuno dei quali individuà le comunicazioni a lui dirette grazie all'indirizzo contenuto nel messaggio e scarta le altre. Per le inter-reti ottenute collegando varie reti locali, così come la stessa Internet, questo meccanismo non è utilizzabile, visto che richiederebbe di inviare ogni pacchetto su tutte le reti componenti, con uno spreco inaccettabile di tempo. Dato lindirizzo di un computer destinatario, bisogna quindi saper definire un cammino sulla rete tra il computer che ha originato la comunicazione e il destinatario. Si potrebbe pensare di scegliere questo cammino (definito dalla sequenza di router che i dati dovranno attraversare nel loro percorso) una volta per tutte all'inizio della comunicazione. Ciascun router intermedio deve inoltrare il pacchetto al router che lo segue lungo il cammino. Ma come fa a sapere qual è il router giusto? Per questo, come abbiamo visto, si usano le tabelle di instradamento, che sono memorizzate in file residenti sui dischi di ciascun router e vengono ovviamente aggiornate ad intervalli regolari. La tabella di ciascun router contiene in genere tante righe quante sono le reti raggiungibili da quel router, insieme con lindicazione, per ciascuna di esse, del router di inoltro. Ma non sempre questo basta, poichè non è detto che per raggiungere una certa rete si debba percorrere sempre lo stesso cammino, e quindi non è detto che il router di inoltro verso un destinatario resti sempre lo stesso. Il traffico su una grande rete di calcolatori come Internet è, per sua natura, ad ondate. Quindi è normale che una porzione della rete sia pesantemente utilizzata per un po, magari per la trasmissione di un grosso archivio e poi resti inutilizzata per ore. Ciò rende necessario variare i percorsi dei dati a seconda delle condizioni di traffico della rete. A questo proposito va ribadita un'importante differenza tra datagram e circuito virtuale. Nel primo schema di comunicazione la decisione relativa al computer di inoltro può essere presa pacchetto per pacchetto, mentre nel caso dei circuiti virtuali questa decisione vale per l'intera durata della comunicazione. Per quanto riguarda l'affidabilità dei router, in caso di guasto è importante poter utilizzare percorsi alternativi. In termini generali si può quindi fare una distinzione tra algoritmi di inoltro adattativi e non. I primi avranno la capacità di variare il computer di inoltro in modo dinamico sulla base delle condizioni della rete. Allinizio del paragrafo, descrivendo le tabelle di inoltro, abbiamo implicitamente specificato un metodo non adattivo, che viene spesso chiamato static inoltro. Si potrebbe pensare anche a tecniche di instradamento non adattative che non richiedano la specificazione delle tabelle di inoltro. A titolo di esempio consideriamo l'algoritmo detto random walk. Secondo questo algoritmo un computer delle rete, ricevendo un pacchetto non diretto a lui, si limita a scegliere a caso una linea (esclusa ovviamente quella di arrivo) su cui inoltrarlo. Benché questi algoritmi abbiano lo spiacevole effetto di affollare indebitamente le linee, sono tuttavia notevolmente "robusti" nel senso che garantiscono un'elevata probabilità di recapito del messaggio anche nel caso di interruzione di alcuni cammini. Un altro esempio tipico è lo schema di hot potato (patata bollente!) secondo il quale ciascun computer, ricevendo un pacchetto, si limita ad inoltrarlo sulla linea per cui è minimo il numero di pacchetti in coda per essere trasmessi. Si osservi che, analogamente a quanto accade con l'algoritmo di random walk, usando la patata bollente non cè nessun tipo di controllo su "dove" porti la linea prescelta; anche in questo caso, quindi, si suppone un elevato grado di interconnessione della rete. Su Internet, si usano protocolli di inoltro adattativi: i principali provider Internet usano un protocollo chiamato ISIS (Intermediate System-Intermediate System) all'interno delle loro reti. Altri ISP e aziende usano un diverso schema chiamato OSPF (Open Shortest Path First). Quando i dati vengono scambiati da un ISP a un altro, viene usato il BGP (Border Gateway Protocol). La descrizione di questi protocolli non è difficile, ma richiede un certo spazio e non verrà pertanto affrontata in questo corso. I livelli superiori di ISO/OSI. A differenza di quanto accade per gli strati inferiori del modello ISO/OSI, gli strati superiori presentano un basso grado di standardizzazione. Ciò avviene perché questi livelli riguardano i programmi che usano la rete e programmi scritti per applicazioni diverse hanno ovviamente esigenze diverse per quanto riguarda la comunicazione. Infatti, mentre i livelli inferiori si occupano genericamente di dati in viaggio da un computer ad un altro senza rendersi conto della pluralità (e della diversa natura) dei programmi esistenti sui vari computer, i livelli superiori dello standard ISO/OSI fanno riferimento al singolo programma come terminale della comunicazione. Vi saranno quindi tanti servizi di sessione e presentazione quante sono i programmi applicativi che devono comunicare. Tutte le presentazioni "consegneranno" poi i loro dati all'unico servizio di trasporto del computer, che non fa distinzione tra pacchetti provenienti da applicazioni diverse. Il compito principale del livello di trasporto è quindi la gestione dellinvio sulla stessa linea dei pacchetti provenienti da processi diversi, ed eventualmente il riordino dei pacchetti sulla base di un numero di sequenza (sequence number). Ciò può comportare l'introduzione di opportuni ritardi di consegna per i pacchetti pervenuti fuori sequenza in modo da rimetterli nellordine giusto. L'esempio dello scambio di lettere tra gli uomini daffari italiano e cinese può aiutare a capire come gli strati più elevati siano meno standardizzabili, senza che ciò costituisca un difetto delle specifiche ISO. Infatti non è facile, a questo livello, imporre uno standard senza interferire con i contenuti della comunicazione. Sarebbe assurdo pensare di imporre tramite regolamento postale la presenza di specifiche frasi di convenevoli all'inizio e alla fine di una lettera d'affari come quella dell'esempio. Nonostante questo minor grado di formalizzazione dei livelli superiori ci sono alcuni servizi applicativi così diffusi da essere divenuti a loro volta oggetto di standard, come il trasferimento di archivi e la posta elettronica. Il livello di applicazione Il livello di applicazione è costituito dai programmi utente che richiedono la trasmissione di dati sulla rete Oggi tutti i computer connessi a Internet sono dotati di un programma polivalente di questo tipo, il browser. Ce ne occuperemo prossimamente. Il livello di presentazione Lo scopo del livello di presentazione è convertire i dati provenienti dalle applicazioni e destinati ad essere trasferiti sulla rete in un opportuno formato comune. In generale vi sono più formati a disposizione, tra cui i processi interlocutori devono scegliere. A questo livello possono venire offerti servizi quali la compressione dei dati e le tecniche crittografiche. Il livello di sessione Il livello di sessione ha il compito di includere nel messaggio quelle informazioni necessarie per la corretta ripartizione dei costi di comunicazione (ricordiamo che il sottostante livello di trasporto non distingue tra i vari processi committenti delle comunicazioni). Inoltre, questo livello deve farsi carico delle conversioni necessarie tra le codifiche dei dati utilizzate dai vari computer della rete, un problema particolarmente importante nel caso di reti che comprendono macchine di modelli e costruttori diversi. TCP/IP e e ISO/OSI Nei paragrafi iniziali della lezione abbiamo accennato al fatto che Internet si basa su TCP/IP. Si tratta di un protocollo sviluppato indipendentemente dagli standard ISO/OSI, che pure ha assunto la rilevanza di uno standard industriale. TCP/IP è importante perchè permette i collegamenti tra le reti diverse che compongono Internet, e può essere usato anche allinterno di una rete locale. Come si vede TCP/IP realizza globalmente il terzo e il quarto strato dello schema OSI, ma può a sua volta essere diviso in livelli. Al primo livello di TCP/IP si situano alcuni servizi base che una rete deve mettere a disposizione delle applicazioni che girano sulle macchine collegate ai suoi computer come la possibilità di trasferire dei file (FTP: File Transfer Protocol ) e le funzionalità di base della posta elettronica (SMTP: Simple Mail Transport Protocol ). Il secondo livello fornisce i due modelli di comunicazione tra applicazioni remote di cui abbiamo parlato. Il primo, detto Reliable Stream , costituisce l'analogo software di un circuito virtuale poiché richiede che i terminali tra cui avviene la comunicazione siano in linea nello stesso momento. Il secondo, detto User Datagram, simula invece la commutazione di pacchetto, spezzando un messaggio in sottounità che contengono informazione di indirizzamento e informazioni rivolte alla ricostruzione della loro sequenza. La struttura degli indirizzi TCP/IP Torniamo ora alla struttura degli indirizzi TCP/IP; infatti ce ne siamo già occupati, perchè lindirizzo TCP/IP non è altro che lhost number che abbiamo descritto nei paragrafi che precedono. Per quanto riguarda la struttura degli indirizzi TCP/IP, la filosofia di base è quella di fornire ad ogni computer di Internet un unico indirizzo di lunghezza fissa, pari a quattro byte ossia 32 bit. Va notato che questa scelta comporta che gli indirizzi disponibili su Internet costituiscano una risorsa finita, anche se abbondante. Si tratta di ben 232 computer indirizzabili: una quantità però che per le odierne necessità sembra appena adeguata. Si possono avere quattro classi di indirizzi di cui però l'ultima non è attualmente usata. Ciascun tipo di indirizzamento viene attribuito ad una rete locale sulla base del numero dei computer che la compongono. Il numero IP non è un tutto unico: è ancora suddivisibile in un campo network id che serve ad identificare la rete locale all'interno di Internet su cui si trova la macchina da raggiungere e un campo host id che identifica la specifica macchina. Le host id costituite da tutti zeri e tutti uni corrispondono rispettivamente alla comunicazione sullo stesso computer, senza accesso alla rete ed alla comunicazione broadcast verso tutti i computer della rete. Come si è detto, per indicare uno dei processi in esecuzione su un dato calcolatore si usa il port number. Un port corrisponde al terminale di un canale di comunicazione virtuale che TCP/IP mette a disposizione del processo. Vediamo più da vicino la struttura di un messaggio TCP/IP. Val la pena di osservare che la complessità di questo protocollo è di gran lunga superiore agli altri visti finora: ciò è dovuto alla sua capacità di gestire anche reti di bassa qualità caratterizzate da elevato tasso di rumore e da frequente perdita di dati. TCP/IP decompone i messaggi delle applicazioni utente in parti di lunghezza non superiore a 65 Kbyte da inviare separatamente. L'invio del messaggio è preceduto da una procedura di negoziazione a tre stadi dopo di che vengono inviati i pacchetti di dati. Lo header (intestazione) dei pacchetti occupa ben 40 byte. Questo header in realtà è diviso in due parti. La prima, ovvero lintestazione IP propriamente detta, riguarda la trasmissione del singolo pacchetto. La seconda, detta intestazione TCP serve per gestire una connessione, cioè un flusso di pacchetti tra un mittente e un destinatario. Infatti, la parte TCP si incarica della corretta sequenzializzazione dei pacchetti e delle eventuali ritrasmissioni necessarie per compensare eventuali errori di trasmissione. Vediamo una breve descrizione dei campi che compongono l'header TCP. I campi relativi ai port mittente e destinatario permettono di identificare i due programmi remoti tra cui ha luogo la comunicazione. Seguono il numero d'ordine del pacchetto e la lunghezza dello header che è variabile perché può comprendere un numero arbitrario di opzioni. Poi cè una serie di indicatori o flag, che vengono utilizzati per la procedura di creazione e terminazione della connessione. Vi è poi una somma di controllo per la correzione automatica degli errori ed un campo di opzioni utilizzato per vari scopi tra cui la determinazione della dimensione dei buffer di memoria che devono essere mantenuti localmente dagli interlocutori. Per quanto riguarda lo header IP basterà dire che attraverso il campo tipo di servizio è possibile selezionare una modalità di trasmissione tra quelle offerte dai livelli inferiori consentendo così una notevole flessibilità del protocollo a seconda della natura dei dati da inviare. Ad esempio per trasmettere voce digitalizzata la velocità è da privilegiare rispetto alla correzione d'errore; mentre per un trasferimento di file è vero il contrario. Un altro elemento di adattabilità è il campo versione, che consente di specificare a quale versione del protocollo fa riferimento il pacchetto. Ciò consente di utilizzare nuove versioni del protocollo mantenendo la compatibilità a cavallo di versioni successive. Per concludere è bene far osservare ai lettori esperti di comunicazioni le ragioni che stanno alla base della grande differenza tra TCP/IP e i protocolli per le telecomunicazioni pubbliche, come il noto X.25. Nell'ottica di chi ha progettato TCP/IP il traffico di rete è prevalentemente locale con sporadici accessi ai router per le comunicazioni di lunga distanza. In questo schema la flessibilità che si ottiene prevedendo header lunghi e dettagliati fa premio sul tempo sprecato per trasmetterli. D'altro canto gli Enti postali che hanno a che fare con la rete telefonica considerano il tempo di trasmissione una risorsa preziosa e tendono a usare header molto corti. Questa tendenza si è espressa pienamente nel progetto della rete ATM.. ATM e i router del futuro Ad ogni tappa (hop) del percorso compiuto da un pacchetto, un router deve selezionare il suo prossimo passo verso la sua destinazione. Come si è visto, la maggior parte dei percorsi a lunga distanza viaggia su linee affittate dalle società telefoniche, alcune delle quali sfruttano tecnologie a commutazione di pacchetto. Ciò significa che i dati possono essere impaccati e instradati su molti livelli contemporaneamente. Ad esempio, la rete ATM traferisce i dati ad alta velocità in minipacchetti chiamati "celle" Invece dei router, ATM usa degli "switch" per differenziare i tipi di traffico e controllare il flusso di celle. Già oggi è normale inviare il traffico TCP/IP sulle linee ATM, ma non è chiaro se i router IP continueranno a gestire il traffico sempre crescente di Internet o se gli switch ATM li sostituiranno. A differenza dell'instradamento IP, ATM è più simile al sistema telefonico; si tratta di un sistema in cui viene stabilito un "circuito virtuale" tra interlocutori che viene tenuto in servizio fin quando dura la comunicazione. ATM è adatto specialmente per le applicazioni multimediali in tempo reale perchè una volta che il circuito è stabilito, le celle ATM seguono tutte lo stesso percorso percorso e impiegano, più omeno, lo stesso tempo. I sostenitori dei router IP insistono sul fatto che i router sono più flessibili grazie alla capacità di inoltrare i pacchetti lungo diversi percorsi, mentre ATM è un sistema rigido con connessioni fisse. I fautori di ATM ribattono che gli switch ATM sono più veloci e che vi sono delle tecniche per rendere flessibili le reti ATM di essereattraverso la segmentazione. Oggi, ATM viene usato principalmente dai grandi provider per le loro dorsali e solo il tempo dirà se la commutazione ATM sarà utilizzata esclusivamente per i collegamenti a lunga distanza o se la tecnologia verrà impiegata a livello locale. In Italia, linee ATM a lunga distanza per il traffico Internet sono già usate ad esempio da Interbusiness; una delle prime installazioni di ATM per rete locale è stata fatta presso lUniversità di Milano, Polo di Crema (http://www.crema.unimi.it) I protocolli applicativi TCP/IP Veniamo ora a una descrizione generale dei protocolli di alto livello che si basano su TCP-IP. Questi protocolli (che realizzano i livelli più alti della pila ISO-OSI di cui abbiamo parlato in precedenza) definiscono il contenuto (e la corretta sequenza) dei pacchetti TCP/IP a seconda del servizio applicativo a cui si riferiscono. Ecco un elenco: * telnet Consente a un utente a un terminale su una macchina di comunicare interattivamente con un programma, ad esempio un word-processor che gira su un computer remoto, come se il terminale dell'utente fosse collegato direttamente. * FTP (File transfer protocol, Protocollo per il trasferimento di file) Consente a un utente a un terminale di accedere e interagire con un disco remoto. * SMTP (Simple mail transfer protocol, Protocollo semplice per il trasporto di posta) Fornisce un servizio di trasferimento della posta esteso a tutta la rete. SNMP (Simple network management protocol, Protocollo semplice per la gestione di rete) Consente al gestore di rete di controllare il funzionamento di un elemento di rete (ad esempio un router) attraverso la rete stessa. Un'esigenza comune a tutte le interazioni tra server e client è quella di stabilire una connessione TCP tra i due processi o protocolli applicativi coinvolti. Quindi, prima di esaminare i diversi protocolli, ricordiamo brevemente come è stabilito il collegamento. Come sappiamo, tutti i server hanno un nome che si traduce in un corrispondente indirizzo IP valido su tutta la rete. L'indirizzo completo di un processo server è formato da due parti: l'indirizzo IP del calcolatore su cui il processo è attivo e il numero di port locale. L'indirizzo IP viene usato dai router dell'inter-rete per instradare i pacchetti all'elaboratore di destinazione richiesto. Il numero di port è utilizzato dal software all'interno del calcolatore destinatario per identificare il programma a cui va inoltrato un messaggio ricevuto. Come vedremo nelle prossime lezioni, sul vostro personal computer si trovano i programmi client e server per diversi tipi di servizi (FTP, SMTP e così via). Ricordate che a tutti i server dello stesso tipo, su tutti i calcolatori del mondo, è assegnato lo stesso numero di port. I numeri di port dei diversi tipi di server sono noti come port "well-known". Eccone alcuni esempi: 21 - FTP 22 - telnet 25 - SMTP Quindi, quando un processo client inizia una chiamata a un processo server corrispondente, crea una connessione TCP che utilizza come indirizzo di destinazione l'indirizzo IP del calcolatore su cui il server gira insieme al numero di port "well-known" di quel server. Come proprio indirizzo, il client usa l'indirizzo IP dell'elaboratore su cui si trova insieme al successivo numero di porta libero su quel calcolatore. Telnet Come vedremo nelle prossime lezioni, quasi tutti i sistemi operativi più diffusi (Unix, Windows, MacOS ed altri) forniscono un programma telnet per consentire allutente di connettersi al sistema operativo di una macchina remota, di iniziare l'esecuzione di un programma su quella macchina e poi di interagire con esso come se si trovasse sulla macchina locale . Tutti i comandi e i dati inseriti dall'utente sono passati dal sistema operativo locale al processo client telnet che poi li trasmette, usando il collegamento TCP, al telnet server del calcolatore remoto. Quest'ultimo inoltra i comandi dell'utente, attraverso il sistema operativo locale, al processo destinatario. Una qualsiasi emissione di dati dal processo destinatario viene restituita nello stesso modo per essere visualizzata sullo schemo del client. I due telnet, client e server, comunicano l'uno con l'altro in modo trasparente allutente inviamdosi pacchetti TCP che contengono singoli caratteri o stringhe di caratteri, codificati in un formato standard noto come NVT (Network virtual terminal, Terminale virtuale di rete). Tutti i dati in ingresso e in uscita da telnet sono trasferiti come stringhe ASCII. FTP L'accesso al disco di un computer remoto è una funzionalità di base delle reti di calcolatori. Il protocollo FTP consente laccesso a dischi remoti per prelevare file da trasferire sul computer locale o viceversa. Il client FTP fornisce una serie di servizi simili a quelli disponibili sui dischi locali. Usandolo per collegarsi a un computer dove è presente un server FTP, lutente può elencarne le directory, creare nuovi file, leggere i contenuti dei file esistenti e così via. Alla ricezione di ogni richiesta il server FTP interagisce con il suo disco locale per soddisfare la richiesta come se fosse stata generata localmente. Il client FTP permette allutente di specificare la struttura del file interessata e il tipo di dati. Sono supportate tre strutture di file (non strutturata, strutturata e accesso casuale) e quattro tipi di dati (binario a 8 bit, testo (ASCII ed EBCDIC) e binario a lunghezza variabile). Nel trasferire i file al client, il server FTP tiene conto della sua struttura. Il formato dei messaggi associati ai contenuti dei file è determinato dalla struttura definita del file. Il formato dei messaggi scambiati tra i due processi di controllo di FTP deve avere una sintassi concordata per assicurare che abbiano lo stesso significato (e siano interpretati nello stesso modo) in entrambi i calcolatori. Per ottenere ciò si utilizza il formato NVT citato nel paragrafo precedente. SMTP La posta elettronica è probabilmente il servizio più usato su Internet e in generale sulle reti di calcolatori. I sistemi di posta locali sono disponibili da molti anni sulla maggior parte dei sistemi di elaborazione multiutente; fu quindi un'evoluzione naturale estendere il servizio attraverso la Rete quando questi calcolatori furono collegati in rete tra di loro. SMTP (Simple mail transfer protocol, Protocollo semplice per il trasporto di posta) gestisce il trasferimento della posta dal sistema di posta di un calcolatore a quello di un altro. Non è suo compito accettare la posta diretta ad altri utenti della stessa macchina; queste sono operazioni che spettano al sistema di posta locale. Il fatto che molti computer collegati alla Rete siano personal usati da una persona sola ha portato molti utenti ad identificare integralmente il servizio di posta con SMTP. In realtà SMTP si occupa solo della posta diretta a uteni di computer remoti. Il sistema di posta locale tiene per ciascun utente una indirizzo di e-mail in cui depositare o ricevere la posta. Ogni indirizzo di e-mail ha un nome univoco che è costituito da due parti: una parte locale e una parte globale. La prima è il nome dell'utente ed è unica solo all'interno del sistema di posta locale, mentre la seconda è un nome di calcolatore che come sappiamo è unico su tutta Internet. Vi sono due punti da prendere in considerazione nel trasferimento della posta: il formato dei messaggi, per essere certi che sia interpretato nello stesso modo in ogni sistema, e il protocollo usato per trasferirli da una macchina a un'altra. Il formato della posta è costituito da un'intestazione e da un testo che a loro volta sono costituiti da più righe di testo ASCII con una riga vuota che separa l'intestazione dal testo. Ogni riga nell'intestazione comprende una parola chiave seguita da una stringa di testo con due punti che separano i due elementi. Alcune parole chiave sono obbligatorie mentre altre sono facoltative. L'intestazione minima è la seguente: TO: nome del ricevente FROM: nome del mittente Ecco i campi facoltativi TO: nome del ricevente REPLY TO: nome a cui inviare la risposta TO: nome del ricevente FROM: nome del mittente CC: ricevente di una copia carbone SUBJECT: argomento DATE: data ENCRYPTED: puntatore alla tecnica crittografica La parola chiave ENCRYPTED indica che la parte del testo, cioè i contenuti, sono stati cifrati usando una chiave che il ricevente può dedurre dal puntatore di cifratura. L'intestazione, tra cui SUBJECT (cioè l'argomento) e i nomi del destinatario, è sempre in testo normale. Per inviare la posta, il protocollo SMTP del client prima accerta l'indirizzo IP del calcolatore di destinazione dal servizio DNS poi lo utilizza, insieme all'indirizzo di port "well-known" di SMTP (25), per iniziare l'impostazione di una connessione di trasporto con il server SMTP nel calcolatore di destinazione. Una volta che è stata stabilita una connessione, il client inizia il trasferimento della posta in attesa al server. L'inoltro della posta implica lo scambio distringhe di testo chiamate comandi. Tutti i comandi sono codificati come stringhe di caratteri ASCII e comprendono un numero di 3 cifre oppure un comando in formato testo o entrambi. Una connessione SMTP Per capire bene il concetto di protocollo ad alto livello non ci sono alternative: bisogna seguire una connessione passo passo. Da questo punto di vista il protocollo SMTP è particolarmente istruttivo, quindi vediamo in dettaglio le varie fasi di una connessione. Appena stabilita la connessione TCP, il server SMTP invia il comando 220 al client per indicare che è pronto a ricevere la posta. Il client risponde ritornando un comando HELO insieme all'indirizzo IP della macchina su cui si trova. Alla ricezione di questo, il server risponde con l'identità della propria macchina. Il client inizia poi a inviare l'intestazione della posta fornendo un comando MAIL seguito dalla riga FROM: presa dall'intestazione del messaggio da trasmettere. Il server replica con il comando generale 250, la conferma di ricezione. Il client continua inviando un comando RCPT seguito dalla riga TO: presa dall'intestazione della posta. Questo viene confermato ancora da un comando 250; qualunque ulteriore riga d'intestazione è inviata nello stesso modo. L'inizio dei contenuti del messaggio di posta elettronica è segnalato quando il client invia un comando DATA. Il server risponde con un comando 354 e il client poi spedisce i contenuti della posta come una sequenza di righe terminate da un punto. Il server conferma la ricezione restituendo un comando 250. La fase di trasferimento della posta è terminata quando il client invia un comando QUIT e il server ritorna un comando 221, a cui segue l'interruzione della connessione TCP di trasporto. Questo scambio dovrebbe aver chiarito le funzioni base del protocollo SMTP, ma nella pratica sono disponibili molte altre funzioni, a seconda delle implementazioni. Di questo ci occuperemo nelle prossime lezioni. SNMP I tre protocolli di applicazione finora trattati, telnet, FTP e SMTP, riguardano tutti gli utenti della rete. Al contrario, SNMP (Simple network management protocol, Protocollo semplice per la gestione di rete) non interessa gli utenti finali, ma i gestori dell'ambiente di rete. Ricordate che la Rete comprende un gran numero di diversi dispositivi, tra cui i server e i router per l'interconnessione di LAN diverse. Internet, da questo punto di vista, è come la rete autostradale: se si verifica un guasto e il servizio è interrotto, gli utenti si aspettano che riprenda con un ritardo minimo. Se poi le prestazioni peggiorano per laumento del traffico su parte della Rete, gli utenti si immaginano che le porzioni congestionate vengano subito identificate e che sia aumentata la capacità di trasmissione in modo risolvere il problema. Il protocollo SNMP, anche se non è la bacchetta magica che gli utenti finali vorrebbero, è stato definito per aiutare i gestore della Rete a eseguire le funzioni di gestione dei guasti e di controllo delle prestazioni. Il concetto i base di SNMP è considerare tutti gli elementi della rete che bisogna controllare (router, server e così via) come oggetti gestiti. Associata a ciascun oggetto vi è una serie di informazioni di gestione. Alcune di queste, definite anche attributi, possono essere o lette o scritte dal gestore della rete attraverso la rete stessa per regolare il funzionamento delloggetto. Vi sono anche i messaggi di rilevazione dei guasti che vengono inviati da un oggetto gestito quando si verifica un malfunzionamento. Se un router cessa di rispondere ai messaggi di saluto, il suo vicino, oltre a modificare la sua tabella di instradamento per riflettere la perdita del collegamento, può creare e inviare un messaggio di rilevazione dei guasti attraverso la Rete, per segnalare il problema al gestore. Il ruolo di SNMP è permettere al processo di gestione, un programma che si trova sul computer del gestore di rete, di scambiare dei messaggi relativi all'amministrazione con appositi programmi attivi nei vari oggetti gestiti: calcolatori, router e così via. Le informazioni così ottenute sono memorizzate nella stazione del gestore di rete in una MIB (Management information base, Base informativa di gestione). Il gestore di rete è fornito di una serie di programmi per consultare le informazioni nella MIB, per dare inizio alla raccolta di ulteriori dati e per eseguire i cambiamenti di configurazione della rete. Altri protocolli I protocolli di applicazione basati su TCP/IP non si fermano certamente qui. Di due di essi, il protocollo del Web HTTP e IIOP, il protocollo che sta alla base delle applicazioni a oggetti distribuiti, avremo modo di parlare diffusamente nel seguito delle lezioni. Comunque, qualsiasi protocollo ad alto livello che deve funzionare su Internet deve basarsi su TCP o UDP come quelli che abbiamo qui delineato. ESERCIZIO (5 PUNTI) Verificare il numero IP della macchina e specificate il tipo di collegamento di cui disponete (Suggerimento: per utenti Windows fare clic su Pannello Controllo ) inviare via mail il risultato ai Tutors. |