R E T I D I C A L C O L A T O R I Prof. S. Riccobene
1
CAPITOLO 1 TECNOLOGIA DI TRASMISSIONE
Vi sono principalmente 2 tipi di tecnologie trasmissive: Tramite collegamenti BROADCAST Tramite collegamenti PUNTO-PUNTO RETI BROADCAST (Multicast (Multicast)) Le reti Broadcast sono caratterizzate da un solo canale di comunicazione che è condiviso tra tutte le macchine della rete. Ogni macchina invia brevi messaggi (detti pacchetti ) a tutte le altre. Ogni pacchetto è caratterizzato da una campo indirizzo che permette di identificare il destinatario. Quando ogni macchina riceve il pacchetto, confronta il campo indirizzo con il proprio. Se sono uguali, il pacchetto viene processato, altrimenti viene ignorato. I sistemi Broadcast Broadcast di solito, solito, danno anche anche la possibilità possibilità di indicizzare indicizzare un pacchetto pacchetto a tutti i destinatari. destinatari. attraverso l'uso di un codice speciale speciale nel campo indirizzamento. indirizzamento. Questo modo operativo viene detto Broadcasting . Alcuni sistemi broadcast supportano anche la trasmissione ad un solo sottoinsieme di macchine che viene detto Multicasting. Uno schema di questo tipo consiste nel riservare 1 bit bit per indicare il multicasting multicasting mentre mentre gli n-1 bit dell'indirizzo possono contenere un numero di gruppo. Ogni Ogni macchina può appartenere appartenere ad un solo gruppo. Quando viene mandato mandato un pacchetto ad un gruppo, questo viene consegnato a tutte le macchine che fanno parte di quel gruppo. RETI PUNTO-PUNTO (Unicast) Le reti punto-punto sono caratterizzate caratterizzate da molte connessioni tra singole coppie di macchine. macchine. In una rete Point-To-Point tutte le postazioni possono essere considerate client e server. Non esiste un Server di dominio ma vengono configurate per lavorare in un contesto di Gruppo di Lavoro o WorkGroup. Ogni utente è anche l'amministratore del proprio client ossia è lui stesso a decidere se condividere o meno una risorsa agli altri e ad impostare i permessi per quella risorsa (lettura e scrittura, condivisione con password o sola lettura). Una trasmissione punto-punto con un trasmettitore ed un ricevitore viene chiamata Unicasting . Normalmente per le reti di piccole dimensioni è consigliata una connessione di tipo Broadcast. Per reti di dimensioni maggiori si preferisce la connessione Punto-Punto (o Unicast ). ). Vantaggi:
facile installazione e configurazione; non serve la presenza continua di un amministratore di rete; poco costosa (richiede meno hardware rispetto al tipo client/server). client/server).
Svantaggi:
poco veloce; con l'interruzione o il cortocircuito del cavo coassiale tra due postazioni, tutta la rete non funziona; poca sicurezza dei dati; formazione (e quindi perdita di tempo e denaro) del personale sull'utilizzo della rete.
2
Immagine Rete Punto-Punto
Classificazione Reti per Scala
Un criterio alternativo per classificare le reti è la loro scala. Alla sommità si trovano le Personal Area Network , cioè reti che sono pensate per una sola persona. Per esempio una rete senza fili che collega un computer al suo mouse, alla tastiera e alla stampante è una personal area network. In coda troviamo invece la rete Internet , in grado di collegare computer situati anche alle due estremità del pianeta.
Distanza tra i Processori
Processori situati nello Processori stesso/a
Identificazione
1m
Metro quadro
Personal Area Network
10 m
Stanza
100 m
Edificio
1 Km
Campus
10 Km
Città
100 Km
Nazione
1000 Km
Continente
10.000 Km
Pianeta
Local Area Network
Metropolitan Area Network Wide Area Network Internet
Classificazione della rete in base alla Scala
Reti Locali (LAN) (1.2.1)
Sono delle reti private con dimensioni che variano da qualche centinaia di metri (nel caso di cavi RJ45) a pochi chilometri (nel caso di connessioni in fibra ottica). E' formata da 2 o più computer collegati fra loro in modo che ciascun computer possa interagire con gli altri. La velocità di trasmissione è di circa 10/100 Mbit/sec, ma attualmente esiste la possibilità di raggiungere i 10 Gbit con pochi errori e bassi ritardi. Esistono Esistono diverse topologie di rete Lan Broadcast. La più diffusa è la ETHERNET (IEEE 802.3).
3
Ethernet
E' una rete Broadcast a bus con controllo non centralizzato . La velocità di trasmissione è compresa tra 10 Mbit/s e 10 Gbit/s. Tutti i computer possono trasmettere quando vogliono, ma se 2 o più pacchetti collidono, collidono, ogni computer attenderà per un tempo casuale prima di ritrasmettere. ritrasmettere. Rete ad Anello
Un altro tipo di rete broadcast è quella ad anello. Nella broadcast ad anello, ogni bit si propaga in modo autonomo senza aspettare il resto del pacchetto a cui appartiene. Come è intuibile, ciò comporta la necessità di regole che arbitrino l'accesso simultaneo simultaneo all'anello. In questo tipo di rete, il numero dei canali è uguale al numero dei nodi. La rete ad anello è basata su una linea chiusa alla quale possono connettersi tutti i nodi della rete. Ogni nodo, per comunicare con un altro, deve far scorrere lungo la struttura ad anello così realizzata le proprie informazioni. Poiché il canale è condiviso, condiviso, per riconoscere un destinatario destinatario da un altro è importante definire per ogni ogni nodo un indirizzo. Un nodo che riceve un messaggio destinato ad un altro nodo, lo ritrasmette al suo vicino, e così via finché non giunge a destinazione. Le reti Broadcast si possono ulteriormente dividere in:
STATICHE Dove ogni macchina a turno può usare il canale. Ciò comporta uno spreco perché può capitare che quando arriva il turno di una macchina x, questa non ha nulla da trasmettere. DINAMICHE Dove si decide di volta in volta chi sarà il prossimo a trasmettere; Nelle reti broadcast dinamiche è necessario un meccanismo di arbitraggio delle contese, che può essere: un apposita apparecchiatura, bus arbitration unit , accetta richieste di trasmissione e decide chi abilitare; Arbitraggio distribuito: ognuno decide per conto proprio. Arbitraggio centralizzato:
SOFTWARE DI RETE (1.3)
Per diminuire la complessità, le reti sono organizzate a livelli ( o strati ). Lo scopo di ogni strato è quello di offrire dei servizi allo strato superiore nascondendo i dettagli di come vengono implementati tali servizi ( Information Hiding ). In generale, lo strato n di un computer è in comunicazione con lo strato n di un altro computer. L'insieme di regole e convenzioni usate da questa comunicazione viene detto protocollo dello strato n. Quindi il protocollo è un accordo fra le parti sul modo in cui deve procedere la comunicazione. Se il protocollo viene violato, la comunicazione comunicazione viene resa inaffidabile. Le entità che vogliono comunicare tra loro allo stesso livello vengono dette Peer ( pari pari). Nella realtà, i dati non vengono trasferiti direttamente dallo strato n di un host allo strato n di un altro host , ma ogni strato passa dati e informazioni di controllo allo strato sottostante attraversando tutti i livelli fino a raggiungere il supporto fisico (strato 1) dove realmente i dati viaggiano fisicamente dall'host mittente all'host destinatario. La tecnica di trasmissione fra gli strati si chiama Interfaccia. L'interfaccia definisce le operazioni elementari e i servizi che uno strato offre a quello sovrastante.
4
Esempio di comunicazione tra gli strati di una rete a 5 strati
Un processo applicativo che lavora allo strato 5 deve mandare un messaggio ad un processo di pari strato che lavora in un' altra macchina. La prima cosa da fare è passare il messaggio allo strato 4 per la trasmissione. Lo strato 4 mette un header davanti al messaggio per identificarlo e lo passa allo strato 3. L' header include delle informazioni di controllo per consentire allo strato 4 del computer destinatario di consegnare il messaggio nell'ordine corretto quando gli strati sottostanti non mantengono la sequenza. In alcuni strati gli header possono possono contenere anche dimensioni, tempi e altri campi di controllo. In molte reti non c'è limite alla dimensione dei messaggi trasmessi nel protocollo dello strato 4, ma quasi sempre esiste un limite imposto dal protocollo dello strato 3. Di conseguenza, lo strato 3 deve spezzare i messaggi in arrivo in unità più piccole chiamate pacchetti e aggiunge ad ognuno di essi un header dello strato 3. Lo strato 3 passa i pacchetti allo strato 2. Lo strato 2, oltre a mettere i propri header, aggiunge alla fine di ogni pacchetto un trailer che indica indica la fine del pacchetto. pacchetto. Lo strato 2 passa passa i pacchetti allo strato 1, dove avviene la trasmissione fisica dei dati. Quando i pacchetti vengono ricevuti dal destinatario destinatario avviene il processo inverso. Man mano che si sale attraverso i vari strati, gli header vengono rimossi in modo tale che uno strato n non contenga header di strati <= n.
5
Progettazione degli Strati (1.3.2)
Quando si progettano gli strati di una rete, ci si trova ad affrontare alcuni problemi:
ogni strato ha bisogno di un meccanismo per identificare sorgenti e destinazioni, quindi serve una sorta di indirizzamento che indichi l'esatta destinazione. nella progettazione di una rete è importante stabilire le regole da utilizzare per il trasferimento dei dati. Ad esempio bisogna decidere se la trasmissione è simplex , halfduplex , o full-duplex . poiché i pacchetti viaggiano su canali fisici (quindi non esenti da errori) è importante il controllo degli errori . poiché non tutti i canali di comunicazione conservano l'ordine dei messaggi inviati, la macchina che invia i pacchetti deve aggiungere dei numeri di sequenza ad ogni pacchetto in modo che il destinatario, una volta ricevuti, li possa ricomporre ed ottenere il messaggio iniziale. una sorgente veloce può sovraccaricare un ricevitore lento. Per ovviare a questo problema e “limitare” il trasmettitore, viene utilizzato il controllo di flusso . poiché è molto “costoso” aprire una connessione separata per ogni coppia di processi comunicanti, lo strato sottostante può decidere di usare la stessa connessione per più conversazioni simultanee non correlate. Questa tecnica prende il nome di MULTIPLEXING. quando esistono più percorsi tra sorgente e destinazione, è necessario scegliere quale strada prendere. Le tecniche che se ne occupano prendono il nome di routing o instradamento.
Servizi Orientati alla Connessione Connessione e Senza Connessione (1.3.3)
Gli strati possono offrire due tipi di servizi agli strati superiori:
orientati alla connessione
senza connessione
Servizi Orientati alla connessione (Datagram con conferma):
Questo tipo di servizio somiglia al sistema telefonico. Un utente che vuole usare questo tipo di servizio di rete deve prima stabilire la connessione, poi deve usarla, ed infine rilasciarla. L'aspetto essenziale di una connessione è che funziona come un tubo: il trasmettitore vi spinge delgi oggetti (bit) a una estremità, e il ricevitore li prende dall'altra, conservando l'ordine con cui sono stati trasmessi. In alcuni casi, quando si stabilisce una connessione, il trasmettitore, il ricevitore e il SUBNET eseguono una negoziazione dei parametri da usare. Tipicamente, quando un lato fa una proposta, l'altro può accettare, rifiutare, o fare una controproposta. controproposta.
6
Servizi Senza connessione:
Questo tipo di servizio somiglia al sistema postale. Ogni messaggio trasporta l'indirizzo del destinatario ed è instradato nella rete in modo indipendente dagli altri. Normalmente, quando si mandano due messaggi alla stessa destinazione, non è detto che il primo inviato sia anche il primo ad arrivare perché potrebbe incontrare un ritardo ed arrivare dopo il secondo. Pertanto, affinché si abbia una maggiore affidabilità, è necessario aspettare la risposta dell'avvenuta ricezione del messaggio, che viene detta ACK . qualityy of servic servicee). Ogni servizio si può classificare in base alla qualità del servizio ( QOS ovvero qualit Alcuni servizi sono affidabili e non perdono mai dati, altri invece possono perdere dati ma risultano più veloci. Ricapitolando:
Un servizio orientato alla connessione potrebbe risultare utile, ad esempio, per il trasferimento trasferimento di un file, in cui è di fondamentale importanza importanza l'affidabilità, l'affidabilità, e quindi la certezza che esso arrivi a destinazione senza errori. Un servizio senza connessione invece, potrebbe risultare utile nella trasmissione trasmissione di una videoconferenza, in cui è preferibile vedere qualche pixel errato piuttosto che un ritardo causato dall'attesa di una risposta di ricezione.
Primitive di Servizio (1.3.4)
Un servizio è specificato da un insieme di primitive (operazioni) utilizzate dai processi per accedere a tale servizio. Se la pila di protocolli si trova nel Sistema Operativo, allora le primitive vengono dette chiamate di sistema . Esempio di utilizzo di primitive di servizio orientato alla connessione:
Il server esegue la chiamata di sistema LISTEN , cioè è pronto ad accettare connessioni in arrivo, e rimane bloccato finché non riceve una richiesta di connessione. Il client esegue una CONNECT per stabilire una connessione con il server specificando a chi connettersi. La richiesta di connessione arriva al server che verifica se c'è un ascoltatore. In caso affermativo, si sblocca e manda un messaggio di conferma al client . Prima che il messaggio di conferma arrivi al client , il server esegue la chiamata RECEIVE , si blocca, e attende la prima richiesta da parte del client . Il client , avendo ricevuto il messaggio di conferma, si sblocca ed esegue un SEND per trasmettere le sue richieste, seguita dalla chiamata RECEIVE per per ottenere la risposta. L' arrivo della richiesta, sblocca il server che la può elaborare. A questo punto, il server usa SEND per mandare la risposta, seguito da RECEIVE perché perché potrebbe esserci qualche altra richiesta da parte del client . Se il client non ha altre richieste da fare, usa DISCONNECT per per terminare la connessione. connessione. Quando il server riceve DISCONNECT , manda a sua volta una DISCONNECT al client per dare la conferma della sua richiesta. 7
SERVER
CLIENT
LISTEN: attesa di 1 connect
-------------> <--<-------------------
CONN CONNEC ECT: T: spec specif ific icaa l'ind l'indir iriz izzo zo del del serve server r
RECEIVE RECEIVE:: Conferma Conferma la possibi possibile le connessio connessione ne ---------------------------> > <--<-------------------RECE RECEIVE IVE:: aspet aspetta ta altre altre possibi possibili li conn conness ession ionii
DISCONNECT: disconnessione
dà
conferma
SEND SEND:: invi inviaa i mes messa sagg ggii
-------------------------> > <--<--------------------
RECE RECEIV IVE: E: per per otten ottener eree la risp rispost ostaa
<----<--------------------
DISCO DISCONNE NNECT: CT: non ha più dati dati da inv inviar iaree
di -------------->
MODELLI DI RIFERIMENTO (1.4)
Nei prossimi due paragrafi verranno esaminate due importanti architetture di rete: il modello OSI e il modello TCP/IP. Anche se i protocolli del modello OSI sono ormai in disuso, il modello in se è ancora valido. Il modello TCP/IP ha h a caratteristiche opposte: opposte: il modello in se è poco utilizzabile, ma i protocolli sono largamente impiegati. Modello OSI (1.4.1)
Intorno al 1976 la ISO (International Standards Organization) propose, come architettura di rete, il modello OSI (Open System Interconnection) con l'intento di rendere “aperto” il sistema di trasmissione affinché fosse di libera e facile interconnettività. Punto di forza del modello OSI è quello di scomporre il problema in sotto problemi più semplici da trattare. Il modello OSI è composto da 7 strati: Strato Fisico:
Strato Data-Link:
Strato Network:
Si occupa della trasmissione di bit grezzi sul canale di trasmissione. Quindi, se ad esempio si trasmette il bit 0, si vuole che dall'altra parte arrivi il bit 0, e non 1. Trasforma i bit grezzi ricevuti dallo strato fisico in una linea priva di errori per lo strato network . Inoltre ha il compito di evitare che un trasmettitore veloce saturi un ricevitore lento. Il suo doppio compito si può riassumere in correzione degli errori a controllo di flusso . Si occupa della subnet , cioè della modalità con cui i pacchetti vengono inoltrati dalla sorgente alla destinazione.
Strato Trasporto:
8
Prende i dati dallo strato superiore, li divide (se necessario), li passa allo strato network e fa si che arrivino correttamente all'altra estremità. Inoltre stabilisce quale tipo di servizio offrire allo strato sessione e quindi agli utenti di rete.A quale processo deve arrivare il pacchetto. Strato Sessione:
Strato Presentazione: Presentazione:
Strato Applicazione:
Si occupa di ristabilire una connessione e in caso di crash di riportarla allo stato iniziale prima che avvenisse il problema.Es: Bancomat Questo strato permette a utenti di computer diversi di stabilire una sessione che può essere: controllo del dialogo (cioè tenere traccia di quando è il turno di trasmettere e quando di ricevere); (evitare che le due parti tentino la stessa operazione critica al medesimo istante);
gestione dei token
sincronizzazione
(super (supervis vision ionare are una lun lunga ga trasmi trasmiss ssion ionee per per consentire la sua ripresa dal punto in cui si è interrotta a causa di un crash)
Questo strato si occupa della sintassi e della semantica dell'informazione trasmessa. Questo avviene quando due computer vogliono comunicare ed hanno una differente rappresentazione dei dati. Questo strato comprende un insieme di protocolli richiesti richiesti dagli utenti, come ad esempio http.
Modello di Riferimento Riferimento TCP / IP (1.4.2)
Il modello TCP / IP, a differenza del modello OSI, è formato da 4 strati: Strato Host to Network:
Strato Internet:
Strato Trasporto:
Questo strato non è definito in maniera esplicita, ma si sa per certo che l'host deve, in qualche modo, collegarsi alla rete usando qualche protocollo per poter spedire i suoi pacchetti. Si occupa di mandare i pacchetti in qualsiasi rete facendoli viaggiare in modo indipendente gli uni dagli altri. I pacchetti potrebbero arrivare a destinazione destinazione in ordine diverso da quello di partenza. Spetta agli strati superiori riordinarli. In questo strato è presente il protocollo IP , che permette di inviare i pacchetti alla destinazione corretta. Consente la comunicazione tra host sorgente e host destinazione. In questo strato è definito il protocollo TCP (Transmission Control Protocol), che ha il compito di trasportare un flusso di byte a destinazione senza che si verifichino errori. In pratica, il protocollo TCP suddivide il messaggio in frame e passa ciascuno di essi allo 9
strato Internet . Quando i frame arrivano a destinazione, vengono ricomposti per ottenere il messaggio iniziale. Il protocollo TCP gestisce anche il controllo di flusso per garantire che una sorgente veloce non saturi un ricevitore lento. Strato Applicazione:
Contiene tutti i protocolli di livello superiore come Telnet , Ftp, Smtp, Http.
Confronto tra Modelli di Riferimento
OSI E TCP / IP (1.4.3)
Entrambi i modelli appena visti si basano sul concetto di protocollo e sulla suddivisione in strati . Tuttavia vi sono delle differenze sostanziali. Nel modello OSI sono presenti 3 concetti fondamentali ben distinti:
servizi interfacce protocolli
Ogni strato offre un servizio a chi lo sovrasta. tale servizio è la descrizione di ciò che fa lo strato. L'interfaccia spiega le modalità di accesso ai processi sovrastanti. I protocolli sono invece la comunicazione virtuale tra le entità di pari strato. Il modello TCP / IP non fa una netta distinzione tra servizio, interfaccia e protocolli. Un'altra differenza tra i due modelli è il numero di strati: 7 per il modello OSI, e 4 per il modello TCP/IP. Critica del Modello Modello e dei Protocolli Protocolli OSI (1.4.4)
L'insuccesso L'insuccesso del modello OSI a favore del TCP / IP fu causato da diversi motivi, primo tra i quali la mancanza di tempestività. Infatti passò troppo tempo tra la ricerca, cioè la creazione del modello di riferimento OSI, e la creazione dei protocolli. In questo lasso di tempo, infatti, nelle Università si cominciò ad affermare il modello TCP/IP. Pertanto, quando il modello OSI entrò nel mercato era già troppo tardi. Un'altra causa dell'insuccesso del modello OSI fu la tecnologia scadente. La scelta di 7 strati non fu del tutto giusta, in quanto ci sono 2 strati ( sessione e presentazione ) che sono quasi vuoti vuoti mentre mentre altri altri 2 ( data link e network ) sono sovraccarichi. Inoltre in molti strati vi sono delle funzioni ripetute come l'indirizzamento, il controllo di flusso e il controllo di errore. Quest'ultimo ad esempio è ripetuto in ogni strato, quando sarebbe stato sufficiente farlo solo nello strato più alto. Critica del Modello TCP / IP (1.4.5)
Una delle principali critiche che si fanno sul modello TCP/IP è che non vi è una netta distinzione tra servizio , interfaccia e protocolli . Il modello TCP/IP è poco generale e inadatto per poter descrivere pile di protocolli diverse dal TCP/IP. Per esempio è assolutamente impossibile usare TCP/IP per descrivere Bluetooth. Un'altra critica che si può fare riguarda lo strato Host to Network . In realtà questo non è un vero e proprio strato, ma è piuttosto una interfaccia tra lo strato Data Link e lo strato Network .
10
CAPITOLO 2 LIVELLO FISICO
Lo strato fisico definisce le interfacce meccaniche, elettriche e le temporizzazioni della rete. La prima parte del capitolo descrive la teoria della trasmissione dei dati e spiega in che modo la natura limita ciò che può essere trasmesso e ricevuto attraverso un canale. I paragrafi successivi studiano tre mezzi di trasmissione: quelli guidati (cavi in rame e fibra ottica), quelli wireless (onde radio terrestri) e quelli basati sui satelliti. BASI TEORICHE TEORICHE DELLA COMUNICAZIONE COMUNICAZIONE DATI DATI (2.1)
Le informazioni possono essere trasmesse via cavo variando alcune proprietà fisiche come la tensione o la corrente. Rappresentando il valore di questa tensione o corrente attraverso una funzione a un valore f(t), è possibile modellare il comportamento del segnale e analizzarlo matematicamente. Analisi di Fourier (2.1.1)
Quanto appena descritto è ottenuto tramite la serie di Fourier . Con essa si ottiene una funzione periodica g(t) con periodo T , tramite la somma idealmente infinita di seni e coseni. g t =
dove
f=
1
T
1 2
∞
∞
c+ ∑ a n sen 2 π nft n= 1
∑ b n cos
2 π nft
n=1
è la frequenza fondamentale
an
e b n sono le ampiezze di seno e coseno della della n-esima armonica di quanto è spostato il segnale segnale c rappresenta una costante.
Quindi il segnale viene generato sommando queste serie di armoniche, che idealmente sono infinite; arriviamo circa al nostro segnale segnale che si avvicina ad 1 onda quadra se mettiamo mettiamo tante armoniche Segnali a Banda Limitata (2.1.2)
Quando si vuole trasmettere una determinata sequenza di bit, si ha bisogno di un ben preciso tipo di segnale (che sarà formato da una determinata tipologia di onda quadra). Questo segnale viaggia sul canale fisico che per natura tende a far perdere parte dell'energia lungo il percorso attenuando in maniera non uniforme le componenti della serie di Fourier e provocando così una distorsione del segnale. Pertanto, il segnale che arriverà a destinazione non sarà del tutto uguale a quello iniziale. Di solito le ampiezze (cioè le armoniche) sono trasmesse senza subire attenuazioni da 0 fino ad una 11
certa frequenza f 0 , mentre sono attenuate per tutte le frequenze superiori a questo limite. L'intervallo di frequenze trasmesse senza forte attenuazione viene detto Banda Passante. Essa è una proprietà fisica del mezzo di trasmissione e dipende dalla costruzione, dallo spessore e dalla lunghezza del mezzo. La linea telefonica, ad esempio, ha una frequenza limite introdotta artificialmente a 3000Hz e su questa linea non possiamo far viaggiare i dati a qualsiasi velocità. Ad esempio se vogliamo far viaggiare i dati a 300bps, avremo: un periodo T 26,67msec 1
una frequenza di base f= 26,67 = 37,65 Hz, il numero massimo di armoniche è di 3000/(37,67/8) = 80 armoniche.
Quindi potremo avere uno spettro risultante che si avvicina al segnale originale. Ma se volessimo far viaggiare i dati a 38400bps su canale fisico a 3000Hz otterremo: un periodo T 0,21 una frequenza di base f= 4800Hz Per un totale di 3000 / (4800 / 8) = 0 armoniche Ciò sta a significare che a 38400bps abbiamo la prima armonica a 4800Hz che è una frequenza maggiore rispetto alla capacità fisica di 3000Hz (che ricordiamo essere la banda passante per far si che le ampiezze viaggino con una lieve distorsione). distorsione) . Tutto questo ci fa capire come la velocità dei dati da trasmettere sia dipendente dal mezzo fisico di trasmissione. La velocità massima di un un canale canale (2.1.3)
I canali trasmessivi si dividono in: perfetti:non consentono distorsioni o ritardi nella propagazione del segnale ideali: consentono consentono solo un ritardo costante nella nella propagazione. reali: consentono attenuazioni e ritardi in funzione della frequenza dei segnali Da quanto detto vi sono due teoremi che esprimono in sintesi il concetto che un canale ha una capacità di trasmissione limitata.
Su Ethernet ad esempio si ha passaggio di frequenze solo a certi livelli mentre superiore o inferiore a quei livelli nn si ha nessun passaggio di frequenze. Se dobbiamo passare la voce in un canale che ha frequenza più alta del canale si fa 1 shift del segnale modulazione TEOREMA DI NYQUIST
Nyquist osservò che anche su un canale perfetto la capacità di trasmissione è limitata. Egli dimostrò che se si trasmette un segnale arbitrario attraverso un filtro low-pass la cui ampiezza ampiezza di banda è pari a H , il segnale filtrato può essere ricostruito completamente prendendo solo 2 H campioni al secondo. Se il segnale è composto da V livelli discreti, il teorema di Nyquist afferma che: 12
massimo bit rate = 2 H log 2 V bit / sec
Questa equazione esprime la massima velocità su di un canale perfetto con ampiezza di banda limitata. TEOREMA DI SHANNON
Shannon fu più preciso, in quanto considerò non un canale perfetto, ma uno reale. Infatti in un canale reale il segnale può essere distorto dal rumore (che può essere termico o di varia natura, ma Shannon considera solo quello termico). Il livello del rumore termico si misura facendo il rapporto tra la potenza del segnale e la potenza del rumore, il cosiddetto rapporto segnale-rumore, indicato con S / N N ed espresso in decibel (db). Quindi il massimo bit rate su di un canale reale è: Mega bit = Mega Herz mass massim imo o bit bit rat ratee = H log 2 (1 + S/N)
H=larghezza di banda del segnale Per ogni canale esiste un ben preciso limite fisico. Si aumenta il segnale se il rumore è maggiore, aumentando i quanti così da far diminuire il rumore rispetto al segnale; è preferibile avere meno livelli ma + laschi quindi allargare le caselle dei quanti, così il rumore nn mi fa saltare da 1 quanto all’altro. Più alto è il bit rate, più alta è la banda del segnale da trasmettere. Più lungo è il canale trasmissivo,maggiore è la potenza del rumore,minore è la capacità del canale.
MEZZI TRASMISSIVI GUIDATI (2.2) Il Doppino (2.2.2)
Il doppino è uno dei mezzi trasmissivi più vecchi. E' composto da due conduttori di rame isolati, spessi circa 1mm avvolti uno intorno all'altro in forma elicoidale. L'intreccio L'intreccio viene utilizzato perché i coni intrecciati annullano i rispettivi campi magnetici, rendendolo quindi meno soggetto ad interferenze da fonti esterne. L'applicazione più comune del doppino è il sistema telefonico. Esso può estendersi per diversi chilometri senza richiedere un'amplificazione del segnale. Per distanze molto lunghe,invece, lunghe,invece, sono necessari dei ripetitori. I doppini possono essere utilizzati per trasmettere sia i segnali digitali che quelli analogici. Esistono diversi tipi di doppini, ma per le reti di computer i più importanti sono due: quelli di categoria 3 che sono composti da due cavi isolati attorcigliati. Di solito quattro coppie di cavi sono raggruppate in una guaina di plastica che protegge e tiene uniti i conduttori. Vengono Vengono usati usati per reti con frequenze frequenze fino a 16 16 Mhz, molto diffusa diffusa per le reti reti Ethernet a 10 Mbit/s.
quelli di categoria 5 che sono simili ai primi, ma usano più spire per centimetro, riducendo l'interferenza e migliorando la qualità del segnale trasmesso su lunghe distanze. Questi sono 13
più adatti per le comunicazioni ad alta velocità. Questi tipi di cavo non sono schermati e vengono chiamati anche UTP (Unshielded Twisted Pair, doppini non schermati).
(a) UTP Categoria 3
-
(b) UTP Categoria 5
Il Cavo Coassiale (2.2.3)
Il cavo coassiale, essendo più schermato del doppino, può estendersi per distanze più lunghe e consente velocità più elevate. Esistono due tipi di cavi coassiali:
a 50 Ohm: utilizzato per le trasmissioni digitali; a 75 Ohm: utilizzato per le trasmissioni analogiche, per la televisione e per le connessioni internet via cavo.
Un cavo coassiale è composto da un nucleo conduttore ricoperto da un rivestimento isolante, a sua volta circondato da un conduttore cilindrico cilindri co realizzato con una calza di conduttori sottili che infine è avvolto da una guaina protettiva di plastica. Tale costruzione permette di avere una buona ampiezza di banda e una buona immunità al rumore. La banda disponibile dipende dalla qualità, dalla lunghezza del cavo e dal rapporto segnale-rumore del segnale dati. I cavi moderni hanno un'ampiezza di banda vicina a 1 Ghz.Sono insensibili alle onde elettromagnetiche esterne.
Fibra Ottica (2.2.4)
Un sistema ottico è formato da 3 componenti
la sorgente luminosa il mezzo di trasmissione il rilevatore
Un impulso di luce indica il valore 1; l'assenza di tale impulso indica lo 0. Il mezzo di trasmissione è una fibra di vetro sottilissima realizzata in silicio. Quando un rilevatore viene colpito dalla luce, genera un segnale elettrico. Se si collega ad un estremo della fibra una sorgente di luce, e all'altro estremo un rilevatore, ecco costruito un mezzo di comunicazione unidirezionale che accetta un segnale elettrico e lo converte in luminoso, e dall'altra estremità converte nuovamente il segnale in elettrico. Tutto ciò può essere realizzato sfruttando un principio della fisica che consente di non disperdere la luce. Infatti, quando un raggio luminoso passa da un materiale all'altro, si rifrange sul confine tra i due materiali. L'entità della rifrazione dipende dalle proprietà dei due materiali, e viene detta Valore Critico. Quindi, tutti i raggi che colpiscono l'interfaccia con un angolo uguale o superiore a quello critico, rimangono intrappolati nella fibra. Dato che più raggi possono colpire l'interfaccia con angoli diversi (maggiori del valore critico), la 14
fibra può contenere molti raggi che rimbalzano ad angoli diversi. Questo tipo di fibra viene detta Fibra Multimodale. Se invece il diametro della fibra viene ridotto a poche lunghezze d'onda della luce, la luce può propagarsi solo in linea retta senza rimbalzare. r imbalzare. Questo tipo di fibra vene detta Fibra Monomodale ; la luce avanza senza senza riflessioni,ricopre riflessioni,ricopre distanze distanze maggiori,ha un bit rate più alto,ma sono molto molto costose. Cavi in Fibra
Il cavo in fibra è formato da un nucleo di vetro attraverso il quale si propaga la luce detto core. Nelle fibre multimodali esso ha un diametro di 50 μ (circa quello di un capello umano), mentre nelle fibre monomodali ha un diametro che varia da 8 μ a 10 μ. Il core è circondato da un rivestimento di vetro che ha un indice di rifrazione più basso, e ciò costringe la luce a rimanere nel nucleo. Lo strato successivo è una fodera di plastica che protegge il rivestimento. Le fibre si possono collegare in tre diversi modi: Possono terminare in connettori inseriti in apposite prese; i connettori perdono circa il 10-20% della luce, ma semplificano la riconfigurazione dei sistemi.
Possono essere attaccate meccanicamente: l'estremità di un cavo viene appoggiata all'estremità dell'altro; il segmento, dopo essere stato avvolto in una manichetta speciale, viene pinzato. L'allineamento può essere migliorato passando la luce attraverso la giunzione e apportando piccole correzioni che massimizzano il segnale. Personale addestrato può fare una giunzione meccanica in circa 5 minuti; causa una perdita del 10% della luce.
Due pezzi di fibra possono essere fusi per formare una connessione solida. Una giuntura di questo tipo è buona quasi quanto una fibra uniforme ma, anche in questo caso, si genera una piccola attenuazione del segnale.
In tutti e tre i casi, nel punto punto di giuntura possono possono presentarsi fenomeni fenomeni di riflessione riflessione e l'energia riflessa può interferire con il segnale. Per generare il segnale normalmente si impiegano due tipi di sorgenti luminose: i LED (Light Emitting Diode) i semiconduttori laser. Reti in Fibra Ottica
Esistono diverse tipologie di cavi in fibra ottica:
Ad anello:
è composta da una serie di connessioni punto-punto . L'interfaccia utilizzata da ogni computer passa il flusso di impulsi luminosi verso il collegamento successivo e funge da giunzione a T per per dare al computer la capacità di inviare e accettare messaggi. Per realizzare ciò si usano due tipi di interfacce:
passiva:
formata da 2 spine fuse nella fibra principale. Ad una estremità si trova un LED (per inviare il segnale), nell'altra si trova un fotodiodo (per ricevere il segnale).
ripetitore attivo:
la luce in entrata è convertita in segnale elettrico che viene rigenerato alla sua massima potenza se necessario, e riconvertito in segnale luminoso. 15
A stella passiva: In questo
tipo di rete, ogni interfaccia ha una fibra che collega il suo trasmettitore a un cilindro di silicio; Le fibre in entrata sono fuse a un capo del silicio, mentre le fibre che escono dall'altro capo si collegano ad ognuno dei ricevitori.
TRASMISSIONI WIRELESS (2.3) Lo spettro elettromagnetico (2.3.1)
In base al tipo di frequenza, possiamo distinguere tra onde radio , microonde , infrarosso e luce trasmetter e informazioni modulando visibile . Tutte le onde possono essere utilizzate per trasmettere l'ampiezza, la frequenza o la fase. A frequenze più alte abbiamo la luce ultravioletta, i raggi x e i raggi gamma. In teoria dovrebbero essere le migliori grazie alla frequenza elevata, ma sono difficili da generare e da modulare e difficilmente superano gli ostacoli solidi. Trasmissioni Radio (2.3.2)
Le onde radio sono facili da generare, possono viaggiare su lunghe distanze e attraversano facilmente gli edifici. Le onde radio sono omnidirezionali, ossia si espandono dalla sorgente in tutte le direzioni e pertanto trasmettitore e ricevitore non devono essere necessariamente allineati. Le proprietà delle onde radio dipendono dalla frequenza. A frequenze basse esse attraversano bene gli ostacoli, ma la potenza diminuisce man mano che ci si allontana dalla sorgente. Ad alte frequenze, le onde viaggiano in linea retta e difficilmente superano gli ostacoli. A basse e medie frequenze le onde seguono una direzione simile alla curvatura terrestre, mentre a frequenze elevate le onde radio tendono a essere assorbite dal pianeta, ma quando incontrano la ionosfera rimbalzano rimbalzano e ritornano sulla terra. Trasmissioni a Microonde (2.3.3)
Le microonde viaggiano da 100MHz a 10GHz, quasi in linea retta e pertanto possono essere messe 16
a fuoco facilmente. Come parabola ricevente e trasmittente allineati. Le microonde non attraversano bene gli edifici. Inoltre alcune onde possono rifrangersi sugli strati dell'atmosfera arrivando poco dopo le onde dirette. Le onde in ritardo possono arrivare fuori fase rispetto alle onde dirette, causando l'annullamento del segnale. Questo effetto viene chiamato Multipath Fading . Possono essere assorbite dalla pioggia e riescono a trasportare parecchi bit per herz. E’ possibile raggrupparle in un fascio tramite le antenne paraboliche in modo da migliorare il rapporto S/N. Infrarossii e onde Millimetriche (2.3.4) Infraross
I raggi infrarossi vengono utilizzati per le comunicazioni a corto raggio. Questo sistema è direzionale, facile da costruire e poco costoso. L'aspetto negativo è che non supera gli ostacoli solidi, mentre il lato positivo è che un sistema infrarosso non interferirà mai con un altro sistema infrarosso anche se si trovano nelle immediate immediate vicinanze non possono essere utilizzati utilizzati all’aperto o in presenza di elevate fonti di calore RETE TELEFONICA PUBBLICA COMMUTATA (2.5)
Per il collegamento di due pc dello stesso edificio si usa un collegamento LAN, ma se si volesse far comunicare due pc posti in luoghi diversi, risulterebbe troppo costoso dedicare una linea per la comunicazione. Per tale motivo, i progettisti si sono affidati ai sistemi di comunicazione già esistenti, con l'inconveniente però che tali sistemi erano ottimizzati per la comunicazione vocale e non per quella dati. Struttura del sistema telefonico (2.5.1)
Quando fu concepito il sistema telefonico (Bell), permettendo la comunicazione tra due telefoni collegati tramite una linea dedicata, si capì subito che un utente non poteva avere n telefoni per poter comunicare con n persone diverse e pertanto successivamente si decise di collegare tutti i telefoni ad una centrale di commutazione che aveva il compito di smistare le telefonate. Tuttavia, con il crescere degli utenti e con la crescente esigenza di comunicare anche con utenti di altre città venne creata una centrale di commutazione di secondo livello , che poteva collegare centrali di commutazione di zone diverse della stessa città o di città diverse (le cosiddette chiamate interurbane). I Collegamenti Locali: Modem, Adsl, Connessioni Wireless (2.5.3)
Per inviare i dati digitali attraverso una linea telefonica (analogica), il computer (digitale) ha bisogno di convertire i dati da digitale ad analogico. Questa conversione è eseguita dal modem (modulatore/demodulatore). I principali problemi delle linee di trasmissioni sono: Attenuazione:
rappresenta la perdita di energia causata dalla propagazione del segnale
verso l'esterno;
Distorsione:
dovuta al fatto che le componenti di Fourier si propagano anche a velocità differenti, causando la distorsione del segnale ricevuto dall'altro capo;
Rumore: rappresenta l'energia indesiderata generata da
sorgenti esterne al trasmettitore.
Per aggirare questi problemi associati alla trasmissione, viene introdotto un tono continuo, chiamato portante d'onda sinusoidale. La sua ampiezza, frequenza e fase possono essere modulate per trasmettere informazioni. informazioni. 17
Nella modulazione di ampiezza, sono utilizzate due ampiezze diverse per rappresentare i bit 0 e 1. Nella modulazione di frequenza si utilizzano due o più toni; Nella modulazione modulazione di fase l'onda portante portante è spostata da 0 a 180 gradi per rappresentare i bit. Quindi un cambiamento di fase indica un cambiamento di bit.
Per trasmettere le informazioni, si usa quindi la combinazione di due tipi di modulazione: o la modulazione di ampiezza con quella di frequenza, oppure la modulazione di ampiezza con quella di fase. Il dispositivo che fa questo tipo di lavoro è chiamato modem. il numero di campioni al secondo è misurato in baud. Durante ogni baud viene trasmesso un singolo, ovvero bit. Il modem utilizza le tecniche sopra citate per poter trasmettere più bit per baud. Questo avviene modulando sia l'ampiezza sia la fase della portate. Esse vengono rappresentate tramite diagrammi a costellazioni dove ogni punto ha una sua ampiezza (distanza dall'origine) e fase (l'angolo che forma il punto con l'asse delle x). Ad esempio un diagramma con quattro combinazioni valide può essere utilizzata per trasmettere due bit per simbolo. Con il passare del tempo i diagrammi si sono evoluti fino a rappresentare più bit per baud.
Linee DSL
Con il tempo nacque l'esigenza di avere un prodotto più competitivo. Nacquero i servizi a banda larga, che utilizzano una banda superiore a quella del sistema telefonico. Il trucco sta nel togliere il filtro alla linea di comunicazione. comunicazione . Tale filtro venne adoperato nei sistemi telefonici perchè per trasmettere la voce bastava una banda di 4000Hz. La linea DSL quindi utilizza tutto lo spettro pari a 1,1Mhz. Esso viene suddiviso in 256 canali di 4312,5Hz ciascuno. Il canale 0 è utilizzato per la comunicazione vocale; i canali da 1 a 5 non sono utilizzati, per evitare che il segnale dei dati e quello vocale interferiscano tra loro; un canale è utilizzato per il controllo della trasmissione ed un altro per la ricezione. Tutti gli altri canali sono a disposizione degli utenti. Di solito l'80% dei canali è dedicato al download e il restante 20% all'upload, per questo viene chiamato ADSL, dove la “A” sta per asincrono. Nei modem per aumentare il throughput si modula la portante sia sia in fase che in ampiezza;attraverso ampiezza;attraverso gli schemi di costellazioni,avendo costellazioni differenti i modem all’inizio fanno un fischio che serve per cercare gli altri dispositivi modem e stabilire una connessione,prima si parte da 1 bassa velocità e poi via via si aumenta per testare la qualità della linea. Per ovviare al basso throughput delle linee,sono stati introdotti anche alcuni sistemi di compressione dati in tempo reale. Infatti data la lentezza delle linee, i vantaggi derivanti dalla compressione compensano altamente i ritardi dovuti alle fasi di compressione-decompressione. Una configurazione tipica dell’ADSL è la seguente: il tecnico della società telefonica installa un 18
NID nell’edificio del cliente(segnala la fine della proprietà dell’azienda telefonica e l’inizio di quella del cliente). Accanto al NID si trova lo splitter, filtro analogico che divide i dati dalla banda 0-4.000Hz utilizzata per POTS. Il segnale POTS è inviato all’apparecchio telefonico, mentre i dati sono instradati verso il modem ADSL. Il modem ADSL è un elaboratore di segnali digitali, che fa le veci di 250 modem che operano in parallelo a diverse frequenze. Per quanto riguarda la centrale locale, deve essere installato un analogo splitter. Qui il segnale vocale è filtrato e inviato al normale commutatore per il traffico vocale. Il segnale sopra i 26kHz, invece, è passato ad un dispositivo chiamato DSLAM che contiene lo stesso tipo di processore di segnale digitale integrato nel modem ADSL. Dopo essere stato riorganizzato in flussi di bit, il segnale digitale è prima organizzato in pacchetti e poi inviato all’ISP. Lo svantaggio di questa configurazione è la presenza del NID e dello splitter nella casa del cliente. Dato che questi due componenti possono essere installati solamente da personale tecnico, tecnico, per il cliente ha un costo da sostenere. Per ovviare a questo inconveniente è stato creato uno standard basato su una configurazione che non usa splitter. Questo standard è chiamato G.lite. Quindi la linea telefonica è usata cosi com’è; l’unica differenza è che si deve interporre un microfiltro tra ogni presa telefonica e il telefono o modem collegato. Il filtro per il telefono fa da low-pass che elimina le frequenze sopra i 3.400Hz; il filtro per il modem ADSL è un high-pass che elimina le frequenze sotto i 26kHz. Linee e Multiplexing (2.5.4)
Usare una linea dedicata per ogni comunicazione risulterebbe molto costoso. Di conseguenza si è sviluppato sviluppato un modo per poter utilizzare utilizzare lo stesso canale canale per effettuare più comunicazioni comunicazioni.. Ecco alcune tecniche: Multiplexing a Divisione di Frequenza (FDM)
Questa tecnica permette di creare più comunicazioni sullo stesso canale. In pratica ogni canale ha una ampiezza di banda limitata di 3100Hz. Quando si uniscono in multiplexing ai canali, sono allocati 4000Hz per canale in modo da ottenere una separazione tra i canali. Quando si fa l'unione tra i canali, si sta attenti a non sovrapporli. Quindi ad ogni canale viene associata una frequenza di 4000 Hz. La frequenza di ogni canale vocale viene aumentata di una quantità diversa. A questo punto si fa l’unione dei canali facendo attenzione a non sovrapporli
Multiplexing a Divisione di Ampiezza (AM) Fase(PM) e Frequenza Frequenza (FM)
Abbiamo il nostro segnale, ogni segnale ha la sua portante se si fa 1 modulazione in ampiezza viene fatta una moltiplicazione dei segnali. 19
Modulazione avviene attraverso la formula: A sen (wt + y) Se modifichiamo A modifichiamo ampiezza W modifichiamo frequenza FM Y modifichiamo fase PM
Multiplexing a Divisione di Lunghezza d'onda (WDM)
E' molto simile alla tecnica FDM con la differenza che questa è applicata alle fibre ottiche. Le varie fibre, che hanno una potenza diversa, vengono combinate in un combinatore ottico che trasmette i vari segnali su una fibra condivisa. All'altro capo vi è collegato uno splitter che suddivide il segnale. Ogni fibbra inserita inserita contiene uno spezzone di core che filta tutte le lunghezze lunghezze d'onda tranne quella associata, che sarà l'unica a passare.
Multiplexing a Divisione di Tempo (TDM)
Con questa tecnica, ogni utente utilizza tutta la banda, ma a turno con gli altri utenti. Se abbiamo una bada di 10Mbps gli slot sn divisi in 10 slot da 0,1 1 Mb Può essere gestita da dispositivi digitali, ma può essere utilizzata solo per dati digitali e pertanto deve essere eseguita una conversione da analogico in digitale nella centrale locale per mezzo di un dispositivo chiamato codec-decoder che genera una serie di numeri a 8 bit. Il codec elabora 8000 campioni al secondo (125 nicro sec campione) perché per il teorema di nyquist questa velocità è sufficiente a catturare tutte le informazioni dell’ampiezza di banda del canale telefonico a 4 Khz. Con velocità inferiore si perderebbero informazioni, mentre con velocità superiori non si guadagnerebbe niente.Questa tecnica è chiamata PCM. Commutazione (2.5.5)
Il sistema telefonico è diviso in due parti principali:
l'impianto esterno: fili e linee collegate all'esterno delle centrali di commutazione) l'impianto interno: commutatori. 20
Commutazione di Circuito
Con questa tecnica l'apparecchiatura di commutazione crea un percorso fisico tra il chiamante e il chiamato. Quindi si crea un percorso dedicato che dura fino al termine della chiamata. La caratteristica più importante di questa tecnica è quella di stabilire un percorso tra le due parti che vogliono comunicare prima di trasmettere i dati. Una volta creato il percorso, l'unico ritardo per i dati è quello dovuto al tempo di propagazione del segnale elettromagnetico. Commutazione di Pacchetto
Con questa tecnica i singoli pacchetti vengono trasmessi all'occorrenza e non viene impostato nessun percorso dedicato in anticipo. Ogni pacchetto trova da solo una via per la destinazione. Con questa tecnica vengono accettati solo pacchetti che hanno una dimensione che non superi quella limite. Inoltre assicura che un utente non monopolizzi la rete per troppo tempo, gestendo il traffico interattivo. Un messaggio è diviso in più pacchetti ed un notevole vantaggio si ha dal fatto che il primo pacchetto può essere inviato prima che il secondo sia completamente arrivato, in maniera totalmente indipendente. Infatti ogni pacchetto, può scegliere una destinazione diversa. Il vantaggio sta nel fatto che se un commutatore si blocca i pacchetti possono essere instradati aggirando i commutatori bloccati, cosa che non potrebbe avvenire in una rete a commutazione di circuito, in quanto se un commutatore si blocca viene chiusa tutta la comunicazione. Quando si utilizza la commutazione di pacchetto, non si riserva alcuna ampiezza di banda, perciò ogni pacchetto deve aspettare il proprio turno, mentre nella commutazione di circuito la preimpostazione di percorso riserva in anticipo l'ampiezza di banda. Quest'ultimo, come svantaggio ha quello di sprecare banda quando un utente non ha niente da comunicare, cosa che non avviene nella commutazione di pacchetto. Usa la tecnica di trasmissione STORE AND FOREWARD per cui un pacchetto è temporaneamente memorizzato nella memoria del router, e poi viene inviato nel router successivo.Questa tecnica aggiunge un ritardo nella propagazione. propagazione. CDMA (Code Dimission Multiple Access) (2.6.2) Il CDMA a differenza delle altre due tecniche TDMA e FDMA,
permette ad ogni stazione di trasmettere per tutto il tempo attraverso l'intero spettro di frequenza. Le trasmissioni multiple avvengono attraverso la teoria della codifica. Ogni stazione che trasmette ha un proprio codice. Nel CDMA ogni tempo di bit è suddiviso in m intervalli brevi chiamati chip. A ogni stazione è assegnato un codice univoco chiamato sequenza di chip. Quando una stazione deve trasmettere combina i bit di dati con la sequenza di chip (mediante il prodotto), ottenendo in uscita la sequenza da trasmettere. A destinazione, il ricevitore, per ottenere i dati, moltiplica la sequenza ottenuta per la sequenza di chip, somma il risultato ottenuto e lo divide per M (dove M è la dimensione dei bit di dati). La stessa cosa succede se due o più stazioni vogliono comunicare. Ognuna di esse applica la propria sequenza di chip ai propri bit di dati da trasmettere. Ciò che si ottiene viene sommato e trasmesso. A destinazione, il ricevitore, sapendo quali dati ricevere, applica una determinata sequenza di chip per ottenere i bit di dati. I limiti fisici del canale riducono naturalmente la capacità del CDMA. Ad esempio è impossibile avere la sincronizzazione dei chip.
21
CAPITOLO 3 LIVELLO DATA LI N NK
Progetto dello dello Strato Data Link (3.1)
Questo strato ha diverse funzioni, tra cui: 1.
Fornire un ben definito servizio di interfaccia allo strato network
2.
Gestire gli errori di trasmissione
3.
Gestire il controllo di flusso
Per offrire questi servizi, lo strato Data Link prende i pacchetti dallo strato network e li incapsula in frame per trasmetterli. trasmetterli. Ogni frame contiene contiene una intestazione intestazione (Header), un campo di carico carico utile dove risiede il pacchetto e una coda del frame. Servizi forniti allo Strato Network (3.1.1)
Il servizio principale dello strato Data Link è quello di trasferire dati dallo strato network dell'host sorgente allo strato network dell'host di destinazione. Il livello Data Link offre anche i servizi unack senza connessione, ack senza connessione, ack orientato alla connessione. Nel primo (unack senza connessione), la sorgente invia in modo indipendente i pacchetti alla destinazione, senza che quest'ultima debba rispondere con un ack, cioè un messaggio di avvenuta ricezione. Se un frame viene viene perso, non viene fatto nessun nessun tentativo tentativo di correggere o di rilevare la perdita nello strato Data Link. Questa classe di servizio si usa solo quando la frequenza di trasmissione trasmissione degli errori è molto alta.Utile nel traffico real-time, real-time, trasmissione voce Nel secondo tipo di servizio (ack senza connessione) non si usa alcun tipo di connessione logica, ma ogni frame viene inviato. In questo modo il mittente riesce a sapere se un frame è arrivato a destinazione in modo corretto oppure no. Se non arriva l'ack in uno specifico intervallo di tempo, il frame può essere rispedito.Utile nei canali poco affidabili come il Wireless. Nel terzo tipo di servizio (ack orientato alla connessione) la sorgente e la destinazione stabiliscono una connessione connessione prima di inviare i dati. ogni frame, frame, prima di essere inviato inviato viene numerato e lo strato Data Link garantisce che venga effettivamente ricevuto nell’ordine corretto. Il trasferimento avviene in 3 fasi: si stabilisce connessione: si trasferiscono i frame tenendo traccia di quali sono stati ricevuti e quali no; si rilascia la connessione. Suddivisione in Frame Frame (3.1.2)
Per servire lo strato network, lo strato Data Link deve usare a sua volta il servizio che gli è stato fornito dallo stato fisico, il quale ha come compito quello di prendere un flusso di bit e cercare di portarli a destinazione con la probabilità di avere errori. Quello di rilevare, ed eventualmente correggere gli errori, è uno dei compiti dello strato Data Link. Quando preleva il flusso di bit, lo strato Data Link suddivide tale flusso in frame e calcola il checksum di ogni frame. Quando arriva a destinazione, il checksum del frame viene ricalcolato. Se è uguale a quello del frame lo accetta, in caso contrario manda un messaggio di errore. Per delimitare l'inizio e la fine di un frame sono stati 22
utilizzati diversi metodi. Bisogna stabilire clock o il bit rate per sapere quanti 1 ci sono graficamente. Quindi viene usato un contattore che conta gli 1 e appena contattore arriva a 5 mette uno 0 Conteggio dei caratteri
Questo metodo di framing prevede l'uso di un campo nell'intestazione del frame che ne indica la lunghezza. In questo modo si conosce a priori la lunghezza del frame, quindi dove questo frame finisce e dove inizia il successivo con un ulteriore campo nell'intestazione. L'unico problema di questo algoritmo è che, se per errore di trasmissione si dovesse alterare il campo di conteggio, il destinatario destinatario andrebbe fuori sincronia e non sarebbe in grado di trovare l'inizio del frame successivo. Inoltre non risulta neanche conveniente mandare un frame alla sorgente per chiederne la ritrasmissione, perchè il destinatario non riesce a sapere quanti caratteri deve saltare per arrivare all'inizio della nuova trasmissione.
Flag Byte con Byte Stuffing
Questa tecnica aggira il problema della sincronizzazione, sincronizzazione, causa errore di trasmissione, introducendo un byte speciale all'inizio e alla fine del frame. Questo prende il nome di Flag Byte . In questo modo, quando il destinatario perde la sincronia, può semplicemente cercare il flag byte per trovare la fine del frame corrente. Due Flag Byte consecutivi indicano la fine di un frame e l'inizio di un altro. Dato che un flag Byte è una sequenza di bit, può capitare che questa (che non è un flag) compaia nella parte dati del frame. Per evitare che questo interferisca con le operazioni di framing, la sorgente inserisce inserisce un byte speciale di Escape (ESC) subito prima di ogni occorrenza occidentale del flag byte nei dati. Lo strato Data Link della destinazione provvederà a rimuovere il byte di escape prima di passare il frame allo strato network. Questa tecnica è chiamata Byte Stuffing . Il flag byte è composto composto da STX DLE all’inizio all’inizio frame e DLE ETX alla fine del frame; se nel nostro nostro messaggio compare all’interno del frame DLE lo si raddoppia così destinazione capisce che non è un fine di frame ma fa parte parte del frame. Vantaggi è quello di riconoscere sempre inizio e fine frame Svantaggi utilizziamo più livelli quindi spreco di banda perché ci sono i bit di controllo
23
Flag di Inizio e Fine con Bit Stuffing Stuffi ng
La tecnica appena descritta ha lo svantaggio di essere legata all'uso di caratteri a 8 bit. Quindi si è sviluppata una nuova tecnica che consente di gestire i caratteri di lunghezza arbitraria. Si creano così frame e codifiche con un numero arbitrario di bit. Ad esempio, ogni frame inizia e finisce con un gruppo speciale di bit, 01111110 . Per ovviare al problema di trovare questa stessa sequenza nei bit dei dati e quindi confonderli con bit speciali, ad ogni 5 1 che incontra, la sorgente aggiunge uno 0 e poi trasmette il frame. A destinazione il livello Data Link toglie questi 0 e passa il frame allo strato network. Questa tecnica è chiamata Bit Stuffing . Violazioni della codifica nello Strato Fisico
Questa tecnica viene applicata solo alle reti in cui la codifica contiene delle ridondanze a livello fisico. Quindi il bit 1 è rappresentato da una coppia alto-basso , mentre il bit 0 da una coppia bassoalto. Ogni bit di dati deve poi avere una transizione, rendendo facile alla destinazione la decodifica della posizione dei singoli bit. Quindi per rappresentare i frame utilizziamo tre livelli, che per il teorema di Nyqueist significa che il massimo bit rate trasmissibile è abbastanza elevato ma, in realtà, un livello viene utilizzato per la transizione, quindi non trasporta dati. Codici per la Correzione degli Errori (3.2.1)
Gli architetti delle reti hanno sviluppato due strategie di base per gestire gli errori:
codifica a correzione d'errore d'errore :
consiste nell'includere in ciascun blocco dati trasmesso una quantità di informazioni ridondanti tale da permettere di ricostruire il contenuto del blocco in caso di errore. L'uso di questa codifica è spesso indicata come forward error correction (correzione d'errore in anticipo). codifica a rilevazione d'errore :
consiste nell'introdurre abbastanza ridondanza da permettere alla destinazione di capire che c'è stato un errore, ma non di correggerlo. In questo modo la destinazione potrà richiedere una ritrasmissione del blocco di dati.
La scelta di queste tecniche dipendo molto dal tipo di canale utilizzato. Nel caso di fibre ottiche, che sono piuttosto affidabili, è più conveniente usare codifiche a rilevazione rilevazione di errore e limitarsi a ritrasmettere quei blocchi che eventualmente risultino risultino corrotti. Invece su canali molto rumorosi, come quelli wireless, risulta più conveniente usare una codifica a correzione di errore in modo che ad ogni blocco venga aggiunta una ridondanza tale da permettere alla destinazione di ricostruire il blocco in caso di errore. Distanza di Hamming
Normalmente un frame consiste di m bit di dati (cioè il messaggio) e r bit bit ridondanti per i controlli. Chiamiamo la lunghezza totale n dove n=m+r . Un'unità di n bit che contiene dati e bit di controllo viene chiamata codeword di n bit. Prendiamo due codeword, per esempio 10001001 e 10110001 ; per determinare quanti bit corrispondenti corrispond enti sono differenti nelle due codeword basta eseguire l'OR esclusivo e contare il numero di bit a 1 nel risultato. Ad esempio: 10001001 10110001 00111000 In questo caso ci sono 3 bit differenti. Il numero di bit corrispondenti diversi nelle due sequenze viene detto distanza di Hamming. Se due codeword sono ad una distanza di Hamming pari a d , significa significa che ci vorranno d errori su singoli bit per convertire una sequenza nell'altra. Nella maggior 24
m
parte delle applicazioni di trasmissioni dati, tutti i 2 possibili messaggi sono legali, ma per via del n modo in cui sono calcolati i bit di controllo, non tutte le 2 codeword vengono utilizzate. Quindi, considerando le codeword utilizzate, troviamo quelle con la minima distanza di Hamming . Questa sarà per definizione la distanza di Hamming dell'intera codifica. Le proprietà di rilevazione e correzione degli errori dipendono dalla sua distanza di Hamming. Per trovare d errori è necessario una codifica con distanza d+1, in quanto con tale tale codifica non esiste un modo modo in cui d errori su singoli bit possano cambiare una codeword valida in un'altra ancora valida. Per correggere d errori abbiamo bisogno di una codifica con distanza 2 d +1, +1, in maniera tale che le codeword legali siano distanziate tra di loro tanto che anche con d cambiamenti la codeword originale è sempre più vicina di ogni altra codeword e può essere determinata univocamente. 110
010
011
111 100 000
001
Valide 000 011 110 101
Non valide 111 100 010 001
V
NV
101
Codifiche a rilevazione di errore (3.2.2)
Questa tecnica di codifica permette di introdurre parecchia ridondanza nei frame di dati da inviare, in modo che la destinazione capisca che c'è un errore dovuto alla trasmissione ma non di correggerlo. Un semplice esempio di codifica è il bit di parità. Bit di Parità
Un semplice esempio di codifica a rilevazione di errore si può realizzare aggiungendo un bit di parità ai dati. Il bit di parità viene calcolato in maniera tale che il numero di 1 nella codeword sia sempre pari (o dispari). Per esempio, per trasferire il bit 1011010 con parità pari bisogna aggiungere lo 0 al precedente frame, mentre per avere una parità dispari bisogna aggiungere 1. Naturalmente se abbiamo 2 4 6 errori fa risultare parola corretta Parità a Due Dimensioni
Con questa tecnica si considera ogni blocco da trasmettere come una matrice di n colonne e k righe. Un bit di parità viene calcolato separatamente per ogni colonna ed aggiunto come ultima riga della matrice. La matrice sarà poi trasmessa una riga per volta. All'arrivo del blocco, la destinazione controlla tutti i bit di parità. Se uno qualunque di questi bit è errato, la destinazione chiede la ritrasmissione ritrasmissione del blocco. Affinché si correggano gli errori dobbiamo usare una matrice: bit calcolar calcolaree bit parità parità x riga 101 0 110 0 010 1 001 1 calcol calcolaa bit parit paritàà x colonn colonnaa 25
battaglia navale capisce dov’è l’errore!! Svantaggio che abbiamo un ritardo perche deve memorizzare tutto in un buffer si aumenta la complessità complessità riesco a rilevare 2 errori ma 4 errori messi hai vertici non li vedo. CRC (Controllo Ciclico di Ridondanza) detta anche Codifica Polinomiale
Serve per il rilevamento degli errori. Viene utilizzato per le trasmissioni wireless in quanto molto rumorose e piene di errori. Con questa tecnica è possibile rilevare errori, ma non è possibile correggerli. La codifica codifica polino polinomial mialee z2 si usa perché perché somma e sottrazi sottrazione one coincido coincidono no tra loro; si basa sul sul fatto di trattare le sequenze di bit come dei polinomi a coefficienti che possono assumere solo i valori 0 oppure 1. Un frame di k bit bit è visto come una lista di coefficienti per un polinomio con k termini che 0 k − 1 variano da x a x . Quando si usa la codifica polinomiale, la sorgente e la destinazione devono concordare in anticipo un polinomio generatore, G(x). Il generatore deve avere i bit di ordine più alto e più basso uguali a 1. Per poter calcolare il checksum di un frame di m bit che corrisponde al polinomio M(x), il frame deve essere più lungo del polinomio generatore. L'idea è quella di aggiungere un checksum alla fine del frame definitivo che viene trasmesso a destinazione in modo che il polinomio rappresentato dal frame con checksum (nella figura sottostante tale polinomio è: 11010110111110) 11010110111110) sia divisibile per G(x). Quando alla destinazione destinazione arriva il frame con checksum e, dividendolo per G(x) c'è un resto, allora c'è stato un errore di trasmissione. Se invece non c'è resto, allora non ci sono stati errori. L'algoritmo per calcolare il checksum funziona nel seguente modo:
Posto r il grado di G(x), aggiungere r bit bit con valore 0 dopo la parte di ordine più basso del r frame, così che adesso contenga m+r bit bit e corrisponda al polinomio x M x ; Nella figura, il generatore è 10011 che ha grado 4. Quindi si aggiunge 0000 al frame 1101011011. Quindi il messaggio che la sorgente sorgente dividerà per il polinomio generatore generatore è 11010110110000. 11010110110000.
Dividere il messaggio messaggio così ottenuto (11010110110000) (11010110110000) per il polinomio generatore (10011). (10011). Se il grado del risultato delle singole divisioni è >= del dividendo (ad esempio 10110) si divide per il polinomio generatore (10011). In caso contrario si divide per un polinomio di grado inferiore (ad esempio 00101 / 00000).
Alla fine della divisione, si prende il resto (nella figura è 1110) e si aggiunge alla fine del frame. Quindi verrà mandato a destinazione il frame 11010110111110.
CRC 12 ha come massimo grado del polinomio x 12; CRC CRC 16 16 x16 in base alla lunghezza del file naturalmente 1 file da 1 giga nn viene controllato da un CRC 16.
26
27
Ridondanza
Supponiamo di progettare una codifica con m bit di dati e r bit di controllo in maniera tale da m correggere tutti gli errori singoli. Per ognuno dei 2 messaggi legali, esistono n codeword illegali a distanza 1 che si ottengono invertendo sistematicamente ognuno degli n bit della codeword legale. m Per questo motivo ognuno dei 2 messaggi ha bisogno di n+1 combinazioni dedicate. Poiché il n numero totale di combinazioni di bit è 2 si ha: n+ 1 2m ≤ 2 n
=
m
Sostituendo
m+r+ 1 2 ≤ 2
[n ]
n=m+r,
la disuguaglianza diventa
; 2m+2r >=2m (m+r+1); 2r >= m+r+1; 2r -r>=m+1
Questa disuguaglianza impone un limite al numero di bit di controllo necessari per correggere gli errori singoli. Codici di Hamming
Questo limite teorico può essere effettivamente raggiunto usando un metodo dovuto a Hamming. I bit della codeword sono numerati consecutivamente a partire da 1 per il primo bit sulla sinistra, 2 per quello immediatamente immediatamente alla sua destra e così via. I bit che sono potenza di 2 (1, 2, 4, 8, 16, ecc.) sono i bit di controllo, mentre i restanti bit (3, 5, 6, 7, 9, ecc.) sono riempiti con m bit di dati. Ogni bit di controllo forza la parità di alcuni gruppi di bit, incluso se stesso, a essere pari (o dispari). Un bit può essere incluso in diversi calcoli di parità. Per vedere quali bit di controllo sono legati a un certo bit di dati, basta riscrivere ogni bit di dati k come somma di potenza di 2 (ovvero come somma di bit di controllo). Per esempio 11=1+2+8 e 29=1+4+8+16. In questo modo, un bit di dati è controllato solo da quei bit di controllo che compaiono nella somma (per esempio 11 è controllato solo dai bit 1, 2 e 8). Quando una codeword viene ricevuta, la destinazione inizializza il contatore a 0. A quel punto controlla ogni bit di controllo k per per vedere se la parità è corretta e, in caso contrario, aggiunge il valore k al contatore. Se, quando tutti i bit di controllo sono stati esaminati, il contatore è ancora a 0 (cioè se non sono stati rilevati rilevati errori), la codeword viene viene accettata come come valida. In caso contrario, il valore non nullo del contatore indica il numero del bit in errore. Per esempio se i bit di controllo 1, 2 e 8 sono in errore, il bit invertito è 11; infatti questo è l'unico che viene controllato controllato dai bit di controllo 1,2 e 8. Le codifiche di Hamming riescono a correggere solo errori singoli, ma si può fare in modo che tale codifica riesca a correggere anche errori burst . Una sequenza di k codeword consecutive consecutive è disposta riga per riga in modo da formare una una matrice. Normalmente i dati sono trasmessi una codeword alla volta, riga per riga. Per correggere gli errori burst invece, i dati vengono trasmessi colonna per colonna a partire dalla prima a sinistra. Quando tutti i k bit bit della prima colonna sono stati inviati si procede con la seconda e così via. Dopo che il frame è arrivato a destinazione, la matrice viene ricostruita colonna per colonna. Se si verifica un errore burst di lunghezza k , al massimo 1 bit per ogni codeword sarà toccato, ma sappiamo che la codifica di Hamming riesce a correggere 1 errore per codeword, e quindi l'intero blocco può essere corretto.
28
PROTOCOLLI DATA LINK ELEMENTARI (3.3)
Prima di iniziare a parlare dei protocolli usati dal livello Data Link, è utile dare qualche definizione. Un pacchetto rappresenta l'informazione che viene scambia tra lo strato Network e quello Data Link della stessa macchina, oppure tra gli strati Network di macchine comunicanti. Un frame rappresenta una una porzione del flusso di bit bit prelevati dallo strato strato fisico il quale quale viene appunto suddiviso in frame. Esso è composto da 4 campi: kind, seq, ack e info. I primi tre contengono le informazioni di controllo, mentre l'ultimo contiene i dati da trasferire. I campi con le informazioni di controllo vengono anche dette intestazione del frame (frame header ). Il campo kind specifica il tipo di frame e serve a capire se il frame contiene dati oppure solo informazioni di controllo. Ciò serve perché alcuni protocolli distinguono i frame che contengono solo informazioni di controllo da quelli che contengono anche dati. i campi seq e ack sono usati rispettivamente per i numeri di sequenza e per l'acknowledgement. l'acknowledgement. Il campo info contiene un singolo pacchetto. A questo punto è utile enfatizzare la relazione che c'è tra pacchetto e frame. Nella macchina “mittente” lo strato Network costruisce i pacchetti prendendo i messaggi dallo strato Trasporto e gli aggiunge un'intestazione un'intestazione di tipo network (header dello strato network). Questo pacchetto viene passato allo strato Data Link che lo include nel campo info del frame in uscita. Quando il frame arriva a destinazione, lo strato Data Link della macchina “destinazione” estrae il pacchetto dal frame e lo passa allo strato Network. In questo modo, lo strato Network agisce come se le due macchine si stessero scambiando direttamente i pacchetti. Protocollo 1: Simplex senza restrizioni o Heaven (3.3.1)
Questo protocollo, protocollo, usato su canali simplex, simplex, cioè dove i dati sono trasmessi in una sola direzione, è basato sulle ipotesi (non realistiche) che:
i frame vengono trasmessi in una sola direzione;
le peer entity del livello Network sono sempre pronte (cioè non devono mai attendere per inviare o ricevere dal/al livello Data Link);
non si conosce il tempo di elaborazione del livello Data Link;
C'è spazio infinito per il buffering nel ricevitore;
il canale fisico non commette mai errori.
Il protocollo consiste in due procedure: un mittente e un destinatario, entrambi a livello Data Link. Mittente (l ( loop infinito) 1. 2. 3. 4.
Destinatario (l ( loop infinito)
attende un pacchetto dal livello network; costruisce un frame dati; passa il frame al livello fisico; torna al punto 1.
attende evento: * arriva il frame da livello fisico; 2. estrae pacchetto; 3. lo passa passa al livello network; 4. torna al punto 1. 1.
Protocollo 2: Simplex Simplex Stop-and-Wait (canale half-duplex) (3.3.2)
Questo protocollo è basato sulle ipotesi non realistiche viste per il precedente, ma con una sola differenza: in questo caso si suppone che il buffer nel ricevitore non sia infinito. Questa differenza 29
porta a dover rallentare opportunamente il mittente. Questo rallentamento non si può fare utilizzando dei ritardi prefissati in quanto sarebbe troppo gravoso, perché dovrebbero essere calibrati sul caso pessimo, che non sempre si verificherà. La soluzione consiste nell'invio, da parte del destinatario, di una esplicita autorizzazione all'invio del prossimo frame. Questo tipo di protocolli, nei quali il mittente attende un OK dal destinatario, vengono chiamati stop-and-wait . Ecco uno schema del loro funzionamento: Mittente (l ( loop infinito)
Destinatario (l ( loop infinito)
attende un pacchetto dal livello network; costruisce un frame dati; passa il frame al livello fisico; attende un evento: *arriva un frame di ack (vuoto); (vuoto); torna al punto 1.
5. 6. 7. 8.
attende evento: * arriva il frame da livello fisico; 9. estrae pacchetto; 10. lo passa al livello network; 11. invia un frame di ack (vuoto) al mittente; 12. torna al punto 1.
Si noti che, sebbene il traffico dati viaggi in una sola direzione (simplex), i frame viaggiano in entrambe, dunque ci vuole un canale almeno half-duplex (c'è' alternanza stretta nelle due direzioni). Protocollo 3: Simplex per canali Rumorosi Rumorosi (3.3.3) (3.3.3)
In questo protocollo protocollo si assume che ilil canale possa fare fare errori. I frame (dati o ack) possono possono essere danneggiati o persi completamente. Se un frame arriva danneggiato, l'HW di controllo del checksum se ne accorge e informa il SW di livello data link; se il frame si perde del tutto, ovviamente, la cosa non si rileva. Per ovviare a questo problema si introduce l'uso di un timer in modo che, se il mittente non riceve l'ack di conferma ricezione da parte del destinatario entro la scadenza del timer, invierà nuovamente il frame. Tuttavia, il solo timer non è sufficiente. Infatti potrebbe verificarsi la seguente situazione:
Il mittente invia il frame x al destinatario; destinatario;
Il destinatario riceve il frame x e invia un ack di avvenuta ricezione, ma questo ack si perde completamente completamente a causa di errori;
il mittente, non ricevendo l'ack entro la scadenza del timer, invia nuovamente il frame x.
ERRORE!!!
Il livello network della destinazione riceve due copie di x.
Per risolvere questo inconveniente è necessario che il destinatario possa riconoscere gli eventuali doppioni. Ciò si ottiene sfruttando il campo seq dell'header, dove il mittente metterà il numero di sequenza del frame dati inviato. Fino a quando un frame non viene confermato, e' sempre lui ad essere ritrasmesso, altrimenti e' il suo successore. Per il numero di sequenza è sufficiente 1 bit. Dunque, sia mittente che destinatario useranno, come valori per i numeri di sequenza, la successione ...01010101... Il mittente trasmette i frame dati alternando 0 ed 1 nel campo seq e passerà a trasmettere il prossimo frame solo quando riceve l' ack di quello precedente. Il destinatario invia un frame di ack per tutti quelli ricevuti senza errori, ma passerà al livello 30
Network solo quelli con il numero di sequenza atteso. Protocolli come questo, in cui il mittente aspetta un ack di conferma prima di trasmettere il prossimo frame, si chiamano PAR (Positive Ack with Retransmission) o ARQ (Automatic Repeat Request).
PROTOCOLLI SLIDING SLIDING WINDOW O A FINESTRA FINESTRA SCORREVOLE SCORREVOLE (3.4)
Nei casi precedenti i frame di dati e quelli di ack viaggiano in una sola direzione, i primi in un senso e gli altri in senso opposto. Pertanto possiamo affermare che esistono dei frame che viaggiano in entrambe le direzioni. Volendo stabilire una comunicazione dati bidirezionale è necessario disporre di due circuiti, il che ovviamente e' uno spreco di risorse. Un'idea migliore e' quella di usare un solo circuito, nel quale far convivere tutte le esigenze. Supponendo che la comunicazione sia fra A e B, si avra' che:
nella direzione da A a B viaggiano i frame dati inviati da A a B e i frame di ack inviati da A a B (in risposta ai frame dati inviati da B ad A); nella direzione da B a A viaggiano i frame dati inviati da B a A e i frame di ack inviati da B a A (in risposta ai frame dati inviati da A ad B); Frame da dati da A a B
Frame ack da A a B
A
B
Frame dati da B a A
A
Frame ack da B a A
B
31
Il campo kind serve a distinguere fra i due tipi di frame, di dati e di ack, che viaggiano nella stessa direzione. In realtà esiste esiste una soluzione migliore: migliore: se, quando si deve deve inviare un ack da B ad A, si aspetta aspetta un po' finché e' pronto un frame dati che B deve inviare ad A, si puo' "fare autostop" e mettere dentro questo frame dati anche le informazioni relative all'ack in questione. Questa tecnica si chiama piggybacking (letteralmente, (letteralmente, portare a spalle). Il campo ack serve proprio a questo scopo, infatti è il campo in cui viene trasportato, se c'è, un ack. Questa tecnica consente un notevole risparmio di banda utilizzata e di uso della CPU poiché, così facendo, le informazioni di ack non richiedono la costruzione di un apposito frame (e quindi il tempo necessario alla creazione, al riempimento della struttura, al calcolo del checksum, ecc.) né la sua trasmissione (e quindi l'uso di banda). Tuttavia c'è un aspetto da non trascurare: per quanto può aspettare un frame su cui trasportare un ack che è pronto e deve essere inviato? Non troppo, perché se l'ack non arriva in tempo il mittente ritrasmetterà ritrasmetterà il frame anche se ciò non e' necessario. necessario. Dunque si stabilisce stabilisce un limite al tempo di attesa di un frame sul quale trasportare l'ack; trascorso tale tempo si crea un frame apposito nel quale si mette l'ack. I protocolli che vedremo ora appartengono alla classe dei protocolli Sliding Window (finestra scorrevole), sono full-duplex (per i dati), sfruttano il piggybacking e sono più robusti di quelli precedenti. Protocollo 4: Finestra Scorrevole a 1 bit (3.4.1) Si tratta di un protocollo di tipo t ipo stop-and-wait in cui
sia mittente che destinatario usano una finestra scorrevole di dimensione uno. Il funzionamento e' il seguente: Mittente
Destinatario
il mittente, quando invia un frame, fa partire un timer;
quando arriva un frame corretto, senza errori, invia un ack col corrispondente corrispondente numero di sequenza;
se prima che scada il timer arriva un ack con lo stesso numero di sequenza del frame che si sta cercando di trasmettere, si avanza la finestra e si passa a trasmettere il frame successivo;
se il frame non e' un duplicato lo passa al livello network e avanza la finestra.
se arriva un ack diverso o scade il timer, si ritrasmette il frame.
La principale novità, rispetto al protocollo 3, è che l'ack è etichettato col numero di sequenza del frame a cui si riferisce. I valori dell'etichetta dell'etichetta possono solo essere 0 e 1, come nel protocollo 3. Il peggio che può succedere e' la ritrasmissione inutile di qualche frame, ma questo protocollo e' sicuro.
32
Protocollo 5: Go-Back-n (3.4.2)
Se il tempo di andata andata e ritorno del segnale (round-trip (round-trip time) è alto, come ad esempio nel caso caso dei canali satellitari nei quali e' tipicamente pari a 500 + 500 msec, c'è' un enorme inefficienza con i protocolli stop-and-wait, perché si sta quasi sempre fermi ad aspettare l'ack. Per migliorare le cose, si può' consentire consentire l'invio di un certo numero di frame anche anche senza aver ricevuto ricevuto l'ack del primo. Questa tecnica va sotto il nome di pipelining . Questo pero' pone un serio serio problema perché se un un frame nel mezzo della sequenza si rovina molti altri frame vengono spediti prima che il mittente sappia che qualcosa e' andato storto. Il primo approccio al problema e' quello del protocollo goback-n che funziona così:
se a destinazione arriva un frame danneggiato o con un numero di sequenza non progressivo, il destinatario destinatario ignora tale frame frame e tutti i successivi, non inviando inviando i relativi ack. Ciò' corrisponde ad una finestra di dimensione 1 nel ricevitore, che quindi accetta i frame solo nell'ordine giusto; il mittente ad un certo punto va in time-out sul frame sbagliato, e poi su tutti quelli successivi (scartati dal destinatario), e quindi provvede a ritrasmettere la sequenza di frame che inizia con quello per il quale si e' verificato il time-out.
Si noti che il mittente deve mantenere in un apposito buffer tutti i frame non confermati per poterli eventualmente ritrasmettere. Se il buffer si riempie, il mittente deve bloccare il livello network fino a che non si ricrea dello spazio. Inoltre, vi e' spreco di banda se il tasso d'errore è alto e/o il time-out è lungo. 33
Protocollo 6: Selective Repeat (ripetizione selettiva) (3.4.3) Questo approccio è più' efficiente, ed e' chiamato selective repeat :
il destinatario mantiene nel suo buffer tutti i frame ricevuti successivamente ad un eventuale frame rovinato; non appena questo arriva nuovamente (senza errori), esso e tutti i successivi successivi frame contigui che il destinatario ha mantenuto nel buffer vengono consegnati al livello network; per ogni frame arrivato bene, b ene, il destinatario invia un ack col numero piu' alto della sequenza completa arrivata fino a quel momento; momento; quando si verifica un timeout, il mittente rispedisce il frame corrispondente.
In questo protocollo mittente e destinatario devono entrambi gestire un buffer: il mittente per mantenervi i frame non confermati, il destinatario destinatario per mantenervi i frame successivi ad un errore. L'utilizzo di questo protocollo permette di risparmiare molta banda.
34
CAPITOLO 4 SOTTOSTR ATO MAC (MEDIUM ACCESS CO NTR OL) Come spiegato nel nel Capitolo 1, esistono esistono due tipi di reti: quelle che che utilizzano utilizzano connessioni punto punto e quelle che usano canali broadcast. Questo capitolo si occupa delle reti broadcast e dei loro protocolli. In qualsiasi rete broadcast il problema principale è la scelta dell'entità che dovrà acquisire il diritto diritto di utilizzo del canale in caso di competizione. Per risolvere questo questo problema sono stati sviluppati molti protocolli che verranno esaminati in questo capitolo. I canali broadcast qualche volta vengono chiamati anche canali multiaccesso o canali ad accesso casuale. Il Sottostr Sottostrato ato MAC è un sottostra sottostrato to del livello livello Data Link in cui si trovano i protocolli che si occupano di assegnare l'uso del canale multiaccesso. Esso è importante soprattutto nelle reti LAN in quanto molte si servono servono proprio di un canale multiacces multiaccesso so per la comunicazione. comunicazione. Al contrario le WAN (ad eccezione delle reti satellitari) preferiscono le connessioni punto-punto. I protocolli del sottostrato MAC sono usati sopratutto nelle LAN, ma anche nelle parti di WAN basate su satelliti. Il problema principale e' come allocare il canale ai vari utenti in competizione. Ci sono due meccanismi fondamentali: •allocazione statica, che viene decisa in anticipo; •allocazione dinamica, che si adatta alle esigenze di ogni momento. Assegnazionee statica del canale in LAN e WAN Assegnazion
L'allocazione statica prevede la suddivisione del canale fra gli N utenti, ciascuno dei quali riceve di conseguenza una frazione della banda totale. Si puo' fare, ad esempio, con tecniche quali FDM, allocando a ciascun utente una banda di frequenze distinta da quella degli altri utenti. Cio' va bene se il numero di utenti non varia rapidamente e se tutti trasmettono con un data rate piu' o meno costante, pero' in genere comporta vari problemi: •si verifica uno spreco di banda quando uno o piu' utenti non trasmettono; •poiché il traffico e' in generale molto bursty, i picchi che si verificano non possono essere gestiti solamente con la sottobanda allocata. Assegnazionee dinamica del canale LAN e MAN Assegnazion
Viceversa, l'allocazione dinamica cerca di adeguarsi alle esigenze trasmissive, in modo da soddisfarle al meglio. Ci sono alcune assunzioni da fare: 1. model modello lo a stazi stazioni oni:: ci sono sono N staz stazion ionii indip indipend enden enti, ti, ognuna ognuna delle delle qual qualii gene genera ra nuov nuovii frame frame per la trasmissione. La probabilità di generare un frame in un intervallo di tempo T e' uguale a pT, dove p e' una costante e rappresenta il tasso d'arrivo dei nuovi frame. Quando un frame e' generato, la stazione si blocca finché esso non e' trasmesso; 2. singol singoloo canal canale: e: un un singo singolo lo cana canale, le, e null' null'alt altro, ro, e' e' disp disponi onibi bile le per per le comuni comunica cazio zioni; ni; tut tutte te le le stazioni vi possono trasmettere e da esso possono ricevere, e tutte sono ad uguale livello; 3. collis collision ioni: i: se due due fram framee veng vengono ono trasme trasmessi ssi conte contempo mporan raneam eament ente, e, si si sovr sovrap appon pongon gonoo ed il segnale risultante e' rovinato (si verifica collisione): • tutte le stazioni stazioni possono rilevare rilevare la collisione; collisione; • i frame devono devono essere essere ritrasmessi; ritrasmessi; • non ci sono sono altri tipi di errori; 4. temp mpoo: puo puo' essere sere gest gestiito in due due mo modi di:: •continuous time: la trasmissione di un frame puo' iniziare in un qualunque istante; •slotted time: il tempo e' diviso in intervalli intervalli discreti (slot). (slot). Uno slot puo' contenere 0, 1 oppure piu' di un frame. Cio' corrisponde ad uno slot vuoto, ad uno slot con un frame e ad uno slot in cui si verifica una collisione. La trasmissione può iniziare solo all'inizio di uno 35
5.
slot; asco ascolt ltoo del del cana canale le:: ci sono sono due due poss possib ibil ilit ità, à, •carrier sense (tipico delle LAN): le stazioni, prima di trasmettere, ascoltano il canale; se e' occupato non cercano di trasmettere; •no carrier sense (tipico (tipico dei canali via satellite, satellite, nei quali vi e' un elevato elevato round trip time): le stazioni non ascoltano, trasmettono senz'altro; si preoccuperanno dopo di vedere se c'e' stata una collisione.
Protocolli ad Accesso Multiplo (4.2)
Esistono diversi algoritmi per assegnare un canale ad accesso multiplo. Di seguito verranno esaminati alcuni dei più importanti spiegandone il funzionamento e l'utilizzo. Aloha (4.2.1)
Questo protocollo fu ideato da Norman Abramson e dai suoi colleghi dell'Università delle Hawaii per risolvere il problema dell'assegnazione del canale. Esso utilizza la trasmissione radio broadcast basata su stazioni terrestri ma può essere applicato a qualsiasi sistema dove utenti non coordinati competono tra loro per l'utilizzo di un canale condiviso. Esistono due versioni di Aloha: Aloha puro e Aloha slotted Aloha Puro
Questo protocollo permette agli utenti di trasmettere ogni volta che hanno dati da inviare. Nel caso di collisioni, grazie alla proprietà di feedback , il trasmettitore potrà sempre scoprire, ascoltando il canale, se il suo frame è andato distrutto. Se ciò non fosse possibile, si adotta un sistema di trasmettitor e rimane in attesa per un tempo casuale acknowledge . Se il frame è stato distrutto, il trasmettitore prima di ripetere la trasmissione. I frame del sistema Aloha hanno la stessa lunghezza. Ogni volta che due frame tentano di occupare contemporaneamente il canale si verifica una collisione che danneggia i due frame. Basta che il primo bit di un frame si sovrapponga all'ultimo bit di un altro frame per considerarli danneggiati. Un frame non entra in collisione quando nessun altro frame viene trasmesso nello stesso intervallo di tempo. Tuttavia questo non può essere garantito perché in un sistema Aloha Puro una stazione non ascolta il canale prima di iniziare a trasmettere e non c'è modo di sapere se un altro frame è già stato inviato. La relazione tra il traffico che si presenta e la capacità di trasporto fa si che si possa sperare di utilizzare al massimo il 18% del canale. Slotted Aloha
Questo metodo, ideato da Roberts nel 1972, permette raddoppia la capacità di un sistema Aloha. L'idea è di dividere il tempo in intervalli discreti dove ogni intervallo corrisponde a un frame. Rispetto all'Aloha Puro, ogni stazione non può inviare il frame ogni volta che vuole, ma deve attendere l'inizio dell'intervallo ( slot ) successivo per poter trasmettere. In questo modo le collisioni vengono notevolmente limitate e le prestazioni salgono ad un massimo del 37% di utilizzo del canale.
36
Protocolli ad Accesso Multiplo con Rilevamento della Portante (4.2.2)
Questi sono i protocolli in cui le stazioni rimangono in ascolto della portante (ossia di una trasmissione). trasmissione). In questo modo sono in grado di rilevare le azioni intraprese intraprese dalle altre e adattare adattare di conseguenza il proprio comportamento, permettendo di raggiungere un livello di utilizzo del canale nettamente superiore al 37% ottenuto con Slotted Aloha . Di seguito vengono descritti alcuni di questi protocolli: CSMA (Carrier Sense Sense Multiple Access) Access) 1 – Persistente
Quando una stazione deve trasmettere trasmettere dati, ascolta prima il canale per vedere se è occupato. Se così fosse, aspetta finché questo non si libera. Non appena si accorge che il canale è libero, trasmette il frame e, in caso di collisione, rimane in attesa per un intervallo di tempo casuale prima di ritentare la trasmissione. Il protocollo è chiamato 1-persistente perché trasmette con una probabilità di 1 quando trova il canale libero. Il ritardo di propagazione influisce notevolmente sulle prestazioni del protocollo. protocollo. Infatti c'è una piccola possibilità possibilità che, subito dopo l'inizio di una trasmissione trasmissione da parte pa rte di una stazione, un'altra stazione sia pronta ad inviare dati e tenga sotto controllo il canale. Se il segnale della prima stazione non ha ancora raggiunto la seconda, questa potrebbe ritenere il canale libero e iniziare a trasmettere i propri dati creando così una collisione. Più è lungo il ritardo di propagazione, più diventa importante l'effetto e peggiori saranno le prestazioni del protocollo. La collisione può verificarsi anche se il ritardo di propagazione è uguale a 0. Infatti, se due stazioni stanno attendendo che una terza finisca di trasmettere, trasmetter e, quando ciò accade, entrambe le stazioni che erano in attesa vedranno libero il canale ed inizieranno a trasmettere generando una collisione. CSMA Non Persistente
Prima di trasmettere, ogni stazione stazione controlla il canale: Se nessuno nessuno sta trasmettendo, trasmettendo, inizia ad inviare dati, altrimenti non controlla continuamente il canale, ma attende per un intervallo di tempo casuale. In questo modo si migliora l'uso del canale, ma si allungano i ritardi. CSMA CS MA P – Pe Pers rsis iste tent ntee
Questo protocollo si applica ai canali divisi per intervalli di tempo. Quando una stazione è pronta a trasmettere, controlla il canale. Se lo trova libero trasmette con una probabilità p, altrimenti rimanda con probabilità q = 1 – p. p. Se il canale risulta occupato anche dopo questo intervallo di tempo, la stazione rimanderà nuovamente. Viene usato nello Slotted Aloha. CSMA CS MA \ CD
Un ulteriore miglioramento si ottiene consentendo ad ogni stazione di annullare la propria trasmissione in caso di collisione. Quindi se due stazioni che tengono sotto controllo il canale iniziano a trasmettere contemporaneamente, contemporaneamente, entrambe rileveranno immediatamente la collisione e la trasmissione verrà interrotta. Il funzionamento è il seguente: all'istante t 0 una stazione ha finito di trasmettere. A questo punto, qualsiasi altra stazione può tentare di trasmettere dati. Se due o più stazioni decidono di trasmettere contemporaneamente, si verifica una collisione. Quest'ultima si rileva confrontando il segnale inviato con quello ricevuto. Il CSMA CSMA \ CD è caratterizzato da periodi di contesa, alternati a periodi di trasmissione, alternati a periodi inattivi, che si presentano quando tutte le stazioni sono “silenziose”. In questo protocollo è fondamentale fondamentale la determinazione del periodo di contesa. Il tempo t empo minimo per rilevare una collisione è pari al tempo impiegato dal segnale per propagarsi da una stazione all'altra. Tuttavia sarebbe errato considerare questo come periodo di contesa. Infatti, supponiamo che sia il tempo impiegato dal segnale per propagarsi dalle due stazioni più lontane. Nell'istante t 0 la stazione inizia a trasmettere e a − ε (un istante istante prima che che il segnale segnale arrivi alla destinazione) destinazione) anche l'altra l'altra stazione inizia a trasmettere. Il picco di rumore causato dalla collisione impiega un tempo 2 − per tornare indietro alla stazione originale. Pertanto, una stazione può essere certa di aver ε
37
assunto il controllo del canale solo se non rileva alcuna collisione per un tempo pari a
2
Protocolli Senza Collisioni
Questi protocolli vengono utilizzati nei periodi di contesa. Protocollo a Mappa di Bit
In questo protocollo ogni periodo di contesa è composto da N intervalli. Ad ogni intervallo corrisponde una stazione. Se una stazione ha un frame da iniziare, trasmette un bit 1 durante l'intervallo di contesa a lui concesso. A nessun'altra stazione è concesso di trasmettere durante questo intervallo. Quindi ogni stazione ha la possibilità di trasmettere durante il proprio intervallo. Una volta trascorsi gli N intervalli, ogni stazione sa quali sono le stazioni che vogliono trasmettere; a questo punto le stazioni incominciano a trasmettere in ordine numerico. Non ci sarà quindi mai collisione. Dopo che l'ultima stazione ha trasmesso, inizia un altro periodo di contesa di N intervalli. Se una stazione diventa pronta quando il suo intervallo di contesa è scaduto, deve rimanere in silenzio fino a quando le altre non hanno avuto la possibilità di trasmettere e la mappa di bit non ricomincia da capo. Lo svantaggio di questa tecnica è che, per la trasmissione, viene favorita la stazione che ha un numero elevato rispetto a quelle che hanno un numero basso. Si ha inoltre il problema che per ogni stazione bisogna prevedere un bit di controllo; quindi risulta problematico nel caso di molte stazioni.
Conteggio Binario
Con questa tecnica una stazione che desidera trasmettere, deve comunicare il proprio indirizzo a tutte le altre stazioni. I bit che si trovano nella stessa posizione ma su indirizzi di stazioni diverse sono elaborati mediante l'operatore logico booleano OR. Per evitare i conflitti si applica una regola di arbitraggio. La stazione rinuncia non appena si accorge di essere stata sovrascritta da un 1 nella posizione di bit di ordine elevato che, nel proprio indirizzo, vale 0. Anche in questo caso vengono privilegiate quelle stazioni che hanno un indirizzo elevato. Per esempio, se le stazioni 0010, 0100, 1001 e 1010 vogliono il canale, durante il primo tempo di bit trasmettono rispettivamente 0, 0, 1 e 1; il risultato ottenuto unendo questi valori binari mediante l'operatore logico OR è 1. Le stazioni 0010 e 0100 notano 1'1 e capiscono che una stazione stazione con un numero più grande sta concorrendo per il canale, perciò si ritirano dal turno corrente. Le stazioni 1001 e 1010 invece vanno avanti. 38
Protocolli a Contesa Limitata (4.2.4)
Le due strategie strategie generali generali - gestione delle delle collisioni collisioni (come nel nel CSMA) e "non gestione" gestione" delle delle collisioni collisioni (come nell'Aloha) nell'Aloha) - hanno i loro loro pro e contro contro in linea di massima opposti opposti per quel che riguarda il ritardo sulla linea con carico basso e l'efficienza della linea con carico alto (i protocolli senza collisione hanno una maggiore efficienza in caso di carico alto, mentre quelli "non collisione" hanno un ritardo minore se il carico e' basso). Il protocollo di "attraversamento adattabile dell'albero" prevede che durante il primo bit del pacchetto di contesa tutti i nodi possano tentare di acquisire il canale. Se un solo sistema tenta di trasmettere e ci riesce, riesce, allora non ci sono problemi. Se avviene una collisione, collisione, allora durante durante lo slot successivo, solo una meta' dei nodi viene autorizzata a "tentare" la trasmissione. Si procede "dimezzando" di volta in volta il gruppo autorizzato al tentativo fino a che non si arriva ad autorizzare alla trasmissione un solo nodo. Il protocollo dell'urna e' simile a quello dell'attraversamento adattabile dell'albero; in pratica possiamo immaginare che le stazioni siano disposte in cerchio, ed una "finestra" scorra intorno. Sono autorizzati a trasmettere trasmettere i soli n nodi interni alla finestra; se avviene una trasmissione trasmissione corretta o non avviene alcuna trasmissione, la finestra si sposta sulle successive n stazioni, altrimenti la finestra viene ridotta a n/2 stazioni e si ritenta la procedura, fino al termine delle collisioni (somiglia un po' al token passing, con la differenza che questo tipo di token abilita piu' di un nodo). Chiaramente a livello software resta da decidere "quando" far tornare alto il valore di n (per esempio raddoppiare le dimensioni della finestra quando non vi siano state collisioni per due slot consecutivi).
39
Protocolli Lan Wireless (4.2.6)
Una delle principali caratteristiche delle LAN wireless e' data dall'inefficacia delle tecniche di Carrier Sensing nel determinare se il mezzo è accessibile. Siano date tre stazioni A, B, C con i raggi d’azione raffigurati, raffigurati, ed A stia trasmettendo a B: Se ora C ascolta il mezzo, lo troverà libero e sarà convinta di poter trasmettere a B; cominciando a trasmettere disturberà la trasmissione di A, impedendo a B di riceverla; sia A che C saranno costrette a ritrasmettere. Questo e' noto come il problema della stazione nascosta. Esiste anche il problema inverso: si supponga che B stia trasmettendo ad A e che C voglia trasmettere a D: Ascoltando il mezzo, C sentirà la trasmissione di B e concluderà erroneamente di non poter trasmettere; invece, essendo D fuori della portata di B, ed A fuori della portata di C, le due trasmissioni trasmissioni potrebbero avvenire parallelamente senza interferenze. Questo è noto come il problema della stazione esposta. Ragionamenti analoghi valgono per le tecniche di Collision Detection (ad ogni modo non applicabili alle trasmissioni radio, tipicamente half-duplex). Se ne conclude che non è possibile utilizzare lo stesso protocollo usato da Ethernet, ossia CSMA/CD, per il controllo dell’accesso al mezzo. In risposta al problema della stazione nascosta, sono state elaborate delle eleganti tecniche di Collision Avoidance: l'idea di base consiste nello stimolare il destinatario nell'emettere un breve frame, in modo da informare le stazioni ad esso vicine di non interferire per l'intera durata della trasmissione che sta per avvenire. Il protocollo è il seguente: ACB BACD Quando A vuole trasmettere un frame a B, prima invia un frame RTS (Request To Send), al quale B risponde con un frame CTS (Clear To Send). Alla ricezione di CTS, A può cominciare a trasmettere. Entrambi i frame RTS e CTS contengono il tempo mancante prima della fine della trasmissione. Ogni stazione stazione nel raggio d’azione d’azione di A o B ricevera' uno o entrambi i frame, ed imposterà il proprio indicatore di Carrier Sensing Virtuale, chiamato NAV (Network Allocation Vector), per la durata indicata dal frame. Il NAV e' un contatore che viene decrementato nel tempo, fino a 0; quando NAV e' e ' diverso da zero, vuol dire che una trasmissione e' in atto nelle vicinanze. CSMA/CA
Il precedente protocollo funziona bene solo nel caso teorico in cui le stazioni abbiano tutte lo stesso raggio d’azione e i frame RTS e CTS possano essere scambiati in tempo infinitesimo. In caso contrario, le collisioni possono ancora avvenire, e quindi tale protocollo viene, in genere, affiancato a tecniche di Carrier Sensing tradizionali e di acknowledgement a livello di MAC sublayer. Il Carrier Sensing riduce la probabilita' di collisioni dovute a tentativi di acquisizione contemporanea del mezzo, ed e' tanto piu' efficace quanto piu' ci si avvicina alla situazione ideale, ma piuttosto frequente, di stazioni tutte comprese nei rispettivi raggi d’azione. L’acknowledgement L’acknowledgement a livello di MAC sublayer sublayer ha lo scopo di ridurre i tempi di di ritrasmissione dei dei frame danneggiati, anticipando notevolmente un compito normalmente affidato al livello di trasporto.
40
MACA e MACAW
Uno dei primi protocolli progettati per le LAN wireless è stato MACA (Multiple Access with Collision Avoidance). Non vi e' ascolto del canale (infatti manca CS nella sigla) e si cerca di evitare le collisioni anziché rilevarle. Non si impiega l’ascolto del canale sulla base delle seguenti considerazioni: • il canale libero per il trasmettitore non significa che lo sia anche per il ricevitore (e quindi non e' detto che la trasmissione abbia successo: problema della stazione nascosta); • il canale occupato per il trasmettitore non significa che lo sia anche per il ricevitore (e quindi non e' detto che la trasmissione non sia possibile: problema della stazione esposta); • nell’ambito delle trasmissioni radio apparecchiature full duplex, in grado di ricevere e trasmettere contemporaneamente, sono molto costose da realizzare. L’idea di fondo e' semplice: il trasmettitore invia un breve messaggio al ricevitore chiedendogli l’autorizzazione a trasmettere. Il ricevitore, se puo' accettare la trasmissione,risponde con messaggio di via libera. Solo se riceve tale messaggio il trasmettitore inizia ad inviare i dati. Il funzionamento e' il seguente: • A invia a B un piccolo frame (30 byte) b yte) chiamato chiamato RTS (Request To Send), contenente la lunghezza lunghezza del frame dati vero e proprio che dovra' essere trasmesso; • B, se non e' impegnato nella ricezione di altri dati, risponde ad A con un altro piccolo frame, chiamato CTS (Clear to Send) che lo autorizza a trasmettere. Anche il frame CTS riporta la lunghezza del frame dati che verra' trasmesso da A, ricopiata dal frame RTS. Le altre stazioni si comportano nel seguente modo: • Tutte le stazioni che ricevono solo il frame RTS (situate quindi entro la portata di A ma non entro quella di B) devono rimanere in silenzio per un tempo che consenta al frame CTS di raggiungere A, dopodiché possono trasmettere; • Tutte le stazioni che ricevono solo il frame CTS (situate dunque entro la portata di B ma non entro quella di A) devono rimanere in silenzio per il tempo necessario alla trasmissione del frame dati (la cui lunghezza trovano nel frame CTS); • Le stazioni che ricevono sia il frame RTS che il CTS (situate entro la portata sia di A che di B) applicano ambedue le regole sopra viste. Nonostante tutte le precauzioni prese, le collisioni possono ugualmente avvenire: ad esempio due stazioni A e B, che non si sentono a vicenda, vicenda, inviano un RTS ad una terza terza stazione C che si trova a portata di entrambe: in C si verifica una collisione. Oppure una stazione A invia un RTS a C mentre esso viene raggiunto da un CTS originato da una stazione che si trova fuori dalla portata di A. Di nuovo, in C si verifica una collisione. Chi ha trasmesso un RTS si accorge se esso provoca una collisione perché non riceve il corrispondente CTS. In tal caso il trasmettitore attende un tempo casuale, che aumenta al crescere del numero di collisioni, e rriprova. iprova. Va comunque notato che le collisioni relative ai soli frame RTS e CTS, che sono molto più piccoli dei frame dati, rappresentano un fenomeno meno grave delle collisioni che coinvolgono gli interi frame dati. In MACA queste ultime non possono avvenire. 41
Una successiva versione del protocollo, chiamata MACAW (MACA per Wireless), introduce alcune ulteriori migliorie, fra le quali: • Invio di un breve frame ACK dal ricevitore al trasmettitore previa ricezione corretta del frame dati; questo permette di velocizzare la ritrasmissione (altrimenti sarebbero i livelli superiori a doversene occupare) del frame in caso di errori trasmissivi, non infrequenti nel caso dei mezzi wireless; • Invio da parte del trasmettitore trasmettitore A, dopo la ricezione del CTS, di un breve frame DS (Data Send) Send) contenente la dimensione del frame dati che sarà trasmesso, subito prima di iniziare a trasmettere il frame dati stesso. Questo permette alle stazioni fuori dalla portata del ricevitore di evitare di inviare ad A degli RTS prima che A abbia terminato la trasmissione. • Accorta gestione distribuita degli algoritmi di aumento del tempo d’attesa dopo un insuccesso, in modo da garantire equità a tutte le stazioni. Come abbiamo già detto, detto, i protocolli MACA e MACAW non ascoltano ascoltano il canale per decidere in merito alla trasmissione, ma si basano esclusivamente sullo scambio di messaggi di controllo. Tuttavia esiste un ulteriore protocollo, chiamato CSMA/CA (Carrier ( Carrier Sense Multiple Access with Collision Collision Avoidance), utilizzato utilizzato nello standard IEEE 802.11, che vedremo fra breve e che utilizza, a fianco di tecniche simili a quelle di MACAW, anche l’ascolto del canale prima di trasmettere.
42
ETHERNET
E' uno standard per un protocollo CSMA/CD di tipo 1-Persistent. Cablaggio
Si utilizzano 4 tipi di cablaggi: il primo Thinck Ethernet (e più vecchio) è 10base5. Le connessioni sono realizzate mediante spine a vampiro e permette di collegare fino a 100 macchine. Tale notazione indica che il cavo opera a 10 Mbps, utilizza un sistema di segnali a banda base e può sopportare segmenti lunghi fino a 500 m. In questo tipo di cablaggio, un transceiver è fissato saldamente intorno al cavo per mantenere stabile il contatto con il nucleo interno, il transceiver contiene i circuiti elettronici che gestiscono il rilevamento della portante e il rilevamento delle collisioni. Quando rileva una collisione il transceivre invia un segnale lungo il cavo a tutti gli altri transceiver . Un cavo transceiver collega lo stesso ad scheda interfaccia di rete installata nel computer. Il cavo del transceiver può essere lungo fino a 50 m e contiene 5 doppini schermati singolarmente. 1 doppino è per i dati in uscita , 1 per quelli in entrata, due sono utilizzati per i segnali di controllo in ingresso e in uscita, l’ultimo permette al computer di alimentare i circuiti del transceiver. La scheda di rete installata nel computer contiene un chip che trasmette e riceve i frame, e si occupa di assemblare i frame di dati nel giusto ordine. Il secondo tipo di cablaggio, in ordine di tempo è il 10base2 . Le connessioni sono realizzate usando cavi thin e connettori BNC standard che formano giunzioni a “T”. Ogni segmento non può essere più lungo di 185 m e può sopportare non più di 30 macchine. Utilizzando questo tipo di cablaggio la la scoperta di guasti guasti è abbastanza abbastanza difficile. difficile. Con questo tipo tipo di cablaggio, la connessione al cavo passa attraverso un connettore BNC. Le varie stazioni sono collegate in cascata cascata sul segmento (daisy-chain). (daisy-chain). I circuiti elettronici del transceiver transceiver si trovano nella scheda di rete del pc. Per questo motivo sono state introdotte alcune tecniche per rintracciare i guasti, come il seguente.Ad esempio viene lanciato un impulso di forma nota lungo il cavo. Se l’impulso incontra un ostacolo ostacolo o raggiunge la fine del cavo, cavo, torna indietro indietro sotto forma forma di eco. eco. Cronometrando l’intervallo di tempo trascorso tra la trasmissione dell’impulso e la ricezione dell’eco è possibile individuare l’origine dell’eco. Questi problemi hanno indotto i sistemi verso un differente schema di cablaggio, dove ogni stazione via cavo è collegata ad un concentratore centrale chiamato hub. Per queste connessioni sono utilizzati i doppini telefonici. Questo schema è chiamato 10baseT. Con 10base-T non c’è nessun cavo condiviso : c’è solo l’hub al quale ogni stazione si collega attraverso un cavo dedicato. Con questo tipo di cablaggio è semplice aggiungere o rimuovere una stazione , inoltre è facile individuare interruzioni nella linea. Lo svantaggio è rappresentato dalla lunghezza dei cavi cavi che partano partano dall’hub. dall’hub. La lunghezza massima dell'intera rete fra qualunque coppia di stazione non deve superare i 2,5 Km. Fra qualunque coppia di stazioni non devono trovarsi più di 4 ripetitori. La rete supporta al massimo 1024 stazioni. Il quarto tipo di cablaggio è 10base-F che utilizza le fibre ottiche. Esso offre una eccellente immunità alle interferenze.
43
Il protocollo del sottostrato Mac Ethernet Abbiamo due tipi di frame. Quello originale Dix e quello 802.3. Nel primo, ogni frame inizia con un campo preamble di 8 byte. Il frame contiene due indirizzi: uno rappresenta la destinazione e l’altro la sorgente. Il bit di ordine più elevato nel campo Destination Address è 0 per gli indirizzi ordinari oppure 1 per gli indirizzi di gruppo. Un’altra caratteristica dell’indirizzamento è legata al bit 46 , usato per distinguere gli indirizzi locali da quelli globali. Il campo successivo, Type, indica al
ricevitore cosa deve fare il frame, in maniera tale che il kernel sappia quale protocollo dovrà gestire il pacchetto. Successivamente troviamo il campo Data che arriva fino a 1500 byte e contiene il payload (quella parte dei Dati priva dell' header e del checksum) del livello superiore. Per distinguere i frame validi da quelli non validi, Ethernet richiede che i frame validi siano lunghi almeno 64 byte. Se la parte di dati è lunga meno di 64 byte, il campo Pad viene utilizzato per riempire il frame ovvero per imporre una lunghezza minima. Ciò serve per il seguente motivo: impedire a una stazione di completare la trasmissione di un frame breve prima che il primo bit ha raggiunto la fine del cavo, dove potrebbe collidere con un altro frame.
Ad esempio al tempo 0, la stazione A, che si trova ad una estremità della rete, invia un frame. Sia τ il tempo di propagazione del frame affinché raggiunga l’altra estremità del frame. Appena prima che il frame aggiunga l’altra estremità al tempo τ-ε, la stazione B incomincia a trasmettere. Quando si accorge di ricevere più potenza di quella emessa, B capisce che è avvenuta una collisione e interrompe la trasmissione e genera un burst di rumore a 48bit per avvisare tutte le altre stazioni. All’istante 2τ anche il trasmettitore vede il burst di rumore e interrompe la trasmissione, aspetta dopo un tempo casuale prima di ritentare. Questo avviene perché la lunghezza minima del frame è di 64byte. Se si inviasse un frame con lunghezza inferiore a 64byte accadrebbe che il trasmettitore non rileverebbe il burst di rumore, e quindi che il frame che ha inviato è arrivato a destinazione. L’ultimo campo è il cheksum a 32bit. Esso è in grado di rilevare gli errori ma non di correggerli. Nel caso di 802.3 è stato introdotto quando IEEE ha introdotto lo standard Ehernet. Esso ha alcune differenze rispetto al frame Dix: il campo Preamble è stato utilizzato come delimitatore di inizio frame, il campo Lenght sostituisce type. Codifica Manchester
Per evitare errori di stringhe di di bit non si può distinguere tra segnale nullo nullo (0 Volt) associato associato al bit 0 e segnale nullo linea libera. Per risolvere il problema che si ha quando ricevitore e trasmettitore hanno velocità di clock diverse, e quindi possono andare fuori sincronia facendo perdere l’informazione del punto in cui iniziano i bit, sono state studiate due tecniche chiamate codifica Manchester e codifica Manchester differenziale . Con la prima, ogni periodo di bit è diviso in due intervalli uguali. L’1 binario è inviato scegliendo un livello basso durante il secondo. Lo schema contrario è utilizzato per trasmettere lo 0 binario. Con questo modo di procedere si ha la certezza che ogni periodo periodo di bit ha una transizione nel punto centrale, caratteristica che aiuta il ricevitore a sincronizzarsi con il trasmettitore, lo svantaggio della codifica Manchester è che occupa il doppio della banda della codifica binaria 44
elementare, perché gli impulsi sono lunghi la metà. In altre parole, la codifica di Manchester prevede una transizione del valore del segnale nel mezzo di ogni bit, zero o uno che sia. Quando c'è 1 il segnale è alto-basso , mentre quando è 0 il segnale è basso-alto .
Codifica Manchester
Nella codifica Manchester differenziale , derivato dalla codifica Manchester, Manchester , il bit 1 è indicato dall’assenza di una transizione all’inizio di un intervallo, il bit 0 è indicato dalla presenza di una transizione all’inizio dell’intervallo.
codifica Manchester differenziale
In entrambi i casi c’è una transizione nel punto centrale. Esso richiede dispositivi più complessi ma offre una maggiore immunità ai rumori.
45
Ethernet Commutata
Dato il modo di operare delle reti Ethernet, è facile comprendere quanto uno switch possa essere efficiente nel risolvere i problemi di traffico, fornendo più “corsie” ai dati che viaggiano, rispetto alle reti dove la banda è condivisa da tutti i computer. Gli switch svolgono la stessa funzione degli hub, ma sono più potenti e intelligenti. In primo luogo, offrono una larghezza di banda maggiore agli utenti, perché la banda non è condivisa,ma dedicata: se si tratta di 10 Mbps, ogni utente ha a disposizione i propri 10 Mbps, da non dividere con nessuno. Inoltre uno switch invia i pacchetti di dati solo alle porte specifiche dei destinatari, questo avviene perché “legge” le informazioni con l'indirizzo di ogni pacchetto. Per isolare la trasmissione dalle altre porte, lo switch stabilisce una connessione temporanea tra la sorgente e la destinazione, chiudendola al termine della conversazione. Fast Ethernet
Poco dopo l'introduzione della connessione a 10Mbps, la novità non fece più effetto, e si cercò di aumentarne la velocità. Nel 1992 la IEEE riunì il comitato 802.3, incaricandolo di creare una Lan più veloce. Il risultato fu 802.3u, meglio conosciuta come Fast Ethernet. L’idea base è quella di mantenere il formato di tutti i vecchi frame, le interfacce e le regole procedurali, riducendo il tempo di trasferimento di ogni bit da 100nsec a 10nsec. Con Fast Ethernet si usò esclusivamente il cablaggio 100base-T, quindi tutti i sistemi utilizzano hub e commutatori. Un’altra scelta importante fu la scelta dei cavi che Fast Ethernet doveva supportare. Una possibile soluzione fu il doppino di categoria 3, vantaggioso perché la maggior parte degli edifici aveva almeno quattro doppini di categoria 3. Lo svantaggio principale è la sua incapacità di trasportare segnali di 200 megabaund (100Mbps con codifica Manchester) per 100 m. Mentre i doppini di categoria 5 potevano facilmente arrivare ai 100 m, le fibre riuscivano a coprire distanze superiore. Ecco i tipi di cavi utilizzati: 100base-T4: utilizza cavi UTP di categoria 3; un segmento è lungo al massimo 100 m, ed ha una velocità di segnali di 25MHz. Utilizzando la codifica Manchester il 100base-T4 richiede l’uso di quattro doppini. L’unico problema è che il sistema telefonico utilizza un cablaggio di quattro doppini doppini per cavo, quindi non si potrebbe più disporre del telefono. telefono. Con clock moderni e distanze piccole la codifica Manchester non è più necessaria. Inoltre vengono trasmessi segnali ternari, cioè durante un solo periodo di clock il cavo può contenere i valori 0, 1, 2. Con tre doppini dedicati alla trasmissione è possibile trasmettere un simbolo qualunque in un alfabeto da 27 ( 3 ). 3
questo modello si basa su cavi UTP di categoria 5. Sono utilizzati solo due doppini per stazione, uno diretto all’hub e l’altro proveniente dall’hub. Oltre ad approfittare della più elevata qualità dei cavi, questa implementazione trae vantaggio dalla codifica 4B/5B del segnale, più complessa della codifica Manchester, ma dalle prestazioni più alte. In questo tipo di codifica ogni serie di 4 bit viene sostituita da una serie di 5 bit utilizzando delle corrispondenze che impediscano la trasmissione di più di un valore 0 iniziale o più di due valori 0 finali. In questo modo vengono risolti risolti i problemi relativi alla trasmissione trasmissione di più zeri consecutivi. Le sequenze così generate vengono poi trasmesse attraverso una codifica NRZI (Senza ritorno a zero invertito ), che elimina anche il problema della presenza di un numero eccessivo di 1 consecutivi. Il risultato è che la codifica 4B/5B elimina ripetizioni consecutive di un numero eccessivo di valori binari tutti uguali. Il sistema 100base-TX è full duplex.
questo modello si basa su cavi in fibra multimodale, uno per ogni direzione, perciò il sistema è full duplex.
100base-TX:
100base-FX:
46
Gigabit Ethernet (4.3.8)
Dopo lo sviluppo di Fast Ethernet il comitato 802 iniziò a lavorare ad una Ethernet ancora più veloce: la Gigabit Ethernet , o anche denominata 802.3z . Gli obiettivi erano quelli di rendere Ethernet 10 volte più veloce mantenendo la compatibilità con tutti gli standard Ethernet esistenti. In particolare Ethernet gigabit doveva offrire servizi datagram senza ack di tipo multicast e unicast , adottare lo stesso schema di indirizzamento a 48 bit già in uso e mantenere lo stesso formato dei frame. Qui tutte le configurazioni sono punto-punto . Gigabit Ethernet supporta due modalità operative: full duplex e half duplex.
La full duplex è la modalità più comune. Questa modalità è utilizzata in presenza di uno switch centrale collegato ai computer. In questa configurazione tutte le linee hanno buffer, perciò ogni computer o switch è libero di inviare frame quando vuole. Qui la contesa è impossibile, quindi non si utilizza il protocollo csma/cd .
La half duplex viene utilizzata quando i computer sono collegati ad un hub e non ad uno switch, l’hub non ha un buffer dove memorizzare i frame in arrivo, esso collega elettricamente tutte le linee per simulare un cavo multidrop. In questo caso si possono verificare collisioni, quindi si utilizza il protocollo csma/cd .
Poiché il frame minimo di 64byte può essere trasmesso 100 volte più velocemente, la distanza massima risulta 100 volte ridotta. Questa distanza è risultata inaccettabile e si sono aggiunte allo standard due funzionalità che ne aumentano la portata. La prima funzionalità chiamata carrier extension , non fa altro che aggiungere tramite hardware dati di riempimento dopo il frame normale in modo da estendere la dimensione del pacchetto di 512byte. La seconda funzionalità chiamata frame bursting , permette al trasmittente di inviare una sequenza concatenata di più frame in una singola trasmissione. Ethernet gigabit usa cavi in rame e in fibra. Le categorie di cavi usati sono: in fibra ottica, e utilizzata per le fibre multimodali (fino a 550mt).
1000base-SX:
1000base-LX: in
1000base-CX: utilizza cavi in rame schermati. E' poco utilizzata (fino a 25mt).
5000mt).
fibra ottica, utilizzata sia per le fibre monomodali che multimodali (fino a
utilizza 4 coppie UTP di categoria 5. In questo tipo di cablaggio si utilizza un particolare schema di codifica. Con questa modalità si possono trasmettere in parallelo 4 simboli. Questo è il cosiddetto schema di Trellis, e funziona nella seguente maniera: ogni singolo simbolo viene codificato in 00, 01, 10, 11. Pertanto si hanno quattro stati 0, 1, 2, 3, ottenuti dagli ultimi due bit in ingresso ma scritti al contrario. Come abbiamo detto il bit 0 o 1 a seconda dello stato in cui si trova produce in output o 00, 10, 01, 11. 1000base-T:
Esempio : ci troviamo nello stato 1, in binario 01, e arriva il bit 0. L'output verrà codificato facendo lo XOR tra il bit di ingresso, nel nostro esempio lo 0, e il bit dello stato 01; 47
0 → bit in ingresso 0 1 → bit dello stato in cui si trova. 1 Poi si fa lo XOR tra il bit in ingresso (sempre lo 0) e il bit più vecchio dello stato (siamo nello stato 1, quindi 01, dove il bit più vecchio è 1) 0 → bit in ingresso 1 → bit più vecc vecchi hioo 1 Quindi in output si ha la codifica 11. Codifica di Viterbi
Con lo schema di Trellis, dati in input una sequenza di bit, in output otteniamo una sequenza di simboli, che vengono fatti viaggiare lungo il cavo. A destinazione tale sequenza può subire delle variazioni dovute a errori lungo il cavo. In questi casi viene usato l’ algoritmo di Viterbi , un decodificatore a massima verosimiglianza, che esamina l’intera sequenza ricevuta e trova il percorso lecito che ha la minore distanza di Hamming dalla sequenza ricevuta. Se il messaggio trasmesso è costituito da n bit si hanno 2 possibili percorsi. La codifica di Viterbi consente di limitare il confronto dei percorsi. Quindi si parte dallo stato zero, si ha la sequenza di simboli in input, e per ogni coppia di simboli di questa sequenza si calcola ogni possibile percorso e si sceglie quello che ha distanza di Hamming minore rispetto alla sequenza di input. Alla fine si ottiene la sequenza e si applica lo schema di Trellis per ottenere i bit che si volevano ricevere. ⁿ
Esempio:
1
2
3
4
48
5
6
7
8
49
Reti Wireless (4.4)
Con i computer portatili è nata anche l’esigenza che essi si colleghino direttamente ad internet. Da questa esigenza si è arrivati allo sviluppo delle reti Lan wireless. Lo standard fu denominato 802.11, o semplicemente WiFi . Una Lan wireless può funzionare in due modi: 1.
In presenza di una stazione base, che è collegata alla rete cablata, che prende il nome di Access Point ( AP) AP).
2. In assenza assenza di una una stazione stazione base, dove sono gli stessi stessi computer computer che spediscono i dati direttamente direttamente tra loro. Questa modalità viene chiamata ad hoc networking . Tuttavia con la Lan wireless si presentano due problemi:
il primo è quello della della stazione esposta. esposta. Nel primo caso, ad ad esempio, supponiamo supponiamo di avere tre stazioni A, B, C e supponiamo che A voglia comunicare con B. La portata del segnale radio di A copre la stazione B ma non C, quindi si può verificare che C non rilevi la trasmissione trasmissione di A a B rischiando r ischiando quindi quindi di generare una collisione. collisione.
Il secondo problema si ha, ad esempio, quando supponendo di avere le stazioni A,B,C,D e supponendo che B voglia trasmettere ad A, C rileva la portante e capisce che c’è una trasmissione in atto e pensa erroneamente di non poter inviare dati a D. Quindi Q uindi in entrambi i casi non risulta sufficiente rilevare la portante, ma ci interessa sapere chi riceve, e non chi trasmette. Quindi il protocollo CSMA, non viene utilizzato.
Per le Lan wireless è creato il protocollo MACA, il cui funzionamento è il seguente: se una stazione vuole inviare dati ad un’altra stazione, prima di tutto invia un piccolo frame RTS (Request to send), che contiene la lunghezza dei dati che la stazione vorrà trasmettere successivamente. successivamente. La stazione ricevente, dopo aver ricevuto il frame RTS, a sua volta invia un frame CTS (Clear to send) alla stazione trasmittente, che contiene la lunghezza dei dati copiati dal frame 50
RTS.
Quando la stazione trasmittente riceve il frame CTS inizia la trasmissione. Le stazioni che si trovano nelle vicinanze si comportano nella maniera seguente:
quelle vicine a una stazione che vuole trasmettere, e quindi ricevono il frame RTS, devono rimanere in silenzio per un tempo che consenta al frame CTS di raggiungere la stazione trasmittente senza causare conflitti. Le stazioni che ricevono il frame CTS devono rimanere in silenzio durante la trasmissione dei dati la cui lunghezza può essere determinata usando il frame CTS. Usando questo protocollo si possono avere dei problemi di collisioni. Ad esempio, se due stazioni inviano contemporaneamente un frame RTS alla stessa stazione, collideranno e i frame RTS andranno perduti. Quindi si è arrivati ad una nuova versione del maca, il MACAW . Con questo nuovo protocollo sono state introdotte nuove migliorie:
Dopo ogni frame di dati è stato introdotto un frame ack, in quanto a causa dell’assenza di ack nello strato Data Link, quando i frame vanno perduti non vengono ritrasmessi fino a che lo strato trasporto non rileva la loro assenza; L’utilizzo del protocollo CSMA/CA, sia a livello fisico che virtuale; Nel primo caso (livello fisico) si controlla se il canale è libero prima di trasmettere i dati; infatti durante la trasmissione la stazione non controlla il canale ma emette l’intero frame, che può rimanere danneggiato a causa delle interferenze sul ricevitore. La seconda modalità (virtuale) funziona nella seguente maniera: quando una stazione invia un frame RTS ad un’altra per per chiedere ilil permesso di trasmettere trasmettere un frame, la stazione stazione ricevente, a sua volta, invia un frame CTS per acconsentire. Dopo aver ricevuto il CTS la stazione fa partire il frame di dati e attiva un timer ack . Dopo che la stazione ricevente acquisisce il frame di dati, manda un ack che conclude lo scambio.
51
quelle che si trovano vicino alla stazione che ha mandato il frame RTS, non inviano alcun dato fino al termine dello scambio. Grazie al frame RTS le stazioni possono calcolare la durata dello scambio, incluso l’ack finale, perciò rivendica per sé una sorta di canale virtuale con la sigla NAV . Quelli che stanno vicini alla stazione ricevente, ricevono CTS e si comportano nella maniera precedentemente descritta. La differenza fondamentale tra CSMA/CD e CSMA/CA è che, mentre il primo è usato per IEEE 802.3 (che è full-duplex) e quindi le operazioni di ricezione e trasmissione vengono effettuate contemporaneamente, contemporane amente, il CSMA/CA viene usato dalle reti wireless (IEEE 802.11b) che sono halfduplex. Ogni host prima di inizializzare effettivamente la trasmissione, avvisa il destinatario il quale se risponderà affermativamente (con un pacchetto ACK) darà il via alla comunicazione. In caso contrario, il mittente riproverà dopo un tempo arbitrario.
52
Le Reti ad Anello Token
Una rete ad anello consiste di una collezione di interfacce di rete, collegate a coppie da linee punto a punto. Le reti ad anello hanno diverse attrattive: •non sono reti basate su un mezzo trasmissivo broadcast; •non c'e' una significativa significativa componente componente analogica per la rilevazione delle delle collisioni (che non possono verificarsi); •l'anello e' intrinsecamente equo. Ogni bit che arriva all'interfaccia è copiato in un buffer interno, poi rigenerato e ritrasmesso sul ring. Può essere modificato prima di essere ritrasmesso. L'interfaccia di rete può operare in due diverse modalità, listen mode e transmit mode: In listen mode i bit in ingresso vengono copiati nel buffer interno (dove possono essere anche modificati) modificati) e quindi ritrasmessi con un ritardo di un bit (1-bit delay). In transmit mode l'anello è aperto, e i bit in arrivo vengono rimossi; nuovi bit vengono trasmessi sull'anello. Una speciale configurazione binaria, detta token (gettone) circola in continuazione se nessuno vuole trasmettere. Quando una stazione vuole trasmettere, deve: 1.aspettare che arrivi il token (in listen mode); 2.rimuoverlo dal ring (in listen mode, vedremo come); 3.trasmettere 3.trasmettere i dati (in transmit mode); 4.rigenerare il token (in transmit mode); 5.rimettersi in listen mode. Poiché c'e' un solo token, questo meccanismo risolve senza conflitti il problema dell'accesso al mezzo. Alcune considerazioni sono degne di nota: •il token deve essere contenuto per intero sull'anello, il che non e' cosi' ovvio come sembra (qual'è la lunghezza di un bit?); •un frame, invece, non è necessario che ci stia tutto sull'anello (che in trasmissione e' aperto), quindi non ci sono limiti alla dimensione dei frame; •in genere esiste un tempo massimo entro il quale, una volta preso il token, si deve completare la trasmissione; ciò permette di ottenere una schedulazione round-robin delle trasmissioni; •quando tutte le stazioni hanno qualcosa da trasmettere, l'efficienza si avvicina al 100%; •viceversa, quando non c'è traffico, traffico, una stazione deve attendere attendere un pò più che che in CSMA/CD per trasmettere (mediamente (mediamente dovrà attendere un tempo pari a quello di attraversamento di mezzo anello, per ricevere il token). La velocità di propagazione del segnale nel rame è circa 200 metri per microsecondo. Con un data rate (ad esempio) di 1 Mbps, si genera un bit al microsecondo. Dunque, un bit è lungo in tal caso circa 200 metri, per cui per contenere 10 bit un anello dovrebbe essere lungo almeno 2 km. In realtà sul ring trovano posto: •x bit sull'anello, in funzione della sua lunghezza totale; •y bit nei buffer delle interfacce delle y stazioni presenti (1 bit delay). In definitiva, è necessario che x + y sia maggiore del numero di bit del token. Ciò significa che, a seconda delle caratteristiche dimensionali della rete in questione, può essere necessario ricavare un ritardo addizionale, sotto forma di buffer aggiuntivi, in una stazione (che ha un ruolo particolare, quello di monitor dell'anello).
53
Comunicazione nello strato Data Link
Molte Lan che devono essere interconnesse possono essere collegate da dispositivi chiamati bridge che operano nello strato Data Link. Essi esaminano gli indirizzi dello strato Data Link per eseguire l’instradamento; l’instradamen to; essi non esaminano il carico utile del frame. Bisogna subito precisare che risulta abbastanza difficile costruire bridge tra differenti Lan. Infatti ogni Lan utilizza un diverso formato di frame. Un secondo problema e che le Lan interconnesse non funzionano necessariamente alla stessa velocità. Quando si invia una lunga sequenza di frame da una Lan veloce ad una più lenta, il bridge non sarà in grado di trasmettere il frame alla stessa velocità con cui lo ha ricevuto. Un terzo problema e che le Lan 802 diverse adottano differenti differenti lunghezza massima del frame. Qui il problema sorge quando un frame lungo deve essere inviato ad una Lan che non può accettarlo. In questo strato non è possibile dividere il frame in più parti. Internetworking locale
Un bridge trasparente opera in modalità promiscua, ossia accetta ogni frame trasmesso su ogni Lan a cui è collegata. Vediamone il funzionamento: quando arriva un frame, il bridge deve decidere se scartare i dati o inoltrarli. Supponiamo di avere 4 Lan, e la stazione A, che si trova sulla Lan1, deve mandare un pacchetto alla stazione F, che si trova sulla Lan4
Quando il pacchetto arriva sul bridge B1, esso controlla l’indirizzo di destinazione con le informazioni riportate nella tabella memorizzata nel bridge. La tabella può elencare ogni possibile destinazione e dire a quale linea di output appartiene. Se una stazione deve mandare un pacchetto ad un’altra stazione che si trova nella stessa Lan, ad esempio A deve mandare un pacchetto a B, quando il pacchetto arriva al bridge controlla la tabella, vede che B si trova sulla sessa Lan di A e scarta il messaggio. Appena i bridge si collegati alla rete per la prima volta, tutte le tabelle saranno vuote poiché non sanno dove si trovano le varie destinazioni bridge utilizzano un algoritmo di flooding: ogni frame che proviene proviene da una destinazione destinazione sconosciuta sconosciuta viene inviato inviato a tutte le Lan Lan connesse al bridge, tranne quella di input. Col tempo i bridge imparano dove si trovano le destinazioni. Questo algoritmo è chiamato anche apprendimento all’indietro. La topologia può cambiare quando le macchine e i bridge vengono accesi, spenti o spostati. Per gestire le topologie dinamiche, ogni volta che crea una voce nella tabella di hash il bridge annota anche il tempo di arrivo del frame. Periodicamente, un processo nel bridge esamina la tabella di hash e cancella le voci che hanno più di qualche minuto. In questo modo un computer scollegato dalla sua Lan, spostato in un’altro edificio e collegato ad un’altra Lan torna operativo in pochi minuti senza necessità di intervento normale.
54
Bridge Spanning tree
Per aumentare l’affidabilità alcuni siti installano due o più bridge in parallelo tra coppie di Lan. Questa soluzione introduce nuovi problemi. Infatti se viene inviato un frame la cui destinazione è sconosciuta, succede questo: ogni bridge trasmette il frame su tutte le linee di uscita ad esso collegate, generando un altro frame e così via(per la precisione l’ultimo frame che viene generato viene trasmesso sull’altro bridge collegato in parallelo) formando un ciclo infinito. Per risolvere il problema è necessario che i bridge comunichino tra di loro e coprano la topologia reale con una struttura spanning tree. In questa struttura ad albero vi è un solo percorso da ogni Lan ad ogni altra Lan. Poiché esiste un unico percorso che collega ogni sorgente ad ogni destinazione, i cicli sono impossibili. Per costruire uno spanning tree, i bridge devono decidere tra loro quello che dovrà fungere da nodo principale della struttura. Per fare ciò ogni bridge trasmette il proprio numero di serie, installato dal produttore dell’hardware, e viene scelto come nodo principale il bridge che ha il numero di serie più basso. Quindi viene costruita una struttura ad albero, basata sui percorsi più brevi che uniscono il nodo principale ad ogni bridge e Lan. Nella pagina seguente, abbiamo la figura di un hub e di un bridge.
Circolo vizioso in una LAN senza spanning tree Spanning tree
55
Bridge Remoti
Nel suo insieme la rete ha caratteristiche di Local Area Network (LAN) estesa: il collegamento fra i segmenti e' assicurato da bridge remoti (Translan), apparecchiature che collegano LAN fisicamente diverse in modo trasparente a tutti i protocolli e che al contempo isolano il traffico locale. Questa trasparenza e' essenziale in ambiente multi-protocollo. Vengono talvolta utilizzati al posto dei router. Rispetto ai router: » Non gestiscono topologie di complessità molto elevata » Non confinano i messaggi di multicast/broadcast » Non permettono il bilanciamento ottimale del traffico su rete geografica » Non gestiscono algoritmi sofisticati per uso di più link in parallelo. I bridge sono collegati tra loro attraverso una rete punto-punto. Il bridge prende il campo MAC che può essere differente tra mittente al ricevitore; quindi il calcolo del checksum può essere differente ed è impossibile rilevare gli errori.
56
Ripetitori, Hub, Bridge, Switch, Router e Gateway
Questi dispositivi operano su strati diversi. Infatti utilizzano differenti porzioni di informazione per decidere come eseguire la commutazione. Un utente genera dati da inviare ad una macchina remota. Questi dati vengono passati allo Strato di Trasporto (Gateway) che aggiunge l'intestazione. Per esempio un'intestazione TCP, e passa l'unità risultante al sottostante Strato Network (Router) per esempio un pacchetto IP. Il pacchetto IP viene trasferito allo Strato Data Link e aggiunge la sua intestazione e il suo checksum e passa il frame allo Strato Fisico attraverso una LAN. Nello strato fisico abbiamo i ripetitori e gli hub. I primi sono dispositivi analogici collegati a due segmenti di cavo. Un segnale che appare su un segmento viene amplificato e trasmesso sull’altro. I ripetitori non sanno nulla di frame, dei pacchetti e delle intestazioni.
Un hub, invece ha diverse linee di input collegate elettricamente. I frame che arrivano su una di queste linee sono trasmessi attraverso tutte le altre. Due frame che arrivano contemporaneamente collidono; in altre parole l’intero hub forma un singolo dominio di collisione. Le linee di input devono operare alla stessa velocità. Gli hub non amplificano amplificano i segnali in ingresso e sono progettati per contenere schede di linea.
Nello strato Data Link abbiamo i bridge e gli switch. Un bridge collega due o più Lan. Quando arriva il frame, il software che si trova nel bridge estrae l’indirizzo di destinazione dall’intestazione e lo confronta con le voci della sua tabella per scoprire la destinazione dei dati.
57
Lo switch ha la stessa funzionalità del bridge, cioè instradano i dati in base all’indirizzo del frame, ma si differiscono dai primi i quanto lo switch è utilizzato prevalentemente per collegare singoli computer. Quindi quando A deve inviare un frame a B, lo switch s witch lo inoltra attivamente a differenza del bridge che, vedendo nella sua tabella si accorge che B si trova sulla stessa Lan di A, e lo scarta.
Inoltre poiché ogni parte di uno switch conduce ad un singolo computer essi contengono un numero maggiore di schede di linea rispetto rispetto ai bridge. Ogni O gni scheda di linea è in grado di memorizzare in un buffer i frame che arrivano attraverso le sue porte. Poiché ogni parte è un dominio di collisione indipendente, gli switch non perdono mai i frame causa collisioni. Se i frame arrivano più velocemente di quanto possano essere trasmessi, lo switch inizia a scartare quelli in eccesso. Per attenuare questo problema gli switch moderni iniziano ad inoltrare il frame non appena arriva il campo destinazione. Nello strato network abbiamo i router . Quando un pacchetto raggiunge un router l’intestazione e la coda del frame sono strappati via e il pacchetto contenuto nel carico utile del frame e passato al software di instradamento, instradamento, che sfrutta l’intestazione l’intestazione del pacchetto per scegliere la linea di output. Nello strato applicazione abbiamo i gateway. Questi dispositivi collegano due computer che usano protocolli di trasporto orientati alle connessioni differenti. Lan Virtuali
Supponiamo che un utente all’interno dell’azienda venga spostato da un reparto all’altro senza cambiare ufficio. Se si usano degli hub, per spostare l’utente nella giusta Lan è necessario che l’amministratore di rete intervenga manualmente sulla centralina, il che può causare un po’ di fastidi. Nella progettazione delle Lan:
un problema che si può riscontrare è che se si inseriscono persone dello stesso reparto su Lan diverse, i pacchetti potrebbero essere catturati da persone di reparti diversi che appartengono alla stessa Lan attivando la modalità promiscua. Per ovviare a questo problema, problema , si tende a mettere nella stessa rete tutte le persone che fanno parte dello stesso reparto in modo che la comunicazione rimanga all'interno della rete, anche se le persone fisicamente si trovano in edifici differenti. un secondo problema è il carico, in quanto quanto alcune lan sono sono più utilizzate di di altre. Pertanto è preferibile separarle. un terzo problema è la trasmissione trasmissione broadcast. broadcast. Se, ad esempio, una scheda scheda di rete si rompe ed inizia a generare un flusso senza fine di frame broadcast il risultato è una tempesta broadcast e quindi l'intera capacità della lan è occupata e tutte le macchine della lan 58
rimangono paralizzate in quanto occupate ad eliminare i frame trasmessi dalla tempesta.
Per rispondere agli utenti che chiedevano maggiore flessibilità, i produttori di dispositivi di rete hanno studiato un metodo per ricablare gli edifici via software, ovvero sono state realizzate le Lan virtuali o VLan. Le Lan si basano su switch VLan compatibili progettati in modo speciale, ma possono avere anche hub lungo il perimetro esterno.
Quando si costruisce una VLan l’amministratore di rete decide di creare quante VLan, quali computer collegare collegare e quale nome assegnare alle Vlan (di solito si usano i colori). Per far funzionare correttamente le VLan, negli switch o nei bridge devono essere impostate delle tabelle di configurazione. Queste tabelle indicano quali VLan sono accessibili attraverso le varie porte. Per esempio se arriva un frame dalla VLan grigia, il frame deve essere inoltrato su tutte le porte contrassegnate dal colore grigio. Una porta può essere etichettata con più colori VLan. Ora vediamo come i bridge o gli switch riconoscono le VLan di destinazione. Vi sono 3 metodi: 1. Ad ogni porta porta è assegnato assegnato un colore colore VLan, VLan, ma funziona funziona solo se tutti i computer computer collegati collegati a una porta appartengono alla stessa Vlan. 2. Ad ogni indirizzo indirizzo mac è assegnato assegnato un colore VLan. VLan. Qui il bridge o lo switch ha una tabella che elenca l’indirizzo mac a 48bit di ogni computer collegato al dispositivo, abbinato alla indicazione della VLan di appartenenza di quel computer. In queste condizioni è possibile mischiare le VLan su una Lan fisica. Quando arriva un frame non deve far altro che estrarre l’indirizzo mac e cercarlo nella tabella interna. 59
3. Ad ogni protocollo protocollo di di stato 3 oppure a ogni indirizzo indirizzo IP è assegnato assegnato un colore colore VLan. Qui il bridge o lo switch ha la possibilità di esaminare il carico utile del frame. Questa strategia è particolarmente utile quando molte macchine sono computer portatili collegabili a docking station diverse. L’unico problema di questo approccio è che viola la regola della comunicazione di rete: l’indipendenza tra gli strati. Infatti il contenuto del carico utile non riguarda lo strato Data Link. Lo standard IEEE 802.1Q
Quello che importa realmente è la VLan V Lan del frame stesso, non la l a VLan della macchina trasmittente. Se ci fosse un modo per identificare la VLan nel campo di intestazione del frame, non ci sarebbe più bisogno di esaminare il carico utile. Così il comitato IEEE 802 ha cambiato l’intestazione Ethernet e il nuovo formato prende il nome di 802.1Q. Questo nuovo formato contiene un campo VLan che è utilizzato solo dai bridge o dagli switch e non dalle macchine degli utenti. Non è realmente necessaria la loro presenza sulle linee in uscita collegate alle stazioni finali, a patto che siano presenti sulla linea che collega i bridge o gli switch. Quindi, per utilizzare le VLan, i bridge e gli switch devono essere VLan compatibili. Non sarà necessario sostituire tutte le vecchie schede di rete, anche perché gli utenti finali sono restii a cambiare tutte le loro schede di rete. Quindi se il trasmittente non genera il campo VLan, lo farà il primo bridge o switch compatibile VLan che tocca il frame, mentre l’ultimo dispositivo sul percorso dei frame lo rimuoverà. Per poter invece determinare la VLan di appartenenza del frame, il primo bridge potrebbe assegnare un numero VLan alla porta, assumere l’indirizzo mac oppure esaminare il carico utile. Durante il processo di transizione, molte installazioni avranno alcune macchine di vecchio tipo non compatibili con le VLan e altre che lo saranno. Quelle installazioni che hanno schede Ethernet VLan compatibili genereranno frame 802.1Q. Per eseguire la commutazione gli switch devono sapere quali VLan sono raggiungibili attraverso ogni porta. Quindi lo switch ha bisogno di una tabella indicizzata in base alle VLan che indichi le porte utilizzate e se sono, oppure no, compatibili con VLan. Quando un vecchio pc invia un frame ad uno switch VLan compatibile, lo switch costruisce un nuovo frame dotato di etichette basandosi sulla sua conoscenza della VLan del mittente usando la porta, l'indirizzo MAC, o l'indirizzo IP. Vediamo ora il formato del frame 802.1Q dove, a differenza del formato 802.3, si ha l’aggiunta di due campi lunghi 2byte. Il primo è VLan protocol ID , e il suo valore è sempre 0x8100.
Poiché questo numero è maggiore di 1500 byte (che è la massima lunghezza del frame), tutte le schede lo interpretano come una lunghezza. Il secondo campo di 2 byte contiene 3 sottocampi. Il più importante è VLan identifier che occupa i 12 bit di ordine più basso. Esso permette di identificare la VLan di appartenenza del frame. Il campo di 3 bit priorità permette di distinguere il traffico pesante trasmesso trasmesso in tempo tempo reale, quello quello leggero trasmesso trasmesso in tempo reale reale e quello insensibile al tempo, in modo da migliorare la qualità del servizio su una Ethernet. L’ultimo bit si chiama CFI e indica che il carico utile contiene un frame 802.5 liofilizzato che sta cercando di raggiungere un’altra Lan 802.5 passando attraverso una Ethernet. 60
CAPITOLO 5 LIVELLO NETWOR K K Questo strato si occupa del trasporto dei pacchetti lungo tutto il cammino percorso dall’origine alla destinazione finale che, per essere raggiunta, può richiedere molti salti attraverso i router intermedi lungo il tragitto. Ciò è molto diverso dal compito del livello data link, che è quello di muovere informazioni solo da un capo all'altro di un singolo canale di comunicazione wire-like. Le incombenze principali di questo livello sono: conoscere la topologia della rete; scegliere di volta in volta il cammino migliore (routing); gestire il flusso dei dati e le congestioni (flow control e congestion control); gestire le problematiche derivanti dalla presenza di più reti diverse (internetworking). Nel progetto e nella realizzazione del livello network di una architettura di rete si devono prendere decisioni importanti in merito ai servizi offerti al Livello Trasporto e all'organizzazione interna della subnet di comunicazione. Commutazione di pacchetto store-and-forwar store-and-forward d
Prima di iniziare a spiegare i dettagli dello strato network è bene ricordare il contesto in cui operano i protocolli dello Strato Network , rappresentato nella Figura 5.1 Questo tipo di commutazione funziona in questo modo: un host con pacchetti da trasmettere invia i dati al router più vicino attraverso la sua stessa LAN, oppure attraverso un collegamento punto punto con l’operatore delle telecomunicazioni. Qui il pacchetto viene memorizzato fino a quando non è interamente arrivato, per verificare il checksum; quindi viene inoltrato al router successivo che si trova lungo il percorso, fino a quando non raggiunge l’host di destinazione dove viene consegnato.
Servizi forniti allo strato trasporto t rasporto
Lo strato network fornisce i servizi allo strato trasporto attraverso l’interfaccia strato network/strato network/strato trasporto. I servizi dello strato network sono stati progettati per perseguire i seguenti obbiettivi: i servizi non dovrebbero essere collegati alla tecnologia del router; 61
allo strato trasporto dovrebbero essere nascosti dettagli quali il numero, il tipo e la topologia del router; gli indirizzi di rete disponibili allo strato trasporto dovrebbero utilizzare uno schema di numerazione uniforme.
Da questi obiettivi nasce il problema di quale tipo di servizio allo strato superiore dovrebbe fornire lo strato network. La scelta ricade su due tipologie fondamentali di servizi: servizi connection-oriented connection-oriented (orientati alla connessione) connessione) servizi connection-less connection- less (senza connessione) Implementazione del servizio senza connessione
In questo tipo di implementazione, i pacchetti sono inoltrati nella sottorete individualmente e instradati indipendentemen indipendentemente te l’uno dall’altro; non occorre una configurazione anticipata. anticipata. I pacchetti di solito vengono chiamati datagramma e la sottorete è chiamata sottorete a datagrammi. Qui ogni router ha una tabella interna che indica dove devono essere inviati i pacchetti diretti ad ogni possibile destinazione. Ogni voce della tabella è costituita da una coppia di valori, che rappresentano una destinazione e la linea di trasmissione da utilizzare per raggiungere tale destinazione. Possono essere utilizzate solo linee collegate direttamente. Quello che si può verificare con questo tipo di servizio è la cosiddetta congestione, ovvero troppo traffico su una determinata linea di comunicazione.
62
Implementazione del servizio orientato alla connessione
In questo tipo di implementazione si utilizza una sottorete a circuito virtuale. L’idea di base è quella di evitare di dover scegliere una nuova strada per ogni pacchetto inviato. Quando si stabilisce una connessione, connessione, il percorso dal computer sorgente a quello di destinazione destinazione viene scelto a priori durante l’impostazione della connessione, e archiviato nelle tabelle di router. Quel percorso è utilizzato per tutto il traffico che scorre per quella connessione. Quando la connessione viene rilasciata, anche il circuito virtuale viene terminato. Con un servizio orientato alla connessione, ogni pacchetto contiene un identificatore che indica il circuito virtuale di appartenenza. Nella figura 5.3 viene descritto il funzionamento: H1 e H2 si connettono entrambi alla sottorete. Questa connessione viene memorizzata nelle tabelle di routing. La prima linea della tabella A dice che è arrivato un pacchetto da H1 con identificatore 1, e lo stesso avviene per H3. Il router A, che è il primo, alla prima richiesta di connessione, sceglie a priori il percorso che i pacchetti devono attraversare attraversar e (nella figura i dati vengono inoltrati nel circuito virtuale A, C, E, F). Poiché In questa situazione, si verificherà un conflitto in A (perchè è arrivato 1 sia da H1 che da H3).
Confronto tra sottoreti a circuito virtuale e a datagramma
All’interno della sottorete esistono diversi compromessi tra circuiti virtuali e datagrammi. Un compromesso va fatto tra spazio di memoria del router e banda. Infatti, i circuiti virtuali permettono ai pacchetti di utilizzare i numeri di circuito al posto degli indirizzi di destinazione completi. Se i pacchetti tendono ad essere corti, un indirizzo di destinazione completo in ogni pacchetto inevitabilmente fa sprecare banda. Il prezzo da pagare per l’utilizzo interno dei circuiti virtuali è rappresentato dallo spazio delle tabelle dei router. Un altro 63
compromesso è tra il tempo per la configurazione del circuito e il tempo di analisi dell’indirizzo. L’utilizzo dei circuiti virtuali richiede una fase di configurazione che esige tempo e consuma risorse. In una sottorete a datagrammi, di contro, per individuare la voce relativa alla destinazione serve una procedura di ricerca più complessa. Un altro problema è la quantità di spazio di tabella richiesto nella memoria del router. Una sottorete a datagrammi ha bisogno di una voce per ogni possibile destinazione, mentre una sottorete a circuito virtuale si accontenta di una voce per ogni circuito virtuale. I circuiti virtuali sono un vantaggio quando si tratta di dare garanzie sulla qualità del servizio ed evitare congestioni nelle sottoreti perchè le risorse possono essere riservate in anticipo al momento in cui si stabilisce la connessione (buffer, cpu, ecc.). I circuiti virtuali hanno anche un problema di vulnerabilità. Se un router va in crash perde i dati in memoria. Se un router per datagrammi si blocca, soffrono solo gli utenti che in quel momento avevano pacchetti nel router. Algoritmi di routing
L’algoritmo di routing è quella parte del software dello strato network che si preoccupa di scegliere lungo quale linea di uscita vanno instradati i pacchetti in arrivo. Se la sottorete utilizza internamente i datagrammi questa decisione va ripetuta per ogni pacchetto dati in arrivo, poiché il percorso migliore può cambiare nel tempo. Se la sottorete utilizza internamente i circuiti virtuali, le decisioni che riguardano il routing vengono prese solo quando viene impostato un nuovo circuito virtuale. E’ utile distinguere il concetto tra routing, cioè l’algoritmo che sceglie la strada da seguire, e inoltro, cioè l’operazione eseguita all’arrivo di un pacchetto. Gli algoritmi si possono raggruppare in due classi: non adattivi e adattivi . I primi non basano le loro decisioni su misure o stime del traffico e della tipologia corrente. Il percorso da utilizzare viene calcolato in anticipo in modalità fuori linea ed è scaricato nel router all'avvio della rete. Questa procedura si chiama anche routine statico . I secondi (quelli (quelli adattivi) cambiano le loro decisioni decisioni secondo le modifiche apportate apportate alla topologia, topologia, e di solito anche al traffico. Gli algoritmi vengono classificati anche in base al carico: quelli sensibili al carico,i costi dei link variano dinamicamente per riflettere lo stato attuale di congestione del link in questione,se un link in congestione viene associato 1 alto costo, un algoritmo di istradamento tenderà a scegliere percorsi che evitano quel link in congestione. Il Principio di Ottimalità
E' possibile fare una considerazione generale sull' ottimalità dei cammini, indipendentemente dallo specifico algoritmo adottato per selezionarli. Il principio di ottimalità dice che se il router j è nel cammino ottimo fra i e k, allora anche il cammino ottimo fra j e k è sulla stessa strada: Se così non fosse, ci sarebbe un altro cammino fra j e k migliore di quello che è parte del cammino ottimo fra i e k, ma allora ci sarebbe anche un cammino fra i e k migliore di quello ottimo. Una diretta conseguenza è che l'insieme dei cammini ottimi da tutti i router a uno specifico router di destinazione costituiscono un albero, detto sink tree per quel router. In sostanza, gli algoritmi di routing cercano e trovano i sink tree relativi a tutti i possibili router di destinazione, e quindi instradano i pacchetti esclusivamente lungo tali sink tree.
Routing basato sul percorso più breve (algoritmo non adattivo, ovvero statico)
L’idea è quella di costruire un grafo della sottorete dove ogni nodo rappresenta un router e ogni arco rappresenta una linea di comunicazione. Per scegliere un percorso tra una coppia di router, l’algoritmo l’algoritmo cerca semplicemente la strada più corta che collega i due nodi del grafo. Analizziamo il concetto di cammino breve. La lunghezza del percorso può essere misurata con il numero di salti. Un’altra metrica è basata sulla distanza geografica espressa in chilometri. Si possono usare molte altre metriche: per esempio ogni arco potrebbe essere etichettato con i valori che rappresentano i valori medi di accodamento e ritardo della trasmissione. Ritornando a parlare dell’algoritmo da noi considerato, ogni nodo è associato a un'etichetta che riporta la sua distanza dal nodo d’origine 64
lungo il miglior percorso conosciuto. Inizialmente nessun percorso è noto, perciò tutti i nodi sono etichettati con il simbolo che rappresenta l’infinito. Man a mano che l’algoritmo procede e si trovano i percorsi migliori, le etichette cambiano indicando i percorsi migliori. Un’etichetta può essere provvisoria o permanente. Inizialmente tutte le etichette sono provvisorie, e quando si scopre che rappresenta il percorso più breve dall’origine a quel nodo viene resa permanente impedendo successive modifiche. Si desidera trovare il percorso che collega A e B. Segnamo il nodo A come nodo permanente (working node) e esaminiamo tutti i nodi che sono adiacenti ad A rietichettando ogni nodo con il numero che rappresenta la distanza da A. Da questo si ricostruisce tutto il percorso finale. Dopo Dopo aver esaminato ogni ogni nodo adiacente adiacente ad A bisogna esaminare esaminare tutti gli altri altri nodi etichettati dell'intero grafico, e si rende permanente quello con l'etichetta più piccola. Quest'ultimo sarà il nuovo working node da cui si partirà nuovamente a visitare tutti i nodi ad esso adiacenti. Questo procedimento viene effettuato fino ad arrivare a destinazione.
65
Flooding (inondamento)
Un altro algoritmo statico è quello di flooding, in cui ogni pacchetto in arrivo è inviato a tutte le linee tranne quella da cui proviene. In questo modo si generano un elevato numero di pacchetti duplicati. duplicati. Per attenuare il verificarsi di questo inconveniente, inconveniente, si potrebbe potrebbe utilizzare un contatore di salti inserito nell’intestazione di ogni pacchetto, e decrementare il suo valore a ogni salto in modo da scartare automaticamente il pacchetto quando il contatore raggiunge lo zero. Per fare ciò si dovrebbe conoscere a priori la lunghezza del percorso dall’origine alla destinazione. Se il trasmettitore non conosce la lunghezza del percorso può assegnare un valore che rappresenta il caso peggiore, ossia il diametro dell’intera regione. Un’altra tecnica tiene traccia dei pacchetti trasmessi nel flood, in modo da evitare una seconda trasmissione. Per ottenere questo risultato, il router d’origine deve inserire in ogni pacchetto che riceve dai suoi host un numero di sequenza. Ogni router ha bisogno di una lista per ciascuno dei router sorgenti, che indichi i numeri di sequenza già trasmessi da quella origine. Se appare nella lista, il pacchetto non viene trasmesso. Routing basato sul vettore delle delle distanze (algoritmo adattivo, ovvero ovvero dinamico)
Questo è un algoritmo dinamico ed opera facendo in modo che ogni router conservi una tabella che definisce la migliore distanza conosciuta per ogni destinazione e la linea che conduce a tale destinazione. Queste tabelle sono aggiornate scambiando informazioni con i router vicini. Nel routing basato sul vettore delle distanze ciascun router conserva una tabella di routing indicizzata da ogni router della sottorete, dove è memorizzata una voce per ogni router. Questa voce è composta da due parti: la linea di trasmissione preferita da utilizzare per quella destinazione, e una stima del tempo o della distanza associata a quella destinazione. La metrica utilizzata potrebbe essere il numero di salti, il ritardo espresso espresso in millisecondi. millisecondi. Una volta volta ogni T msec, ogni router invia ai suoi vicini una lista delle proprie stime di ritardo relative a ciascuna destinazione. Il router riceve inoltre una lista simile da ognuno dei suoi vicini. Quindi quando un router deve instradare un pacchetto ad un altro determinato router, quello di destinazione, non fa altro che controllare la sua tabella di routing e vedere il percorso, che è quello con ritardo più piccolo rispetto agli altri. Per ottenere questo risultato il router sorgente fa il calcolo di tutti i possibili percorsi per raggiungere la destinazione e sceglie la linea di comunicazione che ha il minor ritardo. Il routing basato sul vettore delle distanze ha un serio difetto pratico: quello di reagire lentamente alle cattive notizie, ovvero il problema del conto all’infinito. Ad esempio se abbiamo quattro ruoter (A,B,C,D) ed essi e tutte le linee sono attive. La distanza tra i quattro router è rispettivamente 1,2,3,4. improvvisamente A si spegne, oppure oppure la linea tra A e B si interrompe. Quindi B non riceve nulla da A. Allora B vede che C arriva ad A ed ha una distanza pari a due, ma non sa che il percorso di C passa da B. Di conseguenza, B pensa di poter raggiungere A attraverso C con un percorso di lunghezza pari a tre. Questo effetto si ripercuote su tutti i router, infatti aumenteranno di una unità la loro distanza, raggiungendo il valore infinito.
66
Problema dell'conto all'infinito Routing basato sullo stato dei collegamenti
A causa della lentezza di convergenza si è cercato 1 approccio diverso; l’idea alla base di questo algoritmo dinamico è semplice. Ogni router deve:
Scoprire i propri vicini e i relativi indirizzi di rete .
Quando viene acceso, il router prima di tutto cerca di scoprire chi sono i suoi vicini. Il dispositivo raggiunge il suo obiettivo inviando uno speciale pacchetto HELLO su ogni linea punto-punto; il router all’altro capo della linea deve rispondere fornendo la propria identità. Questi nomi devono essere globalmente unici;
Il modo più diretto per determinare questo ritardo consiste nell’inviare attraverso la linea uno speciale pacchetto ECHO, al quale l’altra parte deve rispondere immediatamente. Misurando il tempo di andata e ritorno e dividendo per due, il router trasmittente può ottenere una stima ragionevole del ritardo. E’ lecito domandarsi se nel ritardo andrebbe incluso il carico. Per considerare il carico, il cronometro che misura il tempo di andata e ritorno deve essere inviato nel momento in cui il pacchetto ECHO viene inserito nella coda; per ignorarlo, il cronometro dovrebbe essere avviato quando il pacchetto ECHO raggiunge il fronte della coda. Entrambi i metodi, però, sono discutibili. Includere nelle misurazioni i ritardi indotti dal traffico significa che quando dovrà scegliere tra due linee che hanno la stessa banda, una delle quali è caricata pesantemente durante tutto il tempo e l’altra no, il router considererà più breve il percorso che attraversa la linea non appesantita dal traffico. Ma dopo accadrà il viceversa, ossia che la linea che si sta usando subirà una congestione, e si ritornerà a quella precedente, con il risultato che le tabelle di routing iniziano ad oscillare paurosamente, causando instradamenti irregolari. Per evitare oscillazioni nella scelta scelta del percorso migliore è una buona soluzione distribuire distribuire il carico su più linee Misurare il ritardo o il costo di ogni vicino.
67
Dopo aver raccolto le informazioni necessario per lo scambio, ogni router deve costruire un pacchetto contenente tutti i dati. Il pacchetto inizia con l’identità del trasmittente, seguito da un numero di sequenza, dall’età, e da una lista di vicini. Per ogni vicino è riportato il ritardo misurato. Costruire un pacchetto che contiene tutte le informazioni raccolte.
Durante la distribuzione e l’installazione di questi pacchetti i router che ricevono i primi pacchetti cambieranno i loro percorsi. L’idea fondamentale è quella di utilizzare il flooding per distribuire i pacchetti contenenti le informazioni sullo stato dei collegamenti. Per tenere sotto controllo il flusso dei dati in ogni pacchetto è inserito in numero di sequenza, incrementato per ogni pacchetto inviato. I router tengono traccia di tutte le coppie (router sorgente, sequenza) sequenza) rilevate. Quando arriva un nuovo pacchetto pacchetto contenente contenente informazioni informazioni sullo stato della connessione, il router confronta i dati con quelli già visti. Se è nuovo, il pacchetto viene inoltrato attraverso tutte le linee, tranne quella di ricezione; se è un duplicato, i dati sono scartati. Se arriva un pacchetto con un numero di sequenza inferiore a quello visto in quel momento, i dati sono rifiutati in quanto obsoleti, cioè il router ha informazioni più recenti. Questo algoritmo ha alcuni difetti: numeri di sequenza ripetitivi potrebbero generare il caos; quando un router si blocca perde traccia dei suoi numeri di sequenza. Se il conteggio ricomincia da 0, il pacchetto successivo viene rifiutato perché ritenuto un duplicato; se un numero sequenza arriva danneggiato i successivi verranno considerati obsoleti. Per risolvere questi problemi è necessario includere l’età di ogni pacchetto subito dopo il numero di sequenza, e decrementare il suo valore una volta al secondo. Quando l’età raggiunge lo zero le informazioni provenienti da quel router vengono scartate. Il campo età è anche decrementato da ogni router durante il processo di flooding iniziale, per garantire che nessun pacchetto possa andare perduto e duri per un periodo indefinito di tempo. Distribuzione dei pacchetti che contengono lo stato dei collegamenti.
Dopo aver accumulato una serie di pacchetti sullo stato della connessione, connessione, il router può costruire l’intero grafo della sottorete poiché è rappresentato ogni collegamento. A questo punto si può eseguire localmente l’algoritmo di Dijkstra per costruire il percorso più breve verso tutte le possibili destinazioni. I risultati di questo algoritmo possono essere installati nelle tabelle di routing, prima di riprendere le normali operazioni. Elaborazione dei nuovi percorsi.
Routing gerarchico
La dimensione delle tabelle di routing cresce proporzionalmente alla dimensione della rete. La crescita della tabella non soltanto consuma la memoria del router, ma aumenta il tempo che la CPU impiega ad analizzare i dati e la banda necessaria per inviare le informazioni sullo stato. In questo caso il routing routing dovrà essere fatto fatto gerarchicamente. gerarchicamente. I router sono divisi in regioni: regioni: ogni router router 68
conosce i dettagli relativi al routine dei pacchetti diretti a destinazioni della stessa regione, ma non sa nulla della struttura interna delle altre regioni. Viceversa quando un router interno deve spedire qualcosa ad 1 router di un'altra regione sa soltanto che deve farlo pervenire pervenire a un particolare router della propria regione, regione, detto router di confine,che confine,che lo invierà ad 1 altro router di confine Quando si interconnettono reti diverse è naturale considerare ogni rete come una regione separata; in questo modo, i router di una rete non sono costretti a conoscere la struttura topologica delle altre reti. Di conseguenza ci sono due livelli di routing un primo livello di routing all'interno di ogni regione un secondo livello di routing fra tutti i routing di confine. In questo modo la dimensione della tabelle di routing è notevolmente ridotta. Questi risparmi hanno un costo: la penalità da pagare è rappresentata dalla crescita della lunghezza dei percorsi. I router interni mantengono nelle loro tabelle di routing: 1. un’ entrata entrata per ogni altro altro router interno, con la relativa linea da da usare per arrivarci arrivarci 2. un’ entrata entrata per ogni altra altra regione, con l'indicazione l'indicazione del relativo relativo router di confine confine e della linea da usare per arrivarci. I router di confine, invece, mantengono: 1. una entrata entrata per ogni ogni altra regione, regione, con l'indicazione l'indicazione del prossimo router router di confine confine da contattare e della linea da usare per arrivarci. Non e' detto che due livelli siano sufficienti. In tal caso il discorso si ripete su piu' livelli.
Routing broadcast
Alcune applicazioni gli host hanno bisogno d’inviare messaggi a molti o tutti gli altri host. La trasmissione contemporanea di un pacchetto a tutte le destinazioni è chiamata trasmissione broadcast. Esistono 4 metodi:
Un metodo di trasmissione è quello in cui la sorgente invia un pacchetto distinto a ogni destinazione;questo metodo non si limita a sprecare banda ma obbliga la sorgente a possedere una lista completa di tutte le destinazioni. Metodo meno desiderabile. Un altro ovvio candidato è il meccanismo di flooding anche se nn si adatta bene nelle comunicazioni punto-punto in quanto genera troppi pacchetti e consuma troppa banda. Un terzo algoritmo è quello quello del multidestination multidestination routing routing (routing a più destinazioni) destinazioni) così ogni pacchetto contiene una lista delle destinazioni o una mappa di bit che indica le destinazioni desiderate. Quando riceve pacchetto, router controlla le destinazioni x sapere le 69
linee di trasmissioni richieste. Il router genera una copia del pacchetto per ogni linea di output usata e include in ogni pacchetto solo quelle destinazioni che si trovano su quella linea. Dopo un numero sufficienti sufficienti di salti, pacchetto pacchetto conterrà una sola destinazione destinazione e viene trattato come un pacchetto normale.(come se fossero indirizzati separatamente ma se ci sono diversi pacchetti che eseguono lo stesso percorso uno solo paga il prezzo completo gli altri viaggiano gratis)
Un quarto algoritmo di trasmissione broadcast fa uso del sink tree (spanning tree). Uno spanning tree è un sottoinsieme che comprende tutti i router ma che non contiene cicli. Se ogni router sa quali le sue linee appartengono allo spanning tree, allora può copiare un pacchetto brodcast in arrivo su tutte le linee linee dello dello spanning spanning tree esclusa quella quella d'ingresso. d'ingresso. Questo metodo usa in modo eccellente la banda e genera in assoluto il minimo numero di pacchetti necessari per svolgere il lavoro. L'unico problema sta nel fatto che, per rendere applicabile applicabile il metodo, ogni router deve conoscere conoscere uno spanning tree. Qualche volta volta questa informazione è disponibile (per esempio nel caso del routing basato sullo stato dei collegamenti), collegamenti), altre volte invece non lo è (per esempio nel caso del routing basato sul vettore vettore delle distanze). L'ultimo algoritmo usato per trasmettere in modalità broadcast tenta di approssimare il comportamento dell'algoritmo precedente anche quando i router non sanno nulla degli spanning. L'idea, chiamata reverse path forwarding. Quando riceve un pacchetto broadcast, il router verifica se il pacchetto è giunto attraverso la linea che normalmente utilizzata per inviare i pacchetti alla sorgente della trasmissione broadcast. In caso affermativo, c'è una forte probabilità che il pacchetto brodcast stesso abbia seguito il percorso migliore dal router, e che perciò sia la prima copia arrivata al router. In questo caso, il router inoltra le copie del pacchetto attraverso tutte le linee esclusa quella di input. Se al contrario il pacchetto broadcast è giunto attraverso una linea diversa da quella che viene preferita per raggiungere la sorgente. il pacchetto è scartato in quanto è probabile che si tratti di un duplicato.
La parte (a) mostra una sottorete,la parte (b) mostra un sink tree per il router I della sottorete e la parte (c) mostra in che modo funziona I'algoritmo del percorso inverso. Al primo salto, I invia pacchetti a F,H, J e a N, come indicato nella seconda riga della struttura ad albero. Ognuno di questi pacchetti giunge attraverso il percorso preferito associato a I (supponendo che il percorso preferito cada lungo il sink tree) ed perciò indicato da un cerchietto intorno alla lettera. Al secondo salto vengono generati otto pacchetti: ogni router che ha ricevuto un pacchetto al primo salto ne genera due. Tutti e otto otto arrivano a router non visitati precedentement precedentemente, e, e cinque di questi questi giungono attraverso la linea preferita. Dei sei pacchetti generati al terzo salto, solo tre giungono attraverso il percorso preferito preferito (C, E e K); gli altri sono duplicati. duplicati. Dopo cinque salti e 24 pacchetti pacchetti la trasmissione broadcast termina, mentre il sink tree impiega esattamente quattro salti e 14 pacchetti. 70
il vantaggio principale del reverse path fonvarding è che si tratta di un sistema ragionevolmente efficiente e facile da implementare. Non richiede che i router conoscano gli spanning tree né che si debba elaborare una lista di destinazione o una mappa di bit per ogni pacchetto broadcast, come invece accade nel routing a più destinazioni. Inoltre, non è necessario alcun meccanismo speciale d'interruzione del processo, come richiesto dal flooding (che adotta un contatore di salto in ogni pacchetto e una conoscenza a priori del diametro della sottorete, oppure un elenco di pacchetti già visti per ogni sorgente). Routing multicast
Alcune applicazioni richiedono che processi molto separati funzionino insieme a gruppi. In queste situazioni, spesso è necessario che un processo invii un messaggio a tutti gli altri membri del gruppo. La trasmissione trasmissione di un messaggio messaggio a un gruppo è definita definita multicast e il suo algoritmo algoritmo di routing è chiamato routing multicast. La trasmissione multicast richiede la gestione dei gruppi: occorre un sistema che consenta di creare e distruggere i gruppi e che permetta ai processi di entrare e uscire dai gruppi. Il modo in cui queste operazioni sono eseguite non riguarda l’algoritmo di routing; ciò che importa è che quando si unisce ad un gruppo, il processo informi il suo host di questo fatto. E’ importante che i router sappiano quali sono gli host appartenenti a ogni gruppo, quindi gli host devono comunicare ai loro router i cambi di gruppo oppure i router devono interrogare periodicamente periodicamente i loro host. In entrambi i casi, i router scoprono i gruppi di appartenenza dei loro host. Per ottenere una trasmissione multicast, ogni router elabora uno spanning tree che copre tutti gli altri router. Quando un processo invia un pacchetto multicast ad un gruppo, il primo router esamina il suo spanning tree e lo accorcia, rimuovendo tutte le linee che non conducono agli host che sono membri di quel gruppo. E’ possibile ridurre lo spanning tree in molti modi. Quello più semplice può essere utilizzato se si adotta il routing basato sullo stato dei collegamenti e se ogni router conosce la topologia completa, quindi sa quali host appartengono a ciascun gruppo. Il Protocollo IP
Il punto giusto per iniziare lo studio dello strato network in Internet è l’esame del formato dei datagrammi IP. Un datagramma IP è costituito da una parte di intestazione e da una parte di testo. L’intestazione ha una parte fissa di 20 byte e una parte opzionale di lunghezza variabile. Il campo version tiene traccia della versione del protocollo usato per il datagramma, le transazioni possono avvenire lentamente nel corso degli anni, con alcune macchine che continuano a utilizzare la vecchia versione e altre che usano la nuova. Poiché la lunghezza dell’intestazione non è costante, l’intestazione contiene un campo IHL che indica la lunghezza dell’intestazione espressa in parole di 32 bit: il valore minimo, 5, si applica quando non sono presenti altre opzioni; il valore massimo di questo campo di 4 bit è 15. Il campo type of service è uno dei pochi campi che nel corso degli anni ha leggermente cambiato il suo significato. Era, ed è ancora, usato per distinguere diverse classi di servizio. In origine, il campo di 6 bit conteneva, da sinistra a destra, un campo di 3 bit chiamato precedence e tre segnalatori D, T, R. Essi permettevano all’host di indicare l’interesse nei confronti dell’insieme costituito da ritardo, capacità di trasporto, affidabilità. In pratica questi sei bit del campo type of service sono utilizzati per indicare la classe di servizio di appartenenza del pacchetto. Il campo total lenght tiene conto di tutto il contenuto del datagramma, intestazione e dati; la lunghezza massima è di 65.535 byte. Il campo identification serve all’host di destinazione per determinare a quale datagramma appartiene il frammento appena arrivato. Tutti i frammenti di un datagramma contengono lo stesso valore identification. Subito dopo c’è un bit inutilizzato, e poi due campi lunghi rispettivamente 1 bit. Il primo DF, don’t fragment, ossia non frammentare; rappresenta un ordine che impone al router di non dividere in frammenti il datagramma perché la destinazione non è in grado rimettere insieme i pezzi. Il secondo MF, more fragments. Tutti i frammenti, tranne l’ultimo, hanno questo bit impostato a 1. E’ fondamentale sapere quando sono arrivati tutti i frammenti di un datagramma. Il campo fragment offset indica la posizione del 71
frammento nel datagramma corrente. Tutti i frammenti tranne l’ultimo in un datagramma devono essere di 8 byte, che è la dimensione del frammento elementare. Il campo time to live è un contatore utilizzato utilizzato per limitare limitare la vita di un pacchetto. pacchetto. Il contatore dovrebbe essere essere decrementato ad ogni salto, oppure se rimane per lungo tempo accodato in un router. Nella realtà il valore riflette il numero dei salti. salti. Il campo protocol indica indica quale processo di trasporto trasporto è in attesa di quei dati. dati. Il campo header checksum verifica solo l’intestazione. Questo checksum aiuta a rilevare gli errori generati da locazioni locazioni di memoria difettose difettose nel router. router. I campi source adress e destinazion destinazion adress indicano il numero di rete e il numero di host. Il campo option è usato quando nel protocollo IP si vogliono specificare alcune opzioni. Ognuna di queste opzioni inizia con un codice di 1 byte che la identifica; alcune sono seguite da un campo option lenght di 1 byte che precede uno o più byte di dati. Ecco alcune opzioni: security indica il livello di segretezza delle informazioni; l’opzione strict source routing, definisce il percorso completo dalla sorgente alla destinazione, attraverso una sequenza di indirizzi IP. Il datagramma deve seguire quel percorso preciso; l’opzione loose source routing costringe il pacchetto ad attraversare una serie di router specificati, nell’ordine indicato; l’opzione record route costringe ogni router lungo la strada ad aggiungere il proprio indirizzo IP nel al campo opzioni. Questo permette agli amministratori di sistema di individuare gli errori negli algoritmi di routing; l’opzione timestamp costringe ogni router a registrare sia i 32 bit che rappresentano l’inidirizzo IP sia i 32 bit che indicano la data e l’ora di elaborazione. Anche questa opzione è utilizzata per correggere gli algoritmi di routing.
Quindi l’indirizzo 32 bit dell’indirizzo ip 193.32.216.9 in notazione binaria è: 11000001 00100000 11011000 00001001 Indirizzi IP
Ogni host e router di internet ha un indirizzo IP che codifica il suo indirizzo di rete e il suo numero di host. Tutti gli IP sono lunghi 32bit e sono utilizzati nei campi indirizzo sorgente e indirizzo destinazione dei pacchetti IP. Un indirizzo IP non si riferisce veramente a un host ma a una scheda di rete, quindi se un host ha due schede di rete, deve avere due indirizzi IP. Per molti decenni, gli indirizzi IP sono stati divisi in 5 classi, questa assegnazione è stata chiamata indirizzamento per classi, questo sistema oggi non è più utilizzato. I formati di classe A,B,C o D supportano complessivamente un numero massimo di 128 reti con 16 milioni di host ciascuna, 16.384 reti da 64000 host e 2 milioni di reti (Lan) da 256 host (alcune di queste riservate riservate a utilizzi particolari). particolari). E’ supportato anche il multicast, cioè l’invio dei datagrammi verso più host. Gli indirizzi che iniziano con 1111 sono riservati per applicazioni future. Per evitare conflitti i numeri di rete sono gestiti da un ente no profit chiamato ICANN.
72
Gli indirizzi di rete, rappresentati da numeri a 32bit, sono di solito scritti in notazione decimale a punti. In questo formato, ognuno dei 4 byte è rappresentato in forma decimale con un numero che varia tra 0 e 255. Per esempio come 192.41.6.20. Il più basso indirizzo IP è 0.0.0.0, il più alto è 255.255.255.255. I valori 0 e -1 (tutti 1) hanno un significato speciale, 0 indica la rete corrente (oppure l’host corrente), -1 è utilizzato come indirizzo broadcast e rappresenta tutti gli host sulla rete indicata. Infine, tutti gli indirizzi nella forma 127.xx.yy.zz sono riservati per le prove di loopback. I pacchetti diretti a quell’indirizzo quell’indirizzo non sono immessi nel cavo, ma elaborati localmente e trattati come pacchetti in arrivo. Sottoreti
Sappiamo che tutti gli host di una rete devono avere lo stesso numero di rete. Questa proprietà dell’indirizzamento IP può causare problemi quando le reti crescono. La soluzione consiste nel dividere internamente la rete in più parti, facendo in modo che il mondo esterno veda ancora una singola rete. Una tipica rete potrebbe assomigliare a un router principale collegato a un ISP o a una rete regionale, e numerose Ethernet sparse. Ogni Ethernet ha il proprio router collegato al router principale, le parti della rete (in questo caso le Ethernet) sono chiamate sottoreti. Quando un pacchetto raggiunge il router principale, come viene identificata la sottorete (Ethernet) di destinazione di quei dati? Per esempio, in breve, invece di avere un singolo indirizzo di classe B con 14 bit per il numero di rete e 16 bit per il numero di host, alcuni bit sono tolti al numero host per creare un numero di sottorete.
Per implementare le sottoreti, il router principale ha bisogno di una maschera di sottorete (subnet mask) che indichi il punto di demarcazione tra numero di rete (inclusivo di quello della sottorete) e quello di host. Anche le maschere di sottorete sono scritte in notazione decimale a punti, oppure da una barra seguita dal numero di bit della parte che rappresenta la rete più la sottorete. All’esterno della rete la divisione in sottoreti non è visibile, perciò l’assegnazione di una nuova sottorete non richiede l’approvazione l’approvazione di ICANN o la modifica di database esterni. Per capire le sottoreti, vediamo in che modo i pacchetti IP sono elaborati dal router. Ogni router ha una tabella che elenca numeri di indirizzi IP del tipo (rete,0) e numeri di indirizzi IP del tipo (questa rete, host). Il primo tipo indica come raggiungere reti distanti; il secondo tipo indica come raggiungere host locali. A ogni tabella è associata la scheda di rete da utilizzare per raggiungere la destinazione, insieme ad altre informazioni. Quando riceve un pacchetto IP, il router cerca il suo indirizzo di destinazione nella tabella di routing. 73
Se è indirizzato a una rete distante, il pacchetto viene inoltrato al router successivo sull’interfaccia indicata dalla tabella; se la destinazione è un host locale (sulla Lan del router), il pacchetto viene inviato direttamente alla destinazione. Se la rete non viene trovata nella tabella, il pacchetto viene inoltrato a un router predefinito contenente tabelle più estese. In base a questo algoritmo, ogni router deve tenere traccia solo delle altre reti e degli host locali, invece che di tutte le coppie (rete, host): ciò riduce di molto le dimensioni della della tabella di routing. Quando si introduce la la tecnica della divisione in sottoreti le tabelle di routing cambiano, con l’aggiunta di voci espresse nella forma (questa rete, sottorete, 0) e (questa rete, questa sottorete, host). Perciò un router su una sottorete k sa come raggiungere tutte le altre sottoreti e sa anche come raggiungere tutti gli host della sottorete k. E’ stato sufficiente consentire a ogni router di eseguire una operazione AND booleana con la maschera di sottorete. sottorete. Vediamo più in dettaglio: dettaglio: Quando il sistema operativo (più precisamente: il livello IP dello stack TCP/IP) riceve da un programma la richiesta di inviare un pacchetto IP ad un certo indirizzo IP destinatario, per prima cosa calcola calcola l'AND logico fra la subnet subnet mask e il proprio indirizzo ip, e lo confronta confronta con l'AND logico tra la subnet mask e l'indirizzo IP di destinazione. Se il risultato delle operazioni è identico (cioè i bit che identificano l'id di rete, o net ID, sono identici, mentre variano solo i bit dell'id di host) allora invierà il pacchetto nella rete locale indirizzandolo con l'indirizzo di rete locale del PC destinatario (se non conosce tale indirizzo userà il protocollo ARP per trovarlo); se invece il risultato delle operazioni è differente significa che il computer destinatario non appartiene alla rete locale, e il pacchetto verrà trasmesso al gateway della rete locale affinché lo instradi verso la rete remota che contiene il computer destinatario. Subnet 0001 Ip sorgente 1011 101 1 confronta AND AN D logico con ip destinazione IP des 0110 Subnet 0001 AND 0000 non AND 0001 appartiene rete
Frammentazione
Ogni rete impone una dimensione massima ai suoi pacchetti. Questi limiti possono dipendere: dall’hardware, dal sistema, dai protocolli, dalla conformità con qualche standard internazionale. Quindi un problema che nasce si presenta quando un pacchetto grande tenta di viaggiare attraverso una rete che supporta pacchetti di piccole dimensioni. Una soluzione è evitare l’insorgere del problema a monte. Il problema può essere risolto consentendo ai gateway di suddividere i pacchetti in frammenti, inviando poi ogni pacchetto internet separato. Si adottano due opposte strategie per ricostruire il pacchetto originale partendo dai frammenti. In base alla prima strategia, la frammentazione che è eseguita da una rete ‘a pacchetti piccoli’ viene resa trasparente a ogni altra 74
rete situata più a valle lungo il percorso che il pacchetto deve attraversare per raggiungere la destinazione. In questo approccio, la rete a pacchetti piccoli ha gateway che si interfacciano con le altre reti. Quando riceve un pacchetto troppo grande, il gateway suddivide i dati in frammenti. Ogni frammento è indirizzato allo stesso gateway di uscita, dove i pezzi sono riassemblati. In questo modo, il passaggio attraverso la rete a pacchetti piccoli diventa trasparente. Esso presenta alcuni problemi: il gateway di uscita deve sapere quando ha ricevuto tutti i pezzi, perciò è necessario fornire un campo contatore; poi, tutti i pacchetti devono uscire attraverso lo stesso gateway, facendo diminuire le prestazioni. L’altra strategia di frammentazione si astiene dal ricombinare i frammenti a ogni gateway intermedio. Una volta che il pacchetto è stato suddiviso, ogni frammento è trattato come se fosse un pacchetto originale. Tutti i pacchetti passano attraverso il gateway di uscita, e la ricostruzione viene eseguita solo dall’host di destinazione. IP funziona in questo modo. Anche questo modo di procedere ha alcuni problemi: ad esempio, richiede che ogni host sia in grado di ricostruire i pacchetti; un altro problema si presenta quando si spezza un pacchetto molto grande, in quanto il tempo di elaborazione aumenta perché ogni frammento deve avere una intestazione. Quando viene diviso in frammenti, questi vanno numerati in modo che alla fine si possa ricostruita il flusso di dati originale. Per esempio, i frammenti possono essere numerati usando una struttura ad albero:
se si scompone il pacchetto 0, ai frammenti sono assegnati i nomi 0.0, 0.1, 0.2 e così via. Tuttavia, se anche una sola delle reti perde o scarta pacchetti, sono necessarie ritrasmissioni end-to-end che sfortunatamente influenzano il sistema di numerazione. Per evitare questo, si usa un altro sistema di numerazione che definisce una dimensione di frammento elementare così piccola da permettere al frammento di passare attraverso tutte le reti. Quando un pacchetto è diviso in frammenti, tutti i pezzi hanno la dimensioni dimensioni del frammento elementare elementare tranne l’ultimo, che può essere più corto. Un pacchetto, può contenere diversi frammenti, per motivi di efficienza. L’intestazione internet deve indicare il numero di pacchetto originale e il numero del primo frammento elementare contenuto nel pacchetto. Ci deve essere anche un bit che indica che l’ultimo frammento elementare contenuto nel pacchetto internet è l’ultimo del pacchetto originale. Questo approccio richiede due campi di sequenza nell’intestazione internet: il numero di pacchetto originale e il numero di frammento. Poiché la dimensione del frammento elementare è accettata da ogni rete, la successiva frammentazione di un pacchetto internet contenente diversi frammenti non causa alcun problema.
ICMP
75
Il funzionamento di internet è monitorato attentamente dai router. Quando avviene qualcosa di imprevisto, l’evento è comunicato da ICMP, internet control message protocol, che viene utilizzato per testare internet. Sono stati definiti circa una dozzina di messaggi ICMP. ICMP è spesso considerato parte dell’IP ma giace esattamente sopra l’IP, in quanto i messaggi ICMP sono inseriti in pacchetti IP.
ARP
Anche se ogni macchina di Internet ha uno o più indirizzi IP, in realtà questi non possono essere utilizzati per inviare pacchetti perché l’hardware che opera sullo strato Data Link non comprende gli indirizzi internet. Ogni produttore di schede ethernet richiede a un’autorità centrale un blocco di indirizzi, per garantire che nessuna coppia di schede utilizzi lo stesso indirizzo. Le schede inviano e ricevono frame basati sugli indirizzi ethernet a 48 bit, e non sanno nulla degli indirizzi IP a 32 bit. Allora in che modo gli indirizzi IP vengono associati agli indirizzi dello strato Data Link? Per rispondere vediamo vediamo un esempio. Ci sono due ethernet, ad una è associatol’indirizzo associatol’indirizzo IP 192.31.65.0, e all’altra è associato l’indirizzo IP 192.31.63.0. Queste sono collegate a un anello principale, FDDI, che ha un indirizzo IP 192.31.60.0. I computer sulle ethernet hanno i FDDI indicati da F1,F2,F3. Supponiamo che l’host 1 invia un pacchetto all’utente dell’host 2, entrambi ovviamente con dei propri indirizzi ethernet unici, indicati da E1, E2, E3, ecc., mentre quelli sull’anello FDDI hanno indirizzi ethernet, E1 e E2. Si supponga che il trasmittente conosca il nome del ricevente desiderato. desiderato. La prima mossa consiste nel cercare l’indirizzo l’indirizzo IP dell’host 2. Questa ricerca è eseguita dal DNS(Domain Name System), che restituisce l’indirizzo IP dell’host 2(192.31.65.5). Il software dello strato superiore superiore dell’host dell’host 1 ora costruisce costruisce un pacchetto, pacchetto, che riporta nel campo destination destination adress l’indirizzo IP dell’host 2(192.31.65.5), e lo passa al software IP che si occupa di trasmetterlo. Il software IP esamina l’indirizzo e scopre che la destinazione si trova sulla sua stessa rete, ma ha bisogno di trovare trovare in qualche modo modo l’indirizzo Ethernet Ethernet di destinazione. destinazione. Per far ciò ciò l’host 1 attraverso la ethernet un pacchetto broadcast per sapere che è il proprietario dell’indirizzo IP. La trasmissione trasmissione broadcast arriva a tutte le macchine macchine della Ethernet 192.31.65.0, 192.31.65.0, e ognuna controlla controlla il proprio indirizzo IP. Solo l’host 2 risponde inviando il proprio indirizzo ehternet (E2). In questo modo l’host 1 scopre che l’indirizzo IP 192.31.65.5 è assegnato l’host che ha l’indirizzo ethernet E2. il protocollo per fare questa domanda e ottenere una risposta si chiama ARP(adress resolution protocol). A questo punto, il software IP sull’host 1 costruisce un frame Ethernet indirizzato a E2, inserisce il pacchetto IP(indirizzato a 192.31.65.5) nel campo carico utile e scarica tutto sulla ethernet. La scheda ethernet dell’host 2 rileva il frame, si accorge di essere il destinatario della comunicazione, preleva i dati e genera un interrupt. Varie ottimizzazioni permettono ad ARP di funzionare in modo molto più efficiente. Ad esempio, una volta eseguita l’operazione ARP. Il computer memorizza in cache il risultato, caso mai dovesse essere necessario ricontattare lo stesso computer. In questo modo non si dovrà generare nessun messaggio di broadcast. Un ulteriore 76
miglioramento si ottiene facendo in modo che ogni computer trasmetta in broadcast la propria associazione associazione durante l’accensione. Questa operazione ottiene l’effetto di inserire una voce nel cache ARP di tutti gli altri computer. Per consentire la modifica delle associazioni, dovuta ad esempio a schede ethernet sostituite, le voci nella cache ARP dovrebbero scadere dopo pochi minuti. Si supponga che l’host 1 voglia inviare un pacchetto all’host 4(192.31.63.8). ARP non funziona perché l’host 4 non riceve la trasmissione broadcast. Ci sono due modi per risolvere il problema. Il primo, il router CS potrebbe essere configurato per rispondere alle richieste ARP di tutte le reti locali; se si adotta questa soluzione, l’host 1 crea nella sua cache ARP una voce contenente la coppia di valori(192.31.63.8,E3) e trasmette al router CS tutto il traffico diretto all’host 4. Questa soluzione è chiamata ARP proxy. Il secondo modo consiste che l’host 1 si accorga immediatamente che la destinazione si trova su una rete remota; in questo caso tutto il traffico viene trasmesso ad un indirizzo ethernet predefinito (E3) in grado di gestire il traffico remoto.
DHCP
Questo protocollo(dynamic host configuration protocol) permette l’assegnazione automatica degli indirizzi IP. DHCP si basa sull’idea di un server speciale che assegna indirizzi IP agli host che ne richiedono uno. Questo server non deve risiedere necessariamente sulla stessa LAN dell’host richiedente. Poiché il server DHCP potrebbe non essere raggiunto dalla trasmissioni broadcast, è necessario installare installare in ogni LAN un agente di inoltro DHCP(DHCP relay agent). Per trovare il suo indirizzo IP, una macchina appena accesa invia in modalità broadcast un pacchetto DHCP DISCOVER. L’agente L’agente di inoltro DHCP (solitamente (solitamente il router) router) presente sulla sulla quella quella LAN intercetta intercetta tutte le trasmissioni DHCP; quando individua un pacchetto DHCP DISCOVER, l’agente trasmette il pacchetto in modalità unicast al server DHCP , che può anche trovarsi su una rete distante. L’agente di inoltro ha ha bisogno di di una sola informazione informazione:: l’indirizzo IP del server DHCP. DHCP. Un problema che si presenta quando si assegnano automaticamente indirizzi IP riguarda la durata dell’allocazione. Se un host abbandona la rete e non restituisce il proprio indirizzo IP al server DHCP, quell’indirizzo andrà definitivamente perduto. Per impedire che questo accada, l’asseganzione dell’indirizzo IP può essere fissata per un periodo di tempo, mediante una tecnica chiamata leasing. Poco prima della scadenza del leasing, l’host deve chiedere al server DHCP il rinnovo dell’indirizzo. Per un terminale appena arrivato il protocollo DHCP si comporta: Trovare 1 server DHCP con cui interagire utilizzando un messaggio DHCP in brodcast utilizzando indirizzo 255.255.255.255 e indirizzo di sorgente per il terminale 0.0.0.0 in quanto non conosce ancora IP della rete tanto meno indirizzo IP di un server DHCP. Il messaggio è ricevuto da tutte le macchine della rete incluso server DHCP.
Un server DHCP riceve messaggio di scoperta risponde al client con 1 messaggio di offerta DHCP.Nella rete se ci sn più server DHCP il client si trova a dover scegliere tra diverse offerte 77
Sceglierà una delle offerte è manda un messaggio di richiesta DHCP che ripete all’indietro i parametri di configurazione configurazione Il server risponde risponde al messaggio messaggio di richiesta richiesta DHCP con un messaggio messaggio ACK DHCP che conferma i parametri
NAT
L’idea di base di NAT è assegnare un singolo indirizzo IP(o al massimo un piccolo numero di indirizzi) per il traffico internet. Prendiamo come esempio un azienda; dentro l’azienda, ogni computer riceve un indirizzo IP unico utilizzato per instradare il traffico interno alla rete locale, ma quando un pacchetto lascia l’azienda e si dirige verso l’ISP, viene eseguita una traduzione di indirizzo. Per rendere fattibile questo schema, sono stati dichiarati privati tre intervalli di indirizzi IP, che possono essere utilizzate internamente come si preferisce. I tre intervalli sono: 10.0.0.0 – 10.255.255.255 10.255.255.255 /8 (16.777.216 (16.777.216 host) 172.16.0.0 – 172.31.255.255 172.31.255.255 /12 (1.048.576 (1.048.576 host) 192.168.0.0 – 192.168.255.255 192.168.255.255 /16 (65.536 host) citati a titolo informativo. Dentro i locali dell’azienda, ogni macchina ha un unico indirizzo espresso nella forma 10.x.y.z, ma quando un pacchetto lascia l’azienda, passa attraverso un dispositivo NAT che converte l’indirizzo IP 10.x.y.z nel vero indirizzo IP assegnato all’azienda 138.76.29.7. Il dispositivo NAT è spesso abbinato a un firewall proteggendo la rete locale (almeno). Naturalmente i dati sono indirizzati a 138.76.29.7 e quindi il dispositivo NAT a scegliere l’indirizzo interno corretto.
I progettisti di NAT hanno osservato che la maggior parte dei pacchetti IP trasporta carichi utili TCP o UDP, entrambi i protocolli hanno intestazioni che tengono una porta sorgente e una porta di 78
destinazione. destinazione. Le porte sono numeri numeri interi lunghi lunghi 16bit che che indicano indicano dove inizia inizia e finisce la connessione TCP, e offrono il campo che permette di far funzionare NAT. Quando un processo desidera stabilire una connessione TCP con un processo remoto, si lega a una porta TCP inutilizzata presente nella sua macchina; questa porta è chiamata porta sorgente e indica al codice TCP dove devono essere inviati i pacchetti in arrivo appartenenti alla connessione. Il processo fornisce anche una porta di destinazione che indica chi deve ricevere i pacchetti sulla parte remota; le porte da 0 a 1023 sono riservate a servizi noti. Quando un client di una rete locale contatta un host su Internet, invia pacchetti destinati a quell'host. Questi pacchetti contengono tutte le informazioni di indirizzamento necessari per raggiungere la loro destinazione. NAT interagisce con queste informazioni:
Indirizzo IP sorgente (per esempio, 192.168.1.35) 192.168.1.35) Porta TCP o UDP sorgente (per esempio, 2132)
Quando i pacchetti attraversano il gateway NAT, questi saranno modificati così da apparire come se venissero direttamente dal gateway NAT. Il gateway NAT registrerà i cambiamenti effettuati nella sua tabella di stato così può a) eseguire le operazioni inverse sui pacchetti di ritorno e b) assicurarsi che i pacchetti di ritorno siano passati attraverso il firewall e non siano bloccati. Per esempio possono essere fatti i seguenti cambiamenti:
Indirizzo IP sorgente: sostituito con l'indirizzo esterno del gateway (per esempio, 24.5.0.5) La porta sorgente: sostituita sostituita con una porta non usata del gateway gateway scelta a caso (per esempio, 53136)
Sia l'host locale che quello di Internet non si accorgono di questi cambiamenti. Per il computer della rete locale, il sistema NAT è semplicemente il gateway per Internet. L'host di Internet è completamente ignaro dell'esistenza della workstation locale e il pacchetto apparirà come se venisse direttamente dal sistema NAT. Quando l'host di Internet risponde ai pacchetti ricevuti dalla workstation locale, lo fa indirizzando i pacchetti all'IP del gateway NAT (24.5.0.5) e alla porta traslata (53136). Il gateway NAT cercherà nella tabella di stato una corrispondenza tra i pacchetti in arrivo e una connessione già stabilita. Verrà trovata un'unica corrispondenza basata sulla combinazione combinazione IP/porta che consente a PF di capire che il pacchetto appartiene a una connessione esistente iniziata dall'host locale 192.168.1.35. PF farà quindi gli opposti necessari cambiamenti e invierà i pacchetti di risposta alla workstation interna. Sebbene questo schema in un certo senso risolva il problema, molti non lo pensano affatto, ecco alcune delle obiezioni: Primo, NAT viola i modello gerarchico di IP, che afferma che ogni indirizzo IP identifica in modo univoco a livello mondiale una singola macchina. Secondo, NAT trasforma internet da una rete ad assenza di connessione in un tipo di rete orientata alle connessioni, perché il dispositivo NAT deve conservare le informazioni relativa a ogni connessione che lo attraversa. Terzo, NAT viola la più importante regola della stratificazione dei protocolli: lo strato k non deve essere costretto a fare alcuna ipotesi su ciò che lo strato k+1 ha inserito nel campo che rappresenta il carico utile. Questo principio fondamentale serve a rendere gli strati indipendenti. Quarto, i processi su internet non sono obbligati a utilizzare TCP o UDP. Quinto, alcune applicazioni inseriscono gli indirizzi IP nel corpo del testo; il ricevente estrae questi indirizzi e li utilizza. Poiché NAT non sa nulla di questi indirizzi, non è in grado di sostituirli, perciò qualunque tentativo di utilizzarli fallirebbe.
79
IPV6
Al giorno d’oggi ormai gli indirizzi IPv4 stanno esaurendo. Per risolvere questo problema si è lavorato su una nuova versione di IP che non avrebbe mai esaurito i suoi indirizzi. I suoi obiettivi principali sono: supportare miliardi di host; ridurre la dimensione delle tabelle di routine; semplificare il protocollo, per consentire ai router di elaborare più rapidamente i pacchetti; offrire una sicurezza migliore; fare più attenzione al tipo di servizio; aiutare la trasmissione multicast permettendo si specificare gli ambiti; dare all’host la possibilità di spostarsi senza cambiare indirizzo; permettere al protocollo di evolversi in futuro; consentire ai vecchi e ai nuovi protocolli di coesistere per diversi anni. IPv6 ha molte differenza rispetto a IPv4. Prima di tutto, IPv6 ha indirizzi più lunghi del processore. Essendo lunghi 16 byte, risolvono il problema fondamentale che IPv6 deve risolvere: fornire una scorta di indirizzi internet praticamente illimitata. Seconda differenza, IPv6 semplifica di molto il campo intestazione. Contiene solo sette campi, a differenza dei 13 di IPv4. questa modifica permette ai router di elaborare i pacchetti più velocemente e di migliorare le capacità di trasporto e di ritardo. Terzo, IPv6 ha migliorato il supporto per le opzioni, in quanto, con la nuova intestazione, i campi che precedentemente erano obbligatori ora sono opzionali. Quarto, IPv6 ha migliorato la sicurezza. Autenticazione e riservatezza sono le chiavi del nuovo IP.
L’intestazione principale di IPv6
Il campo version contiene sempre il valore 6, associato a IPv6. Durante il periodo di transizione da IPv4 i router saranno in grado grado di esaminare questo questo campo e identificare identificare il tipo di pacchetto pacchetto in transito. Il campo traffic class , classe del traffico, è utilizzato per distinguere i pacchetti con diversi requisiti di distribuzione in tempo reale. Il campo flow label , etichetta di flusso, consente ad una sorgente e a una destinazione di impostare una pseudoconnesione con particolari proprietà e requisiti. Quando Quando appare un pacchetto con flow label diverso da zero, il i l router cerca l’etichetta nella sua tabella interna per scoprire il tipo di trattamento speciale richiesto dal pacchetto. Ogni flusso è rappresentato dall’indirizzo sorgente, dall’indirizzo di destinazione e dal numero di flusso, perciò tra una coppia di indirizzi IP possono essere attivi molti flussi. Inoltre, in questo modo, anche se due flussi provenienti da due host diversi ma con la stessa etichetta di flusso passano attraverso lo stesso router, il router sarà in grado di distinguerli usando gli indirizzi sorgente e destinazione. Il campo payload lenght , lunghezza campo dati, indica il numero di byte che seguono l’intestazione di 40 byte. Il campo next header , intestazione successiva, indica quale delle sei delle intestazioni estese, se presente, segue l’intestazione corrente. In questi intestazioni estese ci sono alcuni campi 80
di IPv4. Tali intestazioni estese sono:
Opzioni hop per hop, danno informazioni varie per i router; Opzioni di destinazione, danno informazioni aggiuntive relative alla destinazione; Routing, da la lista di router da visitare; Frammentazione, se presente dice come gestire i frammenti di datagramma; Autenticazione, se presente verifica l’identità del trasmittente; Carico utile cifrato, se presente da informazioni relative al contenuto cifrato.
Il campo hop limit , limite di hop, è utilizzato per impedire ai pacchetti di vivere per sempre. Gli ultimi campi rappresentano l’indirizzo sorgente e l’indirizzo di destinazione. Per quanto riguarda gli indirizzi, vennero scelti 16 byte di lunghezza fissa. Per scrivere tali indirizzi è stata escogitata una nuova notazione. Gli indirizzi sono scritti come otto gruppi di quattro cifre esadecimali separate da due punti:
Poiché numerosi indirizzi possono contenere numerosi zero, sono state effettuate tre ottimizzazioni. Primo, è possibile omettere gli zeri iniziali di un gruppo. Secondo, uno o più gruppi contenenti 16 bit a zero possono essere sostituiti da due punti. Perciò, l’indirizzo precedente diventa: Infine, gli indirizzi IPv4 possono essere scritti in notazione decimale a punti dopo una coppia di due punti: Vediamo ulteriori differenze differenze tra IPv6 e IPv4. In IPv6, I Pv6, soprattutto nel campo intestazione, intestazione, sono stati rimossi: il campo IHL, in quanto IPv6 ha una lunghezza fissa; il campo protocol, in quanto il campo next header indica che cosa c’è dopo l’ultima intestazione IP. Tutti i campi che riguardano la frammentazione sono stati rimossi, perché IPv6 gestisce la frammentazione in modo diverso. Infine il campo checksum è stato eliminato perché l’elaborazione di questa informazione riduce enormemente le prestazioni.
81
Migrazio Migr azione ne IPV4 – IPV6
L’enorme dimensione di Internet e il grandissimo numero di utenti di IPv4 (la versione del protocollo IP attualmente utilizzata su Internet) rendono impossibile una migrazione totale da IPv4 a IPv6 (la nuova versione del protocollo IP) in un preciso istante di tempo. Esistono caratteristiche di IPv6 pensate esplicitamente per semplificare la migrazione. Gli obiettivi chiave della migrazione sono:
gli host IPv6 e IPv4 devono poter interoperare; gli host e i router IPv6 devono potersi diffondere su Internet in modo semplice ed incrementale, con poche interdipendenze; i gestori delle reti e gli utenti finali devono percepire la migrazione come semplice da comprendere e realizzare.
Alcuni meccanismi per la migrazione sono il tunneling e il dual stack; che elenchiamo di seguito. Le tecniche di tunneling consentono di utilizzare il routing IPv4 per trasportare il traffico IPv6.Gli host e i router dotati del dual stack (detti anche IPv4/IPv6) possono utilizzare i tunnel per instradare i pacchetti IPv6 su porzioni di rete dotate unicamente unicamente di routing IPv4, come mostrato nell’esempio nell’esempio di Figura 1.
Figura 1: Tunneling di IPv6 su IPv4
Nell’esempio, l’host A invia il pacchetto IPv6 nativo al router R1 che lo ritrasmette in un tunnel IPv4 al router R2 che lo trasmette infine come pacchetto IPv6 nativo all’host B. In questo caso il tunnel è gestito da R1 e R2. Dal punto di vista dell’incapsulamento realizzare un tunnel significa incapsulare un pacchetto IPv6 in un pacchetto IPv4, come mostrato in Figura 2. Nell’esempio precedente l’header IPv6 conterrà gli indirizzi A e B, mentre quello IPv4 gli indirizzi R1 e R2.
Figura 2: Incapsulamento di IPv6 in IPv4
L’approccio dual stack consiste nel dotare gli host e i router degli stack di protocollo IPv6 e IPv4. 82
Nel caso di un host IPv6/IPv4 una possibile organizzazione degli stack di protocollo è illustrata in Figura 3. Si noti che l’approccio dual stack non richiede necessariamente la capacità di creare tunnel, mentre la capacità di creare tunnel richiede l’approccio l’approccio dual stack. In generale i due approcci sono entrambi forniti dalle realizzazioni IPv6/IPv4.
Figura 3: Approccio Dual Stack
Una spiegazione semplicistica del modo di operare dell’approccio dual stack è la seguente: se l’indirizzo di destinazione destinazione utilizzato utilizzato dall’applicazione dall’applicazione è IPv4 allora si utilizza lo stack di protocolli IPv4; se l’indirizzo di destinazione è IPv6 compatibile IPv4 allora si utilizza IPv6 incapsulato in IPv4;
se l’indirizzo di destinazione è un indirizzo IPv6 di altro tipo si utilizza IPv6 eventualmente incapsulato nel default configured tunnel.
83
R.P.F
La costruzione dei source-based trees è di solito basata sull’albero dei cammini (unicast) minimi, costruibile dai router in modo analogo a quanto fatto con il routing unicast. Reverse Path Forwarding (RPF): un router accetta un pacchetto multicast solo sull’interfaccia sulla quale il router invierebbe un messggio unicast verso la sorgente del messaggio multicast ricevuto.
Il problema dei pacchetti che arrivano a nodi non coinvolti nel gruppo può essere risolto con la tecnica detta di pruning i router che non hanno host associati al gruppo possono inviare dei messaggi di prune risalendo al contrario lungo l’albero.
84
Firewall
La possibilità di connettere qualunque computer che si trova in qualunque posto a qualunque altro computer in una qualsiasi località, può essere visto allo stesso tempo come una comodità e come una fonte di problemi. Oltre al pericolo di vedere fuoriuscire delle informazioni, ci sono anche i pericoli legati alla diffusione di informazioni verso l’interno. In particolare, virus, worm e altre “pesti digitali” possono disturbare la sicurezza e distruggere dati importanti. Da qui sono nati i firewall, vediamo una configurazione che ha due componenti: due router che fanno il filtraggio dei pacchetti e un gateway applicativo. Esistono anche delle configurazioni più semplici, ma questa struttura ha il vantaggio di obbligare ogni pacchetto a transitare attraverso n gateway applicativo sia per entrare sia per uscire, non esistono altre strade.
Ogni packet filter (filtro di pacchetti) è un router standard equipaggiato con funzionalità extra. Queste funzionalità permettono di ispezionare ogni pacchetto in arrivo o in uscita. I pacchetti che rispondono a certi criteri vengono fatti passare, quelli che falliscono il test vengono scartati. I pacchetti, dopo aver attraversato il primo ostacolo, proseguono verso il gateway applicativo per un’ulteriore ispezione. I packet filter sono tipicamente gestiti tramite delle tabelle configurate dall’amministratore di sistema. Queste tabelle elencano sorgenti e destinazioni accettabili e quelle bloccate.
85
CAPITOLO 6 LIVELLO TR ASPOR TO Lo strato trasporto è il cuore della gerarchia. Il suo compito è quello di fornire il trasporto dei dati, affidabile ed efficiente in termini di costi, dal computer d’origine a quello di destinazione. I servizi offerti agli strati superiori
L’obiettivo finale dello strato trasporto e fornire un servizio efficace ed efficiente in termini di costi ai suoi utenti, che poi sono dei processi nello strato strato applicazione. applicazione. Per raggiungere questo obiettivo, obiettivo, lo strato trasporto utilizza i servizi forniti dallo strato network. L’hardware e il software dello strato trasporto che svolge il lavoro è chiamato entità di trasporto. Esistono due tipi di servizio di trasporto. Il servizio di trasporto orientato alla connessone viene effettuato in tra fasi: costituzione, trasferimento dei dati e rilascio. Il servizio di trasporto senza connessione è simile al servizio di rete senza connessione.
Le primitive del servizio di trasporto
Per consentire agli utenti di accedere al servizio di trasporto, lo strato trasporto deve fornire alcune funzioni ai programmi applicativi, vale a dire una interfaccia per il servizio di trasporto. Il servizio di trasporto è simile a quello network, ma vi sono alcune sostanziali differenze. Primo, che lo strato network è destinato a modellare le reti reali, e quindi un servizio inaffidabile. Al contrario, il servizio di trasporto è affidabile. Secondo, vi è una differenza fra i due strati per quanto riguarda i destinatari. I messaggi inviati da entità di trasporto a entità di trasporto vengono chiamati TPDU (transport protocol data unit). Di conseguenza, le TPDU (scambiate dallo strato trasporto) sono contenute in pacchetti(scambiati dallo strato network). A loro volta, i pacchetti sono contenuti in frame (scambiati nello strato Data Link). Vediamo come vengono utilizzate alcune primitive da un servizio di trasporto. Il server esegue una primitiva LISTEN, che esegue una chiamata di sistema per bloccare il server fino all’accensione di un client.
Quando un client desidera comunicare con il server, esegue una primitiva CONNECT. L’entità di trasporto esegue questa primitiva bloccando il chiamante e inviando un pacchetto al serv server er.. Questa CONNECT provoca l’invio al server di una TPDU CONNECTION REQUEST. Quando arriva, l’entità di trasporto controlla se il server è bloccato su una chiamata LISTEN. Sblocca poi il server ed invia una TPDU CONNECTION ACCEPTED al client. Quando questa TPDU arriva al client, si sblocca e la connessione è stabilita. Ora i dati possono essere scambiati con le primitive SEND e RECEIVE. Quando una connessione non è più necessaria, deve essere rilasciata per liberare spazio nella tabella all’interno delle due entità di trasporto.
La disconnessione presenta due varianti. La prima, detta asimmetrica, ogni utente del trasporto può emettere una primitiva DISCONNECT, che provoca l’invio di una TPDU DISCONNECT all’entità di trasporto remota. Dopo l’arrivo, la connessione viene rilasciata. La seconda, detta simmetrica, ogni direzione viene chiusa separatamente, indipendentemente dall’altra. In questo modello, una connessione viene rilasciata quando entrambi i lati hanno inviato DISCONNECT. 86
I Socket Berkley
Un altro insieme di primitive di trasporto sono i socket Berkley utilizzate per TCP. Seguono all’incirca il modello precedente, ma offrono maggiori caratteristiche e flessibilità. La primitiva SOCKET crea un nuovo punto finale e alloca spazio nella tabella all’interno dell’entità di trasporto, i parametri della chiamata specificano il formato d’indirizzamento da utilizzare, il tipo di servizio, e il protocollo.
I socket appena creati non hanno indirizzi di rete, che vengono assegnati con la primitiva BIND. I client remoti possono connettersi al server dopo che ha associato un indirizzo a un socket. A questo punto viene la chiamata LISTEN, che alloca spazio per accodare le chiamate in ingresso, nel modello socket LISTEN non è una chiamata bloccante. Per bloccarsi in attesa di una connessione in ingresso il server esegue una primitiva ACCEPT. Quando arriva una TPDU che richiede una connessione, l’entità di trasporto crea un nuovo socket con le stesse proprietà di quello originale, e restituisce un corrispondente descrittore di file. Il server può quindi generare un processo o un thread per gestire la connessione sul nuovo socket, e tornare ad attendere la connessione successiva sul socket originale. ACCEPT restituisce un normale descrittore di file, che può essere utile per leggere e scrivere in modo analogo a un file.
Osserviamo ora il client:
Anche qui è necessario creare un socket utilizzando la primitiva SOCKET, ma BIND non è richiesto perché l’indirizzo utilizzato non è importante per il server. La primitiva CONNECT blocca il chiamante e avvia il processo di connessione. Una volta completato (vale a dire quando la TPDU appropriata viene ricevuta dal server), il processo 87
del client è sbloccato e viene stabilita la connessione.
Entrambi i lati ora possono utilizzare SEND e RECEIVE per trasmettere e ricevere dati sulla connessione full-duplx. Con i socket il rilascio della connessione è simmetrico: la connessione viene rilasciata quando entrambi i lati hanno eseguito una primitiva CLOSE.
Gli elementi dei protocolli di trasporto
Il servizio di trasporto è implementato da un protocollo di trasporto utilizzato tra due entità di trasporto. I protocolli di trasporto ricordano quelli del livello Data Link, ma hanno delle sostanziali sostanziali differenze, dovute agli ambienti diversi in cui operano i protocolli. Ad esempio nello strato Data Link due router comunicano direttamente tramite canale fisico, mentre nello strato trasporto il canale fisico è sostituito dall’intera sottorete. Poi, nello strato Data Link non è necessario che il router specifichi con quale router vuole comunicare. Nello strato trasporto è invece richiesto l’indirizzamento esplicito delle destinazioni. Un’altra differenza tra i due strati è la potenziale esistenza di capacità di memorizzazione della sottorete. L’indirizzamento
Quando un processo applicativo vuole creare una connessione verso un processo applicativo remoto, deve specificare a quale intende connettersi. Il metodo utilizzato consiste nel definire indirizzi di trasporto su cui i processi possono restare in ascolto delle richieste di connessione. Su internet questi punti finali vengono chiamate porte, denominate anche TSAP(transport service acces point). I corrispondenti corrispondenti punti finali finali nello strato network sono chiamati NASP (ad esempio gli indirizzi IP sono esempi di NASP).
I processi applicativi, client e server, possono collegarsi a un TSAP per stabilire una connessione con TSAP remoto. Queste connessioni scorrono attraverso attraverso gli NASP su ogni host. Il motivo per cui servono i TSAP è che in i n alcune reti ogni computer possiede un singolo NSAP, pertanto è necessario distinguere in qualche modo i diversi punti finali di trasporto che condividono tale NASP. I processi utente utente spesso vogliono comunicare comunicare con altri processi processi utente che esistono esistono solo per un breve periodo di tempo, e non possiedono un indirizzo TSAP conosciuto in anticipo. Inoltre, se esistono molti processi del server di cui alcuni utilizzati raramente, è dispendioso mantenerli tutti attivi e in ascolto su di un indirizzo IP stabile tutto il giorno. Per risolvere questo inconveniente si utilizza uno schema noto come protocollo di connesione iniziale.
88
Anziché avere ogni server in ascolto su uno TSAP noto, ogni macchina che desidera offrire servizi agli utenti remoti dispone di uno speciale speciale process server che agisce agisce da proxy per i server utilizzati raramente. Ascolta un insieme di porte contemporaneamente, attendendo una richiesta di connessione. I potenziali utenti di un servizio iniziano con una richiesta CONNECT, specificando l’indirizzo TSAP desiderato. Se nessun server è in attesa, la connessione avviene con process server. Dopo aver ottenuto la richiesta di ingresso, il process server crea il server richiesto, consentendogli di ereditare la connessione esistente con l’utente. Il nuovo server svolge quindi il lavoro, mentre il processo server torna ad ascoltare nuove richieste. Stabilire la connessione
Sembra facile stabilire una connessione, ma in realtà l’operazione è complessa. Il problema si verifica se la rete può perdere, memorizzare e duplicare i pacchetti. Questo comportamento provoca serie complicazioni. Si immagini una sottorete così congestionata che gli ack non riescono quasi mai a tornare indietro in tempo, ogni pacchetto subisce un timeout e viene ritrasmesso due o tre volte. Il nodo del problema è l’esistenza di duplicati ritardati. Può essere affrontato in vari modi. L’idea di base è assicurare che non siano mai in circolazione contemporaneamente due TPDU numerate in in modo identico. identico. Per avere una numerazione univoca anche anche in caso di riavvio della della macchina, si usa un clock che assume tutti e soli i 2^32 valori possibili dei numeri di sequenza. Diciamo T il tempo dopo il quale un pacchetto è da considerarsi definitivamente perduto, e imponiamo che se ilil tempo corrente è X si possono generare solo numeri di sequenza a partire partire da(l modulo di) X. Si definisce zona proibita la fascia contenente tutte le combinazioni di tempo e numero di sequenza sequenza non valide. Rispettando Rispettando questo questo limite sappiamo sappiamo che, anche anche se la macchina viene riavviata e perde la memoria, può ricominciare a generare numeri di sequenza a partire da(l modulo di) X senza temere conflitti con pacchetti passati, perchè nel tempo T appena trascorso era vietato generare questo stesso numero; pacchetti con questo numero più vecchi di T ormai saranno gettati. La velocità massima non può superare un pacchetto per ogni battito del clock o “toccheremo” la zona proibita.
Il metodo basato basato sull’orologio sull’orologio risolve per le TPDU dati il problema problema del duplicato duplicato in ritardo; tuttavia, affinché questo metodo sia utile bisogna prima stabilire una connessione. Dal momento che anche le TPDU di controllo possono essere ritardate, esiste un problema potenziale per accordare le due parti sul numero di sequenza iniziale. Per Per risolvere questo questo problema problema è stato introdotto introdotto l’handshake a tre vie . Questo protocollo non richiede richiede a entrambe le parti d’iniziare la trasmissione trasmissione 89
partendo dallo stesso numero di sequenza, pertanto può essere utilizzato con metodi di sincronizzazione sincronizzazio ne diversi dal metodo dell’orologio. dell’orologio . L’host 1 sceglie un numero di sequenza, x, e invia una TPDU CONNECTION REQUEST contenente x all’host 2. L’host 2 risponde con una TPDU ACK che riconosce x e annuncia il suo numero di sequenza, y. Per finire, l’host 1 riconosce la scelta del numero di sequenza iniziale dell’host 2 nella prima TPDU dati inviata.
(a)
(b)
(c)
Vediamo come funziona l’handshake a tre vie in presenza di TPDU di controllo duplicate e ritardate. (b) la prima TPDU è una CONNECTION REQUEST duplicati e ritardata che si riferisce a una vecchia connessione. Questa TPDU arriva all’host 2 senza che l’host 1 lo sappia. L’host 2 reagisce inviando all’host 1 una TPDU ACK, chiedendo in definitiva una conferma del fatto che l’host 1 sta tentando di impostare una nuova connessione. Quando l’host 1 rifiuta il tentativo di stabilire una connessione dell’host 2, l’host 2 comprende di essere stato ingannato da un duplicato in ritardo, e abbandona la connessione: grazie a questo metodo un duplicato in ritardo non fa danni. Il caso peggiore (c), si verifica quando nella sottorete circolano sia una CONNECTION REQUEST ritardata sia un ACK. Come nell’esempio precedente, l’host 2 riceve una CONNECTION REQUEST ritardata e risponde ad essa. A questo punto è fondamentale comprendere che l’host 2 ha proposto l’utilizzo di y come numero di sequenza iniziale per il traffico dall’host 2 all’host 1, sapendo bene che nessuna TPDU contenente il numero di sequenza y è ancora in circolazione. Quando la seconda TPDU ritardata giunge all’host 2, il fatto che sia stato riconosciuto z al posto di y comunica all’host 2 che anche questo è un vecchio duplicato. E’ importante osservare che non esiste una combinazione di vecchie TPDU che può provocare il fallimento del protocollo o l’instaurarsi accidentale di una connessione indesiderata. Il Rilascio della Conessione
Rilasciare una connessione è più semplice che stabilirla, ma comunque qualche piccolo problema c'è anche in questa fase. In questo contesto, rilasciare la connessione significa che l'entità di trasporto rimuove le informazioni sulla connessione dalle proprie tavole e informa l'utente di livello superiore che la connessione è chiusa. Ci sono due tipi di rilasci: asimmetrico, simmetrico. Nel primo caso (esemplificato dal sistema telefonico) quando una delle due parti "mette giù" si chiude immediatamente la connessione. Ciò però può portare alla perdita di dati, in particolare di tutti quelli che l'altra parte ha inviato e non sono ancora arrivati. Nel secondo caso si considera la connessione come una coppia di connessioni unidirezionali, che devono essere rilasciate indipendentemente. Quindi, lungo una direzione possono ancora scorrere dei dati anche se la connessione lungo l'altra direzione è stata chiusa. Il rilascio simmetrico è utile quando un processo sa esattamente quanti dati deve spedire, e quindi può autonomamente decidere quando rilasciare la sua connessione in uscita. Se invece le due entità vogliono essere d'accordo prima di rilasciare la connessione, un modo di raggiungere lo scopo potrebbe essere questo:
90
Purtroppo, le cose non sono così semplici: c'è un problema famoso in proposito, il problema delle due armate :
La definizione del problema è la seguente:
i due eserciti che compongono l'armata A sono ciascuno più debole dell'esercito che costituisce l'armata B; l'armata A però nel suo complesso è più forte dell'armata B; i due eserciti dell'armata A possono vincere solo se attaccano contemporaneamente; i messaggi fra gli eserciti dell'armata A sono portati da messaggeri che devono attraversare il territorio dell'armata B, dove possono essere catturati.
Come fanno ad accordarsi gli eserciti dell'armata A sull'ora dell'attacco? Una possibilità è la seguente:
il comandante dell'esercito 1 manda il messaggio "attacchiamo a mezzanotte. Siete d'accordo?"; il messaggio arriva, un ok di risposta parte e arriva a destinazione, ma il comandante dell'esercito 2 esita perché non può essere sicuro che la sua risposta sia arrivata.
Si potrebbe pensare di risolvere il problema con un passaggio in più (ossia con un three-way handshake): l'arrivo della risposta dell'esercito 2 deve essere a sua volta confermato. Ora però chi esita è il comandante dell'esercito 1, perché se tale conferma si perde, l'armata 2 non saprà che la sua conferma alla proposta di attaccare è arrivata e quindi non attaccherà. Aggiungere ulteriori passaggi non aiuta, perché c'è sempre un messaggio di conferma che è l'ultimo, e chi lo spedisce non può essere sicuro che sia arrivato. Dunque, non esiste soluzione. Se ora sostituiamo la frase "attacchiamo l'armata B" con "rilasciamo la connessione", vediamo che si rischia effettivamente di non rilasciare mai una connessione. Per fortuna, rilasciare una connessione è meno critico che attaccare un'armata nemica. Quindi, qualche rischio si può anche prendere.
91
Un protocollo di tipo three-way handshaking arricchito con la gestione di timeout è considerato adeguato, anche se non infallibile:
il mittente invia un disconn.request e, se non arriva risposta entro un tempo prefissato (timeout), lo invia nuovamente per un massimo di n volte:
appena arriva una risposta ( disconn.request ) rilascia la connessione in ingresso e invia un ack di conferma; se non arriva nessuna risposta, dopo l'ultimo timeout rilascia comunque la connessione in ingresso;
il destinatario, quando riceve disconn.request , fa partire un timer, invia a sua volta un disconn.request e attende l'ack di conferma. Quando arriva l'ack o scade il timer, rilascia la connessione in ingresso.
Normalmente il funzionamento è il seguente:
se si perde l’ACK → Se invece si perde la risposta alla prima proposta di chiusura (supponendo che il timeout del destinatario sia molto più ampio di quello del mittente):
Infine, si può perdere la risposta alla prima proposta di chiusura e tutte le successive proposte di 92
chiusura:
Il protocollo fallisce se tutte le trasmissioni di disconn.request della peer entity che inizia la procedura si perdono: in tal caso essa rilascia la connessione, ma l'altra entity non se ne accorge e la tiene aperta. Il risultato è una half-open connection . Un modo per risolvere il problema è che le parti rilascino una connessione quando passa un certo lasso di tempo (ad es. 60 secondi) senza che arrivino dati. dati. Naturalmente, Naturalmente, in tal caso, i processi processi devono scambiarsi scambiarsi dei dummy TPDU , cioé dei TPDU vuoti, con una certa frequenza anche se non c'è necessità di comunicare alcunché, per evitare che la connessione cada. Il Protocollo di Trasposto Interenet: UDP
UDP (user datagram protocol) è un protocollo senza connessione. connessione. Quindi offre un modo m odo per inviare datagrammi IP incapsulati senza dover stabilire una connessione. UDP trasmette segmenti costituiti da una intestazione di 8 byte seguita dal carico utile. Le due porte servono per identificare i punti finali all’interno all’interno dei computer origine e destinazio destinazione. ne. Quando arriva un un pacchetto UDP, ilil suo carico utile è consegnato al processo associato alla porta di destinazione. La porta di origine serve principalmente principalmente quando si deve inviare inviare una risposta all’origine. all’origine. Copiando Copiando il campo source port dal segmento in ingresso nel campo destination port del segmento in uscita, il processo che invia la risposta può specificare il processo sulla macchina sorgente che deve riceverla.
Il campo UDP lenght include l’intestazione di 8 byte e i dati. UDP checksum è facoltativo e contiene 0 se non è elaborato ( un vero 0 elaborato e memorizzato con tutti 1). UDP non può gestire il controllo del flusso, il controllo degli errori o della ritrasmissione dopo la ricezione di un segmento errato. Questi compiti sono lasciati ai processi utente.
93
Il protocollo di trasporto internet: TCP
TCP (trasmission control protocol) è stato progettato per fornire un flusso di byte affidabile end-toend su una internetwork inaffidabile. Ogni computer che supporta TCP dispone di una entità di trasporto TCP, che gestisce i flussi TCP e le interfaccie verso lo strato IP. Un’entità TCP accetta dai processi locali i flussi dati dell’utente; li suddivide in pezzi di dimensione non superiore 64 KB: infine invia ogni pezzo in datagramma IP autonomo. I datagrammi contenenti i dati TCP che arrivano al computer vengono consegnati all’entità TCP che ricostruisce i flussi di byte originali. Il modello di servizio TCP
Il servizio TCP è ottenuto ottenuto con la creazione creazione di punti finali da parte di mittente mittente e ricevente, che vengono chiamati socket. Ogni socket possiede un indirizzo (il numero di socket) composto all’indirizzo IP dell’host e da un numero di 16 bit locale dell’host, chiamato porta. Un socket supporta più connessioni contemporaneamente. Quindi due o più connessioni possono terminare sulla stessa socket. Tutte le connessioni TCP sono full-duplex e punto-punto. Full-duplex nel senso che il traffico procede in entrambe le direzioni. Punto-punto, nel senso che ogni connessione ha due punti finali. Una connesione TCP è un flusso di byte, non un flusso di messaggi. I confini dei messaggi non vengono conservati da una estremità all’altra della connessione. Per esempio, se il processo mittente esegue quattro scritture di 512 byte su un flusso TCP, questi dati possono essere consegnati al processo ricevente come quattro blocchi, due blocchi, un solo blocco.
Il protocollo TCP
Una funzionalità importante del TCP, consiste nel fatto che ogni byte in una connessione TCP ha un proprio numero di sequenza a 32 bit. Le entità TCP di invio e ricezione scambiato scambiato i dati sotto forma di segmenti. Un segmento TCP consiste di un’intestazione fissa di 20 byte (più una parte facoltativa) seguita da zero o più byte di dati. Il software TCP decide la dimensione dei segmenti, e può accumulare in un segmento i dati provenienti da più scritture. Ogni rete ha una MTU(maximum transfer unit) e ogni segmento deve essere contenuto nella MTU. In pratica, la MTU è generalmente lunga 1.500 byte (la dimensione del carico utile di Ethernet). Il protocollo di base utilizzato dalle entità TCP è il protocollo sliding window.
94
L’intestazione del segmento TCP
Ogni segmento inizia con una intestazione di 20 byte con formato fisso; l’intestazione fissa può essere seguita seguita da alcune alcune opzioni dell’intestaz dell’intestazione. ione. Dopo le opzioni, opzioni, seguono fino fino a 65.535 – 20 – 20 = 65.495 byte di dati, dove i primi 20 fanno riferimento all’intestazione IP e i secondi all’intestazione TCP. I campi source port e destination port identificano gli estremi locali della connessione. Una porta e l’indirizzo IP del suo host formano un punto finale univoco di 48 bit. I campi sequence number e ack number eseguono le loro solite funzioni. Entrambi sono lunghi 32 bit, perché ogni byte di dati è numerato in un flusso TCP. Il campo TCP haader lenght indica quante parole di 32 bit sono contenute nell’intestazione TCP. L’informazione è necessaria in quanto il campo options options ha una lunghezza variabile. variabile. Segue un campo di 6 bit inutilizzato. Seguono sei sei flag di 1 bit. URG è impostato quando si usa il campo urgent pointer, che indica l’offset in byte, partendo dal numero di sequenza corrente, in cui si trovano i dati urgenti. Il bit ACK è impostato a 1 per indicare che ack number è valido. Se ACK è 0, il segmento non contiene un ACK. Il bit PSH segnala la presenza di dati PUSH. Al ricevitore viene chiesto di consegnare i dati all’applicazione all’arrivo, e di non archiviarli nel buffer per poi trasmettere un buffer completo. Il bit RST viene utilizzato per reimpostare una connessione che è diventata incongruente a causa di un crash dell’host. Il bit SYN viene utilizzato per stabilire una connessione. La richiesta di connessione presenta SYN SYN = 1 e ACK = 0 per indicare indicare che il campo ack non è utilizzato. utilizzato. La replica replica della connessione porta un ack, pertanto possiede SYN = 1 e ACK = 1. Il bit FIN viene utilizzato per rilasciare una connessione. Specifica che il mittente non ha altri dati da trasmettere. Il controllo di flusso in TCP è gestito con una sliding window a dimensione variabile. Il campo window size indica quanti byte possono essere inviati a partire da quello che ha ricevuto ack. Per una maggiore flessibilità viene anche fornito un campo checksum, che esegue la somma di controllo dell’intestazione, dell’intestazione, dei dati e della pseudointestazion pseudointestazione. e.
La pseudointestazione contiene gli indirizzi IP a 32 bit delle macchine di origine e destinazione, il numero di protocollo per TCP, contiene il numero 6, e il conteggio dei byte per il segmento TCP(compresa l’intestazione). l’intestazione). Includendo Includendo la pseudointestaz pseudointestazione ione nel calcolo della somma somma di controllo TCP è possibile rilevare i pacchetti consegnati consegnati in modo errato, ma si viola la gerarchia dei protocolli. Il campo options è un modo per aggiungere caratteristiche extra non disponibili nella normale intestazione. L’opzione più importante è quella che permette a ogni host di specificare il 95
carico utile massimo che TCP potrà accettare. Un’altra opzione è l’utilizzo della ripetizione selettiva al posto del protocollo go back n. Infine l’introduzione dei NAK per consentire al ricevente di chiedere uno o più segmenti specifici. Costituzione della connessione TCP
Si usa il three-way handshake visto precedentemente: una delle due parti (diciamo il server) esegue due primitive, listen() e poi accept() rimanendo così in attesa di una richiesta di connessione su un determinato port number e, quando essa arriva, accettandola; l'altra parte (diciamo un client) esegue la primitiva connect() , specificando specificando host, port number e altri parametri quali la dimensione massima dei segmenti, per stabilire la connessione; tale primitiva causa l'invio di un segmento TCP col bit syn a uno e il bit ack a zero; quando tale segmento arriva a destinazione, l'entity di livello transport controlla se c'è un processo in ascolto sul port number in questione: se non c'è nessuno in ascolto, invia un segmento di risposta col bit rst a uno, per rifiutare la connessione; altrimenti, consegna il segmento arrivato al processo in ascolto; se esso accetta la connessione, l'entity invia un segmento di conferma, con entrambi i bit syn ed ack ad uno, secondo lo schema sotto riportato.
Nel caso in cui due host tentino contemporaneamente di stabilire una connessione tra gli stessi due socket il risultato di questi eventi è la costituzione di una sola connessione, e non due, perché le connessioni sono identificate dai loro punti finali. Se la prima attivazione genera una connessione identificata da (x,y) e la seconda svolge la stessa operazione, viene creata una sola voce della tabella per (x,y).
96
Il rilascio della connessione TCP
Anche se le connessioni TCP sono di tipo full-duplex, il rilascio della connessione viene effettuato in modo indipendente da parte dei due host. Per rilasciare una connessione, entrambe le parti possono inviare un segmento TCP con il bit FIN impostato, per indicare che non hanno più dati da trasmettere. Quando Quando FIN riceve l’ack la direzione viene chiusa per i nuovi dati. Quando entrambe le direzioni saranno chiuse la connessione verrà rilasciata. Per evitare il problema dei due eserciti si usano i timer. Se una risposta a FIN non arriva entro la durata massima di due pacchetti, il mittente FIN rilascia la connessione, l’altro lato noterà che nessuno sembra ascoltarlo più e andrà in timeout. Il modello della gestione della connessione TCP
I passaggi richiesti per stabilire e rilasciare le connessioni possono essere rappresentati in una macchina a stati finiti con 11 stati. Le linee spesse mostrano il client che collegato in maniera attiva al server, quest’ultimo ha le linee tratteggiate. Le linee sottili rappresentano sequenze di eventi. Ogni linea è contrassegnata da una coppia evento\azione.
In ogni stato sono ammessi alcuni eventi. Quando un programma applicativo sulla macchina client emette una richiesta CONNECT, l’entità TCP locale crea un record per la connessione, la contrassegna nello stato SYN SENT e invia un segmento SYN. Quando arriva SYN + ACK, TCP invia l’ACK finale dell’handshake a tre vie e passa nello stato ESTABILISHED. Ora è possibile inviare e ricevere dati. Quando un’applicazione ha finito, esegue una primitiva CLOSE, che provoca l’invio da parte dell’entità TCP locale di un segmento FIN e l’attesa dell’ACK corrispondente. Quando arriva l’ACK, viene eseguita una transazione allo stato FIN WAIT 2 e una direzione della connessione si chiude. Quando anche l’altro lato esegue la chiusura, viene ricevuto un FIN che richiede l’invio di un ACK. Ora entrambi i lati sono chiusi, ma TCP attende per un tempo uguale alla durata massima del pacchetto per garantire che tutti i pacchetti della connessione siano scaduti. Alla scadenza del timer, TCP elimina i record della connessione. Ora esaminiamo la gestione della connessione dal punto di vista del server. Il server esegue un LISTEN e attende che qualcuno effettui l’attivazione. Quandi SYN arriva, provoca come risposta un ack e il server passa allo stato SYN RCVD. Quando il SYN del server riceve un ack l’handshake a tre vie è completo e il server passa allo stato stato ESTABILSHED. Ora può avvenire ilil trasferimento trasferimento dei dati. Quando il client client 97
ha terminato esegue CLOSE, che provoca l’arrivo di FIN al server. Il server riceve un signal. Quando a sua volta esegue CLOSE, FIN viene mandato al client. All’arrivo dell’ack del client, il server rilascia la connessione ed elimina i record della connessione. Il criterio di trasmissione TCP
La gestione della finestra in TCP non è associata agli ack. Si supponga che il ricevente abbia un buffer di 4.096 byte. Se il mittente trasmette un segmento di 2.048 byte che viene correttamente ricevuto, il ricevente darà un ack al segmento. Tuttavia, dal momento che ora possiede solo 2.048 byte di spazio nel buffer (fino a quando l’applicazione rimuove alcuni dati dal buffer), “pubblicizza” una finestra di 2.048 byte partendo dal successivo byte previsto.
Ora il mittente trasmette altri 2.048 byte, che ricevono ack; la finestra pubblicizzata è quindi 0. Il mittente deve fermarsi fino a quando il ricevente ha rimosso alcuni dati dal buffer. Quando la finestra è 0, il mittente non può di norma inviare segmenti, con due eccezioni. Prima: è possibile inviare dati urgenti, per esempio per consentire all’utente di interrompere il processo in esecuzione sulla macchina remota. Seconda: il mittente può inviare un segmento di 1 byte, per fare in modo che il ricevente annunci di nuovo il successivo byte previsto e la dimensione della finestra. I mittenti non sono obbligati a trasmettere i dati appena li ricevono dall’applicazione, e i riceventi non hanno l’obbligo di inviare gli ack il prima possibile. Nell’esempio TCP sapeva di avere a disposizione una finestra di 4 KB all’arrivo dei primi 2 KB di dati, quindi si sarebbe comportato in modo legittimo se avesse inserito inserito dati nel buffer fino all’arrivo all’arrivo di altri 2 KB, in modo da trasmettere un segmento con carico utile di 4 KB. Il controllo della congestione
Quando il carico applicato a una rete è superiore a quello che può gestire, si verifica una congestione. congestione. Lo strato network tenta di gestire le congestioni, congestioni, anche se la maggior parte del lavoro è svolta da TCP, perché la vera soluzione alle congestioni è la diminuzione della velocità dei dati. L’idea è d’impedire l’inserimento di un nuovo pacchetto nella rete fino a quando un pacchetto vecchio non la lascia lascia (vale a dire viene viene consegnato). consegnato). TCP tenta di raggiungere raggiungere l’obbiettivo l’obbiettivo manipolando dinamicamente la dimensione della finestra. Il primo passo per la gestione delle congestioni è il rilevamento. La maggior parte dei timeout di trasmissione su internet è dovuta alla congestione. Tutti gli algoritmi TCP Internet presumono che i timeout siano provocati dalla congestione, e controllano i timeout per riscontrare i problemi. TCP cosa fa per impedire il verificarsi delle congestioni? Quando viene stabilita una connessione si deve scegliere una dimensione adatta per la finestra in base alla dimensione del suo buffer; se il mittente si attiene a questa dimensione, non si verificheranno problemi dovuti al traboccamento del buffer all’estremità ricevente, ma potrebbero ancora verificarsi a causa della congestione interna alla rete. 98
La soluzione Internet consiste nel comprendere l’esistenza di due distinti problemi potenziali (capacità della rete e capacità del ricevente) e nel gestirli separatamente. A questo scopo ogni mittente mantiene due finestre: quella che il ricevente ha garantito e una seconda, la finestra di congestione. Ognuna riflette il numero di byte b yte che il mittente può trasmettere. Il numero di byte che possono essere inviati corrisponde alla più piccola delle due finestre. Se il ricevente afferma “invia 8 KB” ma il mittente sa che un pacchetto con dimensione superiore a 4 KB congestionerebbe la rete, viene inviato un pacchetto di 4 KB. D’altra parte, se il ricevente afferma “invia 8 KB” e il mittente sa che l’invio di un pacchetto di 32 KB non provocherebbe problemi, vengono inviati comunque 8 KB richiesti. Quando viene stabilita una connessione, il mittente inizializza la finestra di congestione alla dimensione del segmento usato sulla connessione, poi invia un segmento massimo. Se questo segmento segmento riceve ack prima della scadenza scadenza del timer, aggiunge al valore della finestra di congestione un numero pari alla dimensione del segmento, in modo che la sua dimensione sia il doppio della dimensione dimensione massima del segmento. In pratica ogni gruppo che riceve ack raddoppia la dimensione della finestra di congestione. La finestra di congestione continua a crescere in modo esponenziale fino a un timeout o al raggiungimento della finestra del ricevente. L’idea è quella di aumentare il valore della finestra di congestione fino al valore precedente di quello che ha provocato il timeout. Questo algoritmo è chiamato avvio lento, ma non è per nulla lento: è esponenziale. Tutte le implementazione TCP devono supportarlo. Osserviamo ora l’algoritmo della congestione Internet. Utilizza un terzo parametro, una soglia iniziale pari a 64 KB, oltre alle finestre di congestione e del ricevente. Al verificarsi di un timeout, la soglia viene impostata alla metà della finestra di congestione congestione corrente, corrente, e la finestra di congestione congestione viene reimpostata reimpostata alla dimensione dimensione massima di un segmento. L’avvio lento viene quindi utilizzato per determinare che cosa può gestire la rete, ma la crescita esponenziale termina al raggiungimento della soglia. Da quel punto in poi, le trasmissioni avvenute con successo aumentano la finestra di congestione in modo lineare. In definitiva l’algoritmo suppone che sia probabilmente accettabile tagliare a metà la finestra di congestione, congestione, e poi lavora gradualmente partendo da questo valore. Un esempio è mostrato di seguito: La finestra aumenta sempre raddoppiando fino ad arrivare alla soglia massima e torna al valore iniziale. TCP tahoe più vecchia; TCP Reno elimina partenza lenta.
99
Fairness
Se abbiamo k connessioni TCP ciascuno con 1 diverso percorso ma tutte passanti attraverso un link colo di bottiglia con un ritmo di trasmissione r bit/s. se ogni connessione stia trasferendo un grande file e che non ci sia traffico UDP. Un meccanismo di controllo della congestione è detto fair (equo) Se il ritmo di trasmissione è pari a R/K cioè un’uguale porzione della banda del link. Se abbiamo due connessioni connessioni TCP che condividono un singolo link link con velocità trasmissione R se le due connessioni hanno gli stessi MSS e RTT (hanno la stessa dimensione di congestione e lo stesso throughput).
Se le due connessioni TCP condividono equamente la larghezza di banda del link, allora il throughput ottenutò sarà a 45 gradi. Idealmente la somma dei throughput sarebbe uguale a R. Si ottine una pari suddivisione della larghezza di banda e completa utilizzazione della larghezza di banda. Se le dimensioni della finestra TCP siano quelle per cui a un certo tempo, le connessioni 1 e 2 realizzano i throughput nel punto A. poiché l’ammontare della larghezza di banda delle due connessioni e inferiore a R non ci saranno perdite, e entrambe le connessioni aumenteranno la finestra di 1. Il throughput delle due connessioni segue una linea a 45 gradi a partire dal punto A. alla fine la larghezza di banda supererà R e si potrebbe avere la perdita di pacchetti. Se si perdono i pacchetti quando realizzeranno i throughput al punto B le connessioni 1 e 2 diminuiscono le loro finestre di un fattore due e si ritorna al punto C che sarà inferiore ad R, le due connessioni cresceranno ancora. Alla fine la larghezza di banda realizzata dalle due connessioni fluttuerà lungo la linea di pari suddivisione della larghezza di banda.
100
CAPITOLO 6 LIVELLO APPLICAZIO NE Lo strato applicazione fornisce, oltre ad alcuni protocolli, delle applicazioni reali utilizzate dagli utenti. Né il TCP né UDP danno garanzia sui ritardi; le applicazioni sono sensibili al tempo. Protocolli dello strato di applicazione
Bisogna distinguere tra applicazioni di rete e protocolli dello strato applicazione. Protocollo dello strato applicazione è n pezzo di 1 applicazione di rete. Il principale protocollo dello strato applicazione per la posta elettronica è l’SMTP (Simple Mail Transfer Protocol). Un protocollo dello strato applicazione definisce: i tipi di messaggi messaggi scambiati, scambiati, es: richiesta e risposta risposta la sintassi dei vari tipi di messaggi es: campi del messaggio e come sono caratterizzati la semantica dei campi, cioè significato dell’informazione le regole per determinare quando e come un processo invia messaggi o risposte a messaggi
Alcuni protocolli sono di pubblico dominio per esempio http, è disponibile come RFC;molti altri protocolli sono riservati come quelli utilizzati dalla telefonia. Lati client e server di un’applicazione
Un’applicazione Un’applicazione ha 1 lato client e 1 lato server. server. Il lato client client di un terminale terminale comunica comunica con il lato lato server di un altro terminale. Nella posta elettronica il server che invia la posta implementa il lato client dell’ SMTP e il server ricevente ne implementa il lato server.
Processi di comunicazione attraverso la rete
Applicazioni coinvolgono 2 processi in due diversi host che comunica tra loro attraverso la rete. I due processi comunicano comunicano tra loro spedendo e ricevendo messaggi. Un processo invia messaggi nella rete e riceve messaggi dalla rete attraverso il proprio socket. Funziona con l’invio del messaggio fuori dalla propria porta (socket). ( socket). Il messaggio verrà trasportato attraverso internet fino alla porta del destinatario. Socket costituisce l’interfaccia fra gli strati di applicazione e di trasporto all’interno di 1 host.
Indirizzamento dei processi
Affinché avviene la comunicazion tra gli host il processo che trasmette deve identificare il processo ricevente quindi bisogna specificare 2 tipi di informazioni: il nome e l’indirizzo della macchina host un identificatore che specifichi l’identità del processo ricevente sull’host di destinazione
Nelle applicazioni Internet, l’host di destinazione è specificato dall’indirizzo ip. IP è una quantita a 32 bit che identifica in modo univoco il terminale. Oltre a conoscere l’indirizzo del terminale a cui il messaggio è destinato l’applicazione trasmittente trasmittent e deve anche specificare informazioni che permettono all’host ricevente di inviare il messaggio all’appropriato processo su quell’host.In internet il numero di porta del lato ricevente assolve a questo scopo es: http numero porta 80; server posta SMTP numero porta 25.
101
Trasferimento affidabile dei dati
Alcune applicazioni come posta elettronica, trasferimento file,transazione finanziaria, richiedono trasferimento di dati affidabile,cioè senza perdita di dati. Altre applicazioni perdite tollerabili soprattutto x quanto riguarda applicazioni multimediali Tempismo
Il requisito del servizio riguarda anche il tempismo.le applicazioni come telefonia,internet.. richiedono dei ritardi dell’ordine dei millisecondi. Servizi forniti dai protocolli di trasporto Internet
Internet e le reti TCP/IP rendono disponibili disponibili 2 protocolli di trasporto: trasporto: UDP e TCP Chi crea applicazioni per internet una delle prime decisioni che deve prendere è se usare udp o tcp offre un modello di servizio diverso dalle applicazioni che lo invocano
Servizi TCP
Comprende un servizio orientato alla connessione e un servizio di trasferimento affidabile dei dati. Servizio orientato alla connessione : TCP effettua lo scambio tra client e server e li allerta permettendo loro di prepararsi per l’arrivo massiccio di pacchetti. La connessione e di tipo full-duplex perché i due processi possono inviare messaggi uno dopo l’altro contemporaneamente sulla connessione. Quando l’applicazione ha concluso l’invio dei messaggi, essa deve interrompere la connessione. Servizio di trasporto affidabile : i processi possono confidare sul TCP per il recapito di tutti i dati spediti senza errori e nell’ordine appropriato TCP include un modello di controllo della congestione; tentando di limitare ciascuna connessione TCP alla sua equa porzione della larghezza di banda. lo strozzamento della velocità di trasmissione può avere un effetto molto dannoso sulle applicazioni audio e video in tempo reale I servizi che il modello TCP non supporta: 1. non garanti garantisce sce una una velocità velocità minim minimaa di trasmis trasmission sionee dei dati dati 2. non è permesso trasmettere trasmettere a qualsiasi velocità che è regolata regolata dal dal servizio servizio di controllo controllo della della congestione del TCP,che forza il mittente a spedire i pacchetti ad 1 bassa velocità 3. TCP nn nn dà nessu nessuna na garan garanzi ziaa sul rita ritardo rdo Servizi UDP
Protocco di trasporto leggero; è senza connessione, ma non è affidabile non dà garanzie che il messaggio raggiungerà la destinazione oppure non arrivare in ordine. L’UDP non comprende un meccanismo di controllo della congestione, quindi può andare a qualsiasi velocità. Vediamo che e-mail trasferimento file usano tutti il TCP. Queste applicazioni hanno scelto TCP soprattutto perchè fornisce affidabilità nel trasferimento Comunicazione tra processi
Una applicazione di rete (o distribuita) è un insieme di programmi che operano concorrentemente, scambiandosi informazioni attraverso una rete. Per poter comunicare, una applicazione di rete necessita di un supporto da parte dei sistemi. Il supporto sistemico per le applicazioni di rete è offerto dal livello di applicazione dello stack Internet. Ogni processo che opera su un nodo della rete, può scambiare messaggi con gli altri processi della medesima applicazione utilizzando i servizi offerti dal livello di applicazione
102
E’ importante distinguere tra applicazioni e protocolli di applicazione. Un protocollo di applicazione è implementato dal livello di applicazione. Quindi, un protocollo è una parte (importante) di una applicazione. applicazione. Un protocollo del livello di applicazione definisce: i tipi di messaggi scambiati, per esempio, messaggi di richiesta o di risposta; la sintassi dei vari tipi di messaggio, per esempio, i campi del messaggio e come questi campi vengono codificati; la semantica dei messaggi, ovvero il significato dell’informazione dell’informazione dei messaggi, e quale è il modo m odo corretto di interpretarla; le regole per determinare quando e come un processo invia messaggi o risponde a messaggi. Il software del livello applicazione applicazione che realizza un protocollo si preoccupa preoccupa di rispettare la specifica data dal protocollo stesso. Indirizzamento nella comunicazione tra processi
Affinché un lo strato di applicazione di un processo possa inviare un messaggio ad un altro processo su di un altro nodo, è necessario identificare lo strato di applicazione del processo ricevente. Questo indirizzamento è composto di due parti: una identificazione del nodo su cui opera il processo con cui si desidera comunicare; una identificazione del particolare processo all’interno di quel nodo. L’indirizzamento di un processo è una funzione che viene fornita dallo strato di trasporto. Nell’indirizzamento, il nome dell’host viene codificato in modo univoco su tutta Internet mediante un indirizzo IP che è una parte del protocollo di livello rete IP. Il processo da indirizzare viene identificato con una coppia di valori: il protocollo di trasporto che si intende utilizzare (TCP, UDP o altro); l’unico processo (se esiste) sull’host indirizzato che sia associato ad un certo valore di porta.
Requisiti delle applicazioni
Ogni applicazione di rete ha bisogno di servizi specifici. Ogni servizio specifico viene realizzato da un opportuno protocollo, che può essere standard oppure progettato e realizzato ad hoc. Sebbene ogni protocollo di livello applicativo abbia le proprie specificità, tuttavia il trasporto dei messaggi da un punto ad un altro della rete è una caratteristica comune di tutte le applicazioni. Tuttavia esiste più di un protocollo di trasporto. Quindi a seconda del tipo di applicazione, viene associato un tipo 103
di protocollo di trasporto. Infatti alcune applicazioni (ad esempio, audio) possono sopportare una perdita di alcuni dati, altre applicazioni (ad esempio, trasferimento di files) richiedono un trasferimento di informazione affidabile al 100%. Nel primo caso il protocollo di trasporto può essere senza connessione: nello stack Internet, UDP. Nel secondo caso, il protocollo deve essere orientato alla connessione, ovvero essere affidabile: nello stack Internet, TCP. Poi alcune applicazioni (ad esempio, telefonia su Internet, giochi interattivi) richiedono ritardi molto contenuti per essere efficaci. Se si utilizza il protocollo di trasporto TCP, non è affidabile dal punto di vista temporale: un pacchetto è garantito che giunga integro a destinazione, ma non entro un tempo stabilito a priori. Mentre il protocollo UDP è più veloce di TCP, dovendo effettuare meno controlli, tuttavia non è temporalmente affidabile. Delle possibili soluzioni sono: usare un protocollo in tempo reale , come RTP (Real Time Protocol); studiare i ritardi di rete e calibrare gli apparati ed i collegamenti per garantire di restare nei limiti di tempo prefissati, quindi usare UDP o TCP. Infine, alcune applicazioni (ad esempio, multimedia) richiedono una quantità minima di larghezza di banda per poter essere efficaci, altre applicazioni ( elastiche) fanno uso della quantità di banda che hanno a disposizione. Su Internet, proprio per la sua natura eterogenea, non è possibile garantire la presenza di una certa quantità di banda per trasmettere un messaggio. Una soluzione consiste nell’implementare un protocollo applicativo che realizza un circuito virtuale, oppure costruire un protocollo flessibile, che fallisce o si adatta se la banda è insufficiente.
World Wide Web
Il World Wide Web (noto anche come www) è un’infrastruttura per l’accesso ai collegamenti sparsi su milioni di macchine che appartengono a Internet. Una panoramica dell’architettura
Dal punto di vista degli utenti, il Web è una vasta accolta mondiale di documenti o pagine Web. Ogni pagina può contenere collegamenti ad altre pagine in modo che ogni pagina punti a un’altra(l’ipertesto) situate ovunque nel mondo. Le pagine sono visualizzate con un programma chiamato browser. Il browser preleva la pagina richiesta, interpreta il testo e i comandi di formattazione, quindi visualizza la pagina correttamente formattata sullo schermo.
104
Il browser visualizza una pagina Web sulla macchina client. Quando l’utente fa clic una riga di testo collegata a una pagina sul server abcd.com, il browser segue il collegamento ipertestuale inviando un messaggio al server abcd.com per richiedere la pagina. All’arrivo della pagina, questa viene visualizzata. Se la pagina contiene un collegamento ipertestuale a una pagina sul server xyz.com e l’utente vi fa clic, il browser invia una richiesta a tale macchina, proseguendo così indefinitamente. Il lato Client
Quando viene selezionato un elemento, il browser segue il collegamento ipertestuale e preleva la pagina selezionata. Le pagine sono denominate utilizzando gli URL (Uniform Resource Locator). Un URL tipico è http//www.abcd.com/products.html. Quando un utente fa clic su un collegamento ipertestuale, il browser esegue una serie di passaggi per recuperare la pagina indicata, che sono: Il browser determina ‘URL (osservando che cosa è stato selezionato). selezionato). Il browser chiede a DNS l’indirizzo l’indirizzo IP della pagina indicata, es www.dmi.unict.it DNS risponde ad es con 156.106.192.32 Il browser esegue una connessione connessione TCP alla porta 80 su 156.106.192.32 156.106.192.32 Invia quindi una richiesta per il file /home/index.html Il server www.dmi.unict.it server www.dmi.unict.it invia il file /home/index.html La connessione TCP viene rilasciata Il browser visualizza tutto il testo in /home/index.html Il browser preleva e visualizza tutte le immagini in questo file Per essere in grado di visualizzare la nuova pagina, il browser deve comprenderne il formato, es (HTML). Il lato Server
Quando l’utente digita un URL o fa clic su una riga dell’ipertesto, il browser analizza sintatticamente l’URL e interpreta la parte tra http// e la barra successiva come il nome DNS da ricercare. Preso l’indirizzo IP del server, il browser stabilisce una connessione TCP sulla relativa porta 80. Invia poi un comando contenente il resto dell’URL, vale a dire il nome di un file sul server, che quindi restituisce il file per la visualizzazione da parte del browser. Al server Web, viene fornito il nome di un file da cercare e restituire. In entrambi i casi, i passaggi eseguiti dal server nel suo ciclo principale sono i seguenti: Accettare una connessione TCP da un Client (un browser) Ottenere il nome del file richiesto Ottenere il file file (dal disco) disco) Restituire il file al Client Rilasciare la connessione TCP PROTOCOLLO HTTP (HyperText Transfer Protocol)
Un protocollo è un insieme di regole che permettono di trovare uno standard di comunicazione tra diversi computer attraverso la rete, dove per rete si intende un insieme di due o più computer connessi tra di loro ed in grado di condividere informazioni. Quando due o più computer comunicano tra di loro si scambiano una serie di informazioni. informazioni. Per potersi scambiare informazioni, informazioni, i vari computer devono avere dei protocolli che permettano di attribuire ad un determinato comando un significato univoco per tutte le macchine. Un protocollo descrive : il formato che il messaggio deve avere e il modo in cui i computers devono scambiarsi messaggi. Ad esempio il protocollo HTTP serve per la trasmissione di informazioni attraverso il WEB. L'HTTP è un protocollo "stateless" "stateless" (senza memoria) che permette sia la ricerca che il recupero dell'informazione in maniera veloce, e permette quindi di seguire i rimandi ipertestuali . La scelta di un protocollo "stateless", 105
cioè di un protocollo che non "conserva memoria" della connessione fatta, è stata necessaria affinché fosse possibile saltare velocemente da un server ad un altro attraverso i "links" ipertestuali. HTTP ad ogni richiesta effettua una nuova connessione al server che viene chiusa al termine del trasferimento dell'oggetto richiesto (pagina HTML, immagine, ecc.).È gestito da un software (server HTTP) residente sugli sugli host che intendono essere fornitori fornitori di informazioni. informazioni. Chi vuole accedere alle informazioni fornite dal server HTTP deve utilizzare un software client (browser) in grado di interpretare le informazioni inviate dal server.IL SERVER, informalmente, è un programma che "gira" in attesa di una richiesta di connessione sul suo socket (la porta assegnatagli, tipicamente la 80). Il protocollo viene utilizzato da un processo daemon (cioè sempre in esecuzione)Questo protocollo è invocato da TCP/IP ogni qualvolta l'URL (che è una stringa che specifica la risorsa a cui riferirci) istanziata contiene nel primo campo la parola http. I comandi utilizzati per comunicare con esso sono detti Metodi.
106
Richiesta HTTP
Una volta che si è instaurata una connessione tra il browser ed il server, tramite il protocollo http il client effettua la sua richiesta. In questo protocollo per dare una certa formattazione alla richiesta e alla risposta risposta vengono usati dei caratteri caratteri speciali : CR LF e SP (Carriage Return, Line Feed, Space). La richiesta di di un client ha la seguente seguente struttura struttura : Request-Line + ((general header field or request header field or entity header field) CRLF) CRLF [corpo del messaggio] Il corpo del messaggio è costituito dai dati effettivi da trasmettere: input di programmi o informazioni da salvare sul server destinatario per conto del client. Request line
Ha la seguente seguente struttura : Metodo SP Request-URI SP Versione-HTTP Versione-HTTP CRLF
Metodi
I metodi indicano l’operazione che deve essere eseguita sulla risorsa identificata dal Request-URI. Nel campo Metodo della Request-Line appare uno solo solo dei seguenti seguenti metodi metodi : "OPTIONS", "GET" ,"HEAD", "POST", "PUT" ,"DELETE" ,"TRACE", "CONNECT". IL metodo utilizzato viene riconosciuto dal server se è implementato su di esso altrimenti il server restituisce un intero che indica la non implementazioe del metodo specificato. Il metodo "GET" è sempre supportato da qualsiasi qualsiasi server mentre gli altri sono opzionali. Request-URI
Il Request-URI (Uniform Resource Identifier) indica la risorsa su cui applicare la richiesta. In questo campo può può apparire una delle delle seguenti opzioni opzioni : "*", absoluteUri, absoluteUri, AbsolutePath. AbsolutePath. L’asterisco "*" indica che la richiesta non deve essere applicata ad una particolare risorsa, ma al server stesso. L’absolurìteURI è usato quando la richiesta è stata fatta ad un proxy, per questo si indica sia il Dns che il path della risorsa. L’absolutePath invece viene usato per inoltrare la richiesta ad un server o ad un gateway. Esso indica solo il path della risorsa sul server originario ed il Dns del server viene scritto nel campo "Host" nel Request-header -field . Si noti che se l’absolute path è vuoto gli viene assegnato per defoult lo "/" per indicare la root del server.
107
Versione http
Nella comunicazione Client/Server è necessario che sia chiaro la versione del protocollo usato per convenire sul formato del messaggio. Nella prima linea del messaggio messaggio nel campo HTTP-Version HTTP-Version field abbiamo : HTTP" "/" 1*digit 1*digit "." 1*digit 1*digit Es. : HTTP/1.1 Risposta HTTP
Una volta ricevuta la richiesta il server risponde con un messaggio di risposta. Esso ha il seguente seguente formato formato : Status-Line + ( (general-header (general-header or response-header or entity header) CRLF) CRLF [ corpo del messaggio ] Il corpo del messaggio contiene i dati effettivamente richiesti dal client: i documenti ipertestuali. Status Line
Ha la seguente struttura struttura : Versione-HTTP SP Status-Code SP Reason-Phrase Reason-Phrase CRLF
Status-Code e Reason-Phrase
Lo Status-Code è un codice a tre cifre che ha la funzione di fornire al client delle informazioni di stato riguardo all’esito della ricezione della richiesta. Associato ad ogni codice abbiamo la "reason-Phrase" che è una piccola descrizione del significato del codice destinata all’uso umano. Il primo digit dello Status-Code definisce 5 classi di risposta, mentre gli ultimi due digit non hanno nessuna categorizzazione. -1xx : Informazione Informazione - richiesta ricevuta e continuo continuo processo processo -2xx : Successo Successo - L’azione è stata ricevuta, ricevuta, capita e accettata accettata -3xx : Ridirezione Ridirezione - C’è bisogno bisogno di altre informazioni informazioni per per completare la richiesta richiesta -4xx : Client Client Error - Errori nella nella richiesta richiesta -5xx. Server Error - Il server fallisc falliscee General header field
Questi campi sono generali nel senso che sono applicabili sia alla richiesta che alla risposta del server. Essi vengono applicati applicati solo al messaggio messaggio trasmesso : Cache-control, Cache-control, Connection, Date,Pragma, Trailer, Transfer-Encoding, Transfer-Encoding, Upgrae, Via, Warning. Request header field
I request-header-field passano al server ricevente delle informazioni addizionali inerenti alla richiesta ed al client stesso. Esse sono: Accept, Accept-charset,Accept-Encoding, Accept-Language, Autorization, Expect, From, Host, IfMatch, If-Modified-Since, If-None-Match, If-Range, If-Unmodified-Since, Max-Forwards, Proxy108
Autorization, Autorization, Range, Referer, TE, User-Agent. Response header field
Questi campi servono per passare al client ulteriori informazioni che non possono risiedere nello Status-Code . Essi sono: Accept-Ranges, Age, Etag, Location, Proxy-Authenticate, Retri-After, Server, Vary, WWWAuthenticate.
Entity header field
Questi campi danno delle informazioni inerenti all’entità all’entità da trasferire identificata dalla richiesta richiesta : Allow, Content-Encoding, Content-Language, Content-Length, Content-Location, Content-MD5, Content-Range, Content-Type, Expires, Last-Modified, extension-header. Definizioni metodi OPTION
Il metodo OPTION rappresenta una richiesta di informazioni inerenti alle opzioni di comunicazione disponibili sul canale definito dal Request-URI. Queste opzioni sono riferite alla risorsa da utilizzare o alle capacità del server. GET
Il metodo GET tende di recuperare le informazioni localizzate dal Request-URI. Se il Request-URI fa riferimento ad un processo che produce dati, saranno restituiti dalla risposta i dati prodotti da questo processo. Questo metodo diventa un "GET condizionale" se nel messaggio di richiesta ci sono i campi IfModified-Since, Modified-Since, If-Unmodified-Since, If-Unmodified-Since, If-Match, If-None-Match, o If-Range. Quindi la risposta sarà limitata solo a ciò che è definito nei campi suddetti riducendo l’uso della rete e il traffico di dati superflui. Anche con l’inclusione dei campi del "Range header" il metodo riduce il traffico sulla rete diventando un "GET parziale", cioè si richiede solo parte dell’entità che può essere trasferita. HEAD
Il metodo HEAD è identico al GET eccetto il fatto che il server non deve ritornare il corpo del messaggio. Questo metodo è usato per ottenere informazioni inerenti all’entità riferita dalla richiesta senza trasferire l’entità stessa. Il metodo viene usato spesso per testare links ipertestuali, per testare la loro accessibilità e le loro recenti modifiche. POST
Con il metodo POST il client può spedire al server una serie di coppie nome=valore che corrispondono all'input del programma indicato nella request-URI. Ovviamente il programma residente sul server girerà sul server stesso per poi restituire l'output sottoforma sottoforma di risposta. Questo metodo serve anche a far sì che il server accetti l’entità contenuta nella richiesta per ampliare la risorsa identificata dal Request-Uri. Spesso è usato per effettuare annotazioni sulle risorse già esistenti o estendere dei database. La funzione che deve essere svolta in seguito al metodo POST, è determinata dal server.
PUT
Il metodo PUT serve per allocare nuove risorse sul server passategli dal client.
Le nuove risorse sono memorizzate in relazione al Request-URI. Se una risorsa già esiste in corrispondenza corrispondenza all’URI specificato, la nuova risorsa verrà considerata come un aggiornamento aggiornamento della prima. Il server restituisce al client delle informazioni di stato sempre tramite lo Status-Code. 109
DELETE
Il metodo DELETE richiede che il server ricevente elimini la risorsa specificata dal Request-URI. Il client non ha nessuna garanzia che l’operazione vada in porto, anche se lo Status-Code restituito indica successo, perché il server può eliminare la risorsa oppure la può spostare in una locazione inacessibile. TRACE
Il metodo TRACE indica la richiesta di alcuni dati sul canale per testare e diagnosticare informazioni. Il ricevente può essere sia il server originale che il primo proxy o gateway sul canale. CONNECT
In genere questo metodo viene usato per instaurare una semplice connessione con un proxy.
Un esempio di transizione HTTP
Supponiamo che un utente debba recuperare una risorsa posta su un server Web il cui URL è http://www.host.it/path/doc.html
Il browser inizia analizzando l'URL e scopre che:
il protocollo da usare per la comunicazione con il server è l'http
l'URL contiene un indirizzo host di Internet www.host.it che deve essere convertito in indirizzo IP numerico
la risorsa è /path/doc.html è /path/doc.html ed ed è nel formato HTML
Il browser "domanda al DNS di convertire l' indirizzo host in indirizzo IP numerico.
Il DNS replica con un indirizzo IP numerico, per esempio 131.114.189.11
Il browser stabilisce stabilisce una connessione connessione con il server server sulla porta porta TCP 80 il cui indirizzo IP è 131.114.189.11
A questo punto il browser compone la richiesta secondo il formato HTTP e la invia al server: GET /path/doc.html HTTP/1.0 User-Agent: Internet Explorer/3.02 Accept: text/plain Accept: text/html Accept: image/*
Il server riceve la richiesta ed analizza la prima parte (GET /path/doc.html HTTP/1.0)
Il comando GET dice GET dice al server di individuare e leggere il file e restituirlo al client.
L'analisi di /path/doc.html dice al server il percorso, il nome del file e il formato del documento (HTML).
110
L'HTTP/1.0 dice quale protocollo di comunicazione usare per "colloquiare" con il client.
Il server, se necessario, analizza il resto della richiesta. In questo caso estrapola le seguenti informazioni:
il client accetta normale testo, testo formattato HTML e qualsiasi codifica digitale dimmagine (text/plain, text/html, image/*)
Il software del client è Internet è Internet Explorer/3.02
Se non ci sono stati errori, il server esegue il metodo richiesto: cerca ilil file avvalendosi del del file system del sistema operativo e:
se il file è stato trovato: il server invia invia una risposta del tipo:
HTTP/1.0 200 document follows Server: NCSA/2.4 Date: sab, 20 gen 1997, 23:20:02 GMT Content-Type: text/html Content-length: 2024 Last-Modified: ven, 19 gen 1997, 23:40:02 GMT
questa risposta dice al browser che è andato tutto bene (codice di stato 200) che il software utilizzato è NCSA/2.4 , la data di invio del documento è sab, 20 gen 1997, 23:20:02 GMT ,
il documento è nel formato HTML, la lungezza del documento è di
2024 Kb e la data di ultima modifica è ven, 19 gen 1997, 23:40:02 GMT.
se il file non è stato trovato o c'è qualche errore: il server invia una risposta che spiega l'errore. Nel caso che il file non è stato trovato la risposta potrebbe essere del tipo:
HTTP/1.0 404 Not found Server: NCSA/2.4 Date: sab, 20 gen 1997, 23:20:02 GMT Content-Type: text/html Content-length: 0
Il server dopo la risposta chiude la connessione.
Il browser dopo aver memorizzato ed analizzato la risposta, mostra sullo schermo il documento utilizzando l'applicazione opportuna.
C'è da aggiungere che se il documento HTML avesse contenuto delle immaggini in-line, il browser, per il recupero di ognuna di esse, avrebbe dovuto stabilire una nuova connessione TCP con il server e ripetere ogni passo. 111
I Documenti Web Dinamici: DHTML
Agli esordi del web tutto il contenuto era statico. Negli ultimi tempi buona parte del contenuto è divenuta dinamica, dinamica, vale a dire generata su richiesta richiesta anziché archiviata su su disco. La generazione del contenuto può avvenire sia sul lato server che su lato client. Nel primo caso, quando un utente quando compila un modulo e lo invia, al server viene inviato un messaggio con il contenuto del modulo. Questo messaggio viene elaborato da un programma o uno script. Solitamente, il processo usa le informazioni fornite dall’utente per cercare un record in un database sul disco del server, e generare una pagina HTML personalizzata da restituire al client.
Il metodo tradizionale per gestire i moduli e altre pagine interattive è un sistema chiamati CGI(common gateway interface). È un’interfaccia standardizzata che consente ai server web di comunicare con script e programmi di back-end che possono accettare l’input (per esempio dai moduli) e generare pagine HTML in risposta. FTP
L’FTP (File Transfer Protocol) è un protocollo per muovere file da host a host. È modello client/server, dove: il client inizia la comunicazione; il client richiede di trasferire un file sul server; il client richiede di trasferire un file dal server; il client può richiedere di ottenere la lista dei file disponibili sul server; il client può muoversi nelle directory del server. Un client è dotato dotato di un programma che implementa una una parte di comunicazione: comunicazione: il protocollo protocollo FTP e interfaccia utente: permette di svolgere le funzioni che il protocollo offre. Il programma svolge le seguenti funzioni: funzioni: connessione al server remoto; trasferimento di un file dal server al client; trasferimento di un file dal client al server; lettura dei files presenti nella directory corrente sul server; cambiamento di directory corrente sul server; disconnessione. Il server è dotato di un programma, detto ftp server (ftp daemon) che implementa una parte di comunicazione: il protocollo FTP e una parte user agent: implementa l’accesso al file system; implementa l’autenticazione del client; permette la configurazione del servizio (chi può leggere che cosa, chi può scrivere nel file system e dove, politica di logging, ...). Il server svolge le seguenti funzioni: riceve le richieste di connessione e verifica se sono ammissibili in base alla propria configurazione; riceve i comandi relativi alle varie funzioni del client e le espleta, se sono autorizzate. Ecco una serie di passi che vengono fatti quando si instaura una connessione FTP: il client esegue una connessione al server collegandosi alla porta TCP 21; il server risponde; Il client invia i dati necessari per identificare l’utente che sono USER login e PASS password; il server risponde che l’utente è correttamente autenticato, oppure nega l’accesso; se l’utente è autenticato, il client può dare i vari comandi previsti dal protocollo; l’utente si disconnette. La connessione deve essere affidabile, quindi il flusso dei comandi e delle risposte avviene su un canale TCP. Il server resta in ascolto su una porta ben nota al client, porta TCP 21. dopo che è avvenuta la procedura di autenticazione da parte del server, il client deve aspettarsi di ricevere una connessione sulla porta TCP 20.
112
il protocollo FTP trasferisce i dati (file) su una connessione TCP differente da quella usata per trasmettere i comandi. Questo modo di operare è detto trasmettere i comandi fuori dalla banda. Questa definizione è giustificata poiché è presumibile che il maggior consumo di banda sia dovuto al trasferimento dei file, mentre i comandi non consumano la banda destinata al trasferimento dei dati. La connessione di controllo (porta 21) è persistente. Essa dura tutto il tempo della sessione di lavoro tra client e server. La connessione dati (porta 20) è transiente (non persistente) ,essa dura solo il tempo necessario a trasmettere un file . L’agente Utente (Agent User)
I sistemi di posta elettronica presentano due parti fondamentali: gli agenti utente e gli agenti di trasferimento trasferimento dei messaggi; Un agente utente è di norma un programma (a volte chiamato lettore di posta) che accetta una varietà di comandi per comporre, ricevere e rispondere ai messaggi, nonché per manipolare le caselle di posta. posta. Per gli agenti di trasferimento trasferimento dei messaggi messaggi ne parleremo in seguito. I formati dei messaggi (RFC 822)
I messaggi sono costituiti da un primitivo involucro, alcuni campi di intestazione, una riga vuota e il corpo del messaggio.
Il campo to: indica l’indirizzo DNS del destinatario principale; è consentito indicare più destinatari. Il campo cc: indica gli indirizzi dei destinatari secondari. In termini di consegna non vi è una distinzione tra destinatari principali e secondari.Il campo bcc: (copia per conoscenza nascosta) è simile al campo cc:, tranne per il fatto che la riga viene eliminata da tutte le copie inviate ai destinatari principali e secondari. I due campi successivi, from e sender:, indicano rispettivamente chi ha scritto e inviato il messaggio. Non devono necessariamente avere lo stesso contenuto. Una riga contenente received: viene aggiunta da ogni agente di trasferimento dei messaggi lungo il percorso. La riga contiene l’identità dell’agente, la data e l’ora di ricezione del messaggio. Il campo return-path: viene aggiunto dall’agente di trasferimento dei messaggi finale e ha lo scopo di spiegare come ritornare al mittente. Oltre a questi campi i messaggi possono contenere diversi campi d’intestazione utilizzati dagli agenti utente o dai destinatari umani.
113
Il campo reply-to: viene a volte utilizzato quando né la persona che compone il messaggio né la persona che lo invia desiderano vedere la risposta. Il trasferimento dei messaggi
Il sistema di trasferimento di messaggi si occupa della trasmissione dei messaggi dal mittente al destinatario. Il modo più semplice per svolgere questa operazione è stabilire una connessione di trasporto dalla macchina di origine a quella di destinazione per poi trasferire semplicemente il messaggio.
SMTP (Simple Mail Transfer Protocol)
All’interno di Internet, la posta elettronica viene consegnata costituendo una connessione tra la macchina di origine e la porta 25 della macchina di destinazione. In ascolto su questa porta esiste un daemon di posta elettronica che utilizza SMTP.
Questo daemon accetta le connessioni in ingresso e copia nelle caselle di posta appropriate i messaggi ricevuti da queste connessioni. SMTP è un semplice protocollo ASCII, per questo la comunicazione comunicazione tra un client ed un server server SMTP consiste nello nello scambio di comandi comandi in caratteri ASCII (è quindi leggibile). Dopo avere stabilito la connessione TCP alla porta 25, la macchina di invio (che opera come client) attende attende la comunicazione comunicazione da parte della della macchina macchina ricevente (che opera come server). Il server inizia inviando una riga di testo che comunica la sua identità e la possibilità di inviare la posta. Se il server è pronto ad accettare la posta elettronica, il client annuncia da chi proviene il messaggio e a chi è destinato. Se tale destinatario esiste nella destinazione, il server comunica al client di inviare il messaggio. Dopo di che, il client invia il messaggio e il server fornisce l’ack. Vediamo un tipico esempio
il client si presenta, inviando una stringa del tipo: "HELO Fabio", nella quale indica il suo nome. Il server risponde con un "250 +OK" che é il codice utilizzato dai server SMTP per segnalare l'avvenuta ricezione e l'elaborazione del messaggio;
il client specifica che si tratta di una e-mail e dovrebbe ora fornire il proprio indirizzo di posta. I nuovi software di ricezione (Outlook Express, Eudora, ecc...), però, ignorano di pari passo questo campo. Essendo comunque obbligatorio, é necessario inserire la stringa: "MAIL FROM:<>";
il client specifica quindi l'indirizzo del destinatario della e-mail. Una stringa di esempio può 114
essere: "RCPT " RCPT TO:"; om>";
é terminata la fase di autenticazione e può quindi cominciare quella di scrittura e trasmissione del messaggio. Prima di tutto é necessario il comando "DATA";
ora si può indicare l'indirizzo del mittente. Ad esempio: "FROM:[email protected]";
é quindi necessario ripetere l'indirizzo del destinatario: "TO:[email protected]";
il messaggio dovrebbe contenere un soggetto; per specificarlo: "SUBJECT:soggetto prova";
ora serve una riga vuota, per indicare al server che l'intestazione della e-mail é conclusa e che ora inizia il corpo del messaggio. Il testo può essere inviato tutto insieme o anche riga per riga. Il server provvede ad inoltrare la e-mail quando riceve la stringa ".";
il client si scollega: "QUIT".
Consegna fnale
Con l’avvento delle persone che accedono a Internet chiamando chiamando l’ISP tramite un modem, il sistema è diventato inadeguato. Il problema è che quando l’host 1 desidera inviare un messaggio di posta elettronica all’host 2, ma l’host 2 al momento non è online, l’host 1 non può stabilire una connessione TCP con l’host 2, e quindi non può eseguire il protocollo SMTP. Una soluzione consiste nell’avere nell’avere un agente di trasferimento dei messaggi su una macchina dell’ISP, che accetta la posta elettronica per i suoi clienti e la archivia nelle caselle di posta sulla macchina dell’ISP. Dal momento che questo agente può essere sempre online, la posta elettronica può essere inviata in qualsiasi momento. Sfortunatamente, questa soluzione crea un altro problema. Vediamo in POP3. POP3 (Post Office Protocol version 3)
Come può l’utente ricevere la posta elettronica dall’agente di trasferimento dei messaggi dell’ISP? La soluzione a questo problema è creare un altro protocollo, che consente agli agenti di trasferimento dell’utente (sui pc client) di contattare l’agente di trasferimento dei messaggi (sulla macchina dell’ISP) dell’ISP) per effettuare la copia della della posta elettronica elettronica dall’ISP all’utente. all’utente. Uno di questi protocolli è POP3.
POP3 viene avviato quando l’utente apre il lettore della posta. Il lettore della posta chiama l’ISP (a meno che sia già disponibile una connessione) e stabilisce una connessione TCP con l’agente di trasferimento dei messaggi alla porta 110. Una volta stabilita la connessione, il protocollo POP3 attraversa sequenzialmente tre stati: 115
Autorizzazione Transzioni Aggiornamento
Lo stato di autorizzazione si occupa del login dell’utente; lo stato delle transazioni consente all’utente di raccogliere la posta e cancellarla dalla casella dell’ISP. Lo stato di aggiornamento provoca l’effettiva eliminazione dei messaggi.
Vediamo un tipico esempio
il client si identifica, inserendo il proprio username. La stringa da inviare deve essere ad esempio: "USER [email protected]". [email protected]". Il server risponde con un +OK ed un codice che indica la corretta ricezione ed elaborazione della stringa trasmessa;
una volta fornito il proprio username, l'utente deve farsi riconoscere mediante mediante una password. La stringa da inviare è del tipo "PASS 5info2" (NB: la mia password non é questa, ma a titolo esemplificativo credo possa andare bene). Il server risponde inviando il solito +OK, seguito però dal numero di messaggi presenti nella mailbox;
il client può quindi iniziare la ricezione dei messaggi, con la stringa "RETR numero messaggio". Ad esempio: "RETR 1" provoca p rovoca l'invio dal server al client del primo messaggio (in ordine temporale basato sulla spedizione) presente nella casella di posta;
nonostante venga trasmesso al legittimo legittimo destinatario, destinatario, il messaggio rimane memorizzato memorizzato anche nell'hard disk del server. Per eliminarlo il client può usare la forma: "DELE numero messaggio";
per chiudere la connessione, come nel caso dell'SMTP, è sufficiente l'invio della stringa: "QUIT".
IMAP
Il successo e il diffondersi della posta elettronica, ha portato a richiedere altre funzionalità da parte delle persone la utilizzano. Per esempio molte persone che disponevano di un singolo account di posta elettronica desideravano accedervi a lavoro, sul computer di casa. Anche se POP3 lo consente, di norma scarica tutti i messaggi archiviati ad ogni contatto: il risultato è che la posta dell’utente viene rapidamente dispersa su più macchine, più o meno casualmente. Questo svantaggio a portato alla nascita di un protocollo di consegna alternativo, IMAP (internet message acces protocol). Questo protocollo permette che tutti i messaggi rimangano sul server all’infinito, all’infinito, in più cartelle di posta. L’impostazione generale del protocollo IMAP è simile a quella di POP3. il server IMAP è in ascolto sulla porta 143. nella seguente figura sono elencante le differenze tra IMAP e POP3.
116
DNS: Il Sistema dei Nomi di Dominio
Serve per identificare identificare un host è il suo hostname hostname come www.yahoo.com www.yahoo.com sono mnemonici e quindi quindi apprezzati dagli uomini, ma nn danno nessuna informazione sulla dislocazione degli host all’interno di internet. Per queste ragioni,gli host sono identificati anche dal cosiddetto indirizzo ip che ci fornisce molte informazioni specifiche sulla collocazione dell’host. Servizi forniti dal DNS I router preferiscono l’indirizzo ip per identificare un host, abbiamo bisogno di un servizio che converte gli hostname in indirizzi IP; questo è il compito principale del sistema dei nomi di dominio DNS di internet. Il DNS gira su UDP ed usa la porta 53 è utilizzato: 1. una databas databasee distribui distribuito to implemen implementato tato in una una gerarchia gerarchia di di server server 2. un protocollo protocollo dello strato strato applicazione applicazione che che permette agli host di comunicare comunicare con i server dei dei nomi in modo da fornire il servizio di traduzione Perché la macchina dell’utente possa inviare un messaggio di richiesta http al server Web www.jjj.it la macchina stessa deve ottenere l’indirizzo IP di www.jjj.it . sulla stessa macchina dell’utente gira il lato client dell’applic dell’applicazione azione DNS. Il browser estrae l’host l’host name www.jjj.it dall’URL e lo passa al lato client dell’aplicazione DNS. Il client DNS invia una richiesta contenente l’hostname a un server DNS . il client DNS riceve infine una una risposta che include l’indirizzo l’indirizzo IP per l’hostname. l’hostname. Il browser allora apre una connessione con il server http situato a quell’indirizzo IP . Le persone, per fare riferimento a host e caselle di posta, ricordano con difficoltà gli indirizzi IP. Per questo motivo sono stati introdotti nomi ASCII per separare i nomi dei computer dai rispettivi indirizzi. Ciò nonostante, la rete in sé sa interpretare solo indirizzi numerici, pertanto sono richiesti meccanismi per per convertire stringhe ASCII ASCII in indirizzi di rete. Da questa questa esigenza fu inventato inventato il protocollo DNS(domina name system). L’essenza di DNS è l’invenzione di uno schema di denominazione gerarchico basato su domino, e di un sistema di database distribuito per l’implementazione di questo schema di denominazione. È principalmente utilizzato per associare nomi di host e destinazioni di posta elettronica agli indirizzi IP.
DNS viene utilizzato come segue. Per associare un nome ad un indirizzo IP, un programma applicativo chiama una procedura di libreria chiamata risolutore, passando il nome come parametro. 117
Il risolutore invia un pacchetto UDP a un server DNS locale, che quindi cerca il nome e restituisce l’indirizzo IP al risolutore, che a sua volta lo restituisce al chiamante. Armato dell’indirizzo IP, il programma può stabilire una connessione TCP con la destinazione oppure inviarle pacchetti UDP. Lo spazio dei nomi DNS
Il DNS funziona come il sistema postale. Concettualmente, internet è divisa in oltre 200 domini di primo livello, dove ogni dominio copre molti host. Ogni dominio è partizionato partizionato in sottodomini, che sono a loro volta divisi e così via. Tutti questi domini possono essere con una struttura ad albero. Le foglie rappresentano rappresentano i domini che non hanno sottodomini (ma naturalmente contengono computer). I domini di primo livello sono di due tipi: generici e per nazioni. I domini generici sono com, edu, gov, int,org. Ogni dominio è denominato dal percorso compreso tra esso e la radice (non denominata). I nomi di dominio assoluto termina sempre con un punto, al contrario di un nome relativo. I nomi relativi devono essere interpretati in un contesto per determinare univocamente il reale significato. Per creare un nuovo dominio è necessaria l’autorizzazione del dominio in cui sarà incluso. I record delle risorse
A ogni dominio, che sia rappresentato da un singolo host o sia un dominio di primo livello, può essere associato un insieme di resource records (record delle risorse). Per un singolo host, il record delle risorse più comune è solo l’indirizzo IP, ma possono esistere molti altri tipi di record delle risorse. Quando un risolutore fornisce un nome di dominio a DNS, ciò che ottiene sono i record delle risorse associati a tale nome. Di conseguenza, la funzione principale di DNS e associare i nomi di dominio ai record delle risorse.
I server dei nomi
In teoria, un singolo server dei nomi potrebbe contenere l’intero database DNS e rispondere a tutte le interrogazioni. interrogazioni. In pratica, questo server sarebbe troppo sovraccaricato per essere utile. Se dovesse incontrare un problema, l’intera internet sarebbe bloccata. Per evitare questo, lo spazio dei nomi viene diviso in zone non sovrapposte. Ogni zona contiene alcune parti della struttura e contiene anche i server dei nomi con le informazioni su tale zona. Di norma, una zona avrà un server dei nomi primario, che ottiene le sue informazioni da un file su disco, e uno o più server dei nomi secondari che ottengono ottengono le loro informazioni informazioni dal server dei nomi primario. Quando un risolutore ha un’interrogazione su un nome di dominio, passa l’interrogazione a uno dei server dei nomi locali. Se il dominio è all’interno della giurisdizione del server dei nomi, restituisce i record autorevoli delle risorse. Un record autorevole è un record fornito dall’autorità che gestisce il record. Se invece il dominio è remoto e non sono disponibili localmente informazioni su di esso, il server dei nomi invia un messaggio d’interrogazione al server dei nomi di primo livello per il dominio richiesto. Questo metodo di interrogazione è conosciuto come interrogazione ricorsiva, perché ogni server che non possiede le informazioni richieste deve trovarle altrove e poi restituirle. Vediamone alcuni esempi.
118
Esempio 1.
Esempio 2.
Esempio 3.
119
DNS: Root Name Name Servers Servers
Questi root name servers sono conatattati dai local name server che non possono risolvere un nome. Il root name server contatta un authoritative name server se non conosce il mapping per quel nome; dopo ottiene il mapping; restituisce il mapping al local name server. Protocollo DNS: Messaggi
Sia i messaggi di richiesta che di risposta hanno lo stesso formato. Si ha un campo identificazione lungo 16 bit che identifica la richiesta, la risposta usa lo stesso numero. Il campo etichette, anche esso di 16 bit, può contenere i seguenti valori: richiesta o risposta, recursion desired, recursion avialable, reply is authoritative.
120