CAPITOLO 1:
INTRODUZIONE
Comunicazione dati: Quando comunichiamo scambiamo informazioni, questo scambio di informazioni può essere locale o remoto. Locale Æ dialogo fatto di persona Remoto Æ dialogo fatto da persone distanti L’espressione comunicazione dati fa riferimento allo scambio di dati fra due dispositivi grazie all’utilizzo di un mezzo trasmissivo (cavo). Questa comunicazione per avvenire richiede la necessità che i due dispositivi debbano far parte di un sistema fatto di hardware e software. Componenti: Un sistema di comunicazione ha cinque componenti • Messaggio, informazioni che devono essere inviate • Mittente, dispositivo che spedisce il messaggio • Destinatario, dispositivo che riceve il messaggio • Mezzo trasmissivo, cammino fisico su quale viaggia il messaggio • Protocollo, insieme di regole che governano la comunicazione adottate dai dispositivi.
Rappresentazione dei dati: varie forme: •
Testo Æ è rappresentata da simboli codificati da una sequenza di bit. La codifica più utilizzata è quella ASCII che rappresenta ogni carattere con una sequenza di 7 bit. Attualmente la codifica ASCII è stata sostituita dalla codifica UNICODE in quanto utilizza 32 bit per rappresentare un singolo carattere. • Numeri Æ sono rappresentati utilizzando sequenze di bit, quindi utilizzano la notazione binaria. • Immagine Æ è composta da una matrice di pixel, i quali determinano la risoluzione dell’immagine. Ogni pixel viene rappresentato da una sequenza di bit. • Audio e video Æ sono per natura continua e non discreta, però è possibile rappresentarli anche in forma discreta (es.: un video può essere rappresentato come una sequenza di immagini proiettate rapidamente). Flusso di dati: La comunicazione tra due dispositivi può essere di tre tipi: • Unidirezionale (simplex), la comunicazione avviene in una sola direzione. Solo uno dei dispositivi può spedire dati mentre l’altro può solo ricevere. Es.: monitor, tastiera.
•
Bidirezionale alternata (half duplex), entrambi i dispositivi possono sia trasmettere che ricevere dati ma non contemporaneamente. Quando uno trasmette l’altro riceve e viceversa. Es.: ricetrasmittente
1
•
Bidirezionale (full duplex), entrambi i dispositivi possono spedire e ricevere dati contemporaneamente.
Reti: Una rete è un insieme di dispositivi spesso chiamati nodi connessi da canali di comunicazione. Un nodo può essere un calcolatore, una stampante,.…….. Le prestazioni di una rete dipendono da vari fattori: -. Numero di utenti -. Caratteristiche hardware dei dispositivi Le metriche utilizzate per misurare le prestazioni sono: -. Throughput, quantità di dati che si spediscono nell’unità di tempo -. Ritardo, tempo necessario ad un messaggio per viaggiare dal mittente al destinatario. L’ affidabilità di una rete è la capacità di consegnare i dati spediti senza errori. La sicurezza di una rete include la protezione dei dati. Tipi di connessione: Le connessioni collegano due punti e sono: • Connessione punto-punto Æ si ottiene collegando un canale fisico ai due dispositivi che devono comunicare • Connessione multipunto Æ è un collegamento condiviso da più di due dispositivi. Topologia: La topologia di una rete è il modo in cui i nodi sono fisicamente disposti e interconnessi. Ne esistono quattro tipi: 1. Topologia Mesh Æ ogni nodo ha un collegamento punto-punto con gli altri nodi della rete. Svantaggi: costo dell’ hardware delle porte elevato, necessita di molti cavi se il numero di nodi è elevato. Vantaggi: un collegamento tra ogni coppia di nodi implica che ogni coppia di nodi può comunicare indipendentemente da ogni altra coppia, elevata affidabilità, sicurezza.
2. Topologia a Stella Æ ogni nodo è connesso con un collegamento punto-punto ad un dispositivo centrale chiamato hub, quindi diversamente dalla topologia Mesh, il traffico di dati deve passare attraverso l’hub. Svantaggi: l’intera rete dipende dall’hub, quindi eventuali guasti all’hub comportano l’inutilizzabilità della rete. Vantaggi: economico in quanto richiede una sola porta di I/O e un solo collegamento per ogni nodo. Se un collegamento si rompe solo il nodo collegato ne subisce le conseguenze.
2
3. Topologia Bus Æ utilizza un collegamento multipunto (bus) che connette tutti i nodi. Ogni nodo è connesso tramite un connettore che è fisicamente collegato al bus. Svantaggi: difficoltà di gestione dei problemi del bus, se il bus si guasta si bloccano tutte le comunicazioni. Vantaggi: facilità di installazione di un nuovo nodo.
4. Topologia Anello Æ ogni nodo ha un collegamento punto-punto con solo due altri nodi, quello che lo precede e quello che lo segue. I dati vengono fatti passare in una sola direzione. Ogni nodo ha un ripetitore. Svantaggi: se collegamento o un ripetitore si guasta l’intera rete non è più utilizzabile a causa del verso unidirezionale della rete. Questo svantaggio può essere alleviato usando un doppio anello per permettere il traffico in entrambe le direzioni. Vantaggi: semplicità di installazione e configurazione. L’isolamento dei guasti è semplice.
5. Topologia ibrida Æ insieme di due o più topologie viste precedentemente.
Classificazione delle reti: Le reti vengono classificate in base alla loro dimensione fisica: •
LAN (Local Area Network) Æ area limitata (ufficio, edificio). Il limite massimo è di pochi chilometri. Le reti LAN sono progettate per condividere risorse far gli utenti della rete. La velocità di trasmissione delle reti LAN funziona a 100 Mbps (Megabit per secondo) e a 1 Gbps (Gigabit per secondo). • WAN (Wide Area Network) Æ area estesa, grandi distanze. Una rete WAN può essere semplice cioè costituita da un collegamento punto-punto, o molto complessa quando costituisce la dorsale di un’interrete complessa e vasta. Nel secondo caso si parla WAN a commutazione e la rete è costituita da nodi speciali, detti router, connessi tra loro. • MAN (Metropolitan Area Network)Æ dimensioni intermedie, normalmente le dimensioni ricoprono un’area di città o una città. Oggigiorno è difficile trovare una LAN, MAN, WAN isolata, le reti sono quasi sempre interconnesse tra loro fornendo una interrete o una internet (con la “i” minuscola).
3
Internet (con la “i” maiuscola) invece è una particolare interrete che collega milioni di calcolatori in tutto il mondo e che permette di navigare sul World Wide Web. Per connettersi ad Internet oggi si utilizzano i cosiddetti ISP (Internet Service Provider) che possono operare sia a livello nazionale che a livello internazionale.
Protocolli: Protocollo Standard
Æ insieme di regole; Æ insieme di regole approvate da organizzazioni riconosciute
Protocollo: Quando due nodi comunicano fra loro devono seguire delle regole, queste regole sono chiamate protocollo. Un protocollo definisce cosa viene comunicato, come viene comunicato e quando avviene la comunicazione. Gli elementi chiave sono: • Sintassi Æ definisce il formato dei dati, cioè l’ordine in cui i vari elementi della comunicazione devono essere presentati. • Semantica Æ definisce cosa significano la sequenza di bit. • Sincronizzazione Æ uniformare le diverse velocità alla quale operano mittente e destinatario. Standard: sono delle linee guida a chiunque (produttori hardware e software, venditori, agenzie,…) sia coinvolto nello sviluppo di una interrete pubblica. • Standard de facto: non sono stati approvati da nessuna organizzazione ma sono utilizzati. • Standard de jure: sono stati approvati.
4
CAPITOLO 2:
MODELLI PER LE RETI
Architettura a strati:
Per il mittente le attività da svolgere sono: • Stato superiore. Il mittente scrive la lettera, … (seguire la figura) • Strato centrale. (seguire la figura) • Strato inferiore. (seguire la figura) Per il trasportatore l’attività da svolgere è quella di trasportare fisicamente la lettera dal mittente al destinatario Per il destinatario le attività da svolgere sono: • Strato inferiore. (seguire figura) • Strato centrale. (seguire figura) • Strato superiore. (seguire figura) Osservazioni: Le tre attività devono essere fatte in un preciso ordine che rispetta la gerarchia degli strati. Nel mittente gli strati vanno attraversati dall’alto verso il basso, mentre nel destinatario dal basso verso l’alto. Ogni strato utilizza le informazioni, i servizi offerti dallo strato inferiore.
Modello OSI (Open System Interconnection): L’ISO (International Standard Organization) ha proposto lo standard OSI con lo scopo di dare delle regole che facilitano la comunicazione fra sistemi differenti senza richiedere cambiamenti di hardware o software. Il modello OSI è un modello a strati per la progettazione di reti che permette la comunicazione fra tutti i tipi di rete. È composto da sette strati:
5
Ogni strato definisce un insieme di funzioni che si occupano di aspetti diversi della trasmissione. Ogni strato utilizza le funzionalità offerte dallo strato sottostante. Fra due nodi della rete, lo strato n di un nodo comunica con il corrispondente strato n dell’altro nodo. Questa comunicazione è gestita grazie ad un protocollo. I processi su due nodi che comunicano a un dato strato sono detti peer. La comunicazione tra due peer è detta peer to peer. Nel mittente in ogni passaggio da uno strato all’altro, dall’alto verso il basso, ogni strato aggiunge delle informazioni. Nello strato fisico i dati vengono convertiti in una forma adatta al mezzo trasmissivo. Nel destinatario i dati passano dal basso verso l’alto e ogni strato rimuove l’informazione aggiuntiva. Gli strati interagiscono tra di loro utilizzando un’interfaccia. Ogni interfaccia definisce i servizi che uno strato deve fornire allo strato superiore. Modifiche all’implementazione non creano nessun problema. I sette strati possono essere pensati come appartenenti a tre gruppi: -. Gli strati 1,2,3 sono strati per il supporto di rete; -. Gli strati 5,6,7 sono strati per il supporto all’utente; -. Lo strato 4 collega i due gruppi.
In questa figura, D7 indica il pacchetto di dati del livello 7, D6 indica il pacchetto dati del livello 6e così via. D7 quindi è la sequenza di byte che si vuole spedire. Nel passaggio da uno strato a quello sottostante viene aggiunta un’intestazione (header) o anche una cosa (trailer). Normalmente solo il livello 2 utilizza una coda. Lo strato fisico si occupa di trasformare la sequenza di bit in segnali elettromagnetici che viaggeranno sul mezzo trasmissivo per arrivare al destinatario. Qui il pacchetto subirà il processo inverso passando da uno strato a quello superiore dove verranno eliminate le intestazioni (e le code) e alla fine il blocco D7 arriverà all’applicazione destinataria dei dati. Da questo deriva quindi il concetto di incapsulamento cioè la porzione di dati del livello n-1 contiene sia i dati che l’intestazione del livello n, ma considera tutto il blocco come singola unità dati. Strati del Modello OSI: 1. Strato 1: Fisico Lo strato fisico si preoccupa di trasmettere i singoli bit sul mezzo trasmissivo da un nodo a quello successivo. Lo strato fisico si occupa di: • Caratteristiche fisiche del mezzo: definisce il tipo di mezzo trasmissivo • Rappresentazione dei bit: definisce come il valore 0 e 1 sono codificati • Velocità di spedizione: definisce la velocità con cui si possono spedire i bit • Sincronizzazione dei bit: definisce il modo di sincronizzare il clock del mittente e del destinatario 6
•
Configurazione del collegamento: definisce come gestire la connessione del nodo al mezzo trasmissivo. • Topologia: definisce come gestire la comunicazione in funzione della topologia della rete. • Flusso di dati: definisce il tipo di comunicazione (simplex, half duplex, full duplex). 2. Strato 2: Collegamento Lo strato di collegamento si occupa della trasmissione affidabile di pacchetti di dati fra un nodo ed il successivo. Lo strato di collegamento si occupa: • Framing: divide il flusso di bit che arriva dallo strato di rete e che deve essere spedito in blocchi, detti frame. • Indirizzi fisici: aggiunge un’intestazione che specifica l’indirizzo fisico del destinatario. • Controllo di flusso: usa dei meccanismi per il controllo di flusso dei bit al fine di non sovraccaricare il destinatario. • Controllo degli errori: implementa meccanismi che permettono di rilevare la presenza di errori e di ritrasmettere i frame danneggiati. • Controllo per l’accesso: quando il mezzo trasmissivo è multipunto lo strato di collegamento ha il compito di controllare qual nodo ha accesso al mezzo. 3. Strato 3: Rete Lo strato di rete si occupa della consegna di pacchetti di dati da un nodo mittente a un nodo destinatario. Lo stato di rete si occupa di: • Indirizzamento logico: lo strato di collegamento utilizza indirizzi fisici per far comunicare due nodi sulla stessa rete. Questo tipo di indirizzamento è locale alla singola rete. Per specificare tutti i nodi di una interrete non si utilizzano, quindi, indirizzi fisici, ma si utilizzano indirizzi logici. • Routing: fornisce il meccanismo di routing che permette di interconnettere più reti per creare un’interrete. 4. Strato 4: Trasporto Lo strato di trasporto si occupa della consegna di un messaggio da un processo mittente ad un processo destinatario. Lo strato di trasporto si occupa di: • Indirizzamento dei processi: Lo strato di rete utilizza un indirizzamento logico che permette di indirizzare ogni singolo nodo e visto che all’interno di ogni singolo nodo occorre poter distinguere i processi lo strato di trasporto deve includere un meccanismo per questo tipo di indirizzamento, quindi si utilizza un numero di porta. • Segmentazione e riassemblaggio: i messaggi spediti possono essere più grandi del grandezza consentita, quindi, lo strato di trasporto prevede un meccanismo di segmentazione dei messaggi e ad ogni pezzo viene aggiunto un numero di sequenza che permetterà di riassemblare il messaggio. • Controllo della connessione • Controllo del flusso: è eseguito fra i processi destinatari piuttosto che sul canale di comunicazione. • Controllo degli errori. Si occupa di far arrivare l’intero messaggio del processo mittente al processo destinatario senza errori. 5. Strato 5: Sessione Lo strato di sessione si occupa del controllo del dialogo e della sincronizzazione. Lo strato di sessione si occupa di: • Controllo del dialogo: permette a sistemi diversi di comunicare tra di loro. 7
•
Sincronizzazione: permette di inserire punti di controllo, ad esempio se si deve spedire un file di 2000 pagine ognuna di 1 KB è opportuno inserire un controllo ogni 100 pagine per essere sicuri che il trasferimento avvenga con successo. 6. Strato 6: Presentazione Lo strato di presentazione si occupa della sintassi e della semantica dell’informazione trasmessa. Lo strato di presentazione si occupa di: • Traduzione: effettua la traduzione di dati in forma di stringhe, numeri, o altro, in sequenze di bit da trasmettere. • Cifratura: protegge la comunicazione grazie all’uso di strumenti crittografici. Mittente Æ cifratura Destinatario Æ Decrittazione 7. Strato 7: Applicazioni Lo strato delle applicazioni si occupa di fornire i servizi di rete all’utente finale: Alcuni servizi tipici sono: • Terminale virtuale • Accesso remoto ai file • Posta elettronica • World wide web • Chat La suite di protocolli TCP/IP: La suite TCP/IP è stata sviluppata quando il modello OSI non era ancora diventato uno standard. Per questo motivo gli strati del modello TCP/IP non coincidono con quelli del modello OSI. Nel modello originale TCP/IP sono stati definiti cinque strati anziché sette: 1. fisico 2. di collegamento 3. di rete 4. di trasporto 5. delle applicazioni Una differenza sostanziale tra i due modelli è dovuta al fatto che la suite TCP/IP è costituita da vari protocolli strutturati gerarchicamente, ma non così rigidamente come previsto dal modello OSI. In TCP/IP i protocolli sono abbastanza indipendenti e possono essere usati a seconda delle necessità specifiche.
1. Strato 1: Fisico Per questo strato il modello TCP/IP non definisce nessun protocollo. Quindi si utilizzano quelli previsti dall’hardware della rete. 2. Strato 2: Collegamento Per questo strato il modello TCP/IP non definisce nessun protocollo. Quindi si utilizzano quelli definiti dalla rete fisica. 8
3. Strato 3: Rete In questo strato TCP/IP definisce il protocollo IP (Internet Protocol). Il protocollo IP fa uso di quattro protocolli di servizio: ARP, RARP, ICMP, IGMP. Protocollo IP Æ fornisce il servizio di consegna dei pacchetti da un nodo ad un altro dell’interrete. Il servizio offerto è senza connessione e inaffidabile, detto in gergo best-effort. Ciò significa che IP non fornisce né controllo di errore né meccanismi per il controllo della consegna. IP cerca di fare quanto è possibile per consegnare i pacchetti al destinatario senza però offrire nessuna garanzia. ARP (Address Resolution Protocol) Æ permette di tradurre gli indirizzi logici usati dal protocollo IP in indirizzi fisici. Æ permette di effettuare l’operazione RARP (Reverse Address Resolution Protocol) inverse: risalire all’indirizzo IP tramite un indirizzo fisico. ICMP (Internet Control Message Protocol) Æ viene usato per il controllo della rete. IGMP (Internet Group Message Protocol) Æ offre delle funzionalità per la trasmissione simultanea di un messaggio a un gruppo di destinatari. 4. Strato 4: Trasporto I protocolli di Trasporto nella suite TCP/IP sono TCP e UDP. IP permette di trasportare pacchetti da un computer mittente ad un computer destinatario, invece TCP e UDP permettono di trasportare i dati da un processo mittente ad un processo destinatario. Un nuovo protocollo, SCTP, è stato aggiunto alla suite TCP/IP per supportare alcune applicazioni recenti. TCP (Trasmission Control Protocol) Æ nel mittente TCP divide il flusso di byte da spedire in pezzi detti segmenti. Ogni segmento ha un numero di sequenza che serve per riordinare i byte all’arrivo alla destinazione. Nel destinatario TCP riceve i datagram contenenti i segmenti e li riordina prima di passarli all’applicazione. Trasmissione affidabile. UDP (User Datagram Protocol) Æ UDP è un protocollo che rispetto al protocollo IP aggiunge semplicemente l’uso delle porte per l’identificazione dei processi. Senza garanzia di consegna. SCTP (Strema Control Trasmission Protocol) Æ fornisce supporto per applicazioni recenti come la trasmissione di dati audio. 5. Strato 5: Applicazioni Questo strato è equivalente alla combinazione degli strati di sessione, presentazione e applicazioni del modello OSI. Indirizzamento: Quattro livelli di indirizzamento vengono usati nel modello TCP/IP: • Indirizzi fisici: permettono di individuare fisicamente il calcolatore. Tale indirizzo serve per specificare il destinatario dei frame nello strato di collegamento. La grandezza e il formato dell’indirizzo fisico dipende dal tipo di rete a cui il nodo è collegato. Un indirizzo fisico è formato da 6 byte (12 cifre esadecimali). • Indirizzi logici (IP): servono per identificare i nodi di un’interrete a livello globale. Gli indirizzi fisici non sono adeguati per questo scopo perché dipendono dal tipo di rete e potrebbero non essere unici a livello globale di una interrete. Gli indirizzi fisici cambiano da hop a hop, mentre gli indirizzi logici normalmente rimangono gli stessi. • Indirizzi di porta: permettono di individuare i processi. Gli indirizzi fisici cambiano da hop a hop, mentre gli indirizzi logici e i numeri di porta rimangono invariati. Un numero di porta è a 16 bit ed è espresso come un numero decimale. • Indirizzi specifici: Alcune applicazioni utilizzano degli indirizzi che possono essere facilmente ricordati dalle persone. Esempio di tali indirizzi specifici sono quelli
9
PARTE II STRATO FISICO CAPITOLO 3:
DATI E SEGNALI
Tutti i tipi di dati per poter essere trasmessi devono essere prima trasformati in una forma tale che il mezzo trasmissivo possa trasportare, cioè in segnali elettromagnetici. Dati analogici e digitali: I dati possono essere analogici o digitali. I dati analogici sono in forma continua e vengono rappresentati da valori continui. Ad esempio quando una persona parla viene creata un’onda che si propaga nell’aria, quest’onda può essere recepita da un microfono e convertita in un segnale analogico oppure campionata e convertita in un segnale digitale. I dati digitali sono in forma discreta e vengono rappresentati da valori discreti. Ad esempio i dati memorizzati in un computer sono rappresentati sottoforma di 0 e 1, essi possono essere convertiti in un segnale digitale o in un segnale analogico per essere trasmessi su un mezzo trasmissivo, Segnali analogici e digitali: I segnali possono essere analogici o digitali. I segnali analogici possono assumere un infinito numero di valori in un dato intervallo. I segnali digitali possono assumere solo un numero finito di valori.
Segnali periodici e aperiodici: Sia i segnali analogici che quelli digitali possono assumere due forme: periodici e aperiodici (non periodici). Un segnale periodico si ripete con regolarità nel tempo. Il tempo necessario affinché il segnale si ripeta viene detto periodo mentre la ripetizione del segnale all’interno di un periodo viene detta ciclo; Un segnale aperiodico cambia senza esibire una regolarità nel tempo. Per le reti di comunicazione, normalmente, vengono utilizzati segnali analogici periodici e segnali digitali non periodici. Segnali analogici periodici: Tali segnali possono essere classificati come semplici e composti: -. Semplici: rappresentati da un’onda sinusoidale, non possono essere decomposti in segnali più semplici. -. Composti: formato da varie onde sinusoidali. Cosa è un’onda sinusoidale? È la più importante forma di un segnale analogico periodico, può essere rappresentata da tre parametri: 1. ampiezza massima 2. frequenza 3. fase 10
1. L’ampiezza massima (o di picco) di un segnale è il valore assoluto del segnale nella sua intensità massima, come riportato in figura:
2. Il periodo è il tempo necessario, misurato in secondi, affinché un segnale completi un ciclo. La frequenza è il numero di periodi in 1 secondo. Quindi il periodo è l’inverso della frequenza e la frequenza è l’inverso del periodo. Indichiamo con f = frequenza T = periodo La figura successiva mostra due segnali e le loro frequenze, dove il periodo è espresso in secondi e la frequenza in Hz (hertz).
Facciamo un esempio: La corrente elettrica che usiamo nelle nostre case ha una frequenza di 50 Hz, quale è il periodo dell’onda sinusoidale?
T = 1/f = 1/50 = 0.02 s = 0.02*103 ms = 20 ms La frequenza è la velocità con cui un segnale cambia rispetto al tempo. Cambiamenti veloci implicano una frequenza alta, cambiamenti lenti implicano una frequenza bassa. Es.: un segnale di 80 Hz è più veloce di un segnale di 40 Hz. 11
3. La fase descrive la posizione dell’onda sinusoidale rispetto al tempo 0. Se pensiamo all’onda come qualcosa che può essere spostata in avanti o indietro lungo l’asse del tempo, la fase descrive la grandezza di tale spostamento. La fase viene misurata in gradi o in radianti. Uno spostamento di 360° corrisponde a uno spostamento di un intero periodo, uno di 180° corrisponde ad uno spostamento di ½ periodo, mentre uno spostamento di 90° corrisponde ad uno spostamento di ¼ di periodo.
La lunghezza d’onda è un’altra caratteristica di un segnale. Mette in relazione il periodo (o la frequenza) con la velocità di propagazione del mezze che trasporta il segnale. Quindi tale caratteristica dipende sia dalla frequenza che dal mezzo trasmissivo. Denotando con λ la
lunghezza d’onda e con c la velocità di propagazione abbiamo La lunghezza d’onda normalmente viene misurata in micron (micrometri). Segnali Composti: Un onda sinusoidale semplice non è adatta per le reti di comunicazione, occorre quindi un segnale composto. L’analisi di Fourier mostra che un qualsiasi segnale composto è la somma di onde sinusoidali semplici con diverse frequenze, ampiezze e fasi. Lo spettro di un segnale è l’insieme delle frequenze che esso contiene, la larghezza di banda del segnale composto è la differenza fra la frequenza più alta e quella più bassa nello spettro di un segnale.
In questa figura ci sono due segnali composti, uno periodico e l’altro aperiodico. Lo spettro del segnale periodico contiene tutte le frequenze con valori interi fra 1000 e 5000 (1001, 1002, 1003,..). La larghezza di banda del segnale aperiodico è la stessa del segnale periodico, ma le frequenze, del segnale aperiodico, contenute nello spettro sono infinite (tutti i numeri reali tra 1000 e 5000). 12
Segnali digitali: Assume valori discreti.
• Es.: -5V, +5V • Es.: -6V, -2V, +2V, +6V È facile rappresentare un bit con un segnale digitale.
Questa figura mostra due segnali digitali, uno con due livelli e l’altro con quattro livelli. Ogni livello del segnale con due Livelli può codificare 1 bit; ogni segnale del livello con quattro livelli può codificare 2 bit. In generale se il segnale ha L livelli si possono rappresentare log2 L bit. La velocità in bit è il numero di bit che si riesce a spedire in un secondo ed è espressa in bps (bit per secondo). La figura precedente mostra anche la velocità di bit dei due segnali. Esempio: Supponiamo di voler trasferire un documento alla velocità di 100 pagine al minuto e che ogni pagina sia composta in media da 24 linee con 80 caratteri in ogni linea, quale è la velocità in bit necessaria? Sappiamo che un carattere è normalmente rappresentato con 8 bit, pertanto la velocità in bit è: 100 * 24 * 80 * 8 = 1636000 bps = 1636 Mbps La lunghezza dei bit è l’analogo della lunghezza d’onda per i segnali digitali. È la distanza che 1 bit occupa sul mezzo trasmissivo. Lunghezza di 1 bit = velocità di propagazione * durata di 1 bit Segnali digitali e segnali analogici composti: Un segnale digitale può essere approssimato da un segnale analogico. Secondo l’analisi di Fourier un segnale digitale è un segnale analogico composto per il quale la larghezza di banda è infinita.
13
Deterioramento del segnale: Quando i segnali viaggiano attraverso il mezzo trasmissivo, quest’ultimo causa un deterioramento del segnale, cioè in pratica il segnale ricevuto non è esattamente uguale a quello spedito. Le principali cause di ciò sono: 1. Attenuazione L’attenuazione è un perdita di energia. In pratica quando il segnale viaggia attraverso il mezzo trasmissivo, esso perde un po’ dell’energia per superare la resistenza del mezzo trasmissivo. Per compensare questa perdita vengono utilizzati degli amplificatori che ripristinano l’energia iniziale del segnale.
L’attenuazione o l’amplificazione di un segnale viene misurata in decibel. Il decibel (dB) misura la potenze relativa dei due segnali o dello stesso segnale in due punto differenti Dove P1 e P2 rappresentano la potenza del segnale nei punti 1 e 2. Si noti che la misurazione in decibel è negativa se il segnale viene attenuato e positiva se il segnale viene amplificato. 2. Distorsione La distorsione è un cambiamento della forma del segnale.
Ogni segnale ha una propria velocità di propagazione sul mezzo trasmissivo e quindi un proprio ritardo per l’arrivo a destinazione. Pertanto queste differenti velocità possono far si che la forma del segnale composto alla destinazione può essere diversa da quella che il segnale ha quando viene spedita. 3. Rumore Il rumore è dovuto a interferenze esterne, quindi si traduce in un segnale addizionale, cioè non trasmesso dal mittente, che si somma a quello originale.
Esistono varie forme di rumore: • Rumore termico: movimento casuale degli elettroni sul mezzo trasmissivo che crea un segnale addizionale. • Rumore indotto: dovuto da motori o altri dispositivi elettronici. • Rumore dovuto da interferenze: quando due cavi sono troppo vicini. • Rumore dovuto a impulsi: è causato da fonti esterne come fulmini. 14
Il rapporto tra la potenza del segnale e la potenza del rumore (SNR Signal-to-Noise ratio) è dato da: Un valore alto del rapporto SNR indica un segnale poco alterato dal rumore, mentre un valore basso del rapporto SNR indica un segnale molto alterato dal rumore. Il rapporto SNR viene misurato in decibel e viene così definito: Esempio: La potenza di un segnale è di 10 mW e la potenza del rumore è di 1 μW; quali sono i valori SNR e SNRdB? SNR = 10*103 μW / 1 μW = 10000 μW / 1 μW = 10000 SNRdB = 10 log10 SNR = 10 log10 10000 = 40
Limiti di velocità per il trasferimento di dati: La velocità massima di trasferimento dati su un canale di comunicazione dipende da tre fattori: a. La larghezza di banda disponibile b. Il numero di livelli del segnale c. La qualità del canale (la quantità di rumore) Sono stati ottenuti due risultati teorici per il calcolo della velocità massima: 1. Canali senza rumore: teorema di Nyquist Dove L è il numero di livelli del segnale. Aumentando il numero di livelli (L) si aumenta la velocità in bps, questo però non significa che si può aumentare L a piacere in quanto si riduce l’affidabilità della trasmissione. In pratica più è grande L più è facile fare errori. Esempio: Dobbiamo spedire dati a una velocità di 265 kbps su un canale senza rumore che ha una larghezza di banda di 20 kHz. Quanti livelli del segnale dobbiamo utilizzare? 265 kbps = 265000 bps 20 kHz = 20000 Hz 265000 bps = 2 * 20000 Hz * log2 L log2 L = 265000 bps / 40000 Hz = 6.625 L = 2 6.625 = 98.7 livelli Poiché il risultato non è una potenza di 2 dobbiamo o incrementare il numero di livelli da utilizzare o ridurre la velocità. Utilizzando 128 livelli, la velocità massima è di 280 kbps e quindi si può spedire a 265 kbps, utilizzando invece 64 livelli la velocità massima è 240 kbps. 2. Canali con rumore: teorema di Shannon Tale teorema fornisce la velocità massima, espressa in bit per secondo, di un canale di comunicazione in funzione del rapporto segnale-rumore del canale. Quindi non c’è nessun riferimento al numero di livelli. Esempio: Consideriamo un canale di comunicazione per trasportare un segnale vocale. Normalmente il segnale vocale occupa una larghezza di banda di 3000 Hz (da 300 a 3300 Hz). Il rapporto segnale-rumore è tipicamente di 3162. Quale è la capacità? Capacità = 3000 Hz * log2 (1+ SNR) = 3000 Hz * log2 (1 + 3162) = 3000 Hz * log2 3163 = = 3000 Hz * 11.62 = 34860 bps = 34,86 kbps Questo significa che su una linea telefonica di 3 KHz possiamo spedire a una velocità massima di 34,86 kbps. Per poter spedire ad una velocità maggiore dobbiamo o aumentare la larghezza di banda o migliorare il rapporto segnale-rumore. 15
Uso di entrambi i teoremi: per poter trovare la velocità massima e il numero di livelli del segnale occorre utilizzare entrambi i teoremi. Esempio: Canale di comunicazione con larghezza di banda di 1 MHz e con un rapporto segnale-rumore pari a 63. A quale velocità possiamo spedire i dati e quanti livelli del segnale dobbiamo utilizzare? Teorema di Shannon:
capacità = 1000000 * log2 (1 + 63) = 1000000 * log2 64 = = 1000000 * 6 = 6000000 bps = 6 Mbps
Quindi la velocità massima (teorica) alla quale possiamo spedire i dati è di 6 Mbps. Al fine di avere un canale più affidabile scegliamo di trasmettere ad una velocità inferiore, 4 Mbps. Teorema di Nyquist:
4 Mbps = 2 * 1 MHz * log2 L => log2 L = 4/(2*1) => L = 22 = 4
Il teorema di Shannon fornisce la capacità massima di un canale, il teorema di Nyquist permette di determinare il numero di livelli del segnale da utilizzare.
Prestazioni: Un aspetto importante per una rete di comunicazione dati è quello delle prestazioni della rete. Le prestazioni dipendono da vari fattori: 1. Larghezza di banda a) larghezza di banda in hertz rappresenta l’intervallo delle frequenze di un segnale composto. Es.: linea telefonica 4 kHz b) larghezza di banda in bit per secondo specifica la velocità alla quale possiamo spedire i bit su un canale o anche su una rete. Es.: Ethernet 100 Mbps 2. Throughput È una misura di quanto velocemente possiamo spedire i dati attraverso una rete. Potrebbe sembrare uguale alla larghezza di banda ma non lo è in quanto la larghezza di banda è una misura della capacità massima del collegamento, mentre il throughput è una misura effettiva di quanto velocemente possiamo spedire i dati Esempio: una rete con larghezza di banda di 10 Mbps riesce a trasferire in media solo 12000 frame al minuto. Ogni frame contiene 10000 bit. Quale è il throughput di questa rete? Throughput = (12000 * 10000) / 60 s = 2000000 bps = 2 Mbps 3. Latenza (ritardo) Misura quanto tempo è necessario affinché un intero messaggio arrivi a destinazione. Il tempo viene misurato dalla spedizione del primo bit da parte del mittente alla ricezione dell’ultimo bit da parte del destinatario. La latenza è costituita da quattro componenti: Latenza = tempo di propagazione + tempo di trasmissione + tempo di attesa + tempo di inoltro a) tempo di propagazione misura il tempo necessario al segnale per viaggiare dal mittente al destinatario. Tp = distanza di trasferimento / velocità di propagazione Esempio: quale è il tempo di propagazione se la distanza fra il punto di partenza e il punto di arrivo è di 12000 Km? Si assuma che la velocità di propagazione del segnale sia di 2.4 * 108 m/s. Tp = 12000000 m / 2.4 * 108 m/s = 12000000 / 240000000 = 0,05 s = 50 ms 16
b) tempo di trasmissione misura il tempo necessario a inserire i bit del messaggio sul canale Tt = dimensione messaggio (in bit) / larghezza di banda (in bit) Esempio: quali sono i tempi di propagazione e i tempi di trasmissione per un messaggio di 2.5 KB se la larghezza di banda della rete è di 1 Gbps? Si assuma che la distanza tra mittente e destinatario è di 12000 Km e che la velocità di propagazione del segnale è 2.4 * 108 m/s. Tp = 12000000 m / 2.4 * 108 m/s = 12000000 / 240000000 = 0,05 s = 50 ms 2.5 KB = 2500 byte 1 Gbps = 1000000000 bps Tt =(2500 * 8)bit/1000000000 bps = 20000/1000000000=0,00002 s =0,02 ms c) tempo di attesa non è un fattore fisso che si può misurare a priori, esso cambia in funzione del carico della rete. Calcola il tempo di attesa nelle code dei nodi intermedi. d) tempo di inoltro calcola il tempo necessario al nodo intermedio per smistare il messaggio. 4. Prodotto banda-ritardo Il prodotto larghezza di banda per ritardo definisce il numero di bit che servono per riempire il canale. Questa misura è importante se occorre spedire i dati in pacchetti e aspettare un riscontro dopo ogni pacchetto prima di poter proseguire con il successivo.
5. Jitter Misura la variabilità del ritardo, cioè in pratica consideriamo che un mittente debba spedire a un destinatario dei dati che rappresentano un segnale video in tempo reale. Affinché il video sia correttamente riprodotto dalla destinazione è necessario che i pacchetti vengano consegnati tutti con lo stesso ritardo, tuttavia può capitare che i pacchetti abbiamo un ritardo diverso dagli altri. Questo fenomeno viene detto jitter.
17
CAPITOLO 4:
TRASMISSIONE DATI
Una rete di comunicazione è progettata per spedire dati da un punto ad un altro. I dati devono essere convertiti in segnali digitali o analogici per poter essere trasmessi. CONVERSIONE DIGITALE-DIGITALE: I dati possono essere sia digitali che analogici ed anche i segnali che li rappresentano possono essere sia digitali che analogici. La rappresentazione coinvolge tre tecniche: codifica di linea, codifica a blocchi, scrambling. La codifica di linea è sempre necessaria; la codifica a blocchi e lo scrambling possono anche non essere necessari. Codifica di linea:La codifica di linea è il processo di conversione dei dati digitali in segnali digitali. La codifica di linea converte una sequenza di bit in segnali digitali. Per il mittente questa conversione è necessaria per poter spedire i dati. Il destinatario dei dati dovrà ricreare i dati digitali dal segnale digitale ricevuto.
L’unità di base dei dati, che chiameremo “elemento dei dati”, è il bit, cioè il più piccolo pezzo di informazione che possiamo rappresentare. Analogamente l’unità di base dei segnali, che chiameremo “elemento del segnale”, è il più piccolo elemento del segnale digitale che possiamo utilizzare. Un fattore importante è il rapporto fra il numero di elementi dei dati rappresentati da ogni elemento del segnale.
La velocità dei dati è il numero di elementi dei dati (bit) che possono essere spediti in 1 s; l’unità di misura è chiamata bit per secondo (bps). La velocità del segnale è il numero di elementi del segnale che possono essere spediti in 1 s; l’unità di misura è chiamata baud. È chiaramente desiderabile avere un’alta velocità di trasmissione dei dati mantenendo una velocità del segnale bassa. In altre parole è desiderabile riuscire a spedire più dati in meno tempo. La velocità dei dati e la velocità del segnale sono in stretta relazione tra di loro, e questa relazione dipende dal valore del rapporto r. in realtà dipende anche dai dati; se i dati presentano molte sequenze di bit uguali consecutivi (tutti 1 o tutti 0), la velocità del segnale potrebbe essere differente dal caso in cui i dati presentano i valori 0 e 1 che si alternano. Possiamo considerare tre casi: pessimo, migliore, medio. Nel caso pessimo abbiamo bisogno di una velocità del segnale più grande (il massimo fra i casi possibili); nel caso migliore abbiamo bisogno di una velocità del segnale più piccola (il minimo tra i casi possibili). La formula che lega la velocità del segnale è: S = c x N x 1/r baud Dove N è la velocità dei dati (in bps), c è un fattore che dipende dal caso che stiamo considerando (medio, pessimo, migliore); S è la velocità del segnale. 18
Esempio: Un segnale trasporta dati rappresentando ogni elemento dei dati con un elemento del segnale (r = 1). Se la velocità in bi è di 100 kbps, quale è il valore medio della velocità del segnale quando c = ½? Soluzione: S = c x N x 1/r = ½ * 100000 * 1/1 = 50000 = 50 kbaud. Possiamo dire che la velocità del segnale, e non la velocità dei dati, determina la larghezza di banda necessaria per un segnale digitale. In questo caso, quindi, la larghezza di banda (intesa come intervallo delle frequenza utilizzate) è proporzionale alla velocità del segnale. L’ampiezza di banda minima può essere espressa come: Bmin = c x N x 1/r La precedente equazione può essere utilizzata per trovare la massima velocità in bit in funzione della larghezza di banda del canale: Nmax = 1/c x B x r Linea di base. Nella decodifica di un segnale digitale, il destinatario calcola in tempo reale la media della potenza del segnale che riceve. Questa media viene chiamata linea di base. Il segnale ricevuto viene confrontato con la linea di base per determinare il valore dell’elemento del segnale che si deve decodificare. Una lunga sequenza di valori uguali può causare un graduale spostamento della linea di base e rendere più difficoltosa la decodifica. Componenti DC. Quando il voltaggio di un segnale digitale è costante per un certo periodo di tempo, vengono utilizzate frequenze molto basse. Sincronizzazione automatica. Per interpretare correttamente il segnale ricevuto, la lettura degli elementi del segnale da parte del destinatario deve corrispondere agli intervalli di tempo utilizzati dal mittente per generare il segnale. Se il clock del destinatario è più veloce o più lento di quello del mittente, gli intervalli di tempo utilizzati dal mittente per generare il segnale non corrispondono a quelli utilizzati dal destinatario per leggere il segnale e il destinatario potrebbe interpretare in modo sbagliato il segnale ricevuto.
Esempio in cui il destinatario ha un clock più veloce di quello del mittente. Un segnale digitale auto-sinconizzante contiene delle informazioni relative al tempo spedite insieme ai dati; tali informazioni permettono al destinatario di sincronizzare automaticamente il proprio clock con quello del mittente. Schemi di codifica di linea Gli schemi di codifica di linea sono degli schemi di codifica che permettono la rappresentazione degli elementi dei dati (bit) con elementi del segnale digitale. Possiamo dividerli in 5 categorie generali. 1. Schemi unipolari: In uno schema unipolare, i valori di tutti i livelli del segnale che vengono utilizzati hanno lo stesso segno, cioè sono tutti positivi o tutti negativi. NRZ. Tradizionalmente, uno schema unipolare viene chiamato schema di codifica NRZ (Non-Return-to-Zero) e rappresenta il valore 1 con un voltaggio positivo ed il valore 0 con il voltaggio zero. Viene chiamato NRZ perché il valore del segnale non ritorna a zero durante la rappresentazione di ogni bit.
19
2. Schemi polari: Negli schemi polari, i livelli del segnale possono assumere sia valori positivi che valori negativi. Si può usare un voltaggio positivo per rappresentare 0 e un voltaggio negativo per rappresentare 1. NRZ. Nella codifica NRZ polare, vengono utilizzati due livelli di voltaggio, uno positivo e uno negativo. Esistono due versioni di questo schema di codifica: NRZ-L, NRZ-I. NRZ-L (NRZLevel), il livello del voltaggio determina il valore dei bit; un voltaggio positivo rappresenta il valore 0 ed un voltaggio negativo rappresenta il valore 1. Nella seconda versione, NRZ-I (NRZ-Invert), il valore dei bit è determinato dall’assenza o dalla presenza di un cambio del livello del voltaggio; un’assenza di cambiamento rappresenta il valore 0, un cambiamento di voltaggio rappresenta il valore 1.
Se c’è una lunga sequenza di 0 (o di 1) nella codifica NRZ-L, il valore medio della potenza del segnale si avvicinerà sempre più al valore del voltaggio positivo (negativo) che rappresenta il valore 0 (il valore 1); ad un certo punto il destinatario potrebbe avere difficoltà nel distinguere una tensione positiva o negativa da un’assenza di tensione. Lo schema NRZ-I presenta questo problema solo per lunghe sequenze di 0. Un altro problema generato da lunghe sequenze di bit uguali è quello della sincronizzazione. Le codifiche NRZ-L e NRZ-I hanno una velocità del segnale di N/2 baud RZ. Il problema principale degli schemi NRZ è quello della sincronizzazione dei clock. La codifica RZ (Return-to-Zero) risolve questo problema utilizzando tre livelli del segnale: uno positivo, uno negativo e 0. Nella codifica RZ il segnale cambia durante la rappresentazione di ogni singolo bit: il valore 0 è rappresentato da una tensione negativa ed il valore 1 da una tensione positiva, ma il segnale ritorna sempre al valore zero al centro di ogni bit e rimane su tale valore fino all’inizio del prossimo bit.
Il principale svantaggio di questa codifica è che richiede due cambiamenti del segnale per codificare un solo bit e quindi ha bisogno di una larghezza di banda maggiore. Codifiche bifase. L’idea della transizione al centro di ogni bit (usata in RZ) combinata con la codifica NRZ-L produce la codifica Manchester. In questa codifica ogni singolo bit viene rappresentato da due elementi del segnale; il voltaggio usato in questi due elementi del segnale è sempre diverso: per rappresentare il valore 0 il primo elemento del segnale ha un voltaggio positivo mentre il secondo ha un voltaggio negativo (cioè c’è un cambiamento di voltaggio da positivo a negativo), mentre per rappresentare il valore 1 il primo elemento del segnale ha un voltaggio negativo ed il secondo elemento ha un voltaggio positivo (cioè c’è un cambiamento di voltaggio da negativo a positivo). L’idea della transizione al centro di ogni bit combinata con la codifica NRZ-I produce la codifica “Manchester differenziale”.
20
Nelle codifiche bifase la transizione al centro di ogni bit viene utilizzata per la sincronizzazione dei clock. La codifica Manchester risolve alcuni dei problemi della codifica NRZ-L; la codifica Manchester differenziale risolve alcuni dei problemi della codifica NRZ-I. Innanzitutto, non c’è il problema del cambiamento della linea di base. Non c’è il problema delle componenti DC in quanto ogni bit è rappresentato sia da un voltaggio positivo che da uno negativo. L’unico lato negativo è relativo alla velocità. La velocità del segnale richiesto dalle codifiche bifase è due volte quella richiesta dalle codifiche NRZ. 3. Codifiche bipolari: Nelle codifiche bipolari vengono utilizzati tre livelli del segnale: uno positivo, uno negativo e zero. Il valore di un bit viene rappresentato o da un voltaggio pari a zero o da un voltaggio diverso da zero alternando il valore positivo a quello negativo . La codifica AMI (Alternate Mark Inversion) rappresenta il valore 0 con il voltaggio nullo ed il valore 1 con voltaggi positivi e negativi che si alternano. La codifica Pseudoternaria utilizza la rappresentazione opposta: il valore 1 corrisponde al voltaggio nullo ed il valore 0 con voltaggi positivi e negativi che si alternano. La codifica AMI viene utilizzata per le comunicazioni a grande distanza. Si noti che essa presenta un problema di sincronizzazione per lunghe sequenze di 0.
4. Codifiche multilivello: La necessità di aumentare la velocità dei dati ha portato alla creazione di molte codifiche. L’obiettivo è quello di incrementare il numero di bit spediti (in media) per ogni elemento di segnale codificando una sequenza di m bit con una sequenza di n elementi del segnale. Una sequenza di m bit può assumere 2m possibili valori. Analogamente una sequenza di n elementi del segnale può assumere Ln possibili valori, dove L è il numero di livelli del segnale che utilizziamo. Le codifiche multilivello sono solitamente indicate con sigle tipo mBnL, dove B indica che i dati sono binari. La L viene sostituita con B (segnale binario) nel caso L=2, con T nel caso L=3 (segnale ternario) e Q (segnale quaternario) nel caso L=4. 2B1Q. questa tecnica codifica sequenze di due bit con un elemento di segnale con 4 livelli. Con questa codifica possiamo spedire al doppio della velocità rispetto alla codifica NRZ-L.
5. Trasmissione multilinea. 21
Codifica a blocchi: Per poter ottenere la sincronizzazione dei clock e fornire delle capacità di rilevamento degli errori, occorre utilizzare ridondanza nella rappresentazione dei dati che vengono spediti. La codifica a blocchi permette di ottenere questa ridondanza e migliorare le prestazioni della codifica di linea. In generale, la codifica a blocchi trasforma una sequenza di m bit, chiamata parola sorgente, in una sequenza di n bit, con n>m, spesso chiamata parola codice; tale trasformazione viene indicata con mB/nB, utilizzando gli opportuni valori di m e n. In generale, la codifica a blocchi trasforma una sequenza di m bit, chiamata parola sorgente, in una sequenza di n bit, con n>m, chiamata parola codice; tale trasformazione viene indicata con mB/nB, utilizzando gli opportuni valori di m e n. La codifica a blocchi coinvolge tre fasi: divisione , sostituzione e riassemblaggio. 1. Nella prima fase la sequenza di bit originale viene divisa in gruppi di m bit. 2. In questa fase viene sostituita ogni parola sorgenti con una parola codice. 3. In fine le parole codice vengono riassemblate.
4B/5B La codifica a blocchi 4B/5B è stata progettata per essere usata con lo schema di codifica di linea NRZ-I. La sequenza di bit prodotta dalla codifica a blocchi 4B/5B non ha mai più di tre 0 consecutivi, e quindi non possono esserci lunghe sequenze di 0. Nella codifica a blocchi 4B/5B. Il destinatario dovrà prima trasformare il segnale digitale ricevuto con la codifica NRZ-I in un flusso di bit e poi decodificare di nuovo questo flusso di bit utilizzando la decodifica 4B/5B per ottenere la sequenza di bit originale.
Le parole codice utilizzate per sostituire le parole sorgenti non hanno mai più di un bit iniziale pari a 0 e mai più di due bit finali pari a 0.
La codifica HDB3 è usata al di fuori del Nord America. Questa codifica è simile alla codifica B8ZS, ma anziché operare su sequenze di 8 bit opera su sequenze di 4 bit. CONVERSIONE ANALOGICO DIGITALE: Ci sono due tecniche di modulazione che permettono di convertire un segnale analogico in dati digitali: la modulazione ad impulsi codificati e la modulazione delta. Modulazione a impulsi codificati: La tecnica più comune per convertire un segnale analogico in dati digitali è la tecnica detta modulazione a impulsi codificati o PCM (Pulse Code Modulation). Un codificatore PCM utilizza tre fasi per trasformare il segnale analogico in dati digitali: 1. Campionamento: il segnale analogico viene campionato 2. Quantizzazione: il segnale viene rappresentato attraverso un insieme finito di valori 3. Codifica: il risultato della quantizzazione viene codificato con una sequenza di bit 22
Campionamento: La prima fase della codifica PCM è il campionamento il segnale analogico viene misurato a intervalli regolari di Ts secondi, il che significa a una frequenza di campionamento di fs=1/Ts. Esistono tre metodi di campionamento: ideale, naturale e a gradini. Nel campionamento ideale, gli impulsi del segnale analogico vengono misurati esattamente negli istanti di tempo a distanza Ts. Nel campionamento naturale la misura del segnale avviene in un breve intervallo di tempo che include l’istante di campionamento. La tecnica più usata è detta a gradini, simile a l campionamento naturale in quanto usa un breve intervallo di tempo che include l’istante di campionamento, ma il risultato della misura è un valore costante il processo di campionamento viene chiamato PAM (Pulse Amplitude Modulation).
Velocità di campionamento. Una considerazione importante è relativa alla frequenza con cui avviene il campionamento. Quali sono le restrizioni sul valore di Ts? Si può dare una risposta a questa domanda utilizzando il teorema di Nyquist, che asserisce che per riprodurre il segnale analogico originale,1 condizione necessaria è che la velocità di campionamento sia almeno il doppio della più alta frequenza presente nel segnale originale.
Quantizzazione Il risultato della fase di campionamento è la misurazione di una serie di impulsi con valori che spaziano dall’ampiezza minima all’ampiezza massima del segnale. I valori che ne risultano sono numeri reali. Tali valori non possono essere utilizzati nel processo di codifica, ma occorre approssimarli. La quantizzazione effettua quest’approssimazione nel seguente modo: Siano Vmin e Vmax l’ampiezza minima e l’ampiezza massima del segnale campionato. 1. L’intervallo [Vmin e Vmax]viene diviso in L intervalli di ampiezza ∆ = (Vmax - Vmin]/L. 2. Ogni intervallo viene rappresentato da un cosiddetto valore di quantizzazione compreso fra 0 e L-1. 3. La misura del campionamento viene approssimata con il valore di quantizzazione del corrispondente intervallo. Ad esempio, assumiamo di avere un segnale di campionato con ampiezza min di -20 V e max +20 V. Scegliamo L=8. Questo significa che ∆ =5 figura 4.25. l’ampiezza del segnale per il primo impulso campionato è -6.1 V; questo campione ricade nell’intervallo rappresentato dal valore di quantizzazione 2 ed è per tanto rappresentato da tale valore. Nella figura vengono riportati anche i valori normalizzati (valore reale/ ∆) per ogni campione, i valori normalizzati della quantizzazione (cioè il valore che rappresenta ogni intervallo) e la differenza fra questi due valori che viene chiamata errore normalizzato. 23
La quantizzazione è un processo di approssimazione: un solo valore, solitamente quello del centro dell’intervallo di approssimazione, deve essere usato per rappresentare tutti valori dell’intervallo. Se il valore da approssimare corrisponde proprio al centro dell’intervallo allora l’errore di quantizzazione è nullo. Gli errori di quantizzazione fanno decrescere il rapporto segnale-rumore, e ciò, in accordo al teorema di Shannon, riduce la capacità del canale. MODALITA’ DI TRASMISSIONE: La connessione fisica fra un dispositivo o un altro può utilizzare uno o più fili. Utilizzando un solo filo possiamo spedire un solo bit per volta; utilizzando in parallelo più fili possiamo spedire più bit per volta. Il primo tipo di trasmissione viene detta trasmissione seriale, il secondo tipo di trasmissione viene detta trasmissione parallela. La trasmissione seriale può essere ulteriormente suddivisa in asincrona, sincrona e isocrona.
Trasmissione parallela: Nella trasmissione parallela il flusso di bit da spedire viene organizzato in gruppi di n bit, per un certo valore di n, e i bit in ogni gruppo vengono spediti contemporaneamente. Tipicamente i fili utilizzati vengono raggruppati in un solo cavo che inizia e termina con dei connettori. Il vantaggio della trasmissione parallela è la velocità. Lo svantaggio della trasmissione parallela è il costo. Trasmissione seriale: Nella trasmissione seriale i bit vengono spediti in sequenza e pertanto occorre un solo canale di comunicazione e non n per trasmettere i dati da un dispositivo all’altro. Il vantaggio della trasmissione seriale è dovuto al fatto che occorre un solo canale di comunicazione, il che riduce il costo di circa un fattore pari a n. Gli svantaggi sono dovuti alla velocità e anche al fatto che i dati sono tipicamente gestiti in gruppi di bit all’interno dei dispositivi e pertanto si rende 24
necessario l’utilizzo di una conversione parallelo-seriale per il mittente e seriale-parallelo per il destinatario. • Trasmissione seriale asincrona. La trasmissione seriale asincrona è una trasmissione seriale in cui la sincronizzazione del segnale non è importante. I bit vengono raggruppati in byte e il mittente spedisce ogni gruppo di bit quando possibile e indipendentemente dagli altri gruppi, quindi senza preoccuparsi di problemi di sincronizzazione. L’assenza di sincronizzazione fa si che il destinatario non possa sapere quando il prossimo gruppo bi bit arriverà. Per segnalare l’arrivo di un nuovo gruppo di byte viene usato il bit di start il cui valore tipicamente è 0; questo bit verrà posto all’inizio della sequenza. Per segnalare la fine della spedizione verrà utilizzato un altro bit con valore 1 chiamato bit di stop; questo bit verrà posto alla fine della sequenza. I bit di start e di stop permettono al destinatario di individuare l’inizio e la fine di ogni byte e quindi di sincronizzarsi sul flusso. La trasmissione seriale asincrona è “asincrona” a livello di byte; a livello di bit il destinatario deve essere sincronizzato. • Trasmissione seriale sincrona. Nella trasmissione seriale sincrona, il flusso di bit viene raggruppato in unità chiamate frame, che possono contenere molti byte. Nella trasmissione seriale sincrona, i bit vengono spediti uno dopo l’altro senza bit di start e di stop. Il destinatario dovrà separare i bit della sequenza per ottenere i byte. Il vantaggio della trasmissione sincrona è la velocità. L’assenza di bit addizionali e di periodi di inutilizzo del canale, permette di trasferire più velocemente il bit di dati sul canale di comunicazione rispetto alla trasmissione asincrona. Per questo motivo la trasmissione sincrona viene utilizzata per applicazioni ad alta velocità, come ad esempio la trasmissione dei dati da un computer a un altro il problema della sincronizzazione viene risolto nello strato di collegamento. • Trasmissione seriale isocrona. La trasmissione seriale isocrona garantisce l’arrivo dei dati a una velocità costante.
CONVERSIONE DIGITALE-ANALOGICO: La conversione digitale-analogico trasforma i dati digitali in un segnale analogico. Un’onda sinusoidale è definita da tre caratteristiche: ampiezza, frequenza e fase. Variando una di queste caratteristiche, creiamo una versione differente dell’onda sinusoidale. La variazione di una delle caratteristiche dell’onda sinusoidale può essere utilizzata per rappresentare i dati digitali. Una qualsiasi delle tre caratteristiche può essere utilizzata per questo scopo. Ne risultano tre diversi meccanismi per la modulazione di dati digitali in un segnale analogico: la modulazione ASK (Amplitude Shift Keying) che varia l’ampiezza, la modulazione FSK (Frequency Shift Keying) che varia la frequenza e la modulazione PSK (Pulse Shift Keying) che varia la fase. •
Modulazione ASK: Nella modulazione ASK, per creare gli elementi del segnale, viene modificata l’ampiezza del segnale. Sia la frequenza che la fase rimangono costanti durante i cambiamenti dell’ampiezza. Modulazione ASK binaria (BASK). Sebbene un elemento del segnale possa assumere varie forme, ognuna con ampiezza diversa, la modulazione ASK viene normalmente implementata usando solo due tipi di elementi del segnale (cioè L=2). Pertanto questa tecnica viene chiamata BASK. Un elemento del segnale può assumere due forme: in una la sua ampiezza è nulla, nell’altra la sua ampiezza è uguale all’ampiezza massima del segnale portante.
25
•
Modulazione FSK: Nella modulazione ASK, per creare gli elementi del segnale, viene modificata la frequenza del segnale. Sia l’ampiezza che la fase rimangono costanti durante i cambiamenti della frequenza. Modulazione FSK binaria (BSFK): La modulazione FSK binaria utilizza due frequenze portanti. La prima frequenza portante viene utilizzata per il valore 0 e la seconda per il valore 1. Normalmente le frequenze portanti sono molto alte e la loro differenza è molto piccola (sono molto vicine).
•
Modulazione PSK: Nella modulazione PSK viene modificata la fase del segnale. Sia l’ampiezza e la frequenza rimangono invariate durante i cambiamenti della fase. La modulazione PSK, è più utilizzata delle modulazioni ASK e FSK. Modulazione PSK binaria (BPSK): La forma più semplice di modulazione PSK è quella binaria, in cui si hanno solo due tipi di segnali, uno con una fase di 0° e l’altro con una fase di 180°. La modulazione PSK binaria è semplice come la modulazione ASK binaria, ma ha un grande vantaggio: è più resistente al rumore. Il rumore può cambiare più facilmente l’ampiezza e meno facilmente la fase. La modulazione PSK ha un vantaggio anche rispetto a quella FSK in quanto non necessita di due segnali portanti.
CONVERSIONE ANALOGICO-ANALOGICO: La conversione analogico-analogico trasforma un segnale che rappresenta i dati analogici in un altro segnale analogico che viene trasmesso. Ci si potrebbe chiedere perché modulare un segnale analogico in un altro segnale analogico. Una tale modulazione si rende necessaria se il canale a disposizione per la trasmissione è passa-banda. Un esempio ci è dato dalle trasmissioni radio. Il segnale analogico prodotto da ogni stazione è un segnale passa-basso e tutte le stazioni producono tale segnale nella stessa banda di frequenze. Per poter trasmettere il segnale di più stazioni contemporaneamente, i segnali passa-basso devono essere spostati su frequenze diverse. La conversione analogico-analogico può essere fatta in tre modi: modulazione di ampiezza (AM, Amplitude Modulation), modulazione di frequenza (FM, Frequency Modulation) e modulazione di fase (PM, Phase Modulation).
26
CAPITOLO 5:
MULTIPLEXING E DIFFUSIONE
Noi sappiamo che i canali che possono essere utilizzati hanno una larghezza di banda limitata, quindi la principale sfida della comunicazione elettronica è cercare di utilizzare in modo oculato tale canale. L’obiettivo del multiplexing, quindi, è l’efficienza, mentre gli obiettivi della diffusione sono evitare le interferenze e le intercettazioni. Multiplexing: Quando la larghezza di banda di un canale è superiore alla larghezza di banda effettivamente necessaria, il canale può essere condiviso da più trasmissioni simultanee in modo da ottimizzare il canale. Per fare ciò però abbiamo bisogno del multiplexing, che permette la trasmissione simultanea di più segnali su un singolo canale di comunicazione. In un sistema che usa multiplexing ci sono n linee di input (trasmissioni) e un collegamento fisico (canale).
Le n linee di input condividono il collegamento fisico. Le linee di input portano i dati da trasmettere per ognuno dei canali logici in un dispositivo chiamato MUX (multiplexer) che crea un unico segnale che verrà spedito sul canale fisico. Quando arriva a destinazione tale segnale passa attraverso un altro dispositivo, chiamato DEMUX (demultiplexer), che riconverte il segnale ricevuto nei segnali originali per ognuno dei canali logici. Esistono tre tecniche generali per implementare il multiplexing: 1. Multiplexing a divisione di frequenza (FDM): Permette di spedire vari canali logici su un singolo collegamento fisico con sufficiente ampiezza di banda. I segnali vengono modulati utilizzando frequenze portanti diverse, vengono poi combinati in un singolo segnale che può essere trasportato sul canale fisico. 2. Multiplexing a divisione di lunghezza d’onda (WDM): Viene usato principalmente nelle connessioni a fibre ottiche dove le operazioni di composizione e divisione dei segnali luminosi sono estremamente semplici. È molto simile al multiplexing FDM con la differenza che la modulazione viene effettuata sulla lunghezza d’onda del segnale. L’inconveniente è che le frequenze sono molto alte. 3. Multiplexing sincrono a divisione di tempo (TDM): E’ una tecnica per segnali digitali. Viene progettato per condividere un canale digitale. Il multiplexing TDM, anziché condividere una porzione della larghezza di banda, come accade nel multiplexing FDM, condivide il tempo di utilizzo del collegamento. Ogni canale logico occupa un intervallo di tempo. Il collegamento fisico è uguale a quello del multiplexing FDM ma, anziché essere suddiviso in frequenze (fasce orizzontali), viene diviso in intervalli temporali (fasce verticali).
27
Come si vede in figura, i dati dei canali logici di input, 1,2,3,4, occupano il canale in modo sequenziale. Il multiplexing TDM può essere sincrono o statistico. Multiplexing sincrono a divisione di tempo: Nel multiplexing TDM sincrono gli intervalli di tempo vengono allocati in modo fisso alle sorgenti indipendentemente dalla presenza di dati da spedire, mentre nel multiplexing TDM statistico, gli intervalli di tempo vengono allocati a un canale logico solo quando ci sono dati da spedire. Nel multiplexing sincrono l’utilizzo del collegamento fisico viene suddiviso in intervalli di tempo e il canale viene sfruttato a turno da ogni singolo canale logico. La grandezza dell’intervallo di tempo è un parametro dello schema del multiplexing che determina il numero di bit che si possono spedire in un intervallo. Per spedire i dati alla velocità richiesta dei singoli canali logici il collegamento deve essere n volte più veloce (n volte significa il numero di canali logici più veloci, es.: 3 canali logici da 5Kbps ciascuno, devono disporre di un canale fisico di 15 Kbps). In altre parole, il numero di bit che un canale logico spedisce nell’intervallo di tempo T stabilito dallo schema, viene spedito sul collegamento in un intervallo di tempo pari a T/n in modo tale che in un intervallo di tempo T si riesca a spedire dati per ogni canale logico. Il gruppo di bit che si spedisce in un intervallo di tempo viene chiamato frame. Se ci sono n canali logici ogni frame sarà costituito da n parti, ognuna delle quali arriva da un canale logico diverso.
Esempio: Assumiamo che per il multiplexing della figura precedente la velocità di spedizione di ognuno dei canali logici sia di 1 Kbps. In ogni turno viene spedito 1 bit di ogni canale. Quale è la durata di un turno (intervallo di tempo)? E di ogni frame? E della parte di un frame che trasporta i dati del canale logico C? 1. La velocità di spedizione dei singoli canali logici è di 1000 bit per secondo. In ogni turno viene spedito 1 bit, quindi per spedire 1000 bit occorrono 1000 turni, il che significa che la durata di ogni intervallo di input è 1/1000 s, cioè 1 ms. 2. Nella figura precedente ci sono n=3 canali logici, ogni frame è costituito da n=3 bit quindi ci saranno 1000 frame costituiti 3 bit, uno per un totale di 3000 bit. Visto che la velocità del canale fisico è n=3 volte quella dei canali logici, tale velocità è 3 Kbps. Quindi la durata di ogni frame è 3000 / 3000 = 1 ms 3. Poiché un frame trasporti i dati di 3 canali logici e la durata di un frame è 1 ms Allora la durata ci ciascuna parte di frame è 1/3 ms. Bisogna fare un’osservazione però, finora abbiamo assunto che tutti i canali logici che vengono combinati dal multiplexing trasmettono dati alla stessa velocità. Ovviamente nella realtà può capitare che i dati da trasportare arrivino a velocità diverse per ogni canale. Esistono due tecniche per risolvere questo problema:
28
-. multiplexing multilivello:
Questa tecnica viene utilizzata quando la velocità delle linee di input sono l’una multipla dell’altra. Per esempio nella figura precedente abbiamo due input a 20 Kbps e tre input a 40 Kbps. Le prime due linee possono essere multiplexate per creare un canale di input che ha la stessa velocità degli altri 3. Un secondo livello di multiplexing può quindi combinare i quattro canali di 40 Kbps che possono essere trasportati su un collegamento a 160 Kbps. -. multiplexing multiturno:
Questa tecnica alloca più di un turno a un canale che è più veloce degli altri; questo significa che le velocità devono essere tutte multiple di un’unità di base. Nella figura precedente il canale di input di 50 Kbps usufruisce di due turni, i dati provenienti da tale canale vengono fatti passare attraverso un convertitore seriale-parallelo che da una linea di 50 Kbps crea due linee di 25 Kbps. In questo caso l’unità di base è 25 Kbps. In questa tecnica e in questa figura il frame è costituito da n+1 bit anziché n. La sincronizzazione fra multiplexer e demultiplexer è un problema fondamentale. Se questi due dispositivi non sono sincronizzati, l’appartenenza dei bit ai canali logici verrà falsata. Per questo motivo, uno o più bit di sincronizzazione vengono solitamente inseriti nei frame. Questi bit seguono uno schema prestabilito e nella maggior parte dei casi viene usato un solo bit di sincronizzazione e il suo valore si alterna fra 0 e 1 come riportato nella figura sottostante:
29
Multiplexing statistico a divisione di tempo: Nel multiplexing sincrono TDM, i turni vengono assegnati staticamente a ognuno dei canali logici. Questo metodo è inefficiente quando i canali logici non hanno dati da spedire. Nel multiplexing statistico TDM i turni vengono assegnati dinamicamente per migliorare l’utilizzo del collegamento. Un turno viene assegnato a una linea di input solo quando ci sono dati da spedire.
Questa figura evidenzia il fatto che quando ci sono sorgenti che non hanno dati da spedire con il TDM sincrono si creano dei vuoti nei frame, con il TDM statistico, invece, non si creano vuoti nei frame. Lo svantaggio del TDM statistico è che non esiste più una relazione precisa tra la posizione dei dati all’interno del frame e l’appartenenza dei dati stessi a un canale logico. Con il TDM sincrono un frame è fatto di n parti e la parte i-esima appartiene al canale logico i. Con il TDM statistico ciò non è più vero. Si rende perciò necessario inserire informazioni addizionali per indicare il canale al quale appartengono i dati. Ogni parte del frame dovrà trasportare anche dei bit che indicano il canale di appartenenza; si possono ad esempio utilizzare k = log2 n bit per specificare il canale di appartenenza. Per quanto riguarda la dimensione dei frame, il rapporto fra il numero di bit di dati e il numero di bit usati per gli indirizzi sia sufficientemente alto. Ad esempio sarebbe molto inefficiente spedire 1 bit di dati se occorrono 3 bit di indirizzamento, ciò significherebbe introdurre un sovraccarico del 300%. Un’altra differenza fra TDM sincrono e TDM statistico è dovuto all’assenza di bit di sincronizzazione dei frame. Diffusione dello spettro: Le tecniche di multiplexing combinano i segnali di varie sorgenti per utilizzare in modo efficiente la larghezza di banda, mentre la diffusione dello spettro serve sempre a combinare i segnali di varie sorgenti ma gli obiettivi sono diversi. Tali tecniche sono state progettate per essere utilizzate in reti senza fili. Quindi gli obiettivi sono quelli di evitare sia l’intercettazione sia l’interferenza. Per ottenere questi obiettivi le tecniche della diffusone dello spettro utilizzano la ridondanza. Esistono due tecniche di diffusione dello spettro: 0. 1. Diffusione dello spettro tramite salti di frequenza: La tecnica di diffusione dello spettro mediante salti di frequenza (FHSS) utilizza M frequenze portanti che vengono modulate dal segnale originale. In ogni unità di tempo il segnale, viene modulato su una particolare frequenza. Tutte le M frequenze saranno utilizzate mediante un codice di diffusione che può essere generato mediante un generatore di numeri pseudocasuali. . 2. Diffusione dello spettro tramite sequenza diretta: La diffusione dello spettro mediante sequenza diretta (DSSS) espande lo spettro del segnale. Ogni bit appartenente al segnale dei dati viene sostituito da una parola in codice di bit, chiamati chip, mediante uno specifico codice di diffusione. 30
CAPITOLO 6:
MEZZI TRASMISSIVI
Finora abbiamo parlato di varie questioni relative allo strato fisico, adesso discuteremo dei mezzi trasmissivi che sono controllati dallo strato fisico e in qualche modo possono essere visti come un ulteriore strato sottostante a quello fisico. Un mezzo trasmissivo può essere definito come qualsiasi cosa capace di trasportare informazione da una sorgente a una destinazione. Nell’ambito della comunicazione dei dati la definizione di dati e di mezzo trasmissivo è un po’ più specifica. Il mezzo trasmissivo tipicamente è un cavo metallico, una fibra ottica o l’etere. L’informazione è un segnale che deriva dalla conversione di dati che originariamente sono in un’altra forma. I mezzi trasmissivi possono essere classificati in due categorie generali:
1. Mezzi guidati: Sono quei mezzi che usano una conduttura per collegare un dispositivo a un altro. Il segnale si propaga attraverso la conduttura (cavo) ed è sempre contenuto nei limiti fisici del mezzo stesso. Il doppino e il cavo coassiale sono fatti di materiale metallico (rame) capace di condurre il segnale sottoforma di corrente elettrica invece la fibra ottica trasporta il segnale sottoforma di luce. Fra i mezzi guidati più comuni troviamo: a) doppino: formato da due fili di rame ognuno dei quali è protetto da un isolamento di plastica. I due fili vengono intrecciati. Uno dei due fili serve per trasportare il segnale. L’altro viene usato per spedire un segnale di riferimento (terra). Il ricevitore utilizza la differenza tra i due segnali in quanto intrecciando i fili l’interferenza è uniforme su entrambi e quindi ha meno effetto sulla differenza fra i due segnali. Il doppino più comune è il doppino non schermato anche se la IBM ha prodotto una versione di doppino schermato che prevede un’ulteriore protezione, oltre all’isolamento dei singoli fili, costituita da una lamina metallica che funge da guaina per la coppia di fili. Tale guaina aumenta la qualità del doppino ma ne aumenta anche il costo. L’associazione delle industrie elettroniche (EIA) ha sviluppato uno standard che classifica i doppini non schermati in sette categorie ognuna adatta ad uno specifico uso. La velocità di trasferimento aumenta con l’aumentare della categoria del doppino. Un connettore serve a collegare il doppino al dispositivo, i più comuni sono i connettori RJ45. Prestazioni: Un modo per misurare la qualità di un doppino è quella di misurare l’attenuazione in funzione della frequenza e della distanza. Applicazioni: Il doppino è utilizzato per linee telefoniche e permette di trasportare segnali per la voce e dati. I collegamenti tra i nostri telefoni fissi e le centraline sono fatti con doppini non schermati. b) cavo coassiale: Permette di trasportare segnali a frequenza maggiore rispetto a quelle che è possibile utilizzare con un doppino. Un cavo coassiale è formato da un conduttore centrale solitamente di rame protetto da una guaina isolante che a sua volta è racchiusa in un altro conduttore metallico. Il tutto è ulteriormente isolato da un’altra guaina isolante e infine protetta da una terza guaina di plastica. I cavi coassiali sono suddivisi in categorie in funzione alle loro caratteristiche fisiche. Il connettore per cavo coassiale più diffuso è chiamato connettore BNC e sono utilizzati per connettere l’estremità di un cavo a un dispositivo (es.: una televisione). Prestazioni: Anche qui le prestazioni si misurano calcolando l’attenuazione in funzione della frequenza e della distanza. Applicazioni: Il cavo coassiale viene utilizzato nella rete televisiva. c) fibra ottica: è un cavo fatto di vetro o di plastica capace di trasmettere il segnale sottoforma di luce. La fibra ottica usa la riflessione della luce per far propagare il segnale all’interno de cavo. Un nucleo di vetro (o plastica) è circondato da un rivestimento di vetro (o plastica) meno denso. La differenza di densità è tale che la luce viene riflessa nel nucleo. La tecnologia attuale permette la propagazione della luce in una fibra ottica in due modi: Multimodo: il nome deriva dal fatto che molti raggi di luce viaggiano contemporaneamente nella fibra ottica lungo direzioni diverse, quindi tale modo può essere suddiviso a sua volta in altri due modi: -. Nelle fibre multimodo con indice a scatto la densità del nucleo rimane costante dal centro verso i bordi. Arrivato quindi ai bordi dove è presente il rivestimento vi è 31
un cambiamento repentino del raggio di luce dovuto alla diversa densità del rivestimento. -. Nelle fibre multimodo con indice graduale viene utilizzato un nucleo con densità variabile. In questo caso la densità del raggio di luce è maggiore nel centro del nucleo e diminuisce gradualmente verso il bordo del nucleo. Modo singolo: La fibra a modo singolo è una fibra con indice a scatto e utilizza raggi spediti con direzioni molto vicine a quella orizzontale. Spessore delle fibre: Le fibre ottiche sono classificate in base al diametro del nucleo e del rivestimento espressi entrambi in μm. Esistono tre tipi di connettore per le fibre ottiche. Il connettore SC (subscriber channel) viene usato per la TV via cavo, il connettore ST (straight-tip) viene usato per connettere dispositivi di varia natura in rete. Un terzo connettore è il connettore MT-RJ. Applicazioni: Le fibre ottiche sono spesso usate per le dorsali delle reti perché offrono larghezze di balda molto elevate. Vantaggi e svantaggi: I vantaggi nell’uso di fibre ottiche rispetto agli altri casi sono molteplici: -. Alta capacità: Le fibre ottiche hanno una larghezza di banda (quindi velocità) molto più ampia rispetto agli altri cavi. -. Minore attenuazione: il segnale spedito su una fibra ottica può raggiungere distanze notevoli (es.: con le fibre ottiche si può arrivare fino a 50 Km senza l’uso di ripetitori, mentre con gli altri cavi servono ripetitori ogni 5 Km). -. Immunità alle interferenze magnetiche. -. Resistenza ai materiali corrosivi: il vetro è più resistente del rame alla corrosione. -. Minor peso: i cavi in fibra ottica sono molto più leggeri dei cavi di rame. -. Maggior immunità all’intercettazione: difficoltà nell’intercettare i dati che viaggiano su una fibra ottica. Ci sono anche svantaggi: -. Installazione e manutenzione. -. Propagazione unidirezionale: la propagazione del segnale può avvenire in una sola direzione quindi se ci serve un canale bidirezionale occorrono due fibre ottiche. -. Costo. 2. Mezzi non guidati (senza filo): I mezzi non guidati trasportano onde elettromagnetiche senza usare un conduttore fisico. Questo tipo di comunicazione è chiamato comunicazioni senza fili. Con i mezzi non guidati i segnali possono viaggiare dalla sorgente alla destinazione in vari modi: -. Propagazione terrestre: le onde radio viaggiano nella porzione più bassa dell’atmosfera intorno alla terra. Le onde vengono emanate dalle antenne e si propagano in tutte le direzioni seguendo la curvatura del pianeta. Maggiore è la potenza del segnale maggiore è la distanza dove il segnale può arrivare. -. Propagazione ionosferica: le onde radio viaggiano verso l’alto e vengono riflesse dalla ionosfera. Questo tipo di propagazione permette di raggiungere distanze maggiori con una minore potenza. -. Propagazione in linea di visione diretta: i segnali vengono trasmessi in linea retta dalla sorgente alla destinazione. Le antenne devono essere unidirezionali e orientate una verso l’altra e abbastanza alte in modo da non essere influenzate dalla curvatura della terra. Possiamo dividere la comunicazione senza fili in tre grosse categorie: onde radio, microonde e raggi infrarossi. Onde radio: Le onde elettromagnetiche che spaziano da 3 KHz a 1 GHz sono chiamate onde radio; onde con frequenze da 1 GHz a 300 GHz sono dette microonde. Le onde radio sono quasi sempre omnidirezionali cioè i segnali vengono spediti in tutte le direzioni, ciò vuol dire che le antenne non devono essere allineate. L’omnidirezionalità ha però uno svantaggio: le onde radio trasmesse da un’antenna possono subire l’interferenza dovuta alle onde radio trasmesse da un’altra antenna che sta usando la stessa frequenza. Applicazioni: è utilizzata per trasmissioni radiofoniche e televisive e telefoni senza fili. 32
Microonde: onde con frequenze da 1 GHz a 300 GHz. Sono onde unidirezionali. L’antenna che riceve le microonde trasmesse devono essere allineate. Non c’è interferenza fra due trasmissioni. La propagazione può avvenire solo fra punti che sono a vista; la curvatura della terra e altri ostacoli non permettono la comunicazione con microonde. Applicazioni: Le microonde vengono utilizzate per la comunicazione unidirezionale per i telefoni cellulari, i satelliti, e le reti LAN senza fili. Raggi infrarossi: i raggi infrarossi, con frequenze che vanno da 300 GHz a 400 THz, possono essere usati per comunicazioni a distanze brevi. Essi non possono penetrare muri. Applicazioni: I raggi infrarossi possono essere usati per comunicazioni a breve distanza in un’aria chiusa e con dispositivi che comunicano in linea diretta a vista.
33
CAPITOLO 7:
COMMUTAZIONE
Per connettere in una rete un insieme di nodi terminali, che chiameremo stazioni, vengono utilizzati dei nodi speciali interconnessi fra loro, chiamati switch. Le reti a commutazione possono essere divise in tre categorie generali: reti a commutazione di circuito, reti a commutazione di pacchetto, reti a commutazione di messaggio. Reti a commutazione di circuito: Una rete a commutazione di circuito consiste in un insieme di switch connessi da collegamenti fisici. Ogni collegamento è diviso in n canali utilizzando il multiplexing. Occorre enfatizzare vari punti: • La commutazione a circuito avviene nello strato fisico. • Prima di iniziare la comunicazione, le stazioni devono effettuare una prenotazione delle risorse che saranno usate durante la comunicazione. Queste risorse devono rimanere dedicate a questa connessione per tutta la durata del trasferimento dei dati. • I dati trasferiti fra due stazioni non sono divisi in pacchetti ma spediti in un flusso continuo anche se si possono avere periodi di silenzio (assenza di dati). • Non c’è bisogno di indirizzamento durante il trasferimento dei dati. La comunicazione in una rete a commutazione di circuito richiede tre fasi: Instaurazione della connessione Prima che due stazioni possano comunicare, deve essere instaurato un circuito. Le stazioni sono normalmente connesse attraverso linee dedicate agli switch, quindi la fase di connessione serve a creare dei canali dedicati fra gli switch. Trasferimento dei dati Dopo l’instaurazione della connessione le due stazioni possono trasferire dati. Chiusura della connessione Quando una delle stazioni di una connessione vuole terminare la connessione, la stazione spedisce un segnale che raggiunge tutti gli switch coinvolti in modo tale che essi possano liberare le risorse riservare alla connessione. In alcuni casi le reti a commutazione di circuito non sono così efficienti in quanto le risorse dedicate a una connessione sono riservate alla connessione per la sua intera durata. Sebbene l’efficienza non sia massima, il ritardo in questo tipo di rete è minimo. Durante il trasferimento i dati non vengono fermati in ogni switch. Quindi non c’è tempo d’attesa negli switch, e il ritardo totale è dovuto al tempo necessario per compiere le tre fasi. Reti a commutazione di pacchetto: Se due stazioni di una rete devono comunicare devono scambiarsi dei messaggi. Se tali messaggi devono passare attraverso una rete a commutazione di pacchetto essi devono essere suddivisi in pacchetti di dimensione fissa o variabile. La grandezza del pacchetto è determinata dalla rete e dal protocollo che ne gestisce il funzionamento. Nella commutazione di pacchetto non c’è prenotazione delle risorse. Le risorse vengono utilizzate in base alla domanda. In una rete a datagram ogni pacchetto è gestito indipendentemente da tutti gli altri, anche se il pacchetto fa parte di una singola trasmissione la rete lo tratta come singola unità di dati. In questo approccio i pacchetti vengono chiamati datagram.
La figura precedente mostra l’approccio a datagram per la consegna di quattro pacchetti dalla stazione A alla stazione B. Gli switch di una rete a commutazione di datagram sono chiamati router. In questo esempio i quattro datagram appartengono allo stesso messaggio ma viaggiano su cammini diversi per raggiungere la propria destinazione. Quest’approccio può causare la consegna dei datagram alla destinazione in ordine diverso da quello di spedizione oppure può capitare che i 34
pacchetti si perdano prima di arrivare a destinazione o che vengano eliminati per mancanza di risorse. Comunque nella maggior parte dei protocolli sono gli strati superiori dell’architettura di rete ad avere la responsabilità di riordinare i datagram e di rispedire i datagram mancanti, prima di passare i dati all’applicazione di destinazione. Le reti a commutazione di datagram sono dette reti senza connessioni in quanto non esiste una fase di instaurazione della connessione, né una famedi chiusura della connessione. Allora sorge la domanda: come fanno i pacchetti a essere instradati verso la loro destinazione? In una rete a commutazione di datagram ogni switch ha una tavola di routing che contiene le informazioni necessarie per l’instradamento. Per ogni possibile destinazione la tavola di routing specifica quale è la porta di output verso la quale lo switch deve inoltrare i pacchetti per quella destinazione. Queste tavole vengono aggiornate periodicamente. In pratica ogni pacchetto contiene un’intestazione che contiene l’indirizzo di destinazione del pacchetto. Tale indirizzo rimane invariato durante l’intero viaggio del pacchetto all’interno della rete. La rete a commutazione di datagram, quindi, è più efficiente della rete a commutazione di circuito, in quanto le risorse vengono allocate solo quando ci sono pacchetti da trasferire. Altra cosa da dire sulle reti a commutazione di pacchetto è che i ritardi possono essere maggiori di quelli in una rete a circuito virtuale in quanto ogni pacchetto potrebbe subire un ritardo negli switch prima di essere inoltrato. Reti a circuito virtuale: è una via di mezzo fra una rete a commutazione di circuito e una rete a commutazione di pacchetto. Ha caratteristiche in comune con entrambe: 1. Come nella rete a commutazione di circuito ci sono le fasi di instaurazione ed eliminazione della connessione, oltre alla fase di trasferimento dati. 2. Le risorse possono essere allocate durante la fase di instaurazione come avviene nelle reti a commutazione di circuito oppure in base alla domanda come avviene nelle reti a commutazione di pacchetto. 3. Come nelle reti a datagram, i dati sono divisi in pacchetti e ogni pacchetto contiene un indirizzo nell’intestazione. Tuttavia, quest’indirizzo ha un valore locale cioè identifica il prossimo switch. 4. Come in una rete a commutazione di circuito tutti i pacchetti seguono lo stesso percorso che è quello stabilito durante la fase di instaurazione della connessione. In una rete a circuito virtuale vengono utilizzati due tipi di indirizzamento: un indirizzamento globale e uno locale (identificatore di circuito virtuale). L’indirizzo globale è un indirizzo univoco che identifica qualsiasi nodo della rete indipendentemente dalla grandezza della rete. L’identificatore di circuito virtuale (VCI) invece viene usato per trasferire i dati. Quindi diversamente dall’indirizzo globale, un VCI è un numero che ha un significato solo localmente cioè relativamente a ogni coppia di switch. Un VCI viene usato per identificare i pacchetti appartenenti a una connessione tra due switch. Quando un datagram arriva in uno switch, l’intestazione del datagram contiene un VCI che permette di inoltrare correttamente il datagram. Le tre fasi: 1. Nella fase di instaurazione del circuito la sorgente e la destinazione utilizzano i loro indirizzi globali per aiutare gli switch a costruire le informazioni di routing necessarie per la connessione. Nella fase di instaurazione del circuito, uno switch crea una riga nella tavola di routing per il circuito virtuale della connessione richiesta. Per esempio supponiamo che la sorgente A voglia creare un circuito virtuale verso la destinazione B. La sorgente A deve spedire una richiesta e la destinazione B deve spedire una risposta.
35
Richiesta: a) La sorgente A spedisce un pacchetto di richiesta connessione allo switch 1. b) Lo switch 1 riceve questa richiesta. Lo switch crea una riga nella tavola di routing per il circuito virtuale relativo a questa connessione; tuttavia a questo punto esso è in grado di riempire solo tre delle quattro informazioni necessarie, infatti lo switch sa che i pacchetti che arrivano dalla porta 1 con VCI 14 devono essere inoltrati sulla porta 3, ma non sa ancora con quale VCI. Il pacchetto di richiesta viene inviato sulla porta 3 verso lo switch 2. c) Lo switch 2 riceve il pacchetto di richiesta, crea una riga nella tavola di routing e la riempie parzialmente con la porta di input (porta 1), il VCI di input (66) e la porta di output (porta 3). La richiesta viene quindi inoltrata allo switch 3. d) Lo switch 3 riceve il pacchetto di richiesta, crea una riga nella tavola di routing e la riempie parzialmente con la porta di input (porta 2), il VCI di input (2) e la porta di output (porta 3). La richiesta viene quindi inoltrata alla destinazione. e) La destinazione riceve il pacchetto di richiesta. Se B decide di accettare la richiesta di connessione fatta da A, allora deciderà un valore VCI con il quale identificare i pacchetti relativi a questa connessione. Nell’esempio viene utilizzato il valore 77. Questo valore permette a B di distinguere i pacchetti che arrivano da A da quelli che arrivano da altre connessioni.
Risposta: a) La destinazione spedisce un pacchetto di risposta allo switch 3. Questo pacchetto di risposta contiene gli indirizzi globali della sorgente e della destinazione in modo tale che lo switch possa capire a quale connessione si fa riferimento. Il pacchetto di risposta contiene anche il numero VCI scelto da B (77) per identificare il circuito virtuale. Lo switch 3 usa questo numero per completare la riga nella propria tavola di routing. b) Lo switch 3, a questo punto, invia il pacchetto d risposta allo switch 2., specificando il valore VCI di input che lo switch 3 ha precedentemente deciso (22). Lo switch 2 userà questo valore per completare le informazioni della propria tavola di routing. c) Lo switch 2 spedisce il pacchetto di risposta allo switch 1, specificando il valore di VCI di input che lo switch 2 ha precedentemente scelto (66) nella fase di richiesta. Lo switch 1 userà questo valore per completare le informazioni della propria tavola di routing. d) Lo switch 1 spedisce il pacchetto di risposta alla sorgente, specificando il valore VCI scelto per identificare questa connessione durante la fase di richiesta. e) La sorgente usa quest’ultimo VCI per spedire i pacchetti di dati alla destinazione B. 2. Nella fase di eliminazione del circuito la sorgente e la destinazione chiedono agli switch di cancellare le informazioni relative alla connessione. Quando la sorgente A spedisce tutti i dati a B, spedisce un pacchetto speciale che richiede la chiusura del circuito virtuale. La destinazione risponde con un pacchetto di conferma chiusura e tutti gli switch coinvolti in quel circuito virtuale cancellano la riga relativa a esso. 3. Il trasferimento dei dati avviene tra queste due fasi. Per trasferire un pacchetto da una sorgente alla destinazione, tutti gli switch devono avere nella tavola di routing una riga relativa al circuito virtuale corrispondente alla connessione fra la sorgente e la destinazione.
36
La figura precedente mostra un pacchetto in arrivo dalla porta 1 con un VCI che vale 14. Quando il pacchetto arriva, lo switch consulta la tavola di routing e scopre che i pacchetti in arrivo dalla porta 1 con VCI uguale a 14 devono essere inoltrati sulla porta 3 e il VCI deve essere cambiato in 22. Il pacchetto in arrivo quindi viene inviato alla porta 3 e il suo VCI viene cambiato in 22. Efficienza: Come già detto in precedenza la prenotazione delle risorse in una rete a circuito virtuale può essere fatta sia durante la fase di instaurazione del circuito sia dinamicamente. Nel primo caso il ritardo di ogni pacchetto sarà uniforme, mentre nel secondo caso ogni pacchetto può subire un ritardo variabile. Struttura di uno switch: Ora discuteremo della struttura di uno switch sia per le reti a circuito virtuale sia per le reti a commutazione di datagram. • Struttura di uno switch per reti a circuito virtuale: La tecnologia attuale per gli switch di una rete a circuito virtuale utilizza switch a divisione di spazio e switch a divisione di tempo. Switch a divisione di spazio: I circuiti sono separati fisicamente cioè ognuno occupa il proprio spazio. Uno switch a crossbar connette n input a m output in una griglia usando dei connettori elettronici (transistor) in ogni punto di incrocio. Quindi per connettere n input a m output occorrono n x m punti di incrocio. Uno switch del genere sarebbe difficile da costruire e anche molto inefficiente perché meno del 25% dei punti di incrocio vengono usati contemporaneamente.
Uno switch a più livelli, invece, combina vari switch a crossbar in più livelli, normalmente tre. In pratica vengono utilizzati dei crossbar più piccoli che vengono organizzati in livelli (tre di solito). Ogni punto di incrocio del livello centrale è collegato a tutte le uscite del primo livello e a tutte le entrate del terzo livello. Per progettare uno switch a tre livelli dobbiamo seguire i seguenti passi: a) Dividiamo le N linee di input in gruppi, ognuno di n linee. Per ogni gruppo utilizziamo un crossbar di grandezza n x k, dove k è il numero di crossbar del livello centrale. In altre parole il primo livello è costituito da N/n crossbar con n x k punti di incrocio. b) Nel livello centrale usiamo k crossbar di grandezza (N/n) x (N/n). c) Nel terzo livello utilizziamo N/n crossbar di grandezza k x n. Pertanto il numero totale di punti di incrocio è: N/n (n * k) + k (N/n * N/n) + N/n (n * k) = 2 kN + k(N/n)2
37
Esempio: Si progetti uno switch 200 x 200 a tre livelli con k = 4, n = 20 Nel primo livello abbiamo N/n, cioè 10 crossbar, ognuno di grandezza 20 x 4, nel secondo livello abbiamo 4 crossbar, ognuno di grandezza 10 x 10. Nel terzo livello abbiamo 10 crossbar, ognuno di grandezza 20 x 4. Il numero totale di punti di incrocio è 2kN + k(N/n)2 , cioè 2000. Questo numero equivale al 5% del numero di punti di incrocio in un crossbar singolo (200 x 200 = 40000). La riduzione drastica del numero di punti di incrocio si paga però con una caratteristica negativa: uno switch a più livelli è bloccante. L’idea di base di uno switch a più livelli è quella di condividere i punti di incrocio del livello centrale. Questa condivisione può essere la causa della indisponibilità di risorse se molti utenti richiedono la connessione contemporaneamente. Quando un input non può essere connesso a un output perché i punti di incrocio necessari sono già utilizzati, lo switch blocca la richiesta di connessione. Clos ha studiato un modo per avere uno switch non bloccante: il livello centrale di uno switch a tre livelli deve avere almeno 2n – 1 switch, cioè k deve essere >= 2n – 1. Si noti che anche con questo vincolo il numero totale di punti di incrocio è più piccolo di N2; seguendo il criterio di Clos, infatti, e scegliendo n = (N/2)1/2, il numero di punti di incrocio è proporzionale a N3/2. Uno switch a più livelli che usa il criterio di Clos, comunque necessita di un elevato numero di punti di incrocio. Switch a divisione di tempo: Gli switch a divisione di tempo utilizzano il multiplexing a divisione di tempo (TDM). La tecnologia più usata è quella chiamata scambio di intervalli temporali (TSI).
La figura precedente mostra un sistema che connette quattro linee di input a quattro linee di output. Si immagini che ogni linea di input voglia spedire dati a una linea di output in accordo al seguente schema: 1Æ3 2Æ4 3Æ1 4Æ2 Tale figura mostra l’utilizzo di un multiplexer TDM e un demultiplexer TDM e un TSI che è composto da una memoria ad accesso casuale (RAM) che ha varie locazioni di memoria. Il numero di locazioni di memoria è uguale al numero di input. La RAM viene riempita con i dati spediti nell’ordine in cui sono stati ricevuti. Gli stessi dati vengono inoltrati verso le uscite in un ordine che è deciso dall’unità di controllo del TSI. Switch a divisione di tempo e spazio: Abbiamo visto che sia lo switch a divisione di spazio sia lo switch a divisione di tempo hanno dei vantaggi e svantaggi: Switch a divisione di spazio Vantaggi: la comunicazione è istantanea Svantaggi: è il numero di punti di incrocio necessari affinché lo switch non sia bloccante. 38
Switch a divisione di tempo Vantaggi: non richiede punti di incrocio Svantaggi: nel caso del TSI, la gestione di ogni connessione crea ritardi (i dati devono essere prima scritti nella RAM e poi letti dalla RAM per poter essere inoltrati. È possibile quindi combinare queste due tecnologie per ottenere il meglio. Il risultato sono gli switch tempo-spazio-tempo (TST). • Struttura di uno switch per reti a commutazione di datagram: A differenza dello switch per reti a di circuito, lo switch per reti a commutazione di datagram ha quattro componenti: porte di input, porte di output, unità di controllo, congegno di commutazione.
Porte di input: Esegue le funzioni dello strato fisico e dello strato di collegamento per operare la commutazione di pacchetto. Il segnale ricevuto viene trasformato nei corrispondenti bit. Il pacchetto viene estratto dal frame ricevuto, vengono rilevati e corretti gli errori, a questo punto il pacchetto è pronto per essere instradato dallo strato di rete. La porta di input ha anche dei buffer (code) per memorizzare temporaneamente il pacchetto prima che esso venga inoltrato verso il congegno di commutazione. Porte di output: Esegue le stesse funzioni di una porta di input ma in ordine inverso. Prima di tutto i pacchetti in uscita vengono inseriti nelle code, quindi vengono incapsulati in un frame e infine i bit del frame vengono trasformati in segnali da spedire sulla linea di uscita. Unità di controllo. Congegno di commutazione.
39
PARTE III CAPITOLO 9:
STRATO DI COLLEGAMENTO RILEVAMENTO E CORREZZIONE DEGLI ERRORI
I dati possono subire delle alterazioni durante la trasmissione. Molte applicazioni necessitano di meccanismi per la rilevazione e correzione di errori. Introduzione: Le interferenze possono cambiare la forma del segnale, causando un’interpretazione errata dei bit da parte del ricevitore. In un errore singolo, uno 0 viene cambiato in un 1 oppure un 1 viene cambiato in uno 0. In un errore a raffica, più bit consecutivi vengono interpretati in modo errato. Errore singolo:
In un errore singolo un solo bit dell’unità di dati viene alterato. Errore a raffica:
In un errore a raffica due o più bit dell’unità di dati vengono cambiati. La lunghezza dell’errore a raffica è misurata dal primo bit alterato all’ultimo bit alterato, è possibile che fra questi bit ci siano bit ricevuti correttamente. Gli errori a raffica sono più probabili degli errori singoli. Ridondanza: Per rilevare o correggere gli errori, occorrono dei bit aggiuntivi (ridondanti) da spedire con i dati. Questi bit addizionali sono aggiunti dal mittente e rimossi dal destinatario. Correggere gli errori è molto più difficile che rilevarli. Infatti per rilevare errori, abbiamo bisogno solo di sapere se uno o più errori si sono verificati. Per correggere gli errori, invece, dobbiamo sapere esattamente il numero di bit che sono stati alterati e soprattutto la loro posizione all’interno dell’unità di dati. Il ricevitore può, quindi, utilizzare i bit ridondanti per localizzare eventuali errori avvenuti durante la trasmissione. Questo approccio è possibile quando il numero di errori è piccolo. Un’alternativa alla correzione è la ritrasmissione; in pratica il ricevitore usa i bit ridondanti solo per rilevare la presenza di errori, mentre per correggerli chiede al mittente di rispedire i dati. I bit ridondanti vengono aggiunti utilizzando vari schemi di codifica. Possiamo dividere le codifiche in due grandi categorie: codifiche a blocchi e codifiche convoluzionali. Codifica a blocchi: Nella codifica a blocchi i dati vengono divisi in blocchi ognuno di un certo numero k di bit. Ognuno di questi blocchi viene chiamato parola sorgente. Per ogni parola sorgente vengono aggiunti r bit addizionali (ridondanti), ottenendo dei blocchi di lunghezza n = k + r. Questi blocchi sono detti parole codice. Poiché la lunghezza delle parole sorgenti è k, il numero massimo di parole sorgenti è 2k ; analogamente, poiché la lunghezza delle parole codice è n, allora il numero massimo di parole codice è 2n. Poiché n>k il numero di parole codice è maggiore delle parole sorgenti.
40
Rilevamento degli errori: Il mittente crea la parola codice partendo dalla parola sorgente e applicando le regole di codifica. Ogni parola codice spedita dal mittente può cambiare durante la trasmissione per effetto degli errori. Se la parola codice ricevuta è uguale a una parola codice valida, essa viene accettata e la corrispondente parola sorgente viene recuperata. Se la parola codice ricevuta non è valida, allora viene eliminata. Se una parola codice spedita viene cambiata in un’altra parola codice valida gli errori non vengono rilevati. Esempio: Assumiamo che k=2 n=3. La tabella sottostante mostra una particolare codifica, elencando tutte le possibili parole sorgente e le relative parole codice. PAROLA SORGENTE 00 01 10 11
PAROLA CODICE 000 011 101 110
Stabilito che la parola sorgente O1 è codificata con la parola codice 011, assumiamo che il mittente spedisca tale parola codice al ricevitore. Consideriamo, quindi, i seguenti casi: 1. Il ricevitore riceve 011. Questa è una parola codice valida. Il ricevitore sa che questa parola codice codifica la sequenza 01, e pertanto accetta 01 come dati ricevuti. 2. Se la parola codice viene alterata durante la trasmissione e il ricevitore riceve 111, il ricevitore sa che questa non è una parola codice valida. Quindi il ricevitore elimina i dati ricevuti. 3. Se la parola codice viene alterata durante la trasmissione, e il ricevitore riceve 000, questa sequenza di bit è una parola codice valida che corrisponde alla parola sorgente 00. Pertanto il ricevitore accetta erroneamente 00 come dati ricevuti. In questo caso, quindi, è possibile rilevare la presenza di un solo errore, ma se ci sono più errori questi non vengono rilevati. Inoltre non è possibile correggere errori. Esempio: Riprendendo l’esempio precedente, al posto di un solo bit ridondante ne vengono aggiunti tre stavolta. Quindi la parola codice sarà costituita dai 2 bit della parola sorgente e dai 3 bit ridondanti. Questa è la tabella: PAROLA SORGENTE 00 01 10 11
PAROLA CODICE 00000 01011 10101 11110
Supponiamo che il mittente voglia spedire la parola sorgente 01. Il mittente consulta la tavola delle parole codice e ottiene la parola codice 01011. Tale parola codice viene spedita. Per effetto degli errori il ricevitore riceve 01001 (errore nel secondo bit da destra). Il ricevitore si accorge che questa parola codice non è valida, capisce quindi che ci sono stati degli errori. Il ricevitore assume che ci sia 1 solo bit alterato e usa la seguente strategia per capire quale è la parola sorgente spedita dal mittente: 1. La parola codice ricevuta, 01001, viene confrontata con la prima parola codice della tavola, 00000. Poiché queste due sequenze di bit differiscono in due posizioni, 00000 non può essere la parola codice spedita. 2. Lo stesso ragionamento può essere fatto per la terza e per la quarta parola codice della tavola. 3. La parola codice spedita deve essere la seconda della tavola, 01011, che differisce dalla parola codice ricevuta, 01001, in una sola posizione (quella in cui si è verificato l’errore). Pertanto il ricevitore assume che la parola spedita sia 01011 e accetta 01 come dati ricevuti. In questo caso, quindi, è possibile correggere un errore, ma se ci sono più errori avviene una decodifica errata. 41
Correzione degli errori: Per la correzione di errori, quindi, occorre inserire un numero maggiore di bit ridondanti. Distanza di Hamming: La distanza di Hamming fra due parole della stessa lunghezza è il numero di differenze fra i bit nella stessa posizione. Denoteremo la distanza di Hamming fra due parole x e y con d(x,y). Esempio: 1. La distanza di Hamming fra 000 e 011 è d(000,011)=2 2. La distanza di Hamming fra 10101 e 11110 è d(10101,11110)=3 Distanza di Hamming minima: La distanza di Hamming minima è il più piccolo valore fra le distanze di Hamming di tutte le possibili coppie di parole. La denoteremo con dmin Esempio: Trovare la distanza di Hamming minima della seguente tabella 9.1 PAROLA SORGENTE 00 01 10 11
PAROLA CODICE 000 011 101 110
d(000,011)=2 d(000,101)=2 d(000,110)=2 d(011,101)=2 d(011,110)=2 d(101,110)=2 Pertanto la distanza di Hamming minima è dmin = 2 Esempio: Trovare la distanza di Hamming minima della seguente tabella 9.2 PAROLA SORGENTE 00 01 10 11
PAROLA CODICE 00000 01011 10101 11110
d(00000,01011)=3 d(00000,10101)=3 d(00000,11110)=4 d(01011,10101)=4 d(01011,11110)=3 d(10101,11110)=3 Pertanto la distanza di Hamming minima è dmin = 3 Distanza di Hamming minima per il rilevamento degli errori: Per garantire il rilevamento di un numero di errori minore o uguale a s, occorre un codice con distanza di Hamming minima dmin >= s+1. Nella Tabella 9.1 abbiamo visto che la distanza di Hamming minima è dmin = 2. Questo codice garantisce il rilevamento di un solo errore. Per esempio, se la parola codice spedita è 101 e si verifica un solo errore di trasmissione, la parola codice ricevuta non corrisponderà a nessuna parola codice valida. Se si verificano invece due errori, la parola codice ricevuta potrebbe essere uguale a una delle parole codice valide e quindi il ricevitore potrebbe non accorgersi degli errori. 42
Nella Tabella 9.2, invece, abbiamo visto che la distanza di Hamming minima è dmin = 3. Questo codice garantisce il rilevamento di uno o due errori. Come prima, se la parola codice spedita contiene uno o due errori allora la parola codice ricevuta non corrisponde a nessuna parola codice valida, invece se ci sono stati tre errori nella spedizione, la parola codice spedita potrebbe essere trasformata in una parola codice valida e quindi il ricevitore potrebbe non essere in grado di accorgersi degli errori. Distanza di Hamming minima per la correzione degli errori: Per garantire la correzione fino a t errori, la distanza di Hamming minima del codice che si utilizza deve essere dmin >= 2t+1. Per esempio, se uno schema di codifica ha una distanza di Hamming dmin = 4 possiamo rilevare al massimo 3 errori ma ne possiamo correggere 1 solo. Codici lineari: La maggior parte dei codici utilizzati in pratica fanno parte di un particolare sottoinsieme dei codici a blocchi che viene chiamato insieme di codici lineari. In un codice lineare (a blocchi), l’operazione di XOR fatta su due parole codice valide dà come risultato un’altra parola codice valida. Distanza di Hamming minima per i codici lineari: Essa è data dal numero di 1 nella parola codice diversa da quella con tutti 0 e che ha il minimo numero di 1. Esempio: Trovare la distanza di Hamming minima in queste tabelle PAROLA SORGENTE 00 01 10 11
PAROLA CODICE 000 011 101 110
In questa tabella le parole codice diverse da 000 hanno tutte un numero di 1 pari 2, pertanto dmin = 2 PAROLA SORGENTE 00 01 10 11
PAROLA CODICE 00000 01011 10101 11110
In questa tabella le parole codice diverse da 00000 hanno un numero di 1 pari a 3,3 e 4, pertanto dmin = 3 Alcuni codici lineari a blocchi: 1. Codice a parità: In questo codice parole sorgenti di k bit vengono trasformate in parole codice di n = k + 1 bit. Il bit addizionale viene chiamato bit di parità, ed è selezionato in modo tale da far si che il numero totale di 1 nella parola codice sia sempre pari. La distanza di Hamming minima per questi codici è dmin = 2, pertanto un codice del genere può rilevare al massimo un errore e non è in grado di correggere errori. PAROLA SORGENTE 0000 0001 0010 0011 0100 0101 0110 0111
PAROLA CODICE 00000 00011 00101 00110 01001 01010 01100 01111
PAROLA SORGENTE 1000 1001 1010 1011 1100 1101 1110 1111
PAROLA CODICE 10001 10010 10100 10111 11000 11011 11101 11110 43
2. Codice con parità bidimensionale: Un raffinamento della tecnica basata sul controllo di parità è il controllo di parità bidimensionale. In questo metodo la parola sorgente è organizzata in una tabella (righe e colonne). 1 1 0 0 0
1 0 1 1 1
0 1 1 0 0
0 1 1 1 1
1 1 0 0 0
1 0 0 0 1
1 1 1 1 0
1 1 0 1 1
In questa figura i dati da spedire, 4 gruppi di 7 bit, sono stato organizzati in una tabella 4 x 7. Per ogni riga e per ogni colonna viene calcolato 1 bit di controllo di parità. Inoltre il bit di parità in basso a destra è un bit di parità calcolato su tutti i bit di dati (è uguale alla parità calcolata sia sulla colonna dei bit di parità, sia alla parità sulla riga di parità). Il controllo di parità bidimensionale può rilevare fino a 3 errori e si può correggere al massimo un errore.
ERRORE INDIVIDUATO ERRORE NON INDIVIDUATO MA RILEVATO
ERRORE INDIVIDUATO MA RILEVATO
3. Codici di Hamming: Questi codici sono stati originariamente progettati con dmin = 3, e quindi possono rilevare fino a 2 errori e correggere un singolo errore. Esaminiamo la relazione fra n e k per un codice di Hamming. Per costruire un codice di Hamming scegliamo un intero m >= 3. I valori di n e k vengono calcolati a partire da m: n = 2m – 1 k=n–m dove m >= 3 Ad esempio se scegliamo m = 3, abbiamo n = 7 e k = 4, cioè un codice di Hamming C(7,4) con dmin = 3.
44
La tabella sottostante (9.4) mostra questo codice: PAROLA SORGENTE PAROLA CODICE PAROLA SORGENTE PAROLA CODICE 0000 0000000 1000 1000110 0001 0001101 1001 1001011 0010 0010111 1010 1010011 0011 0011010 1011 1011100 0100 0100011 1100 1100101 0101 0101110 1101 1101000 0110 0110100 1110 1110010 0111 0111001 1111 1111111 Una copia di 4 bit della parola sorgente è data in input a un generatore che crea 3 bit di controllo r0, r1, r2 come mostrato di seguito: r0 = a2 + a1 + a0 r1 = a3 + a2 + a1 r2 = a1 + a0 + a3 Per esempio la parola sorgente 0011 viene trasformata nella seguente parola codice: a0 = 1 a1 = 1 a2 = 0 a3 = 0 r0 = a2 + a1 + a0 = 0 + 1 + 1 = 0 r1 = a3 + a2 + a1 = 0 + 0 + 1 = 1 r2 = a1 + a0 + a3 = 1 + 1 + 0 = 0 Quindi la parola codice corrispondente è: 0011010 E così anche le altre parole codice. • Vengono spediti a0, a1, a2, a3, r0, r1, r2 • Vengono ricevuti b0, b1, b2, b3, q0, q1, q2 Il modulo di controllo del ricevitore calcola i 3 bit della sindrome (s2s1s0) sommando, per ogni bit della sindrome, 4 dei 7 bit ricevuti: s0 = b2 + b1 + b0 + q0 s1 = b3 + b2 + b1 + q1 s2 = b1 + b0 + b3 + q2 Ovviamente le equazioni usate sono le stesse che sono state usate dal generatore, lato mittente, con il corrispondente bit di parità aggiunto ad ognuno delle equazioni. In questo caso la sindrome può assumere otto valori (da 000 a 111), che rappresentano otto diverse condizioni. Queste condizioni identificano o un’assenza di errore o la posizione di un singolo errore come mostrato nella tabella sottostante (9.5): 000 001 010 011 100 101 110 111 Sindrome Nessuno q0 q1 b2 q2 b0 b3 b1 Errore Nel caso non ci siano stati errori o nel caso in cui gli errori si siano verificati sui bit di parità (qo, q1, q2) il modulo di decodifica non effettua nessun cambiamento, ma estrae semplicemente i bit di dati b3, b2, b1, b0. Negli altri quattro casi invece, uno dei quattro bit deve essere cambiato per trovare la parola sorgente corretta. Rivedendo la tabella, quindi, se fosse stato q0 ad essere alterato per effetto di un errore, l’unico bit della sindrome che vale 1 è s0 e pertanto la sindrome vale 001. Se l’errore è nel bit b2 allora i bit s1 e s0 valgono 1 pertanto la sindrome vale 011. Se guardiamo la tabella superiore e prendiamo la parola sorgente 0111 questa abbiamo visto che diventa 0111001. Ora se la parola codice ricevuta è 0011001, la sindrome è 011 perché b3=0 b2=0 b1=1 b0=1 q2=0 q1=0 q0=1 s0 = b2 + b1 + b0 + q0 = 0 + 1 + 1 + 1 = 1 s1 = b3 + b2 + b1 + q1 = 0 + 0 + 1 + 0 = 1 s2 = b1 + b0 + b3 + q2 = 1 + 1 + 0 + 0 = 0 quindi come si evince dalla tabella 9.5, c’è un errore nel bit b2. Dopo aver cambiato il valore di questo bit da 0 a 1, la parola sorgente ricevuta è 0111. 45
Prestazioni: Un codice di Hamming può correggere un solo errore o rilevare due errori. Tuttavia c’è un modo per rilevare errori a raffica.
L’idea è quella di distribuire l’effetto di un errore a raffica su più parole codice in modo tale che una parola codice sia soggetta ad un solo errore. Sappiamo che quando spediamo dei dati, normalmente spediamo dei pacchetti di dati. Quindi per rendere un codice di Hamming resistente a errori a raffica di grandezza N, occorre costruire N parole codice a partire dal pacchetto di dati. Quindi anziché spedire le parola codice una alla volta, organizziamo le parole codice in una tavola e spediamo i bit di questa tavola una colonna per volta. Codici ciclici: Sono dei codici lineari a blocchi con una particolare proprietà. In un codice ciclico, facendo lo scorrimento (shift) ciclico di una parola codice si ottiene un’altra parola codice. Ad esempio, se 1011000 è una parola codice, allora anche 0110001, che è stata ottenuta con un shift a sinistra di una posizione, è una parola codice. Codici CRC (Cyclic Redundancy Check): PAROLA SORGENTE 0000 0001 0010 0011 0100 0101 0110 0111
PAROLA CODICE 0000000 0001011 0010110 0011101 0100111 0101100 0110001 0111010
PAROLA SORGENTE 1000 1001 1010 1011 1100 1101 1110 1111
PAROLA CODICE 1000101 1001110 1010011 1011000 1100010 1101001 1110100 1111111
La parola sorgente ha k bit, la parola codice ha invece n bit. Nel modulo di codifica, alla parola sorgente vengono aggiunti n-k bit con valore 0 nella parte di destra. La parola risultante da tale operazione viene data in input al generatore. Il generatore usa un divisore di grandezza n–k+1, che è conosciuto sia dal mittente che dal ricevitore. Il generatore divide la parola che riceve in input per il divisore. Il quoziente della divisione viene eliminato. Il resto della divisione viene aggiunto alla fine della parola sorgente originaria, per ottenere la parola codice da spedire. Il ricevitore riceve la parola codice. Nella trasmissione è possibile che tutto sia andato bene oppure che si siano verificati degli errori. Il modulo di decodifica del ricevitore invia una copia degli n bit ricevuti al modulo di controllo che è uguale al generatore. Esso effettua la divisione dei bit di input per il divisore e dà in output gli n-k bit che rappresentano il resto della divisione; tali bit costituiscono la sindrome. Se la sindrome è fatta di tutti 0 allora non ci sono stati errori e i k bit più a sinistra della parola codice vengono accettati come parola sorgente, altrimenti i dati ricevuti vengono ignorati, cioè viene rilevata la presenza di errori. 46
MODULO DI CODIFICA
MODULO DI DECODIFICA
Somme di controllo: Le somme di controllo vengono utilizzate da molti protocolli di rete, ma principalmente nello strato delle applicazioni, non nello strato di collegamento. Il funzionamento è molto semplice. Supponiamo che i nostri dati siano rappresentati da una lista di numeri ognuno rappresentabile con 4 bit (quindi compreso tra 0 e 15), che vogliamo spedire da una sorgente ad una destinazione. Oltre a spedire i numeri spediamo anche la somma dei numeri. Esempio: insieme dei numeri da spedire è 7, 11, 12, 0, 6 spediremo 7, 11, 12, 0, 6, 36. Il ricevitore somma i numeri che riceve tranne l’ultimo e confronta il valore della somma con l’ultimo numero. Se i due valori sono uguali allora non ci sono stati errori e accetta i numeri ricevuti, eliminando l’ultimo numero (somma); altrimenti ci sono stati errori e i dati non vengono accettati. 47
Variante: Anziché spedire la somma possiamo spedire il negativo della somma cosicché il ricevitore somma tutti i numeri ricevuti e se il risultato è 0 allora vuol dire che non ci sono errori; altrimenti errori. Esempio: insieme dei numeri da spedire è 7, 11, 12, 0, 6 spediremo 7, 11, 12, 0, 6, -36. Complemento a uno: Il metodo usato precedentemente ha un grosso difetto. I dati originali possono essere scritti tutti come un numero a 4 bit; la somma però può essere molto più grande. Una soluzione è data dal fatto che si può utilizzare l’aritmetica in complemento a uno. In questa aritmetica, quando un numero ha più di n bit, i bit più a sinistra oltre l’n-esimo vengono addizionati agli n bit più a destra; i numeri negativi, invece vengono rappresentati invertendo tutti i bit della rappresentazione del valore assoluto del numero, che equivale a sottrarre il valore assoluto del numero da 2n-1. Esempio: Supponiamo di dover rappresentare 21 con la notazione complemento a uno utilizzando solo 4 bit. Il numero 21 in binario è rappresentato con 5 bit: 10101. Pertanto occorre sommare ai primi 4 bit partendo da destra, 0101, il quinto bit, 1. 0101 + 1= -------0110
che equivale a 0*23 + 1*22 + 1*21 + 0*20 = 4 + 2 = 6
Supponiamo invece di dover rappresentare -6 con la notazione complemento a uno utilizzando solo 4 bit. Il valore assoluto, 6, in binario è 0110; invertendo tutti i bit otteniamo la rappresentazione in complemento a uno -6: 1001 che equivale a 1*23 + 0*22 + 0*21 + 1*20 = 8 + 1 = 9 Allo stesso risultato saremmo arrivati sottraendo da 24 – 1 = 15 il valore assoluto di -6: 15 – 6 = 9
48
CAPITOLO 10:
FUNZIONI DI CONTROLLO NELLO STRATO DI COLLEGAMENTO
Le funzioni di controllo dello strato di controllo includono il framing, il controllo degli errori, il controllo del flusso e i protocolli che permettono di trasmettere in modo affidabile i frame tra i nodi della rete. Framing: Lo strato fisico si occupa della sincronizzazione per assicurare che il mittente e il destinatario utilizzino gli stessi intervalli di tempo per rappresentare i bit tramite il segnale. Lo strato di collegamento, invece, deve organizzare i bit in gruppi chiamati frame, in modo tale che ogni frame sia distinguibile da ogni altro frame. Il framing si occupa del problema di separare un frame da spedire da una particolare sorgente a una particolare destinazione, da tutti gli altri frame. Normalmente il messaggio che il mittente deve spedire alla destinazione, viene suddiviso in vari frame. Uno dei motivi di questa suddivisione è quello di limitare la dimensione dei singoli frame. I frame possono avere dimensione fissa o variabile. Nel framing a dimensione fissa, non c’è bisogno di utilizzare delle delimitazioni per separare i frame; la dimensione stessa del frame può essere usata come delimitatore. Es.: Reti ATM con frame di dimensione fissa chiamati celle. Nel framing a dimensione variabile, occorre segnalare in qualche modo la fine di un frame e l’inizio di un frame successivo. Vengono utilizzati per questo motivo due approcci: • Protocolli orientati ai caratteri (byte):
I dati vengono organizzati in caratteri di 8 bit. Quindi anche l’intestazione, che contiene l’indirizzo della sorgente e altre informazioni di controllo, la coda, che contiene i bit ridondanti per la rilevazione e correzione di errori, sono anch’esse organizzate in gruppi di 8 bit. Dunque, per separare un frame dal successivo, viene aggiunto un carattere speciale all’inizio e alla fine di un frame. Tale carattere è chiamato delimitatore. Tale delimitatore può essere scelto tra uno qualsiasi dei caratteri. Quale è quindi il problema? Il delimitatore può apparire proprio nei dati stessi e quindi essere uguale ad un carattere che si vuole spedire. Se questo succede, il destinatario, quando legge la sequenza di 8 bit di dati che è uguale al delimitatore, la interpreta come la fine del frame. Per ovviare a questo problema, viene utilizzato un carattere speciale che viene inserito nei dati ogni qual volta si debbano spedire 8 bit che sono uguali al delimitatore. Questo carattere speciale viene chiamato carattere di escape (ESC). Quando il destinatario legge i dati e incontra il carattere speciale ESC, lo rimuove dai dati stessi e tratta il prossimo carattere come dati, anche se questo carattere è il delimitatore. Questa tecnica risolve il problema della presenza del delimitatore nei dati ma crea il problema analogo della presenza dello stesso carattere ESC nei dati. Per risolvere questo problema basta inserire un altro carattere ESC prima di ogni occorrenza di una sequenza di 8 bit di dati che corrisponde al carattere ESC. Questa tecnica viene chiamata byte stuffing. La tecnica di byte di stuffing consiste nell’inserimento di 1 byte (ESC) addizionale ogni qual volta nel testo compare il carattere delimitatore o il carattere ESC stesso.
49
•
Protocolli orientati ai bit:
La sezione dei dati di un frame è una sequenza di bit. Anche in questo caso, oltre all’intestazione e opzionalmente alla coda, occorre utilizzare un delimitatore per separare un frame dall’altro. La maggior parte dei protocolli utilizza un delimitatore di 8 bit, in particolare la sequenza 01111110, per segnalare l’inizio e la fine di un frame. Questo delimitatore può creare lo stesso problema visto per i protocolli orientati ai byte. Cioè se la particolare sequenza di bit utilizzata per il delimitatore appare nei dati, dobbiamo in qualche modo informare il destinatario che questi bit non rappresentano il delimitatore ma sono parte dei dati. Questo problema viene risolto inserendo un singolo bit usando la seguente regola: se nei dati c’è una sequenza di bit fatta da uno 0 e cinque 1 consecutivi viene aggiunto un bit con valore 0 dopo i cinque bit che valgono 1. L’inserimento di questo bit addizionale fa si che nella sequenza di bit non possa mai comparire una sequenza che consiste di uno 0 e sei 1 consecutivi; pertanto il delimitatore non potrà mai apparire nei dati. Il destinatario eliminerà questo bit addizionale utilizzando lo stesso criterio: ogni volta che nei dati trova uno 0 e cinque 1 consecutivi e poi ancora uno 0, eliminerà quest’ultimo bit (0). Questo bit verrà sempre inserito sia che la parola contenga cinque 1 consecutivi sia che contenga sei, sette, otto, ….. 1 consecutivi. La tecnica del bit stuffing consiste nell’inserire un bit addizionale (0) ogni qual volta cinque 1 consecutivi seguono uno 0 nei dati.
Controllo del flusso e degli errori: •
Controllo del flusso: è un insieme di procedure che dicono al mittente quanti dati possono essere trasmessi prima di ricevere un riscontro da parte del destinatario. Questo meccanismo serve a non mettere in difficoltà il destinatario, cioè quando i dati arrivano al destinatario questi dati devono essere elaborati e messi in un buffer in attesa che gli strati superiori consumino questi dati. Ora se i dati arrivano troppo velocemente, è possibile che lo spazio del buffer si esaurisca. Pertanto il destinatario deve poter informare il mittente che il buffer di ricezione sta per riempirsi; il mittente non dovrà spedire altri dati, fino a che non si libera spazio nel buffer. • Controllo degli errori: Controllare gli errori significa sia rilevarli che correggerli. Nello strato di collegamento quindi il controllo degli errori significa rilevare la presenza di errori e ritrasmettere i frame nei quali si sono verificati errori. Protocolli: due tipologie di protocolli: • Protocolli per canali senza rumore • Protocolli per canali soggetti a rumore I protocolli della prima categoria non possono essere usati in quanto non esistono canali senza rumore. Tutti i protocolli di cui parleremo sono unidirezionali, nel senso che i frame di dati viaggiano da un nodo, chiamato mittente, a un altro nodo, chiamato destinatario. Nella realtà i protocolli di comunicazione sono bidirezionale: i dati fluiscono in entrambe le direzioni. 50
Protocolli dei canali senza rumore: Protocollo semplice, Protocollo Stop-and-Wait. •
Protocollo semplice: è un protocollo che non ha né controllo del flusso né controllo degli errori. È un protocollo unidirezionale in cui i frame viaggiano dal mittente al destinatario. In questo protocollo assumiamo che il destinatario possa elaborare i frame in arrivo in un tempo trascurabile. Pertanto il frame viene immediatamente rimosso dal buffer di ricezione e viene passato allo strato di rete.
Progetto: Il mittente non può spedire un frame fino a che lo strato di rete non fornisce un pacchetto da spedire, mentre il destinatario non può consegnare un pacchetto di dati al proprio strato di rete prima che un frame arrivi al destinatario. Pertanto l’esecuzione del protocollo è guidato da eventi: nel mittente l’evento è una richiesta di spedizione da parte dello strato di rete; nel destinatario l’evento è la consegna del frame da parte dello strato fisico. Algoritmo 10.1 Mittente Protocollo Semplice 1. 2. 3. 4. 5. 6.
while(true) { WaitForEvent(); if(Event(RequestToSend()) { GetData();
//ciclo infinito //Aspetta un evento //Si può spedire? //prende un pacchetto di //dati dallo strato di rete
7.
MakeFrame();
//crea un frame con questi dati
8.
SendFrame();
//Spedisci il frame allo strato //fisico
9. 10.
} }
L’algoritmo ha un ciclo infinito. L’esecuzione è guidata da eventi, ciò significa che il programma rimane in attesa (linea 3) fino a che non si verifica un evento (linea 4). Quando l’evento si verifica (una richiesta dallo strato di rete) le linee da 6 a 8 sono eseguite. Il programma ripete il ciclo e di nuovo si ferma alla linea 3 in attesa del prossimo evento. Algoritmo 10.2 Destinatario Protocollo Semplice 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
while(true) { WaitForEvent(); if(Event(ArrivalNotification)) { ReceiveFrame(); ExtractData(); DeliverData(); } }
//Ciclo infinito //Aspetta un evento //E’ arrivato un frame //Ricevi il frame da strato fisico //estrai i dati dal frame //Consegna dati allo strato di rete
Quest’ algoritmo è simile a quello precedente solo che l’evento è l’arrivo di un frame. Quando arriva un frame, lo strato di collegamento riceve questo frame dallo strato Fisico. 51
Esempio: In questa figura il mittente spedisce una sequenza di frame e non si preoccupa di nulla. La spedizione di un frame è rappresentata da un rettangolo inclinato; l’altezza del rettangolo rappresenta il tempo fra la trasmissione del primo e dell’ultimo bit del frame; l’inclinazione del rettangolo rappresenta il tempo di propagazione del segnale. • Protocollo Stop-and-wait: a questo punto eliminiamo il fatto che il destinatario sia capace di elaborare un frame istantaneamente. Pertanto quando arriva un frame al destinatario, esso dovrà elaborarlo, memorizzarlo in un buffer e mantenerlo nel buffer fino a che lo strato di rete legge i dati. Se i frame arrivano ad una velocità maggiore rispetto a quella che il destinatario riesce a gestire, allora può capitare che quest’ultimo debba cancellare dei frame in arrivo. Per evitare questa situazione il destinatario deve in qualche modo dire al mittente di rallentare la spedizione, pertanto deve esserci un riscontro che il destinatario spedisce al mittente (ACK). Quindi il mittente dopo che ha spedito un frame si ferma in attesa dell’ACK.
Progetto: In questo figura possiamo notare che oltre al traffico di dati nella direzione dal mittente al destinatario, c’è anche un traffico che va nell’altra direzione (riscontri). Algoritmo 10.3 Mittente Stop-and-Wait 1. 2. 3. 4. 5. 6. 7.
while(true) canSend = true; { WaitForEvent(); if(Event(RequestToSend() && canSend)) { GetData();
//ciclo infinito //Si possono spedire frame //Aspetta un evento //Si può spedire? //prende un pacchetto di //dati dallo strato di rete
8.
MakeFrame();
//crea un frame con questi dati
9.
SendFrame();
//Spedisci il frame allo strato //fisico
canSend=false;
//non si possono spedire altri //frame fino a che non arriva ACK
10. 11. 12. 13. 14. 15. 16. 17. 18.
} WaitFoEvent(); if(Event(ArrivalNotification) { ReceiveFrame(); canSend = false; }
//Aspetta un evento //E’ arrivato un ACK? //ricevi il frame di ACK //non si possono spedire dati
}
52
In questo caso possono verificarsi due eventi: una richiesta di spedizione dati da parte dello strato rete (RequestToSend) oppure una notifica di arrivo di un riscontro da parte dello strato fisico (ArrivalNotification). Inoltre viene utilizzata la variabile sentinella canSend che assume il valore true quando un nuovo frame può essere spedito e un valore false quando è in attesa di un riscontro. Algoritmo 10.4 Destinatario Stop-and-Wait 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
while(true) { WaitForEvent(); if(Event(ArrivalNotification)) { ReceiveFrame(); ExtractData(); DeliverData(); SendFrame(); } }
//Ciclo infinito //Aspetta un evento //E’ arrivato un frame? //Ricevi il frame //estrai i dati dal frame //Consegna dati allo strato di rete //Spedisci un frame di ACK
In quest’ algoritmo dopo l’arrivo di un frame a differenza dell’algoritmo 10.2, il destinatario spedisce un frame di riscontro al mittente.
Esempio: In questa figura il mittente spedisce un frame e aspetta la ricezione di un ACK, quando il riscontro arriva il mittente spedisce il frame successivo.
53
Protocolli dei canali soggetti a rumore: Stop-and-Wait ARQ, Go-back-N ARQ, Ripetizione selettiva ARQ. • Protocollo Stop-and-Wait ARQ: è un Protocollo con richiesta di Ripetizione automatica (ARQ) che aggiunge un meccanismo per il controllo degli errori al protocollo Stop-and-Wait. Come funziona? -. In pratica quando un frame arriva verrà effettuato un controllo per verificare la presenza di errori. Se ci sono errori, il frame viene eliminato e non viene spedito nessun riscontro. Il mittente capirà che si è verificato un problema con il frame perché non riceverà nessun riscontro. -. I frame vengono numerati per capire se si è perso un frame, se è un frame duplicato o se si trova in un ordine diverso. -. Questo protocollo prevede la rispedizione sia dei frame arrivati con errore sia dei frame perduti. -. Se il destinatario non risponde con un riscontro entro un certo tempo allora il frame verrà automaticamente rispedito dal mittente. -. Per fare ciò quindi il mittente, quando spedisce, mantiene una copia del frame e fissa una scadenza (timeout). Se non arriva nessun riscontro prima della scadenza del timeout, il mittente rispedisce il frame. -. Anche il frame contenente il riscontro necessita di informazioni per il controllo degli errori. Se il mittente riceve un ACK con degli errori, tale riscontro viene ignorato, in quanto al mittente serviva solo la prova che il frame inviato fosse arrivato. Numeri di sequenza: Sia i frame di dati sia i frame di riscontro devono essere numerati. Pertanto i frame avranno nell’intestazione un campo per specificare il numero di sequenza del frame. A questo punto ci domandiamo quanto debba essere grande il campo che contiene il numero di sequenza. La grandezza di questo campo specifica il numero massimo che possiamo utilizzare come numero di sequenza. Se tale campo ha m bit, allora i possibili numeri di sequenza vanno da 0 a 2m – 1. Il primo frame può essere numerato con 0, il secondo con 1 e così via. Quando arriviamo al frame numerato con 2m – 1, non potremo far altro che riprendere a numerare i successivi frame dal numero 0. Per motivi di efficienza vogliamo utilizzare un valore di m piccolo per minimizzare la grandezza dell’intestazione, ma allo stesso tempo sufficientemente grande per non creare ambiguità nell’identificazione dei frame. Comunque in questo protocollo utilizzeremo soltanto i numeri di sequenza 0 e 1, usati in alternanza. Numero di sequenza per i riscontri: Se un frame di dati è arrivato al destinatario senza errori e ha un numero di sequenza 0, allora il destinatario invierà un frame di ACK con un numero di sequenza 1, se invece il destinatario riceve un frame 1 invierà un ACK con numero di sequenza 1.
54
Progetto: Nella figura precedente il mittente mantiene una copia dell’ultimo frame trasmesso fino a che non riceve un ACK per quel frame. Il mittente mantiene una variabile S (0,1), che specifica il numero di sequenza del prossimo frame da spedire. Il destinatario mantiene una variabile R, che specifica il numero di sequenza del prossimo frame che il destinatario si aspetta di ricevere. Il valore S viene incrementato di 1 usando l’aritmetica modulo 2. Il destinatario fa la stessa cosa. Algoritmo 10.5 Mittente Stop-and-Wait ARQ 1. 2. 3. 4. 5. 6. 7. 8.
S=0; canSend=true; while(true) { WaitForEvent(); if(Event(RequestToSend() && canSend)) { GetData();
9.
//Primo frame da spedire //Permetti la spedizione //ciclo infinito //Aspetta un evento //Si può spedire? //prende un pacchetto di //dati dallo strato di rete
MakeFrame(S);
//crea un frame con questi //dati e aggiunge il seqNo
10. 11.
StoreFrame(S); SendFrame(S);
//Mantieni una copia del frame //Spedisci il frame allo strato //fisico
12. 13.
StartTimer(); S = S + 1 mod 2;
//Avvia il timer //Frame successivo con addizione //modulo 2
14.
canSend=false;
//non si possono spedire altri //frame
18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35.
} WaitFoEvent(); if(Event(ArrivalNotification) { ReceiveFrame(ackNo); if(not corrupted && ackNo == S) { StopTimer(); PurgeFrame(S-1 mod 2); canSend=true; } } if(Event(TimeOut)) { StartTimer() ResendFrame(S-1 mod 2); }
//Aspetta un evento //E’ arrivato un ACK //ricevi il frame di ACK //L’ACK è valido? //Ferma il timer //La copia del frame non serve più //si possono spedire frame
//Il timeout è scaduto? //Avvia il timer //Rispedisci il frame
}
Algoritmo 10.6 Destinatario Stop-and-Wait ARQ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
R=0; while(true) { WaitForEvent(); if(Event(ArrivalNotification)) { ReceiveFrame(); if(corrupted(frame)) GoTo 3; if(seqNo == R) { ExtractData(); DeliverData(); R = R + 1 mod 2; } SendFrame(R); } }
//Primo frame atteso 0 //Ciclo infinito //Aspetta un evento //E’ arrivato un frame //Ricevi il frame //il frame è corrotto? //Controllo passa alla linea 3 //il frame arrivato è valido? //estrai i dati dal frame //Consegna dati allo strato di rete //Addizione modulo 2 //Spedisci un frame di ACK
55
Esempio: In questa figura il frame 0 viene spedito e il corrispondente ACK viene ricevuto. Il frame 1 viene perso; allo scadere del timeout il frame viene rispedito e questa volta viene ricevuto. Anche il corrispondente ACK viene ricevuto e il timeout per il frame viene eliminato. Il successivo frame (0) viene spedito, ma il riscontro di questo frame si perde. Il mittente non Ricevendo il riscontro rispedisce il frame (0) allo scadere del timeout. (Il mittente non può sapere se il frame si è perso o se si è perso il riscontro) La rispedizione del frame(0) avviene con successo e anche il suo riscontro viene ricevuto senza problemi. Efficienza: Il protocollo Stop-and-Wait ARQ è molto inefficiente per due motivi: a) se il canale ha una larghezza di banda ampia e ritardi di trasmissione relativamente elevati. b) Non si può spedire un nuovo frame fino a che no si riceve l’ACK. Esempio: Protocollo Stop-and-Wait ARQ su canale con larghezza di banda 1 Mbps. Il ritardo di trasmissione andata e ritorno è di 20 ms. La dimensione dei frame utilizzati è di 1000 bit. Il protocollo Stop-and-Wait ARQ spedisce 1000 bit ogni 20 ms. Noi sappiamo che il canale è di 1 Mbps cioè 1000000 bit per secondo, quindi se volessimo sfruttare tutto il canale potremmo spedire (1000000 bit x 20 x 10-3) per secondo = 20000 bit per secondo, ma poiché dobbiamo attendere il riscontro di ACK ogni 1000 bit spediti allora utilizzeremo il canale solo al 5% rispetto alla sua capacità. (1000 / 20000 = 0,05 quindi 5%). Quindi per sfruttare a massimo la capacità del canale possiamo spedire più frame prima di fermarsi ad aspettare un ACK. Supponiamo di spedire 15 frame prima di fermarsi ad aspettare un riscontro. In questo caso i bit spediti in 20 ms sono 15000. Pertanto la percentuale di utilizzo del canale sarebbe (15000 / 20000 = 0,75) il 75%. • Protocollo go-back-NRQ: è un protocollo che sfrutta al meglio la capacità di un canale trasmissivo, cioè permette la spedizione di più frame prima di fermarsi ad aspettare un riscontro. Numeri di sequenza: In questo caso poiché più frame possono essere spediti non è più adatta la numerazione fatta per il protocollo Stop-and-Wait che utilizzava soltanto i numeri di sequenza 0 e 1. Quindi occorrono più numeri di sequenza. L’intestazione del frame ha un campo di m bit per specificare il numero di sequenza. Pertanto i numeri di sequenza vanno da 0 a 2m – 1. Arrivati al numero massimo 2m – 1 si riprende la numerazione da 0. I numeri di sequenza, quindi sono interi modulo 2m . Ad esempio se m = 4 i numeri di sequenza sono: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ….. Finestra scorrevole: Il funzionamento del protocollo Go-back-N si basa sul concetto di finestra scorrevole, quindi i frame sono numerati in sequenza. La finestra scorrevole è una “finestra immaginaria” su questa sequenza che definisce quali sono i frame sui quali si può Operare. Solo quelli della finestra possono essere spediti. Il mittente e il destinatario avranno una propria versione della finestra; la finestra nel mittente specifica i frame che 56
sono in fase di spedizione, mentre la finestra del destinatario definisce i frame che esso può ricevere in quel momento. Le due finestre non sono necessariamente uguali. Finestra del mittente:
La finestra si è spostata di tre posizioni a destra in seguito all’arrivo dei riscontri per i frame 0,1,2
Possiamo notare nella figura precedente che alcuni frame della finestra potrebbero essere già stati spediti, ma sono in attesa di un riscontro, altri invece devono ancora essere spediti. Sebbene ci siano 2m numeri di sequenza da utilizzare la dimensione massima della finestra è di 2m – 1. In ogni istante la finestra divide tutti i numeri di sequenza in quattro zone: la zona che precede la finestra è composta dai frame che hanno ricevuto un ACK, la seconda zona comprende quei frame all’interno della finestra che sono stati spediti ma ancora non hanno ricevuto un ACK, la terza zona comprende quei frame all’interno della finestra che ancora non sono stati spediti, la quarta zona è quella costituita dai frame che seguono la finestra. Questi ultimi frame non possono essere utilizzati finché la finestra non scorre e li ricopre. Di conseguenza verranno utilizzate tre variabili, che definiscono l’inizio, la fine e il punto che divide i frame spediti da quelli ancora da inviare, per le finestre: Æ primo frame della finestra del mittente. -. Sf -. Sn Æ prossimo frame da spedire Æ dimensione della finestra mittente -. Ssize Finestra del destinatario:
La finestra scorrevole del destinatario consiste di un solo frame, è definita da una sola variabile (R). La finestra scorre a destra quando il frame nella finestra viene ricevuto, lo scorrimento è di una sola posizione. I frame quindi devono arrivare in ordine, altrimenti vengono eliminati. La finestra del destinatario divide i numeri di sequenza in tre zone: la prima comprende i frame che sono stati già ricevuti e dei quali è stato già spedito il riscontro, la seconda comprende il frame della finestra ed è il frame che il destinatario si aspetta di ricevere, la terza comprende i frame alla destra della finestra i quali non possono essere ancora ricevuti. Timeout: In questo protocollo quindi occorre utilizzare dei timeout per la rispedizione dei frame non riscontrati. Alla scadenza del timeout del primo frame, vengono rispediti tutti i frame per i quali non si è ricevuto un riscontro. Riscontri: Il destinatario spedisce un ACK quando il frame viene correttamente ricevuto nell’ordine stabilito dai numeri di sequenza. Se un frame arriva con degli errori o fuori ordine il destinatario lo elimina. Poiché il destinatario non manda nessun riscontro allo scadere del 57
timeout il mittente rispedirà il primo frame senza riscontro ed eventualmente anche i frame successivi. Il destinatario non deve spedire un riscontro per ogni frame ricevuto ma può anche spedire un ACK cumulativo. Rispedizione di un frame: Quando il timeout scade, il mittente rispedisce tutti i frame già spediti ma non ancora riscontrati. Per esempio supponiamo che il mittente abbia già spedito il frame 6 ma scada il timeout per il frame 3. Questo significa che il frame 3 non è stato riscontrato; il mittente quindi ritorna indietro al frame 3 e rispedisce i frame 3, 4, 5, 6. Algoritmo 10.7 Mittente Go-back-N ARQ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Ssize = 2m -1; Sf = 0; Sn = 0; while(true) { WaitForEvent(); if(Event(RequestToSend()) { if(Sn - Sf >= Ssize) Goto 5 GetData();
//Dimensione finestra //inizio della finestra //prossimo frame da spedire //ciclo infinito //Aspetta un evento //Si può spedire? //La finestra è piena? //Controllo passa alla linea 5 //prende un pacchetto di //dati dallo strato di rete
12.
MakeFrame(Sn);
//crea un frame con questi //dati
13. 14. 15.
StoreFrame(Sn); SendFrame(Sn); Sn = Sn + 1;
//Mantieni una copia del frame //Spedisci il frame a strato fisico //incrementa al prossimo frame da //spedire
16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47.
if(timer not running) StartTimer();
//Il timer è avviato? //Avvia il timer
} if(Event(ArrivalNotification)) { Receive(ACK); if(corrupted(ACK)) Goto 5; if((ackNo > Sf)&&(ackNo <= Sn)) { while(Sf <= ackNo) { PurgeFrame(Sf); Sf = Sf + 1; } } if(ackNo == Sn) StopTimer(); } if(Event(TimeOut)) { StartTimer(); Temp = Sf; while(Temp < Sn) { SendFrame(Sf); Sf = Sf + 1; } }
//è arrivato un ACK? //ricevi il riscontro //il riscontro è corrotto? //Controllo passa alla linea 5 //l’ACK è valido?
//Cancella il frame Sf //Scorri la finestra a destra
//L’ackNo è l’ultimo frame? //Ferma il timer
//Il timeout è scaduto? //Riavvia il timer e rispedisci //tutti i frame dal primo frame //della finestra (Sf) fino a Sn.
}
Il controllo fatto alla linea 9 fa sì che il numero di frame spediti non sia più grande della finestra, quindi se la finestra è piena, la richiesta viene ignorata e lo strato di rete dovrà riprovare successivamente. Per la gestione dell’arrivo di un riscontro invece la cosa è un po’ più complicata. Un frame che contiene errori viene ignorato, mentre se il riscontro è valido allora la finestra viene fatta scorrere fino alla posizione in cui si trova il frame del quale si è ricevuto l’ACK. La scadenza del timeout è più complicata da gestire: occorre rispedire tutti i frame già spediti a partire da quello che ha causato lo scadere del timeout.
58
Algoritmo 10.8 Destinatario Go-back-N ARQ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
R=0; while(true) { WaitForEvent(); if(Event(ArrivalNotification)) { ReceiveFrame(); if(corrupted(frame)) GoTo 3; if(seqNo == R) { ExtractData(); DeliverData(); R = R + 1; SendFrame(R); } } }
//Primo frame atteso //Ciclo infinito //Aspetta un evento //E’ arrivato un frame? //Ricevi il frame //il frame è corrotto? //Controllo passa alla linea 3 //il frame arrivato è valido? //estrai i dati dal frame //Consegna dati allo strato di rete //La finestra scorre di 1 a dx //Spedisci un frame di ACK
I frame che contengono errori o che arrivano fuori ordine vengono ignorati. Se invece il frame ricevuto è quello che il destinatario si aspetta (seqNo == R) i dati vengono accettati e consegnati allo strato di rete e la finestra viene fatta scorrere di una posizione a destra e viene spedito l’ACK.
Esempio: In questa figura m = 3 quindi la dimensione della finestra è 2m – 1 = 7. In quest’esempio i dati vengono spediti dal mittente al destinatario senza problemi. I riscontri invece a volte vengono persi. Parte il timer: Allora viene spedito il frame 0 (Sf=0; Sn=1) il destinatario si aspettava di ricevere il frame 0 (R=0) allora spedisce l’ACK (riscontro per ricevere il frame 1) e scorre la finestra a destra (R=1). La finestra del mittente scorre a destra di una posizione (in questo caso quindi Sf=1; Sn=1). Il mittente spedisce il frame 1 (Sf=1; Sn=2), il destinatario riceve questo frame perché si aspettava di ricevere il frame 1 (R=1) e spedisce l’ACK (riscontro per ricevere il frame 2) e scorre la finestra (R=2); Tale riscontro viene perso. Nel frattempo il mittente spedisce il frame 2 (Sf=1; Sn=3) e il frame 3 (Sf=1; Sn=4). Il destinatario riceve il frame 2 che era quello che si aspettava di ricevere (R=2) e spedisce l’ACK (riscontro per ricevere il frame 3), scorre la finestra a destra (R=3). Il mittente riceve l’ACK, che in questo caso è un ACK cumulativo (cioè pur non essendo arrivato l’ACK per il frame 1 arriva l’ACK per il frame 2 quindi questo significa che l’ACK precedente si era semplicemente perso) e scorre la finestra di due posizioni a destra (Sf=3,Sn=4). Il mittente riceve anche l’ACK del frame 3 e scorre la finestra a destra di una posizione (Sf=4; Sn=4). Scade il timer.
59
Esempio: Parte il timer: Il mittente spedisce il frame 0, il destinatario riceve il frame 0 e spedisce l’ACK per ricevere il frame 1 e scorre la finestra di una posizione a destra (R=1). Il mittente spedisce il frame 1 (Sf=1; Sn=2), tale frame viene perso. Il mittente continua a spedire il frame 2 (Sf=1; Sn=3), il frame 3 (Sf=1; Sn=4). Scade il timer: Si ritorna indietro al frame del quale si è ricevuto il riscontro (frame 0 quindi Sf=1; Sn=1). Viene rispedito quindi il frame 1 (Sf=1; Sn=2) e il frame 2 (Sf=1; Sn=3). Il destinatario riceve il frame 1, spedisce l’ACK e scorre la finestra (R=2). Il destinatario riceve ancora il frame 2, spedisce l’ACK e scorre la finestra (R=3). E via dicendo gli altri frame. N.B: Il protocollo Stop-and-Wait ARQ è un caso speciale del protocollo Go-back-N ARQ, in cui la finestra del mittente ha grandezza pari a 1. In altre parole, per il protocollo Stop-andWait ARQ si ha che m=1 e quindi 2m – 1 = 1. •
Protocollo Ripetizione selettiva ARQ: Il protocollo go-back-N ARQ è molto inefficiente per un canale dove si verificano spesso errori. Infatti se si perde solo il primo frame vengono comunque rispediti anche gli altri. Quindi questo consuma la capacità trasmissiva del canale e quindi rallenta la trasmissione. Quindi per risolvere questo problema è stato introdotto questo nuovo protocollo, ripetizione selettiva ARQ. In pratica si fonda sul fatto di non far rispedire i frame che arrivano fuori ordine, ma rispedire solo i frame danneggiati o persi. Finestre: la finestra del mittente è più piccola di quella usata per il protocollo go-back-N ARQ. La dimensione quindi è 2m – 1. La finestra del destinatario invece è totalmente diversa da quella utilizzata nel protocollo go-back-N ARQ. La dimensione quindi è uguale alla finestra del mittente: 2m – 1. Poiché le dimensioni delle due finestre sono uguali, tutti i frame nella finestra del mittente possono arrivare fuori ordine e non verranno scartati. Il destinatario può mantenerli fino a che non li riceve tutti. Si noti che il destinatario non consegna i frame ricevuti fuori ordine allo strato di rete.
60
Algoritmo 10.9 Mittente Ripetizione Selettiva ARQ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Ssize = 2m - 1; Sf = 0; Sn = 0; while(true) { WaitForEvent(); if(Event(RequestToSend()) { if(Sn - Sf >= Ssize) Goto 5 GetData();
//Dimensione finestra //inizio della finestra //prossimo frame da spedire //ciclo infinito //Aspetta un evento //Si può spedire? //La finestra è piena? //Controllo passa alla linea 5 //prende un pacchetto di //dati dallo strato di rete
12.
MakeFrame(Sn);
//crea un frame con questi //dati
13. 14. 15.
StoreFrame(Sn); SendFrame(Sn); Sn = Sn + 1;
//Mantieni una copia del frame //Spedisci il frame a strato fisico //incrementa al prossimo frame da //spedire
StartTimer(Sn);
//Avvia il timer per Sn
16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 32. 33. 34. 35. 36. 37. 38. 39. 40. 42. 43. 44. 45. 46. 47. 48. 49.
} if(Event(ArrivalNotification)) { Receive(frame); if(corrupted(frame)) Goto 5; if(frameType == NACK) if(nakNo between Sf and Sn) { resend(nackNo); StartTimer(nakNo); } if(frameType == ACK) if(ackNo beetwen Sf and Sn) { while(Sn < ackNo) { Purge(Sf); StopTimer(Sf); Sf = Sf + 1; } } } if(Event(TimeOut(t))) { StartTimer(t); SendFrame(t); }
//è arrivato un ACK? //ricevi l’ACK o il NACK //il riscontro è corrotto? //Controllo passa alla linea 5 //Il riscontro è negativo? //il riscontro è compreso tra Sf and Sn //rispedisci il frame //Riavvia il timer per quell frame //il riscontro è positive? //il riscontro è compreso tra Sf and Sn
//Elimino il frame Sf //Fermo il timer relativo a Sf //scorre la finestra
//Il timeout è scaduto //Avvia il timer per t //Spedisce il frame t
}
In questo algoritmo utilizziamo un timeout per ogni singolo frame spedito. Inoltre il destinatario può spedire sia riscontri positivi (ACK) sia riscontri negativi (NAK). Un NAK richiede la rispedizione di un singolo frame, quello che il destinatario non ha ricevuto. La scadenza del timeout genera la rispedizione solo del frame per il quale il timeout è scaduto.
61
Algoritmo 10.10 Destinatario Ripetizione Selettiva ARQ 1. 2.
R=0; NakSent=false;
3.
AckNeeded=false;
4. 5.
Repeat(for all slots) Marked(slot)=false;
6. 7. 8. 9. 10. 11. 12. 13.
//inizio finestra //variabile sentinella che //specifica il riscontro negativo //variabile sentinella che //specifica i riscontri positivi //Ripeti per tutti gli slots //inizializzo tutti gli slot //a false, quando vale true //significa che il corrispondente //frame è stato ricevuto
while(true) { WaitForEvent(); if(Event(ArrivalNotification)) { Receive(frame) if(corrupted(frame)&&(NOT nakSent))
14. 15. 16.
{
17. 18. 19.
Goto 7; } if((seqNo <> R)&&(NOT NakSent))
20. 21. 22.
{
SendNAK(R); NakSent=true;
//Aspetta un evento //Sono arrivati dei dati? //Ricevi il frame //Se il frame è corrotto e non è //stato spedito ancora un NAK
//Spedisci un NAK //poni NakSent a true in modo da non //permettere la spedizione di altri //NAK
//Se il numero di sequenza del frame //ricevuto è diverso da quello che //il destinatario aspettava (R) e //non è stato spedito un NAK
SendNAK(R); NakSent=true;
23.
//ciclo infinito
//Spedisci il NAK per R //poni NakSent a true in modo da non //permettere la spedizione di altri //NAK
if((seqNo in window)&&(!Marked(seqNo)) //se il frame è nella finestra del //destinatario se quel frame non era //ancora stato memorizzato nello //slot corrispondete
24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42.
{ StoreFrame(seqNo); Marked(seqNo)=true; while(Marked(R)) { DeliverData(R); Purge(R); R = R + 1; AckNeeded=true; } if(AckNeeded) { SendAck(R); AckNeeded=false; NakSent=false; }
//memorizza quel frame //segna come ricevuto nello slot
//Consegna dati allo strato di rete //Cancella R //Scorri la finestra
//spedisco l’ACK per R che è l’ultimo
} } }
La variabile nakSent serve a tener traccia dei riscontri negativi spediti, la variabile ackNeeded Invece serve a tener traccia dei riscontri positivi da spedire. Entrambe vengono inizializzate a False. Per ogni elemento della finestra del mittente viene utilizzata una variabile, chiamata Marked, che vale true quando il corrispondente frame è stato ricevuto. Inizialmente tutte le variabili Marked vengono inizializzate a false; Quindi quando il destinatario riceve un frame se il frame è danneggiato e non è ancora stato spedito un NAK allora viene spedito un NAK, per dire al mittente che il destinatario non ha ancora ricevuto i frame che si aspetta di ricevere. Se invece 62
il frame viene correttamente ricevuto e il suo numero di sequenza è all’interno della finestra del destinatario, il frame viene memorizzato e la corrispondente variabile Marked viene aggiornata a true. Se una serie consecutiva di frame a partire dall’estrema sinistra della finestra del mittente, è stata ricevuta, allora questi frame possono essere spediti allo strato di rete e quindi la finestra può scorrere verso destra.
Esempio: Figura precedente. Per ogni frame spedito o rispedito occorre un timeout Il timeout per il frame 0 viene fatto partire alla spedizione del frame, ma viene eliminato quando arriva il riscontro per questo frame. Il timeout per il frame 1 viene fatto partire alla spedizione del frame ma poiché il frame non arriva al destinatario, viene fatto partire una seconda volta quando arriva un NAK che causa la rispedizione del frame, e infine viene eliminato all’arrivo dell’ACK per il frame 1. Nel destinatario quando arrivano i frame vengono memorizzati nel buffer, tuttavia se non vi è una serie consecutiva di frame a partire dall’estrema sinistra, questi non possono essere spediti allo strato di rete. Piggyback: I tre protocolli descritti sono tutti unidirezionali. I frame vanno in una sola direzione. In situazioni reali, i frame di dati normalmente viaggiano in entrambe le direzioni. Dati due nodi A e B che vogliono comunicare, ci sono frame di dati che viaggiano da A a B, e frame di dati che viaggiano da B a A. Ovviamente questo comporta la presenza di frame ACK e NAK che devono viaggiare sia da B ad A sia da A a B. Quindi per questo viene utilizzata la tecnica del piggyback. L’idea di questa tecnica è quella di sfruttare i frame di dati che viaggiano da A a B in modo tale che essi portino con sé informazioni di controllo (riscontri) che A vuol far sapere a B. Ovviamente vale anche il viceversa, cioè da B ad A.
63
CAPITOLO 11:
ACCESSO MULTIPLO
Lo strato di collegamento può essere pensato come composto da due sottostrati:
il sottostrato superiore gestisce le funzioni di controllo, mentre quello inferiore gestisce l’accesso al canale di comunicazione quando questo è condiviso con altri utenti. Ovviamente se il canale è dedicato quest’ultimo strato è assente. Il sottostrato superiore viene chiamato LLC (Logic Link Control); il sottostato inferiore viene chiamato MAC (Media Access Control). Accesso casuale: nel metodo ad acceso casuale (contesa) nessun nodo ha il controllo del mezzo trasmissivo; ogni nodo deve contendersi l’utilizzo del mezzo con le altre stazioni. Ogni stazione ha il diritto di accedere al mezzo trasmissivo indipendentemente dalle altre stazioni, tuttavia, se più stazioni provano a spedire contemporaneamente si può verificare una collisione e i frame spediti verranno distrutti o modificati. Per evitare queste collisioni, quindi, ogni stazione deve seguire una procedura che applica i seguenti criteri: • Quando è possibile accedere al mezzo? • Che cosa può fare la stazione se il mezzo è occupato? • Come può una stazione determinare l’esito, positivo o negativo, di una trasmissione? • Che cosa si può fare quando c’è una collisione? I metodi ad accesso casuale derivano tutti da un protocollo conosciuto come ALOHA, al quale sono state apportate varie modifiche. ALOHA puro: il protocollo originale viene chiamato ALOHA puro. L’idea è che ogni stazione spedisca un frame ogni qualvolta ha un frame da spedire. Ovviamente essendoci un canale condiviso c’è la possibilità di collisioni.
In questo esempio 4 stazioni si contendono il canale trasmissivo, ogni stazione spedisce due frame. Come si evince dalla figura, alcuni di questi frame collidono, in quanto spediti contemporaneamente. Gli unici frame che arrivano a destinazione sono 1.1 e 3.2. Tale protocollo fa affidamento sui riscontri spediti dal destinatario. Quando una stazione spedisce un frame si aspetta di ricevere un riscontro da parte del destinatario, se tale riscontro non arriva dopo un certo periodo, il mittente assume che il riscontro sia stato distrutto da una collisione e rispedisce i dati. Il tempo di attesa che ogni stazione deve aspettare è casuale e viene chiamato tempo di backoff (TB). Il protocollo ALOHA puro ha anche un metodo per evitare la congestione del canale dovuta alla ritrasmissione di un frame. Infatti dopo un numero massimo di tentativi di ritrasmissione, Kmax, la stazione deve abbandonare la spedizione del frame per riprovare in un secondo momento.
64
Spiega Enzo Esempio: Le stazioni su una rete senza fili ALOHA sono situate ad una distanza massima di 600Km. Assumendo che il segnale trasmissivo si propaghi alla velocità 3x108m/s, si ha che Tp=(600x105)/ (3x108)=2ms. Troviamo i valori TB per vari K. 1. Per K=1 l'insieme dei fattori moltiplicativi è {0,1}. La stazione deve generare numeri casuali scelti fra 0 e1. questo significa che TB è o 0ms (0x2ms) oppure 2ms (1x2ms). 2. Per K=2 l’insieme dei fattori moltiplicativi è {0, 1, 2, 3}. La stazione deve generare numeri casuali scelti fra 0 e 3. questo significa che TB può essere 0, 2, 4 o 6ms. 3. Per K>10 il calcolo di TB viene fatto normalmente con K=10. Il tempo di vulnerabilità è il periodo di tempo in cui c’è una possibile collisione.
In questo esempio le stazioni spediscono dei frame di lunghezza fissa ognuno dei quali impiega un tempo pari a Tfr ms per essere trasmesso. La stazione A spedisce un frame al tempo t, se la stazione B spedisce un frame fra il tempo t - Tfr e il tempo t, avviene una collisione fra i frame, cioè l’ultima parte del frame B collide con l’inizio del frame A. E così via per gli altri frame. Il tempo di vulnerabilità del protocollo ALOHA puro è 2 volte il tempo di trasmissione di un frame.
65
ALOHA a intervalli: in questo protocollo il tempo viene diviso in intervalli di ampiezza Tfr . una stazione può spedire solo all’inizio di un intervallo, quindi il tempo di vulnerabilità di questo protocollo è pari al tempo di trasmissione di un frame
CSMA (Carrier Sense Multiple Access): permette di ridurre le collisioni ma non eliminarle. La probabilità di collisione può essere ridotta se una stazione controlla lo stato del mezzo trasmissivo prima di spedire, quindi se c’è già una trasmissione in corso allora è inutile spedire. La possibilità di collisione può esistere ancora a causa del ritardo di propagazione del segnale. In pratica quando una stazione controlla il mezzo trasmissivo e lo trova libero, esso in realtà potrebbe non essere libero perché i bit trasmessi da qualche altra stazione non hanno ancora raggiunto la stazione che sta controllando il mezzo trasmissivo. Il tempo di vulnerabilità per il CSMA è pari al tempo di propagazione Tp che è il tempo necessario ad un segnale per propagarsi da un estremo all’altro del mezzo trasmissivo. Quando una stazione spedisce un frame, se un’altra stazione spedisce un altro frame prima che scada il tempo di vulnerabilità, i due frame possono collidere. Che cosa deve fare una stazione se il mezzo trasmissivo è occupato? Che cosa deve fare una stazione se il mezzo trasmissivo è libero? Vengono utilizzati tre metodi per rispondere a queste domande: • Metodo di 1 – insistenza: se il mezzo è occupato la stazione non trasmette e continua a controllare lo stato del mezzo trasmissivo; appena il canale diventa libero la stazione spedisce immediatamente il frame. Probabilità di collisione massima; • Metodo di non insistenza: una stazione che vuole spedire un frame controlla prima se il mezzo trasmissivo è libero, se lo è spedisce il frame immediatamente, altrimenti aspetta un tempo casuale prima di ripetere la stessa operazione (controllo, spedizione). Probabilità di collisione minima, ma riduce l’efficienza della rete; • Metodo di p – insistenza: combina i vantaggi dei due metodi precedenti riducendo la probabilità di collisione e migliorando l’efficienza. Una stazione che vuole spedire controlla continuamente il mezzo trasmissivo fino a che non lo trova libero. Quando ciò accade la stazione esegue i seguenti passi: 1. Con la probabilità P la stazione spedisce il frame; 2. Se il frame non viene spedito (quindi con probabilità q=1-P) la stazione aspetta l’inizio del prossimo intervallo e controlla di nuovo lo stato del mezzo trasmissivo: Se il mezzo trasmissivo è libero riprende dal passo 1; Se è occupato si comporta come se ci fosse stata una collisione utilizzando una procedura di backoff. CSMA/CD (Collision Detection): CSMA non specifica cosa fare quando c’è una collisione, questo metodo, invece, aggiunge al metodo CSMA un algoritmo per gestire le collisioni. In questo metodo una stazione controlla lo stato del mezzo trasmissivo dopo che ha spedito un frame per vedere se la trasmissione è avvenuta con successo. Se non si sono verificate collisioni allora la trasmissione è finita; se però c’è stata una collisione allora il frame viene rispedito.
66
In questo esempio al tempo t1 la stazione A inizia a spedire i bit del proprio frame. Al tempo t2 la stazione C non ha ancora ricevuto il primo bit spedito dalla stazione A e quindi anche essa inizia a spedire il proprio frame. Il segnale di C si propaga sia a sinistra che a destra. I segnali spediti da A e C collidono al tempo t2. La stazione C rileva la collisione al tempo t3, cioè quando riceve il primo bit del frame spedito da A, e immediatamente interrompe la trasmissione del proprio frame. La stazione A, invece, rileva la collisione al tempo t4, cioè quando riceve il primo bit spedito da C, e immediatamente interrompe la trasmissione. Dimensione minima del frame: affinché il metodo CSMA/CD funzioni, occorre imporre delle restrizioni sulle dimensioni del frame. È necessario che prima della spedizione dell’ultimo bit di un frame, la stazione che spedisce il frame sia in grado di rilevare la collisione, se ce n’è stata una, e interrompere la trasmissione. Quindi la dimensione minima è di 512 bit ovvero 64 byte. Livello di energia del segnale: il livello dell’energia del segnale che viaggia sul mezzo trasmissivo può avere tre valori: 0, normale e anormale. Quando il livello è 0 vuol dire che il mezzo trasmissivo è libero; quando il livello è normale il mezzo trasmissivo sta trasportando il segnale spedito da una stazione; quando il segnale è anormale vuol dire che si è presentata una collisione. CSMA/CA (Collision Avoidance): l’idea di base del CSMA/CD era quella che una stazione doveva essere capace di ricevere mentre trasmetteva per poter rilevare la collisione. Quando non c’era collisione la stazione riceveva un solo segnale, altrimenti riceveva due segnali, cioè il proprio segnale e quello trasmesso da un’altra stazione. Quindi per distinguere questi due casi i due segnali dovevano avere un significato diverso, in altre parole il segnale della seconda stazione doveva aggiungere una quantità di energia al segnale creato dalla prima stazione in modo da evidenziare l’interferenza. In una rete cablata, il segnale ricevuto ha quasi sempre la stessa energia del segnale spedito; in una rete senza fili, invece, il segnale spedito perde energia durante la trasmissione e l’energia del segnale ricevuto è molto bassa. Pertanto una collisione può aggiungere solo il 5 – 10% di energia al segnale. Ciò non basta per poter rilevare una collisione. Il protocollo CSMA/CA è stato progettato per questa necessità. Le collisioni vengono evitate attraverso l’uso di tre strategie: • Spaziatura tra i frame: anche se il mezzo trasmissivo è libero la trasmissione di un frame viene ritardata, cioè la stazione aspetta un certo tempo chiamato tempo di spaziatura tra i frame (IFS); • Finestra di contesa: la finestra di contesa è un tempo diviso in intervalli. Una stazione che ha già aspettato un tempo IFS, sceglie un numero casuale e aspetterà quel numero di intervalli prima di spedire; • Riscontri: anche utilizzando le precauzioni precedenti è possibile che si verifichino delle collisioni. L’uso di timeout e riscontri aiuta a garantire che il destinatario abbia ricevuto correttamente il frame.
67
CAPITOLO 12:
LAN CABLATE - ETHERNET
Standard IEEE: Lo standard dell’IEEE è stato adottato dall’ANSI, nel 1987 anche l’ISO lo ha approvato chiamandolo ISO 8802. Le relazioni tra lo standard IEEE 802 e il modello OSI è mostrata nella Figura 12.1. Nello standard IEEE 802 lo strato di collegamento è stato diviso in due sottostrati: 1. sottostrato LLC 2. sottostrato MAC
Ethernet Standard: Le reti Ethernet sono state create nel 1976 nel centro di ricerca della Xerox di Palo Alto in California. Da allora le reti Ethernet si sono evolute attraverso quattro generazioni: Ethernet Standard (10 Mbps), Ethernet veloce (100 Mbps), Ethernet gigabit(1 Gbps) Ethernet 10 Gigabit(10 Gbps), come mostrato nella figura 12.3. Sottostrato MAC: Nelle reti Ethernet standard, il sottostrato MAC è responsabile della creazione dei Frame e gestisce il metodo di accesso al mezzo trasmissivo. Formato del frame: • PREAMBOLO • DELIMITATORE • INDIRIZZO DESTINAZIONE • INDIRIZZO MITTENTE • LUNGHEZZA (O TIPO) • DATI • CRC
Lunghezza del frame: La restrizione sulla lunghezza minima è necessaria per permettere il corretto funzionamento del metodo CSMA/CD. Un frame Ethernet deve avere una lunghezza minima di 512 bit(64 byte) per permettere la rivelazione delle collisioni. Lo standard definisce anche una lunghezza massima di un frame(senza il PREAMBOLO e il DELIMITATORE) di 1528 Byte. Indirizzi ETHERNET: Ogni nodo in un rete Ethernet ha un’interfaccia di rete grazie alla quale si collega al mezzo trasmissivo condiviso. L’interfaccia di rete Ethernet si trova fisicamente all’interno del nodo e viene identificata da un indirizzo fisico di 6 byte(48 bit); tale indirizzo è codificato nell’hardware dell’interfaccia. 68
Il bit meno significativo del primo byte di un indirizzo Ethernet definisce il tipo di indirizzo. Se il bit vale 0, l’indirizzo è singolo, altrimenti è di gruppo. Metodo di accesso: CSMA/CD Le reti Ethernet standard utilizzano il protocollo CSMA/CD e il metodo di 1-insistenza per l’accesso al mezzo trasmissivo. Intervalli di tempo: Pertanto l’intervallo di tempo d utilizzare con il metodo CSMA/CD è dato da due volte il tempo di propagazione massimo(tempo di andata e ritorno) più il tempo necessario per spedire un segnale di disturbo. Per una Ethernet standard a 10Mbps tale tempo è pari a 51.2 µs ed equivale al tempo necessario a un nodo per spedire 512 bit. Lunghezza della rete: La lunghezza massima della rete dipende dalla velocità di propagazione del segnale e quindi legata agli intervalli di tempo utilizzati nel metodo CSMA/CD. La massima lunghezza della rete Internet a 2500 m, cioè il 48% del limite teorico. La lunghezza massima di una rete Ethernet è di 2500 m.
STRATO FISICO: 10base5: Nell’implementazione chiamata 10base5 o anche Ethernet a cavo coassiale grosso(tick Ethernet o anche Thicknet), il mezzo trasmissivo utilizzato è un cavo coassiale il cui spessore è più o meno quello dei tubi dell’acqua che si usano per i giardini ed è sufficientemente rigido da non poter essere piegato con le mani.
10base2: Nell’implementazione chiamata 10base2 o anche Ethernet a cavo coassiale sottile(Thin Ethernet o anche Cheapernet), il mezzo trasmissivo è un cavo coassiale molto più sottile e flessibile.
69
10base-T: Nell’implementazione chiamata 10base-T o anche Ethernet a doppino, il mezzo trasmissivo utilizzato è un doppino(cavo UTP).
10base-F: Nell’implementazione chiamata 10base-F o anche Ethernet in fibra ottica, il mezzo trasmissivo utilizzato è la fibra ottica.
MODIFICHE DELLO STANDARD Ethernet con bridge: Il primo passo dell’evoluzione di Ethernet è stato quello della divisione di una rete LAN in vari pezzi collegati tra di loro da nodi di commutazione chiamati bridge. L’uso di bridge nelle reti Ethernet ha avuto due effetti collegati: aumentare la larghezza di banda e separare le collisioni. Aumento della larghezza di banda: In una rete Ethernet senza bridge, la capacità totale del canale, 10Mbps, è condivisa fra tutti i nodi che devono spedire un frame. Un bridge divide la rete in due o più parti. Ognuna di queste parti, che è a tutti gli effetti una rete, è indipendente dalle altre per quanto riguarda la larghezza di banda. Ad esempio, nella figura 12.15 una rete con 12 nodi viene divisa in 2 reti, ognuna con 6 nodi. Ognuna delle due reti di 6 nodi(in realtà 7 nodi perché il bridge è un nuovo nodo della rete) ha una capacità di 10Mbps. 70
Il vantaggio che si ottiene è che per ogni rete la larghezza di banda di 10Mbps deve essere condivisa solo tra 6 nodi, non tra 12. Ethernet con switch: Portando all’estremo l’idea introdotta nel precedente paragrafo si può arrivare ad avere un segmento per ogni singolo nodo. Quindi se la rete è composta da N nodi, ogni nodo sarà direttamente collegato ad un nodo di commutazione, chiamato in questo caso switch. In altre parole stiamo dividendo la rete iniziale in N segmenti, e ogni segmento consiste di un singolo nodo e dello switch, come mostrato nella figura 12.17. Ethernet veloce: Le reti Ethernet veloci sono state progettate per competere con le reti LAN ad alta velocità come le reti FDDI o le reti in fibra ottica.
Ethernet 10-Gigabit: L’IEEE ha creato un nuovo standard, chiamato 802.3ae, per reti Ethernet che funzionano alla velocità di 10Gbps.
71
CAPITOLO 14:
CONNESIONI DI RETI LAN, DORSALI E RETI VIRTUALI
Introduzione: Le reti locali(LAN, Local Area Network) normalmente non sono isolate. Spesso sono connesse tra di loro e alla rete Internet. Per connettere più reti tra loro, vengono utilizzati dei dispositivi di connessione. Dispositivi di connessione: I dispositivi di connessione possono essere divisi in 5 categorie in base allo strato in cui essi operano nell’architettura di rete, come mostrato nella figura 14.1.
Le 5 categorie contengono dispositivi che possono essere classificati nel seguente modo: 1. quelli che operano al di sotto dello strato fisico(ad esempio, hub passivi); 2. quelli che operano nello strato fisico(ad esempio, ripetitore e hub attivi); 3. quelli che operano nello strato fisico e nello strato di collegamento(bridge o switch di livello 2); 4. quelli che operano nello strato fisico, in quello di collegamento e in quello di rete(router o switch di livello 3); 5. quelli che operano in tutti gli strati(gateway). Hub passivi: Un hub passivo è semplicemente un connettore. Esso connette i cavi che convergono nel connettore. Ad esempio, in una rete Ethernet con topologia a stella, un hub passivo è il punto in cui i segnali che arrivano da varie stazioni possono collidere. Questo tipo di dispositivo di connessione fa parte a tutti gli effetti del canale trasmissivo; infatti la sua collocazione rispetto all’architettura di rete è al di sotto dello strato fisico. Ripetitore: Un ripetitore è un dispositivo che opera solo nello strato fisico. I segnali che viaggiano nei cavi subiscono un’attenuazione che fa diminuire la potenza del segnale mettendo a rischio l’integrità dei dati. Un ripetitore riceve un segnale prima che questo diventi troppo debole e rigenera il segnale corrispondente ai bit codificati dal segnale stesso. Il ripetitore spedisce il nuovo segnale( rigenerato). Un ripetitore connette due segmenti di una rete LAN. Un ripetitore inoltra ogni frame che riceve; non ha possibilità di filtrare i frame. Un amplificatore non differenzia il segnale e il rumore; esso amplifica qualsiasi cosa riceve. Un ripetitore è un rigeneratore, non un amplificatore. Hub attivi: Un hub attivo è in pratica un ripetitore a più porte. Normalmente viene utilizzato per creare la connessione tra i nodi di una rete con topologia a stella.
72
Bridge: Un bridge opera sia nello strato fisico che in quello di collegamento. Dal punto di vista dello strato fisico un bridge ha la stessa funzionalità di un ripetitore: rigenera il segnale che riceve. Dal punto di vista dello strato di collegamento, un bridge può controllare l’indirizzo fisico della sorgente e della destinazione contenuti nel frame e prendere delle decisioni in base a questi indirizzi.
Bridge trasparenti: Un bridge trasparente è un bridge la cui presenza non viene percepita dai nodi della rete; se un bridge viene inserito o tolto dalla rete, non è necessario riconfigurare i nodi. In accordo allo standard IEEE 802.1d, una rete che utilizza bridge trasparenti deve soddisfare 3 requisiti: 1. i frame devono essere inoltrati da un nodo verso un altro nodo(non possono essere indirizzati ad un bridge); 2. le tabelle di inoltro dei bridge devono essere costruite automaticamente osservando il traffico sulla rete; 3. occorre prevenire cicli per i frame inoltrati dai bridge. Inoltro: Un bridge trasparente deve inoltrare correttamente, cioè verso la destinazione, i frame che riceve. Apprendimento: Una soluzione migliore è quella di avere delle tabelle di inoltro dinamiche che vengono aggiornate dal bridge stesso. Infatti il bridge può imparare la posizione dei nodi all’interno della rete osservando il traffico che arriva sulle porte di ingresso. Per fare ciò, quando arriva un frame il bridge controlla anche l’indirizzo del mittente, oltre a quello della destinazione. L’indirizzo della destinazione viene usato per decidere dove inoltrare il frame; l’indirizzo del mittente viene utilizzato per inserire i dati nella tabella d’inoltro. Inizialmente le tabelle di inoltro sono vuote; quando arrivano nuovi frame, vengono inseriti nuovi dati. Vediamo come funziona questo processo facendo riferimento alla figura 14.6.
73
1. Quando il nodo A spedisce un frame al nodo D, il bridge non ha nessuna informazione nella tabella. Quindi non sa dove inoltrare il frame; in questo caso il frame viene inoltrato su tutte le porte(tranne quella dalla quale è arrivato). Tuttavia il bridge, guardando l’indirizzo del mittente del frame, cioè il nodo A, deduce che tale nodo deve essere raggiungibile tramite la porta 1. Questa informazione può essere inserita nella tabella d’inoltro: se il bridge dovesse ricevere in futuro frame destinate al nodo A, sa che deve inoltrarli sulla porta 1. A questo punto la tabella di inoltro del bridge contiene una riga. 2. Quando il nodo E spedisce un frame A, il bridge sa dove si trova il nodo A e inoltra il frame solo verso la porta 1. Inoltre può usare l’informazione relativa al mittente di questo nuova frame per aggiungere una nuova riga nella tabella di inoltro. 3. Quando il nodo B spedisce un frame al nodo C, il bridge non ha informazioni sulla posizione del nodo C. Quindi il frame viene inoltrato su tutte le porte(tranne quella dalla quale è arrivato). Una nuova informazione, relativa al nodo B viene inserita nella tabella di inoltro. 4. Quando il nodo A spedisce un frame al nodo E, il bridge sa dove si trova il nodo E e inoltra il frame solo sulla porta 3. In questo caso l’informazione relativa al mittente non è utile in quanto il bridge conosce già la posizione del nodo A. 5. Questo processo di apprendimento viene ripetuto per ogni frame inoltrato dal bridge. Cicli: I bridge trasparenti funzionano senza problemi a patto che non ci siano dei cicli nella rete. Un ciclo viene formato quando si utilizzano dei bridge addizionali che spesso sono utili per rendere la rete tollerante ai guasti. Ad esempio due segmenti di una stessa rete possono essere collegati da due bridge in modo tale che anche se uno dei due bridge si guasta la rete può continuare a funzionare utilizzando l’altro bridge. Una ridondanza di bridge però, può creare dei cicli nella rete. La figura 14.7 mostra un esempio molto semplice in cui il ciclo viene creato da due bridge che connettono due reti. Esaminiamo il problema che si crea:
74
1. il nodo A spedisce un frame al nodo D. Le tabelle di entrambi i bridge sono vuote. Pertanto entrambi i bridge inoltreranno il frame e inseriranno un’informazione relativa al nodo A nella propria tabella; 2. a questo punto ci sono due copie del frame sulla rete LAN2. La copia spedita dal bridge1 viene ricevuta anche dal bridge2, che non ha nessuna informazione riguardo al nodo di destinazione D e pertanto inoltra il frame sulla porta 1. In modo analogo, la copia spedita dal bridge2 verrà anch’essa inoltrata dal bridge1 sulla porta 1. 3. Adesso ci sono 2 copie del frame sulla rete LAN1 e si verifica la stessa situazione del punto precendente: le due copie del frame verranno inoltrate sulla rete LAN2. 4. Si noti che poiché i bridge sono anche dei ripetitori, i frame vengono rigenerati. Il processo continua all’infinito. Per risolvere il problema dei cicli, le specifiche dell’IEEE richiedono che i bridge usino un albero ricoprente(spannino Tree) per creare una topologia(logica) senza cicli.
Albero ricoprente: Dato un paragrafo che rappresenta una rete, un albero ricoprente del grafo, e quindi della rete, è una nuova versione del grafo ottenuta rimuovendo degli archi in modo tale da eliminare tutti i cicli. Questa nuova versione è un albero(non ha cicli) e si chiama ricoprente perché 75
contiene tutti i nodi del grafo originale. La rete viene rappresentata con un grafo che ha un nodo per ogni segmento e per ogni bridge e degli archi per tutti i collegamenti creati dai bridge. Ovviamente non si può, e non si vuole, cambiare al topologia fisica, ma se ne crea una logica che corrisponde ad un albero ricoprente di questo grafo. La figura 14.8 mostra una rete con 4 segmenti LAN e 5 bridge; la figura mostra anche la rappresentazione della stessa rete con un grafo. Per stabilire l’albero ricoprente, vengono assegnati dei costi ad ogni arco. Tale assegnazione viene fatta dall’amministratore della rete e può essere funzione della latenza, della larghezza di banda e della distanza(numero di hop).
Switch: Il termine switch ha un doppio significato: esso indica sia un bridge, sia un router o un gateway. Per eliminare l’ambiguità si parla di switch di livello2(bridge) e di livello3(router o gateway). Uno switch di livello2 è sostanzialmente un bridge; spesso, però, uno switch è più sofisticato: può avere della memoria interna per memorizzare i frame ed è capace di inoltrare i frame a velocità maggiori. Le ultime generazioni di switch hanno anche la capacità di iniziare a inoltrare un frame prima che la ricezione sia stata completata(iniziano a inoltrare il frame appena riescono a leggere l’indirizzo della destinazione). Questi switch vengono solitamente chiamati switch cut-through per distinguerli da quelli tradizionali che invece vengono chiamati switch store-and-forward(perché devono prima memorizzare tutto il frame per poi poterlo inoltrare). [Cut through per renderlo più sicuro]. Router: Un router è un dispositivo capace di inoltrare i pacchetti in una rete in base all’indirizzo logico della destinazione(ad esempio nella rete Internet, in base all’indirizzo IP). Normalmente un router connette reti LAN e WAN a Internet ed ha una tavola di routing che viene utilizzata per prendere le decisioni di instradamento dei pacchetti. Gateway: Alcuni libri usano il termine gateway come sinonimo di router; la maggior parte della letteratura, tuttavia, distingue i due termini. Un gateway è un dispositivo di connessione che opera in tutti gli strati dell’architettura di rete. un gateway riceve un messaggio da un’applicazione, lo legge e lo interpreta. Questo significa che può essere utilizzato come un dispositivo di connessione fra due interreti che utilizzano due modelli diversi. Dorsali: Un dorsale permette di connettere molte reti LAN tra di loro. I singoli nodi non sono direttamente connessi alla dorsale, ma fanno parte delle reti LAN; la dorsale connette le reti LAN attraverso opportuni dispositivi. La dorsale stessa è una rete LAN e utilizza protocolli come Ethernet; ogni nodo della rete dorsale è a sua volta una rete LAN. 76
Una dorsale può essere implementata con varie topologie; discuteremo solo delle due topologie più comuni: la topologia BUS e la topologia a STELLA. Dorsali a BUS: In una dorsale a BUS la connessione tra le varie reti è ottenuta con un mezzo trasmissivo condiviso sul quale vengono agganciate le varie reti, esattamente come succede per una rete LAN con topologia a BUS( la dorsale è una rete LAN).
In una dorsale a BUS, la topologia della rete è un BUS. Dorsali a STELLA: In una dorsale a stella, a volte chiamata dorsale con switch, la topologia della rete è a stella. In questa configurazione, la dorsale si riduce semplicemente ad uno switch che connette le varie reti LAN.
Connessione di LAN a grandi distanze: I bridge funzionano come dispositivi di connessione e connettono le reti LAN grazie a collegamenti(reti) di tipo punto-punto, come linee telefoniche o ADSL. Un collegamento punto-punto può funzionare come dorsale per connettere reti LAN a grandi distanze attraverso l’uso di bridge remoti.
Reti LAN virtuali: L’idea che sta alla base delle reti virtuali è quella di dividere la rete in segmenti logici, anziché fisici. In questo modo una rete LAN viene divisa in varie reti logiche chiamate appunto VLAN. Ogni VLAN corrisponde, ad esempio, ad un gruppo di lavoro. Con questa configurazione è facile spostare un nodo da una rete ad un’altra, in quanto non c’è bisogno di nessun cambiamento nella struttura fisica della rete. L’appartenenza ad un gruppo in una VLAN viene definita via software e non attraverso collegamenti fisici. Pertanto lo spostamento di un nodo da una rete ad un’altra diventa molto facile.
77
Gruppi: Come si può gestire l’appartenenza di un nodo ad una rete virtuale? A tal fine si possono usare varie caratteristiche dei nodi: numeri di porta, indirizzi fisici, indirizzi logici(IP), indirizzi di multicast o una combinazione di queste caratteristiche. Numeri di porta: In questo caso l’appartenenza di un nodo a una rete virtuale è determinata dal numero di porta della connessione del nodo alla rete. Indirizzi fisici: L’appartenenza a una rete virtuale può anche essere determinata dall’indirizzo fisico del nodo. Ad esempio, l’amministratore può stabilire che le stazioni con indirizzi fisici E2:13:42:A1:23:34, F2:A1:23:BC:D3:41 e A5:17:5B:23:EF:1° appartengono alla rete VLAN3. Indirizzi logici(IP): Anche gli indirizzi logici, ad esempio gli indirizzi IP, possono essere utilizzati per stabilire l’appartenenza ad una rete virtuale. Ad esempio l’amministratore può stabilire che i nodi con indirizzi IP 181.34.23.67, 181.34.23.272, 181.34.23.98 e 181.34.23.112 appartengono alla rete VLAN1. Indirizzi di Multicast: Un altro modo per definire l’appartenenza ad una rete virtuale è quella di utilizzare gli indirizzi di multicast IP. In questo caso il multicast fatto nello strato IP viene trasformato in un multicast nello strato di collegamento. Combinazione: Il software messo a disposizione da alcuni produttori permette di combinare varie di queste caratteristiche per definire l’appartenenza ad una rete virtuale. L’amministratore può scegliere una o più di queste caratteristiche in fase di installazione del software. inoltre il software può essere riconfigurato anche successivamente.
78
PARTE IV STRATO DI RETE CAPITOLO 18:
INDIRIZZI LOGICI
La comunicazione nello strato di rete avviene fra due nodi della rete: un computer che si trova in qualche parte del mondo deve comunicare con un altro computer che si trova in qualche altra parte del mondo. Gli indirizzi logici utilizzati dalla rete Internet, cioè dallo strato di rete della suite di protocolli TCP/IP, vengono chiamati indirizzi IP. Indirizzi IPv4: Un indirizzo IPv4 è una sequenza di 32 bit che identifica in modo unico ed universale un dispositivo connesso alla rete Internet. Un indirizzoIPv4 è una sequenza di 32 bit Un indirizzo IP identifica in modo unico un dispositivo, nel senso che su tutta la rete Internet un particolare indirizzo IP è associato a un solo nodo. Gli indirizzi IP sono universali nel senso che il sistema di indirizzamento deve essere accettato da tutti i nodo che sono connessi alla rete Internet. Gli indirizzi IP sono unici e universali Spazio di indirizzamento: Lo spazio di indirizzamento è l’insieme degli indirizzi che possono essere utilizzati. Poiché il protocollo IP utilizza indirizzi lunghi 32 bit, lo spazio di indirizzamento consiste di 232 indirizzi (più di 4 miliardi). Lo spazio di indirizzamento di IPv4 contiene 232 indirizzi Notazione: Un indirizzo IP è tipicamente specificato utilizzando la notazione binario oppure la notazione decimale con punto. Con la notazione binaria l’indirizzo è una sequenza di 32 cifre binarie che per comodità di lettura vengono solitamente raggruppate in byte, cioè in gruppi di 8 bit 01110101 10010101 00011101 00000010 Per rendere un indirizzo IP più facile da leggere e ricordare, viene spesso utilizzata la notazione decimale. Ognuno dei 4 byte viene specificato con il suo valore e i quattro numeri decimali vengono separati da tre punti 117.149.29.2
Indirizzamento con classi: Il progetto degli indirizzi IPv4 prevede il concetto di classe. Gli indirizzi IPv4 sono divisi in cinque classi, identificate con le prime cinque lettere dell’alfabeto: A, B, C, D ed E. A ogni classe corrisponde una parte dello spazio di indirizzamento. Con lo schema di indirizzamento con le class, lo spazio di indirizzamento IPv4 viene diviso in cinque classi: A, B, C, D, E
La classe viene specificata dai primi bit della sequenza di 32 bit. Chiaramente è possibile risalire alla classe sia guardando la notazione binaria che quella decimale dell’indirizzo IP. 79
Classi e blocchi: Il problema principale dell’indirizzamento con classi è che ogni classe è divisa in un numero fissato di blocchi, ognuno costituito da un numero fissato di indirizzi
I blocchi di classe A venivano utilizzati per organizzazione molto grandi che dovevano utilizzare reti con numero di nodi molto grande (fino a circa 16 milioni). I blocchi di indirizzi di classe B venivano utilizzati per organizzazioni di grandezza media (fino a circa 65000 nodi). Infine, i blocchi di indirizzi di classe C venivano utilizzati per organizzazioni piccole che avevano solo pochi nodi (fino a 256) nelle proprie reti. Come si può intuire dal numero di nodi indirizzabili, per le classi A e B questa suddivisione comporta un enorme spreco di indirizzi. Gli indirizzi di classe D sono stati progettati per la comunicazione multicast: ogni indirizzo in questa classe viene utilizzato per identificare un gruppo di nodi di Internet e un messaggio spedito ad un indirizzo di multicast verrà consegnato a tutti i nodi appartenenti al gruppo. Infine gli indirizzi di classe E furono riservati per eventuali utilizzi futuri. L’indirizzamento con classi crea un grosso spreco di indirizzi IPv4 Indirizzi di reti e di host: Con l’indirizzamento con le classi un indirizzo IP delle classi A, B, C viene diviso in due parti: indirizzo di rete e indirizzo di host. La lunghezza di ognuna di queste due parti dipende dalla classe. Un indirizzo di classe A prevede 7 bit per l’indirizzo di rete (il primo bit serve per identificare la classe) e i restanti 24 per l’indirizzo di host; un indirizzo di classe B prevede 14 bit per la rete (i primi due bit servono alla classe) e i restanti 16 per l’host; un indizio di classe C prevede 21 bit per la rete e i restanti 16 per l’host. E’ opportuno sottolineare che il concetto di indirizzo di rete e di host non esiste per gli indirizzi delle classe D ed E. Maschere: Sebbene la lunghezza dell’indirizzo di rete e dell’indirizzo di host sia predeterminata dalla classe di appartenenza, è possibile utilizzare una cosiddetta maschera che consiste in una sequenza di 32 bit fatta di una sequenza di 1 consecutivi. La maschera viene utilizzata per estrarre rapidamente da un indirizzo IP l’indirizzo di rete oppure l’indirizzo di host: un’operazione di AND bit a bit fra un indirizzo IP e la corrispondente maschera restituisce l’indirizzo di rete, mentre un’operazione di AND bit a bit fra un indirizzo IP e il complemento della corrispondente maschera restituisce l’indirizzo di host. Subnetting: Il subnetting è stato utilizzato per dividere un blocco di indirizzi di classe A o B (ma anche C) in vari sottogruppi di indirizzi consecutivi, in modo tale che ognuno di questi gruppi costituisce una sottorete. In pratica la lunghezza dell’indirizzo di rete viene incrementata in modo da avere alcuni bit che servono a identificare la sottorete all’interno della rete. Supernetting: Il numero di blocchi di indirizzi di classe A e B è relativamente piccolo se confrontato con il numero di blocchi di indirizzi C. Pertanto gli indirizzi di classe A e B sono stati esauriti più velocemente. Una soluzione a questo problema è stato il supernetting. Con la tecnica di supernetting un’organizzazione può combinare vari blocchi contigui di classe C per creare dei blocchi di indirizzi più grandi. In altre parole, più reti vengono messe insieme per creare una rete più grande, cioè una supernet. In questo caso la lunghezza dell’indirizzo di rete viene incrementato in modo tale da accordare tutti i blocchi di indirizzi di rete che vengono utilizzati. Indirizzamento senza classi: 80
L’indirizzamento senza classi ha allevato il problema dell’esaurimento degli indirizzi permettendo di gestire in maniera più oculata i blocchi di indirizzi da assegnare alle singole organizzazioni. Con questo schema di indirizzamento non esistono più classi, anche se gli indirizzi sono comunque assegnati in blocchi Maschere: Per poter gestire blocchi di dimensioni 2i con i arbitrario e compreso fra 1 e 31, è necessario utilizzare delle maschere specificate da /n dove n è un intero qualsiasi fra 1 e 31; se un blocco consiste di 2i indirizzi, allora la sua maschera è /32-i
ESEMPIO 18.5 Qual è il primo indirizzo del blocco di indirizzi 205.16.37.39/28? Qual è l’ultimo indirizzo? Quanto è grande il blocco? Il blocco contiene 232 – 28 = 24 = 16 Il primo indirizzo del blocco può essere facilmente trovato scrivendo zero nei 32-n bit più a destra dell’indirizzo IP. Lo stesso per l’ultimo si inseriscono bit uguali a 1. Nel nostro esempio, il primo è 205.16.37.32 e l’ultimo 205.16.37.47 ESEMPIO 18.6 Un altro modo per trovare il primo e l’ultimo indirizzo è il seguente: La maschera del blocco 205.16.37/28 è 11111111 11111111 11111111 11110000 (ventotto 1 e quattro 0). Il primo indirizzo del blocco può essere trovato con un operazione di AND bit a bit fra l’indirizzo del blocco e la maschera Indirizzo blocco Maschera Primo indirizzo
11001101 00010000 00100101 00100111 11111111 11111111 11111111 11110000 11001101 00010000 00100101 00100000
L’ultimo indirizzo può essere trovato con un’operazione di OR bit a bit fra l’indirizzo del blocco e il complemento della maschera Indirizzo blocco 11001101 00010000 00100101 00100111 Maschera 00000000 00000000 00000000 00001111 Ultimo indirizzo 11001101 00010000 00100101 00101111 Indirizzo di rete Un concetto molto importante per il protocollo IP è quello di indirizzo di rete. Quando ad una organizzazione viene assegnato un blocco di indirizzi IP, l’organizzazione è libera di allocare questi indirizzi ai dispositivi che deve connettere alla rete Internet. Il primo indirizzo del blocco viene normalmente trattato come un indirizzo speciale. Questo indirizzo è chiamato l’indirizzo di rete e identifica la rete dell’organizzazione all’interno di Internet. La rete connessa a Internet attraversa un dispositivo speciale chiamato router. Il router ha due indirizzi IP, uno che appartiene al blocco 205. 16.37.32/28 e l’altro che appartiene all’altra rete alla quale il router è connesso; tale indirizzo viene indicato genericamente x.y.w.z/n Il primo indirizzo di un blocco non viene normalmente assegnato al nodo: esso viene utilizzato per identificare la rete all’interno di Internet. Broadcast limitato: Anche l’ultimo indirizzo di un blocco di indirizzi utilizzati per una rete viene trattato normalmente come indirizzo speciale. Questo indirizzo è chiamato indirizzo di broadcast limitato: i messaggi 81
spediti a questo indirizzo vengono consegnati a tutti i nodi della rete x.y.w.z/n. Viene chiamato limitato perché è limitato soltanto alla rete x.y.w.z/n. Gerarchia a 2 o 3 livelli: Gli indirizzi IP hanno una gerarchia a due livelli, se non si utilizza il subnetting, oppure a tre livelli, se si utilizza il subnetting. La struttura a due livelli è formata dall’indirizzo di rete e dall’indirizzo di host. L’indirizzo x.y.w.z/n consiste di due parti: i primi n bit (quelli a più sinistra) identificano la rete e costituiscono il primo livello della gerarchia; i rimanenti 32-n bit (quelli più a destra) identificano un particolare dispositivo all’interno della rete e rappresentano il secondo livello della gerarchia. Tutti i messaggi vengono spediti al router che connette l’organizzazione con il resto di Internet; il router si preoccupa di spedire i messaggi alle appropriate sottoreti.
E’ opportuno sottolineare che dei 6 bit a disposizione dell’organizzazione il valore del primo bit per la sottorete 1 e i valori del primo e del secondo bit per le sottoreti 2 e 3 devono essere scelti opportunamente per poter distinguere le sottoreti. Gerarchia a più di 3 livelli: Un ISP nazionale può dividere il proprio blocco di indirizzi in blocchi più piccoli e assegnare ognuno di questi a un ISP regionale. Un ISP regionale può ulteriormente dividere il proprio blocco di indirizzi in sottoblocchi da assegnare a ISP locali. Un ISP locale può operare un’ulteriore suddivisione per assegnare blocchi di indirizzi ancora più piccoli a diverse organizzazioni. Infine un’organizzazione può dividere il blocco di indirizzi ricevuto per creare varie sottoreti.
Allocazione degli indirizzi: Gli indirizzi Internet vengono assegnati da un’autorità che opera a livello globale e che si chiama ACANN (Internet Corporation for Assigned Names and Address). Ovviamente, l’ICANN non assegna gli indirizzi direttamente alle singole organizzazioni, ma assegna grandi blocchi di indirizzi agli ISP. Ogni ISP, a sua volta, divide il blocco in (sotto)blocchi più piccoli e li assegna ai propri clienti. Questa tecnica viene chiamata aggregazione degli indirizzi: molti blocchi di indirizzi vengono aggregati in un unico blocco gestito da un singolo ISP 82
Esempio 18.7 Un ISP gestisce il blocco di indirizzi 190.100.0.0/16 (65536 indirizzi). L'ISP deve distribuire questi indirizzi a tre gruppi di clienti nel seguente modo: 1. Il rimo gruppo a 64 clienti, ognuno dei quali ha bisogno di 256 indirizzi. 2. I l secondo gruppo a 128 clienti, ognuno dei quali ha bisogno di 128 indirizzi. 3. Il terzo gruppo a 128 clienti, ognuno dei quali ha bisogno di 64 indirizzi. Mostrare una possibile allocazione. Soluzione I clienti del primo gruppo hanno bisogno, ognuno, di un gruppo di 256 indirizzi. Questo significa che l'indirizzo di host che devono utilizzare deve avere 8 bit. Pertanto le maschere di sottorete per questi clienti dovranno essere /24. Possiamo assegnare il blocco 190.100.0.0/24 al primo cliente di questo gruppo, il blocco 190.100.1.0/24 al secondo, il blocco 190.100.2.0/24 al terzo e così via fino ad arrivare al blocco 190.100.63.0/24 che sarà assegnato al 64° cliente di questo primo gruppo. Il totale degli indirizzi assegnati a questo primo gruppo è 64 x 256 = 16384. Per i clienti del secondo gruppo è sufficiente un blocco di 128 indirizzi. Pertanto le maschere dovranno essere /25. Possiamo assegnare il blocco 190.100.64.0/25 al primo cliente, il blocco 190.100.64.128/25 al secondo, il blocco 190.100.65.0/25 al terzo, il blocco 190.100.65.128/25 al quarto e così via fino al blocco 190.100.127.128/25 che verrà assegnato al 128° cliente del secondo gruppo. Il totale degli indirizzi assegnati a questo secondo gruppo è 128 x 128 = 16384. Infine per il terzo gruppo ogni cliente ha bisogno di soli 64 indirizzi. Pertanto le maschere dovranno essere /26. Possiamo assegnare il blocco 190.100.128.0/26 al primo cliente, il blocco 190.100.128.64/26 al secondo, il blocco 190.100.128.128/26 al terzo, il blocco 190.100.128.192/26 al quarto, il blocco 190.100.129.0/26 al quinto e così via fino al blocco 190.100.159.192/26 che verrà assegnato al 128° cliente. Il totale degli indirizzi assegnati al terzo gruppo è 128 x 64 = 8192. Il totale degli indirizzi assegnati ai tre gruppi è di 40960. Il resto degli indirizzi (65536 - 40960 = 24576) rimarrà disponibile per ulteriori utilizzi da parte dell'ISP. La Figura 18.8 riepiloga l'allocazione descritta. NAT (Network Address Translation): La tecnica di traduzione degli indirizzi di rete, comunemente conosciuta con l’acronimo NAT, viene utilizzata per ridurre la necessità di indirizzi IP
Con questa tecnica un utente può utilizzare arbitrariamente degli insieme di indirizzi IP locali che non sono visibili su tutta la rete Internet, e un solo indirizzo IP o un numero molto piccolo di indirizzi IP visibili esternamente. Il traffico interno potrà utilizzare l’insieme di indirizzi locali, mentre il traffico esterno dovrà utilizzare gli indirizzi visibili su tutta la rete. Ovviamente gli indirizzi locali, essendo appunto locali, non devono essere richiesti alle autorità competenti. Proprio per questo motivo il progetto degli indirizzi IP ha previsto tre insieme di indirizzi che possono essere usati localmente e che non vengono utilizzati mai come indirizzi visibili sulla rete Interne.
83
Chiunque può utilizzare liberamente questi indirizzi senza chiedere il permesso a nessuno. Ovviamente il loro utilizzo deve essere sempre relegato all’interno delle singole organizzazioni, cioè non può essere reso visibile all’esterno. L’interconnessione fra una rete locale e il resto di Internet è in genere gestita attraverso un router che utilizza dei programmi di traduzione degli indirizzi. Pertanto la rete interna è invisibile al resto di Internet che vedrà solo l’indirizzo esterno del router NAT. Ovviamente tramite il router è possibile connettere a Internet l’intera rete locale. Traduzione degli indirizzi Quando i pacchetti in uscita dalla rete locale attraversano il router NAT, il router sostituisce l’indirizzo sorgente del pacchetto, che è un indirizzo locale, con il proprio indirizzo pubblico. Quando i pacchetti in entrata alla rete locale attraversano il router NAT, il router sostituisce l’indirizzo di destinazione, che è l’indirizzo pubblico, con l’appropriato indirizzo locale. In pratica qualsiasi nodo nel resto di Internet vede solo il router NAT e con esso scambia pacchetti di dati; il router NAT gestisce questi pacchetti internamente alla rete locale in modo tale da permettere la comunicazione dei computer locali con il resto di internet Tabella di traduzione: E’ abbastanza evidente che la traduzione dell’indirizzo dei pacchetti in uscita è molto semplice: il router sostituisce l’indirizzo privato della reale sorgente del pacchetto con il proprio indirizzo in modo tale che il destinatario veda il router NAT come mittente. Il pacchetto in entrata arriva al router NAT e ha come indirizzo di destinazione l’indirizzo del router NAT; non c’è niente nel pacchetto che indichi quella che deve essere la reale destinazione del pacchetto stesso, cioè l’indirizzo locale. Il problema viene risolto utilizzando le cosiddette tavole di traduzione. NAT con un solo indirizzo IP: Nella sua forma più semplice, una tabella di traduzione ha solo due colonne: un indirizzo privato e un corrispondente indirizzo pubblico. Quando un pacchetto in uscita attraversa il router NAT, il router, oltre a sostituire l’indirizzo sorgente nel pacchetto, inserisce nella tabella di traduzione la corrispondenza fra l’indirizzo interno (privato) dal quale proviene il pacchetto, che indicheremo con IPl , e l’indirizzo esterno (pubblico) al quale il pacchetto è destinato, che indicheremo IPE. Quando al router NAT arriva un pacchetto che ha come sorgente IPE , il router utilizza la tabella di traduzione per recuperare il corrispondente indirizzo interno IPl , che verrà utilizzato nella sostituzione dell’indirizzo di destinazione del pacchetto in entrata. Con questa strategia, la comunicazione fra un computer esterno deve sempre iniziare dal computer interno. L’indirizzo del computer interno non è visibile al computer esterno e la tabella di traduzione contiene l’informazione necessaria a identificare il computer interno solo dopo che questo ultimo ha spedito un pacchetto. Come vedremo, questa strategia viene utilizzata da molti ISP che assegnano un indirizzo IP locale ai propri utenti. In questi casi, la comunicazione con Internet viene sempre iniziata dall’utente con un programma client che si connette al corrispondente programma server. NAT con più indirizzi IP: La strategia precedente non funziona nel caso in cui due computer interni vogliono comunicare con lo stesso computer esterno (server). In quel caso nella tabella di traduzione si creerebbe un’ambiguità e il router NAT non saprebbe a chi consegnare i pacchetti in entrata. Un modo per evitare questo problema è utilizzare più di un indirizzo IP esterno. In questo caso si possono gestire un numero di comunicazione dall’interno verso lo stesso computer esterno pari al numero di indirizzi esterni utilizzabili. IL problema viene così alleviato. Rimane il vincolo che bisogna stabilire a priori un numero massimo di comunicazioni contemporanee con lo stesso host esterno e che comunque un singolo host interno non può usufruire di due comunicazioni contemporanee verso lo stesso host esterno. 84
NAT con indirizzi IP e porte: Una soluzione più flessibile ci viene fornita dall’utilizzo delle porte di comunicazione. Occorre inserire nella tabella di traduzione più informazioni, in particolare quelle relative alle porte di comunicazioni utilizzate; allora la tabella di traduzione potrebbe includere sia la porta sorgente che la porta di destinazione e anche il protocollo di trasporto utilizzato.
Indirizzi speciali: Il blocco di indirizzi 0.0.0/8 è un blocco di indirizzi speciale e non può essere usato per indirizzare un host nella rete Internet. L’indirizzo con tutti 0 ha il significato di “questo host su questa rete”. Il significato di “questo” può essere usato anche solo per la rete o solo per l’host. Anche il blocco di indirizzi 127.0.0.0/8 è un blocco speciale. I suoi indirizzi sono detti indirizzi loopback: i dati in uscita su un indirizzo di loopback non vengono mandati sulla rete, ma vengono consegnati in entrata allo stesso computer che li ha spediti Indirizzi IPv6: L’indirizzamento senza classi, la strategia NAT e il protocollo DHCP alleviano il problema della carenza di indirizzi IP, ma non lo risolvono. Questo e altri problemi del protocollo IPv4 sono stati la motivazione per la versione 6 del protocollo IP. Un indirizzo IPv6 è una sequenza di 128 bit, cioè una sequenza di 16 byte. Per rendere un indirizzo IPv6 più leggibile viene utilizzata la notazione esadecimale, dividendo i 128 bit in otto sezioni, ognuna di 2 byte. Le otto sezioni sono separate dal carattere “ : ” e ogni sezione viene specificata con quattro cifre esadecimali. Pertanto un indirizzo consiste di 32 cifre esadecimali, con un carattere “ : ” dopo ogni quattro cifre.
85
CAPITOLO 19:
PROTOCOLLO IP
Il protocollo IP (internet Protocol) è il protocollo principale della rete internet. Discuteremo del protocollo IP versione 4, che è la versione attualmente usata in internet, e del protocollo ip versione 6, che diventerà il protocollo dominante nel prossimo futuro. Internetworking Gli strati fisico e di collegamento di una rete operano localmente. Questi due strati, insieme, hanno la responsabilità della consegna dei dati in una rete da un nodo a quello successivo.
La interrete mostrata nella fig 19.1 consiste di 5 reti: 4 rati LAN e una WAN. Se il nodo A deve spedire un pacchetto di dati al nodo D, il pacchetto deve passare prima da A a R1 (che è uno switch o un router ), poi da R1 a R3 e infine da R3 a D.
Necessità di avere uno strato di rete Nel nodo mittente, lo strato di rete ha la responsabilità di creare un pacchetto con i dati in arrivo da un protocollo degli starti superiori, come ad esempio un protocollo di trasporto o un protocollo di routing. In router o in uno switch, lo strato di rete ha la responsabilità di inoltrare il pacchetto verso la destinazione. Quando il pacchetto arriva, il router o lo switch consulta la sua tavola di routing per trovare l’interfaccia sulla quale il pacchetto deve essere inoltrato. Il pacchetto, dopo aver subito alcuni cambiamenti nell’intestazione, viene nuovamente passato allo strato di collegamento. Nella destinazione, lo strato di rete ha la responsabilità di verificare l’indirizzo di destinazione del pacchetto in arrivo; deve cioè controllare che il pacchetto sia arrivato alla destinazione corretta. Se il pacchetto è un frammento, lo strato di rete deve aspettare la ricezione di tutti i frammenti e quindi riassemblarli per poter consegnare il pacchetto originale agli strati superiori.
86
Internet e reti a datagram La rete internet è uno rete a commutazione di pacchetto con approccio a datagram. Per la rete internet è stato scelto l’approccio a datagram per operare la commutazione di pacchetto nello strato di rete. la rete internet utilizza la commutazione di pacchetto con l’approccio a datagram per operare la commutazione nello strato di rete. Internet e reti senza connessione La consegna dei pacchetti dal mittente alla destinazione può essere fatta utilizzando o un servizio orientato alla connessione oppure un servizio senza connessione. Utilizzando un servizio orientato alla connessine, il mittente deve prima instaurare una connessione con la destinazione per poter successivamente spedire i pacchetti di dati. In questo caso c’è una relazione tra i pacchetti: i pacchetti appartengono tutti alla stessa connessine e ogni pacchetto è connesso, da un punto di vista logico, al pacchetto che viaggia prima di esso e al pacchetto che viaggia dopo di esso. Quando tutti i pacchetti sono stati consegnati, la connessione viene eliminata. Utilizzando un servizio senza connessione, lo strato di rete tratta ogni pacchetto indipendentemente dagli altri. Pertanto, in questo caso, non c’è nessuna relazione tra i pacchetti. Anche se i pacchetti appartengono alla stessa sorgente, vanno verso la stessa destinazione e fanno parte dello stesso messaggio, ognuno di essi attraversa la rete in modo indipendente; due pacchetti potrebbero seguire strade diverse per arrivare alla destinazione. Il servizio di comunicazione nello strato di rete di internet è senza connessione. IPv4 Il protocollo IPv4 (internet protocol, versione 4) implementa il servizio di consegna dei pacchetti(datagram) senza connessione.
87
Il protocollo IP offre un servizio di consegna detto best-effort. La consegna dei pacchetti avviene senza connessione ed è inaffidabile; il protocollo non fornisce nessun meccanismo per il controllo degli errori e per il controllo di flusso. Si noti che poiché IPv4 implementa un servizio di consegna senza connessione con l’approccio a datagram, i pacchetti vengono gestiti indipendentemente, ognuno può seguire una propria strada per raggiungere la destinazione e per tanto i pacchetti possono arrivare in un ordine diverso da quello in cui sono stati spediti.
Datagram I pacchetti del protocollo IPv4 vengono chiamati datagram. Un datagram è un pacchetto di dati con lunghezza variabile ed è diviso in due parti: un’intestazione e un carico dati. L’intestazione ha una lunghezza k varia da 20 a 60 byte e contiene le informazioni necessarie per permettere la consegna alla destinazione. • Versione questo campo consiste di 4 bit e definisce la versione del protocollo IP. Attualmente la versione è la numero 4. • LI (lunghezza intestazione) questo campo consiste di 4 bit e definisce la lunghezza totale dell’intestazione del datagram, misurata in parole di 4byte; pertanto la lunghezza dell’intestazione deve essere un multiplo di 4. Quando non ci sono opzioni, la lunghezza dell’intestazione è di 20 byte e il valore di questo campo è 5 (5 * 4 = 20). La presenza di opzioni può far aumentare la lunghezza dell’intestazione fino ad un massimo di 60 byte; in questo caso il valore di questo campo è 15 (15*4= 60) . • Servizi questo campo consiste di 8 bit. Originariamente questo campo specificava il tipo di servizio che doveva essere riservato al datagram. L’internet engineering task force (IETF) ha successivamente cambiato l’interpretazione di questo campo che serve ora a specificare i servizi differenziati 1) Tipo di servizio in questa interpretazione, i primi 3bit rappresentano la priorità, i successivi 4 specificano il tipo di servizio richiesto, mentre l’ultimo bit non è utilizzato. a) Priorità il valore specificato da questi 3bit, da 0 a 7, rappresenta la priorità del datagram in situazioni di congestione. 2) Servizi differenziati in questa interpretazione, i primi 6bit costituiscono un codice, mentre gli ultimi 2bit non vengono utilizzati. • Lunghezza totale questo campo di 16bit specifica la lunghezza totale del datagram IPv4; la lunghezza viene misurata in byte. Poiché questo campo contiene 16bit la lunghezza totale di un datagram IPv4 è al massimo 65535 (cioè 216 – 1)byte. I datagram devono essere incapsulati in frame per poter essere spediti e molte delle tecnologie di rete utilizzate attualmente prevedono una dimensione massima di un frame che tipicamente è molto + piccola di 65535. 88
• Identificativo questo campo viene utilizzato per la frammentazione.(descritta nel prossimo paragrafo) • Flag (bit di segnalazione) questo campo viene utilizzato per la frammentazione. • Offset (spiazzamento) anche questo campo viene usato per la frammentazione. • TTL (time to live) il protocollo IP prevede che un datagram abbia un tempo di vita limitato durante il suo viaggio nella rete: se non viene consegnato entro un certo tempo deve essere eliminato. Questo campo serve ad implementare tale regola. • Protocollo questo campo a 8bit definisce il protocollo degli strati superiori che sta utilizzando il servizio offerto dal protocollo IP (che appartiene allo strato di rete), ad esempio i protocolli TCP, UDP, ICMP e IGMP. • Somma di controllo questo campo serve per la rilevazione degli errori. (ne discuteremo nel seguito di questo capitolo) • Indirizzo del mittente questo campo contiene l’indirizzo IPv4 del mittente. Il valore di questo campo rimane inalterato durante il viaggio che il datagram effettua sulla rete per arrivare dal mittente alla destinazione. • Indirizzo della destinazione questo campo contiene l’indirizzo IPv4 dell’host al quale deve essere consegnato il datagram. Anche il valore di questo campo deve rimanere inalterato durante il viaggio del datagram Esempio 19.1 Un datagram IPv4 arriva a un computer e i primi 8bit del datagram sono: 01000010. Il computer elimina questo pacchetto. Perché? Soluzione I primi 4bit specificano il numero della versione del protocollo IP; questi 4bit sono corretti in quanto il valore specificato è 4 (0100). I successivi 4bit specificano la lunghezza dell’intestazione, che in questo caso vale 0010, cioè 2quindi il datagram ha in arrivo un’intestazione lunga 8 byte (2 * 4). Questo è un errore in quanto la dimensione minima dell’intestazione di un datagram IPv4 è di 20 byte. Pertanto si sono verificati degli errori di trasmissione. Esempio 19.2 In un datagram IPv4 il valore del campo LI è 1000in binario. quanti byte di opzioni sono inclusi nell’intestazione? Soluzione La lunghezza dell’intestazione, in questo caso, è di 32byte (8 * 4). Un’intestazione senza opzioni è lunga 20 byte; pertanto in questo caso ci sono 12 byte di opzioni. Esempio 19.3 In un datagram IPv4 il valore del campo LI è 5 e il valore del campo lunghezza totale è 0*0028. Quanti byte di dati sono trasportati nel datagram? Soluzione La lunghezza dell’intestazione in questo caso è di 20byte (5*20).la lunghezza totale, invece, è di 40byte (40 vale 0*0028 in esadecimale). Pertanto il datagram contiene 20byte di dati (40 – 20). Esempio 19.4 Un datagram IPv4 arriva a un computer e i primi byte del datagram, in notazione esadecimale, sono 0*45000028000100000102. Quanti router questo datagram può attraversare prima di essere eliminato?a quale protocollo di strato superiore appartengono i dati trasportati nel datagram? Soluzione Per trovare il valore del campo TTL, saltiamo i primi 8byte(16cifre esadecimale). Il valore de TTL è dato dal nono byte che vale 0*01 questo significa che il datagram può attraversare un solo collegamento(verrà eliminato dal prossimo router). Il campo protocollo è specificato dal byte successivo che vale 0*02. Dalla tabella 19.4 deduciamo che i dati appartengono al protocollo IGMP. 89
Frammentazione Per arrivare dalla sorgente alla destinazione, un datagram potrebbe attraversare varie reti. Unità massima di trasferimento Ogni protocollo dello strato di collegamento utilizza una propria forma per i frame. Il campo riservato a contenere i dati da trasportare ne frame non può superare una certa grandezza; tale limite viene chiamato MTU (Maximum transfer unit). In altre parole, quando un datagram viene incapsulato in un frame, la grandezza totale del datagram deve essere minore del valore dell’ MTU
Quando si usa una tecnologia di rete che ha un MTU più piccolo di 65535, un datagram che è più grande dell’MTU viene diviso in pezzi più piccoli per poter attraversare la rete. Questa operazione viene chiamata frammentazione. Se l’applicazione mittente produce datagram con dimensione più grande dell’MTU, lo strato di trasporto si preoccuperà di frammentare il pacchetto in pezzi più piccoli che possono essere spediti sulla rete. Quando il datagram viene frammentato, ogni frammento diventa un nuovo datagram a tutti gli effetti: esso ha una propria intestazione in cui la maggior parte dei campi hanno lo stesso valore di quelli del datagram originale. Un datagram che è un frammento può a sua volta dover essere frammentato, se si trova a dover attraversare una rete con un MTU ancora più piccolo. Quindi un datagram può subire varie frammentazioni prima di raggiungere la destinazione finale. Il riassemblaggio del datagram, invece, avviene solo alla destinazione. Infatti, ogni frammento diventa a tutti gli effetti un datagram indipendente dagli altri e quindi viaggia indipendentemente dagli altri sulla rete. ciò significa che è impossibile garantire che tutti i frammenti passino attraverso un determinato nodo. Pertanto l’unico nodo che sicuramente riceve tutti i pacchetti ( a meno di errori o perdite) è la destinazione. Valori dell’MTU per alcuni protocolli: es. protocollo Ethernet MTU 1500 Campi dell’intestazione usati per la frammentazione I campi dell’intestazione di un datagram IPv4 usati per la frammentazione e il riassemblaggio dei frammenti sono il campo che contiene l’identificativo del datagram, il campo che contiene i bit di segnalazione di frammentazione e il campo che contiene l’offset. • Identificativo questo campo serve a identificare univocamente ogni datagram generato dalla sorgente. • Flag questo campo contiene tre bit di segnalazione. Il primo bit è riservato. Il secondo bit viene chiamato bit di non frammentazione mentre il terzo bit viene chiamato bit di altri frammenti. Se il bit di non frammentazione vale 1, allora il datagram non deve essere frammentato. Questo significa che se il datagram non può essere inserito in un frame in quanto l’MTU non è sufficientemente grande, esso dovrà essere eliminato; in questo caso, come vedremo nel capito 20, verrà inviato un messaggio di errore al mittente utilizzando il protocollo ICMP. Quando il bit di altri frammenti vale 1, significa che ci sono altri frammenti di questo datagram; cioè questo datagram non è l’ultimo frammento del datagram iniziale. Se il bit altri frammenti vale 0, allora questo frammento è l’ultimo o l’unico frammento. • Offset questo campo di 13 bit specifica la posizione del frammento rispetto all’intero datagram tale posizione viene misurata in unità di 8byte. La fig 19.11 mostra un datagram di 4000 byte frammentato in 3 frammenti. I byte del datagram originale vengono numerati a partire da 0; sono quindi numeri da 0 a 3999. Il primo frammento contiene i byte dal numero 0 al numero 1399. Il valore dell’offset per questo datagram è 0/8 = 0.
90
Esempio 19.10 Un nodo della rete riceve un datagram con un valore dell’offset pari a 100, un valore di LI (lunghezza dell’intestazione) pari a 5 e un valore del campo lunghezza totale pari a 100. Qual è il numero del primo byte dei dati contenuti nel datagram ricevuto rispetto al datagram originale? Qual è il numero dell’ultimo byte? soluzione come nell’esempio precedente, possiamo dire che il primo byte di dati di questo frammento è il byte 800 del datagram originale. In questo caso possiamo determinare anche il numero dell’ultimo byte. La lunghezza dell’intestazione del datagram è 20byte (4 volte LI). La lunghezza totale del frammento è 100byte; pertanto il frammento contiene 80byte di dati. Poiché il primo byte è il numero 800, l’ultimo byte è il numero 879. Somma di controllo Quindi l’intera intestazione viene divisa in blocchi di 16bit e si fa la somma di questi blocchi. Il risultato della somma viene complimentato e inserito nel campo destinato a contenere la somma di controllo. Si noti che il valore della somma di controllo dipende solo dall’intestazione, non dai dati. La motivazione per non includere anche i dati è che tutti i protocolli di livello superiore, che incapsulano i dati in un datagram IP, hanno i proprio meccanismi per la rilevazione di eventuali errori che si verificano nei dati. Pertanto il protocollo IPv4 non deve preoccuparsi di rilevare gli errori nei dati contenuti nel datagram. Opzioni L’intestazione di un datagram IPv4 è fatta di 2parti, una fissa e una variabile. La parte fissa è lunga 20byte ed è stata già descritta. La parte variabile contiene delle opzioni e , se presente, può essere lunga fino a un massimo di 40byte. Le opzioni vengono utilizzate per il testing e il debugging della rete.
91
Operazione nulla L’operazione nulla è un’operazione di un solo byte che serve a riempire lo spazio fra un’operazione e la successiva. Fine delle operazioni L’opzione fine delle operazioni, di un byte, viene utilizzata per riempire lo spazio. Registra percorso L’opzione registra percorso viene utilizzata per memorizzare tutti i router di internet che il datagram attraversa. Instradamento guidato dalla sorgente L’opzione instradamento guidato dalla sorgente viene utilizzata per permettere al mittente di stabilire i router attraverso i quali il datagram deve viaggiare. Ovviamente il mittente deve conoscere a priori tale sequenza di router. Questa opzione può essere utile quando il mittente vuole scegliere uno specifico percorso per il quale sa che verrà garantito un determinato tipo di servizio, come ad esempio minimo ritardo o massimo throughput. Instradamento suggerito dalla sorgente L’opzione instradamento suggerito dalla sorgente è molto simile all’opzione precedente, ma è meno rigida. Ognuno dei router che sono nell’elenco suggerito dal mittente deve essere attraversato dal datagram, ma il datagram può attraversare anche altri router. Memorizza orario L’opzione memorizza orario viene utilizzata per memorizzare l’istante in cui il datagram viene processato da un router. TRANSIZIONE DA IPv4 E IPv6 Internet è costituita da una miriade di reti interconnesse tra di loro.; ciò rende la transizione da IPv4 a IPv6 molto difficile. È impossibile cambiare contemporaneamente tutti i sistemi che costituiscono internet; la transizione deve avvenire gradualmente e deve essere tale da prevenire problemi nell’uso combinato di entrambe le versioni del protocollo. Doppio protocollo Tutti i nodi di internet, prima di abbandonare completamente la versione 4 per usare la versione 6, dovrebbero utilizzare entrambi i protocolli contemporaneamente. In altre parole, un nodo deve saper dialogare utilizzando sia IPv4 sia IPv6 fino al momento in cui tutti i sistemi di internet avranno adottato la versione 6. Per determinare quale versione utilizzare quando si spedisce un datagram, la sorgente può utilizzare il sistema DNS
Tunneling Un’altra strategia che si deve usare durante la transizione consiste nell’uso di tunnel IPv4. Con questa strategia, se due computer che utilizzano IPv6 vogliono comunicare fra loro, ma la loro comunicazione deve attraversare una regione di internet che utilizza ancora IPv4, essi devono necessariamente utilizzare il protocollo IPv4 per spedire i datagram. I due computer che utilizzano IPv6 possono incapsulare i datagram IPv6 all’interno di datagram IPv4 per attraversare la regione di internet che utilizza IPv4. In altre parole è come se il datagram IPv6 attraversasse un tunnel che parte a un’estremità della regione IPv4 e finisce nell’altra estremità. Per rendere esplicito il fatto che il datagram IPv4 contiene un datagram IPv6, il valore del campo che specifica il protocollo di strato superiore viene impostato a 41. 92
Traduzione dell’intestazione La traduzione dell’intestazione dei datagram sarà necessaria quando la maggior parte dei sistemi di internet utilizzerà IPv6, ma pochi sistemi utilizzeranno ancora la vecchia versione 4. Per spedire dei datagram a questi sistemi che utilizzano ancora le vecchia versione di IP, sarà necessario trasformare il datagram IPv6 in un datagram IPv4.
93
CAPITOLO 20:
RISOLUZIONE INDIRIZZI, GESTIONE ERRORI, MULTICAST
Il progetto del protocollo IP è stato sviluppato per offrire un servizio di consegna best-effort; tale servizio non offre nessuna garanzia anche se viene fatto tutto il possibile per consegnare i dati. Il protocollo ausiliare ARP (Address Resolution Protocol) permette di risalire all’indirizzo fisico di un computer a partire dal suo indirizzo logico; in gergo permette di risolvere l’indirizzo IP. Il protocollo ICMP permette di spedire messaggi di segnalazioni di vario tipo, come ad esempio, segnalazioni di congestione e di alcuni tipi di errori relativi alla rete o al nodo di destinazione. RISOLUZIONE DEGLI INDIRIZZI Tuttavia per poter spedire fisicamente i pacchetti su una rete occorre conoscere gli indirizzi fisici dei nodi coinvolti. Un indirizzo fisico è un indirizzo locale. Viene chiamato indirizzo fisico in quanto è spesso, ma non sempre, una proprietà fisica dell’interfaccia di rete. Ogni nodo di Internet viene identificato sia da un indirizzo logico (IP) che identifica il nodo globalmente nella rete Internet, sia da un indirizzo fisico, che identifica il nodo all’interno della rete locale alla quale il nodo appartiene. Ciò significa che la consegna di un pacchetto di dati richiede due livelli di indirizzamento: uno logico e uno fisico. La risoluzione statistica utilizza una tavola che contiene delle coppie composte da un indirizzo logico e un indirizzo fisico. Tale tavola deve essere memorizzata in ogni nodo della rete. L’utilizzo è molto semplice: per effettuare una risoluzione basterà fare una ricerca nella tavola dell’indirizzo che si vuole risolvere e prendere l’indirizzo con cui esso è associato. Alcune motivazioni per le quali l’associazione fra indirizzi logici e indirizzi fisici cambia sono: 1. un nodo potrebbe cambiare la propria scheda di rete 2. in alcune reti l’indirizzo fisico cambia ogni volta che il computer viene acceso 3. un computer portatile, si può spostare da una rete a un’altra 4. nuovi computer possono essere aggiunti a una rete e vecchi computer possono essere eliminati. Risoluzione di un indirizzo logico:protocollo ARP Per poter scoprire l’indirizzo fisico associato a un particolare indirizzo logico, un nodo di una rete può utilizzare il protocollo ARP. Il nodo spedisce un pacchetto del protocollo che è chiamato richiesta ARP. Tale richiesta include l’indirizzo fisico e l’indirizzo IP del mittente e l’indirizzo IP del destinatario. Poiché il mittente non conosce l’indirizzo fisico del destinatario, non può spedire il pacchetto direttamente al destinatario pertanto la richiesta ARP viene spedita in broadcast sulla rete. Ogni nodo della rete riceverà la richiesta ARP spedita in broadcast; tuttavia solo il nodo che corrisponde all’indirizzo IP da risolvere risponderà alla richiesta. La risposta ARP conterrà l’indirizzo fisico richiesto. La risposta ARP non viene spedita in broadcast, ma solo al mittente della richiesta. Una richiesta ARP viene spedita in broadcast; una risposta ARP viene spedita in unicast.
Memorie cache Utilizzando il protocollo ARP per ogni pacchetto di dati è inefficiente. Se un nodo sorgente deve spedire più di un pacchetto a un nodo destinazione, può utilizzare solo una volta il protocollo ARP e memorizzare la risoluzione dell’indirizzo del nodo destinazione per poterla utilizzare per i pacchetti successivi. Pertanto il protocollo ARP memorizza le risoluzioni effettuate in una memoria 94
cache; prima di effettuare una nuova risoluzione, il protocollo controlla la memoria cache per vedere se tale risoluzione è già stata effettuata. Le informazioni nella memoria cache vengono mantenute per un certo periodo di tempo (20 o 30 minuti) dopo di che vengono cancellate. Questo è necessario, perché le associazioni fra indirizzi logici e indirizzi fisici possono cambiare.
Formato di un messaggio ARP 1. tipo di hardware: questo campo di 16 bit definisce il tipo di rete che si sta utilizzando. Ad esempio per le reti Ethernet sono identificate dal numero 1 2. protocollo: questo campo di 16 bit definisce il tipo di indirizzi logici che si vuole gestire. Per il protocollo IPv4 il valore memorizzato in questo campo è 0x0800. il protocollo ARP può gestire qualsiasi tipo di indirizzi logici. 3. lunghezza di indirizzo fisico: questo campo di 8 bit definisce la lunghezza dell’indirizzo fisico; la lunghezza viene espressa in byte. Ad esempio, per gli indirizzi fisici Ethenet (48 bit) il valore di questo campo è 6. 4. lunghezza di indirizzo logico: questo campo di 8 bit definisce la lunghezza in byte dell’indirizzo logico. Ad esempio per IPv4 è 4. 5. operazione: questo campo di 16 bit definisce il tipo di messaggio ARP. I tipo sono 2: richiesta ARP con codifica 1 e risposta ARP con codifica 2. 6. indirizzo fisico mittente: questo campo di lunghezza variabile specifica l’indirizzo fisico del mittente 7. indirizzo logico mittente: questo campo di lunghezza variabile specifica l’indirizzo logico del mittente 8. indirizzo fisico destinatario: questo campo di lunghezza variabile specifica l’indirizzo fisico del destinatario 9. indirizzo logico destinatario: questo campo di lunghezza variabile specifica l’indirizzo logico del destinatario
Incapsulamento Un messaggio ARP viene incapsulato direttamente in un frame dello strato di collegamento. Si noti che il campo del frame, che specifica il tipo di dati incapsulati nel frame, indica che i dati contenuti nel frame costituiscono un messaggio ARP.
95
Quali indirizzi IP risolvere? Abbiamo detto che il protocollo ARP serve a risolvere l’indirizzo IP della destinazione per poter costruire un frame in cui incapsulare un datagram IP inviato all’indirizzo fisico della destinazione. L’indirizzo fisico del frame che trasporta il datagram IP potrebbe essere quello di un router. [figura pag 488] 1. il mittente è un’host che vuole spedire un datagram IP a un altro host sulla stessa rete. In questo caso lìindirizzo logico che deve essere risolto è l’indirizzo IP dell’host di destinazione. 2. il mittente è un host che vuole spedire un datagram IP a un altro host su un’altra rete. In questo caso, il mittente deve utilizzare una tabola di routine per trovare l’indirizzo IP di un router. L’indirizzo logico che deve essere risolto è l’indirizzo del router 3. il mittente è un router che ha ricevuto il datagram IP e lo deve spedire a un host su un’altra rete. L’indirizzo logico da risolvere è quello del prossimo router. 4. il mittente è un router che ha ricevuto il datagram IP e lo deve spedire a un host su un’altra rete. L’indirizzo da risolvere è quello della destinazione finale.
Proxy ARP Un proxy ARP è un nodo che riceve e invia messaggi ARP per conto di un gruppo di nodi. Ogni qual volta un proxy ARP riveve una richiesta ARP per l’indirizzo IP di uno dei nodi che esso rappresenta, il proxy risponde con il proprio indirizzo fisico. Questo fa si che il proxy ARP riceva anche il datagram IP contentente i dati. Il proxy si preoccuperà di inoltrare correttametne questo datagram verso la reale destinazione. Risponderà a qualsiasi richiesta inviata per uno di questi indirizzi. I datagram IP inviati a questi indirizzi verranno recapitati al proxy ARP che li smisterà sulla sottorete riportata nella parte alta della figura.
96
RARP Il protocollo RARP (Riverse Address Resolution Protocol) permette a un nodo di una rete che conosce solo il proprio indirizzo fisico, di trovare il proprio indirizzo logico. Uno nodo conosce sempre il proprio indirizzo fisico, perché tale indirizzo è una proprietà dell’hardware che fa parte del nodo stesso. Il protocollo RARP è un molto simile al protocollo ARP. Il nodo crea un messaggio di richiesta RARP in cui inserisce il proprio indirizzo fisico e lo spedisce in broadcast sulla rete locale. Il protocollo RARP presenta un grosso problema: la richiesta RARP viene spedita in broadcast nello strato di collegamento. L’indirizzo fisico di broadcast limitato non permette al messaggio di andare oltre la rete locale; cioè il broadcast nello strato di collegamento può essere fatto solo all’interno della rete locale. BOOTP Il protocollo BBOTP (Bootstrap Protocol) è un protocollo client/server che funziona nello strato delle applicazioni. Questo significa che il server che risponde alle richieste dei client non deve necessariamente essere sulla stesa rete. I messaggi del protocollo BOOTP vengono incapsulati in pacchetti UDP che a loro volta vengono incapsulati in pacchetti IP. Se il server BOOTP è sulla stessa rete del client, allora ci deve essere un nodo chiamato relay agent. In questo caso, il relay agent riceve la richiesta; il relay agent conosce l’indirizzo IP del server BOOTP e potrò spedire il messaggio di richiesta a tale server
DHCP Il protocollo BOOTP, sebbene più efficiente del protocollo RARP non permette una configurazione dinamica degli indirizzo. Quando un client richiede il proprio indirizzo IP, il server BOOTP utilizza una tabella, che contiene le associazioni fra indirizzi fisici e logici per risalire all’indirizzo logico associato a un indirizzo fisico. Questo significa che l’associazione fra indirizzi fisici e indirizzi logici deve essere predeterminata e memorizzata nella tabella; tale tabella deve essere gestita manualmente dall’’amministratore di rete. Un’associazione statica fra indirizzi fisici e logici può risultare poco efficiente in varie situazioni. Il protocollo DHCP (Dynamic Host Configuration Protocol) risolve questo problema utilizzando un’assegnazione degli indirizzi IP sia statica che dinamica, permettendo una gestione manuale o automatica del sistema. 97
ICMP Il protocollo IP fornisce un meccanismo di trasmissione dei datagram non affidabile e senza connessione. Il protocollo IP è stato progettato in questo modo per poter utilizzare efficientemente le risorse della rete. Inoltre non fornisce nessun meccanismo per il controllo e la gestione degli errori.
Il protocollo IP non fornisce nemmeno un meccanismo grazie al quale un nodo della rete possa scoprire informazioni sulla rete. Ad esempio un nodo potrebbe voler sapere se un router oppure un altro nodo è funzionante e raggiungibile. il protocollo ICMP (Internet Control Message Protocol) è stato progettato per soddisfare queste esigenze. I messaggi del protocollo ICMP si dividono in due categorie: messaggi di notifica degli errori e messaggi di richiesta. La notifica degli errori è la funzionalità principale del protocollo ICMP. I messaggi di errore vengono spediti sempre al mittente del datagram per il quale si è verificato l’errore. La motivazione per questa scelta è che le uniche informazioni sicuramente disponibili riguarda il percorso fatto dal datagram sono l’indirizzo del mittente e l’indirizzo del destinatario. ICMP spedisce i messaggi di notifica dell’errore sempre al mittente del datagram per il quale si è verificato l’errore. Per limitare il traffico generato dal protocollo ICMP se il datagram IP contiene un messaggio ICMP crea a sua volta un errore, non viene generato un nuovo messaggio ICMP per la notifica dell’errore.
Quando un router non può inoltrare un datagram oppure l’host di destinazione non può consegnare il datagram, questo viene eliminato e il router oppure l’host spedisce un messaggio ICMP di destinazione non raggiungibile alla sorgente che ha inviato il datagram. Quando un router oppure il nodo di destinazione riceve un datagram, deve memorizzarlo in un buffer per poi successivamente poterlo inoltrare nel caso del router, oppure consegnare agli strati superiori nel caso del nodo destinazione. Se un router oppure il nodo di destinazione è costretto a eliminare un datagram perché il buffer è pieno, si può generare un messaggio ICMP di rallentamento della sorgente. Il messaggio di tempo scaduto viene generato in due casi. Il primo è quello in cui il campo TTL raggiunge il valore zero. Quando il campo TTL raggiunge il valore 0, il datagram viene eliminato. Una qualsiasi ambiguità o errore nell’intestazione di un datagram può creare seri problemi per la gestione del datagram attraverso la rete. Quando un router deve inoltrare un pacchetto destinato a un’altra rete, deve conoscere l’indirizzo IP del prossimo router a cui consegnare il pacchetto. Quando un router si accorge che la sorgente dovrebbe spedire il datagram verso la un altro router invia un messaggio ICMP di ridirezione che fornisce tale informazione alla sorgente.
98
Messaggi di richiesta Oltre ai messaggi di notifica dell’errore, il protocollo ICMP permette di spedire messaggi di richiesta di informazioni per diagnosticare eventuali problemi della rete. I messaggi utilizzati per questo scopo vengono detti messaggi di richiesta. I messaggi di richiesta echo e risposta echo vengono utilizzati per diagnosticare problemi di rete. L’utilizzo di questi due messaggi permette di stabilire se due nodi della rete riescono a comunicare. Richiesta e risposta timestamp Due nodi di una interrete possono usare i messaggi di richiesta e risposta timestamp per determinare il tempo di andata e ritorno necessario a un datagram IP. Richiesta e risposta maschera È possibile che un host conosca il suo indirizzo IP ma non conoscila corrispondente maschera (ad esempio /24). Per ottenere la maschera, che è una proprietà della rete e non del singolo host, un host può spedire un messaggio di richiesta maschera a un router della rete Messaggi di sollecito e presenza router Per ottenere l’indirizzo IP di un router, un host può spedire in broadcast un messaggio di sollecito router. Per annunciare la propria presenza su una rete, un router può spedire in broadcast un messaggio di presenza router. I messaggi di presenza router possono essere spediti sia in risposta a un sollecito sia periodicamente. Ping e traceroute Il comando ping utilizza i messaggi ICMP. Il comando traceroute nei sistemi Unix/Linux (tracert in windows) permette di scoprire il percorso, cioè la sequenza di router che attraverserebbe un datagram IP, da una sorgente a una destinazione. [immg pag 498] A spedisce un pacchetto con destinazione a b e il TTL viene impostato a 1. quando il router R1 riceve il pacchetto IP decrementa il valore di TTL che diventa 0. pertanto elimina il pacchetto e spedisce un messaggio ICMP a A. La tecnica per scoprire l’indirizzo del router R1 e il tempo di andata e ritorno fra A e R1 può essere utilizzata in modo simile per scoprire l’indirizzo del router R2 e il tempo di andata e ritorno di R2: anziché utilizzare il valore 1 del campo TTL si utilizza il valore 2. il router R2 così eliminerà il pacchetto e manda un messaggio ICMP. Quanto il pacchetto raggiunge il nodo B, il TTL verrò decrementato e raggiungerà il valore 0; in questo caso il pacchetto non verrà eliminato perché ha raggiunto la destinazione finale. Per ricevere un messaggio di errore anche dalla destinazione finale, il comando traceroute utilizza una strategia diversa. La porta di destinazione del pacchetto UDP viene impostato il valore 1, che non è un valore di supportato dal protocollo UDP. Quando l’host B riceve il pacchetto UDP non riuscirà a trovare un’applicazione che lo accetti, in quanto la porta non è corretta. Pertanto il pacchetto verrà eliminato e verrà spedito al nodo A un messaggio ICMP di destinazione non raggiungibile.
99
CAPITOLO 21: CONSEGNA, INOLTRO E INSTRADAMENTO Con il termine consegna si indica il modo in cui un pacchetto viene gestito dallo strato di rete. Per inoltro si intende il modo in cui un pacchetto viene consegnato al prossimo nodo del suo cammino verso la destinazione finale. Il termine instradamento (routing) indica la costruzione delle tavole di instradamento (tavole di routing). CONSEGNA DIRETTA E INDIRETTA: La consegna può essere diretta quando chi riceve il pacchetto è sulla stessa rete di chi lo spedisce, oppure indiretta quando chi riceve il pacchetto è su una rete diversa dalla rete di partenza del pacchetto.
Nel caso in cui la consegna sia indiretta il pacchetto dovrà passare attraverso una serie di router R1, R2, …, Rn prima di arrivare alla destinazione finale. I router R1, R2, …, Rn sono delle destinazioni temporanee. INOLTRO: L’operazione di inoltro è l’operazione che avviene quando si deve operare una consegna indiretta. L’operazione di inoltro richiede l’utilizzo di una tavola di routing. Quando un host o un router deve spedire un pacchetto verso una destinazione finale consulta la propria tavola di routing per trovare la strada. Tavola di routing: una tavola di routing deve contenere le informazioni necessarie per instradare un pacchetto verso la destinazione finale. Quali sono le informazioni che deve contenere una tavola di routing? Una prima idea sarebbe quella di inserire il percorso completo in ogni tavola di routing, ma in una rete enorme come Internet ciò risulta improponibile. Quindi per ridurne la dimensione in una tavola di routing si inseriscono solo le informazioni necessarie a raggiungere il prossimo router del percorso. Tale tecnica è chiamata next – hop.
Questo esempio mostra tavole di routing con percorso completo e next – hop. Un altro metodo per ridurre la dimensione delle tavole di routing è quello di inserire in esse non tutte le destinazioni finali, ma solo tutte le possibili reti. Quindi se una rete è costituita da 1000 host, una tavola di routing non dovrà contenere 1000 righe ma solo una riga per tutta la rete. Questa tecnica è chiamata aggregazione. Anche utilizzando queste due strategie le tavole di routing sarebbero comunque troppo grandi per poter essere gestite efficientemente. Pertanto le tavole di routing contengono solo una lista parziale delle possibili reti di destinazione. Per tutte le destinazioni non presenti nella tavola di routing deve essere definita una rotta di default sulla quale inoltrare i pacchetti. 100
Operazione di inoltro: quando un router riceve un pacchetto deve consultare la propria tavola di routing per capire dove spedire il pacchetto. Quindi come prima cosa deve estrarre l’indirizzo di destinazione dopodichè effettuare una ricerca nella tavola per individuare una riga che fornisca informazioni sulla rotta per questo indirizzo. Nel seguito utilizzeremo l’indirizzamento senza classi (uso della maschera di rete). Con l’indirizzamento senza classi, una tavola di routing deve contenere almeno quattro colonne: una per la maschera, una per il blocco degli indirizzi di destinazione, una per l’indirizzo del next – hop e una che specifica l’interfaccia di rete sulla quale spedire il pacchetto per raggiungere il prossimo router. Esempio: costruire una tavola di routing per il router R1 nella interrete mostrata nella figura sottostante:
Maschera /26 /25 /24 /22 *
Ind. Di destinazione 180.70.65.192 180.70.65.128 201.4.22.0 201.4.16.0 *
Next – hop 180.70.65.200
Interfaccia If2 If0 If3 If1 If2
Si descriva l’operazione di inoltro per un pacchetto che arriva al Router R1 nella configurazione mostrata nella figura precedente e che è destinata all’indirizzo IP 180.70.65.140. Soluzione: il router esegue le seguenti operazioni: 1. Viene utilizzata la prima maschera per estrarre un possibile indirizzo di rete dall’indirizzo di destinazione (in pratica si assume che l’indirizzo di destinazione abbia una maschera /26, ma potrebbe non essere così). Considerando solo i primi 26 bit dell’indirizzo di destinazione 180.70.65.140, si ottiene l’indirizzo di rete 180.70.65.192, che non corrisponde all’indirizzo di rete che ha associato alla maschera /26. 2. A questo punto si utilizza la seconda riga della tavola che corrisponde alla maschera /25. Estraendo l’indirizzo di rete da 180.70.65.140 con una maschera a 25 bit si ottiene l’indirizzo 180.70.65.128. Questo indirizzo corrisponde all’indirizzo di rete riportato nella tavola di routine per la maschera /25. Ciò significa che la seconda riga contiene informazioni per inoltrare il pacchetto. La colonna Next – hop non contiene nessuna informazione, il che significa che l’indirizzo del next hop è proprio l’indirizzo di destinazione del pacchetto. Inoltre la tavola di routing ci dice che il pacchetto deve essere inviato sull’interfaccia di rete if0.
101
Aggregazione degli indirizzi di rete: Il concetto di aggregazione, che, ripetiamo, permette di riportare nella tavola di routing solo l’indirizzo della rete di destinazione anziché gli indirizzi dei singoli host di destinazione, può essere usato anche per raggruppare varie reti di destinazione che condividono il next hop (stesso router) e quindi avere un’unica riga nella tavola di routing per tutte queste reti. La regola fondamentale è che comunque queste reti devono essere contigue.
In questo esempio il router R1 è connesso alle reti di quattro organizzazioni diverse, ognuna che utilizza una rete con 64 indirizzi (maschera /26). Il router R1 dovrà avere nella sua tavola di routing una riga per ognuna delle quattro reti in quanto è connesso alle quattro reti su quattro diverse interfacce (if0, if1, if2, if3). Il router R2 è connesso al router R1. E’ inutile che il router R2 abbia quattro righe nella propria tavola per le quattro reti. È sufficiente che abbia una riga che include tutti gli indirizzi delle quattro reti, quindi con una maschera /24 che comprende tutti e 256 indirizzi IP delle quattro reti.
Corrispondenza con la maschera più lunga: L’aggregazione degli indirizzi di rete può essere difficoltosa se gli indirizzi di rete che possono essere aggregati non condividono lo stesso next hop. Vedi esempio.
Riprendendo l’esempio precedente in questa figura vediamo che solo le prime tre organizzazioni sono geograficamente vicine e quindi raggiungibili dal router R1, mentre la rete della quarta organizzazione è fisicamente lontana da queste reti e quindi dovrà essere raggiunta attraverso il router R3. Il router R2 è connesso sia a R1 che a R3. In questa situazione il router R2 non potrà aggregare le quattro reti come aveva fatto in precedenza.
Quindi per risolvere questo problema si utilizza il principio della corrispondenza con la maschera più lunga. Questo principio dice che la tavola di routing deve essere ordinata mettendo prima le maschere più lunghe e poi quelle più corte. Quindi ritornando all’esempio precedente, la tavola di routing del router R2 conterrà una riga che specifica il next hop per i pacchetti destinati alla rete della quarta organizzazione, 140.24.7.192; per questa rete si utilizzerà una maschera /26. Tali pacchetti dovranno poi essere inoltrati presso il router R3 che può essere raggiunto attraverso l’interfaccia if1. A questo punto la tavola di routing di R2 può contenere una riga per tutti gli indirizzi delle reti delle prime tre organizzazioni. In realtà per come sono stati assegnati gli indirizzi di queste reti, l’aggregazione comprenderà anche gli indirizzi della quarta organizzazione. La maschera utilizzata nella seconda riga della tavola di routing di R2 sarà, quindi, /24 e il corrispondente indirizzo di rete è 140.24.7.0. L’interfaccia da utilizzare è if0. La riga corretta per i pacchetti da inviare alla quarta organizzazione, però, è la prima. 102
Routing gerarchico: Abbiamo visto che l’aggregazione riduce notevolmente la tavola di routing. L’aggregazione può essere fatta gerarchicamente, infatti, come abbiamo visto già in precedenza Internet è divisa in ISP nazionali e internazionali. Gli ISP nazionali sono divisi in ISP regionali che, a loro volta, sono suddivisi in ISP locali. Routing geografico: Per poter ridurre ulteriormente le tavole di routing è possibile utilizzare anche il routing geografico. È necessario, però, che l’assegnazione degli indirizzi IP avvenga in funzione della posizione geografica. Ad esempio si potrebbe assegnare un blocco di indirizzi al Nord America, un blocco all’Europa, un blocco all’Asia, un blocco all’ Africa e così via. Questi tipi di indirizzi geografici sono previsti solo nel protocollo IPv6. Tavole di routing: Le tavole di routing possono essere statiche o dinamiche. • Tavole di routing statiche: Una tavola di routing statica contiene delle informazioni che vengono inserite manualmente. La tavola non può essere aggiornata automaticamente quando ci sono dei cambiamenti. L’aggiornamento deve essere fatto manualmente dall’amministratore. Una tavola di routing statica può essere utilizzata solo in una piccola rete. • Tavole di routing dinamiche: Una tavola di routing dinamica è una tavola che può essere aggiornata automaticamente. L’aggiornamento viene effettuato periodicamente usando dei protocolli di routing come RIP, OSPF, BGP. In una rete grande come Internet si deve necessariamente utilizzare il routing dinamico. Formato delle tavole di routing: come già detto in precedenza una tavola di routing per l’indirizzamento senza classi deve avere almeno quatto colonne. Tuttavia, nella maggior parte dei router odierni le tavole di routing contengono anche altre colonne. Maschera
Rete di destinazione
Indirizzo prossimo hop
Interfaccia
Flag
Contatore
Pacchetti spediti
………..
………..
………..
………..
………..
………..
………..
1. Maschera: specifica la maschera di rete 2. Indirizzo di destinazione: specifica l’indirizzo di destinazione (singolo host) o gli indirizzi delle destinazioni (aggregazione di più indirizzi). 3. Indirizzo del next-hop: specifica l’indirizzo del prossimo nodo della rete (router o destinazione finale) al quale il pacchetto va consegnato 4. Interfaccia: specifica l’interfaccia sulla quale il pacchetto deve essere inoltrato. 5. Flag: indica la presenza o assenza di una certa proprietà: a. U (Up): indica che il next-hop è funzionante, se tale segnalatore non c’è allora il next-hop non funziona. b. G (Gateway): indica che il next-hop si trova in un’ altra rete e quindi consegna indiretta. c. H (Host-specific): indica che l’indirizzo di destinazione specificato nella tavola di routing è l’indirizzo di un host. d. D (Added by redirection): indica che la riga della tavola di routing è stata inserita in seguito ad un messaggio di ridirezione. e. M (Modified by redirection): indica che la riga della tavola di routing è stata aggiornata in seguito ad un messaggio di ridirezione. 6. Contatore: fornisce il numero di utenti che in quel momento stanno usando questo percorso. 7. Pacchetti spediti: mostra il numero di pacchetti spediti alle destinazioni specificate in questa riga.
PROTOCOLLI DI ROUTING: Per un funzionamento efficiente della rete, le tavole di routing devono essere aggiornate appena si verifica un cambiamento. I protocolli di routing svolgono questo compito. Un protocollo di routing è un insieme di regole e procedure che permette ai router di una rete di scambiarsi informazioni riguardanti i cambiamenti e quindi condividere le informazioni con i loro vicini. Come sappiamo ad un router possono essere collegate più reti, quindi, il compito di un router è quello di ricevere il pacchetto da una rete e smistarlo su un’altra rete. Questa scelta deve seguire un criterio fondamentale: “si dovrebbe scegliere la rete che ottimizza il percorso verso la destinazione”. Per scegliere un percorso ottimo nella maggior parte dei casi si assegna un costo per il passaggio del pacchetto attraverso una rete. Il costo di un percorso diventa così la 103
somma dei costi dei passaggi attraverso le singole reti. Un percorso ottimo è un percorso che minimizza tale costo. Il costo per il passaggio attraverso la rete viene stabilito dal protocollo. Routing intradominio e interdominio: Internet è così vasta che l’aggiornamento delle tavole di routing non può essere fatto utilizzando un solo protocollo. Per questo motivo Internet è divisa in sistemi autonomi (AS – Autonomous System) che sono gruppi di reti, e quindi di router, che sono sotto il controllo di una singola amministrazione. Spesso un AS corrisponde ad un ISP. Il routing all’interno di un sistema autonomo viene detto routing intradominio, mentre il routing fra sistemi autonomi è detto routing interdominio. Ogni sistema autonomo può scegliere il protocollo di routing per il routing intradominio, mentre per il routing interdominio tutti i sistemi autonomi coinvolti devono utilizzare lo stesso protocollo. Esistono molti protocolli per il routing sia intradominio che interdominio. Il protocollo RIP (Routing Information Protocol) è un’implementazione del protocollo basato sul vettore delle distanze. Il protocollo OSPF (Open Shortest Path First) è un’implementazione del protocollo basato sullo stato dei collegamenti. Il protocollo BGP (Border Gateway Protocol) è un’implementazione del protocollo basato sul vettore dei cammini. • Routing basato sul vettore delle distanze: Con questo metodo il costo del passaggio di un pacchetto su una rete dipende dalla rete e il percorso più conveniente fra due nodi è quello con costo totale minimo. In questo protocollo ogni nodo gestisce un vettore (tavola) delle distanze minime verso ogni altro nodo; la tavola contiene anche informazioni per poter instradare il pacchetto. Facciamo un esempio:
Situazione Iniziale
Inizializzazione: Come possiamo notare dalla figura, inizialmente, ogni nodo della rete conosce solo le distanze verso i nodi cui direttamente è collegato, mentre le distanze verso i nodi cui non è direttamente collegato viene rappresentato con il simbolo ∞ (cioè il nodo non è raggiungibile). Condivisione informazioni: L’idea di base di questo protocollo è lo scambio di informazioni fra i nodi direttamente collegati. Quindi in quest’esempio possiamo notare che il nodo A non conosce la strada per arrivare al nodo E, mentre il nodo C è direttamente collegato con il nodo E. Quindi se il nodo C condividesse le informazioni nella propria tavola di routing con il nodo A, allora il nodo A saprebbe come raggiungere il nodo E. Quindi se i nodi condividessero le proprie tavole di routing con i vicini sarebbero in grado di scoprire la topologia della rete. Quali sono le informazioni della propria tavola di routing che un nodo dovrebbe spedire ai propri vicini? La soluzione più semplice è che ogni nodo spedisca l’intera tavola di routing ai propri vicini, lasciando ad essi la scelta di quali informazioni utilizzare. La terza colonna della tavola di routing (prossimo hop) non serve ai vicini. Aggiornamento: Quando un nodo R riceve le informazioni della tavola di routing da un vicino V, deve aggiornare la propria tavola di routing. L’aggiornamento avviene nel seguente modo: d x R V Altra destinazione
1. Se il nodo R vuole sapere il costo totale dei percorsi verso le destinazioni che potrebbe raggiungere attraverso il nodo V, il nodo R deve sommare il costo del collegamento verso V (in questo caso d) ai costi contenuti nella tavola ricevuta da V. Quindi “R” potrà raggiungere “Altra destinazione” passando per “V” ad una distanza totale di d + x . 104
2. Nella tavola di routing di R, quindi, il prossimo hop per raggiungere “Altra destinazione” è V e il costo è quello calcolato precedentemente. 3. A questo punto il nodo V confronta la tavola costruita nelle due fasi precedenti con la propria tavola di routing. Quindi per ogni riga effettua il seguente aggiornamento: a) se la colonna del prossimo hop contiene due nodi diversi, allora viene scelta la riga con il costo più piccolo. b) se la colonna del prossimo hop contiene lo stesso nodo allora viene scelta la riga della nuova tavola. Riprendiamo l’esempio precedente: Destinazione Costo Next-hop A 0 B 5 Questa è la tavola di routing iniziale del nodo A C 2 D 3 E ∞ Destinazione A B C D E
Costo Next-hop 2 4 0 ∞ 4 -
Questa è la tavola di routing iniziale del nodo C
Vediamo l’aggiornamento della tavola di routing del nodo A quando quest’ultimo riceve la tavola di routing del nodo C. Passo 1 e 2: Destinazione Costo Per ottenere la tavola A risultante si A 2 somma il valore 2, che è la distanza B 4 da C ad E, a tutti i valori delle righe Destinazione Costo Next-hop C 0 della tavola di routing C. A 4 C D ∞ B 6 C E 4 C 2 C D ∞ C E 6 C Tavola di routing ricevuta da C Tavola di A risultante Passo 3: Ora confronto la tavola risultante di A con la tavola precedente di A e seguo i criteri (a) e (b) visti sopra:
Secondo il criterio (a) confrontando le due tavole nella colonna Prossimo Hop i nodi erano diversi e quindi si prendeva la riga che aveva costo minore. 105
Le tavole d routing vengono spedite sulla rete sia periodicamente sia quando si verifica un cambiamento della tavola. La spedizione della tavola avviene tipicamente ogni 30 secondi. Problema dell’instabilità, ciclo a due nodi: Un problema del routing basato sul vettore delle distanze è quello dell’instabilità. Per spiegare il problema basiamoci su un esempio: consideriamo che inizialmente sia il nodo A che il nodo B sanno come raggiungere il nodo X. Ad un certo punto il collegamento fra A e X si rompe. Il nodo A accorgendosi dell’interruzione, aggiorna la propria tavola di routing nella quale viene scritto che X non è più raggiungibile (distanza ∞). Il nodo A invia la nuova tavola di routing a B; è possibile, però, che anche B invii la propria tavola di routing prima di ricevere la tavola aggiornata di A. Questo significa che A riceve una tavola in cui B dice di poter raggiungere X a distanza n. Pertanto A penserà di poter raggiungere X attraverso B, quindi a distanza n+d (d = distanza da A a B). A questo punto A spedisce il nuovo aggiornamento della propria tavola a B, e B ricevendola aggiorna di conseguenza la propria tavola dicendo che può raggiungere X tramite A a una distanza di n+d+n. Questo procedimento, quindi, proseguirà all’infinito e l’anomalia sta nel fatto che in questo modo non ci si accorge che il nodo X non è più raggiungibile. Una soluzione al problema è quella di utilizzare un valore finito per rappresentare ∞ (un infinito finito). Un’altra soluzione è conosciuta come split horizon. Questa soluzione prevede che un nodo non spedisca l’intera tavola ai suoi vicini ma si comporti nel seguente modo: se il nodo B pensa che la strada ottima per raggiungere X sia quella che passa per A, non includerà la strada per X nella tabella che invierà ad A, in quanto tale informazione è stata ottenuta proprio da A. Questo metodo risolve il problema dell’instabilità però ne crea un altro. Normalmente i protocolli di routing basati sul vettore delle distanze utilizzano delle scadenze per le informazioni contenute nelle tavole di routing: quando una informazione non viene aggiornata prima della scadenza, viene eliminata la tavola di routing. Per risolvere questo problema, insieme alla strategia split horizon viene utilizzata anche un’altra strategia chiamata poison reverse: il nodo B, cioè, può continuare a pubblicizzare ad A il percorso verso X, ma anziché inserire la reale distanza verso X, inserisce un valore fittizio, ad es. ∞. Problema dell’instabilità, ciclo con tre o più nodi: il problema dell’instabilità può essere creato da cicli di tre o più nodi; per risolvere questo problema si utilizza un valore finito per rappresentare ∞. RIP (Routing Information Protocol): è un protocollo di routing intradominio basato sul vettore delle distanze. Esso viene utilizzato per sistemi autonomi, l’implementazione di tale protocollo segue le seguenti considerazioni: 1. Le destinazioni in una tavola di routing sono indirizzi di rete; 2. Il costo del passaggio tra una rete e l’altra è 1; 3. Il valore ∞ viene rappresentato con il valore 16; 4. La colonna del prossimo hop contiene l’indirizzo del router al quale bisogna inoltrare il pacchetto.
Questo esempio mostra un sistema autonomo con 7 reti e 4 router, incluse le tavole di routing dei router. Guardiamo la tavola di routing di R1: ha 7 righe che corrispondono a 7 reti. R1 è direttamente connesso alle reti 130.10.0.0 e 130.11.0.0; pertanto per queste reti non esiste un next – hop nella tavola di routing di R1. Per spedire un pacchetto a una delle 3 reti poste a sinistra, R1 deve inoltrare il pacchetto verso R2. Pertanto il prossimo hop per queste 3 reti è R2 il cui indirizzo IP è 130.10.0.1. Stessa cosa vale per le reti a destra.
106
•
Routing basato sullo stato dei collegamenti: ogni nodo costruisce una propria conoscenza dell’intera rete, cioè dei nodi, dei collegamenti, dei costi dei collegamenti e dell’usabilità degli stessi. Basandosi su questa conoscenza, interpretando la rete come un grafo, ogni nodo può utilizzare l’algoritmo di Dijkstra per costruire le tavole di routing. Ogni nodo ha una conoscenza diretta dello stato dei collegamenti di cui fa parte, qualsiasi cambiamento di questi collegamenti sarà percepito immediatamente dal nodo, mentre i nodi più distanti dovranno aspettare di ricevere gli aggiornamenti. In altre parole ogni nodo ha una conoscenza diretta della rete che è parziale. Mettendo insieme tali conoscenze parziali è possibile ottenere una conoscenza globale della rete che in condizioni di stabilità rispecchia la reale topologia della rete. Abbiamo detto, quindi, che ogni nodo condivide la propria conoscenza parziale della rete con gli altri nodi. La propagazione delle conoscenze parziali e la costruzione delle tavole di routing avviene attraverso le seguenti azioni: 1. Creazione delle informazioni sullo stato di ogni collegamento da parte di ogni nodo memorizzate in pacchetti denominati LSP (Link State packet); 2. Disseminazione dei pacchetti LSP verso ogni altro nodo (flooding); 3. Calcolo dell’albero dei cammini minimi da parte di ogni nodo; 4. Costruzione delle tavole di routing. 1. Un pacchetto LSP può contenere molte informazioni: identità del nodo che crea il pacchetto, elenco dei collegamenti di cui il nodo fa parte, numero di sequenza e istante di creazione del pacchetto. Le prime due informazioni rappresentano la conoscenza parziale della rete tramite le quali si costruisce la conoscenza globale. Il numero di sequenza facilita e rende efficiente l’operazione di disseminazione, l’istante di creazione evita che esso rimanga nella rete troppo a lungo. 2. Quando un nodo ha creato un pacchetto LSP lo deve inondare su tutta la rete ed usa i seguenti criteri: • Il nodo che ha creato il pacchetto LSP ne spedisce una copia a ogni suo vicino; • Un nodo X che riceve tale pacchetto controlla se ha già un altro pacchetto LSP proveniente dallo stesso mittente M. Se il pacchetto arrivato è più vecchio di quello conosciuto (cioè se ha un numero di sequenza precedente) il pacchetto appena arrivato viene eliminato, se invece è più recente di quello conosciuto o non ci sono altri pacchetti arrivati da M il nodo X esegue le operazioni: a. Cancella il vecchio pacchetto arrivato da M (se questo esiste); b. Spedisce una copia del pacchetto arrivato ai suoi vicini tranne M. 3. Dopo aver ricevuto i pacchetti LSP da tutti i nodi della rete, un nodo ha una conoscenza globale di essa, il nodo rappresenta la rete con un grafo. Un albero dei cammini minimi è un albero che rappresenta tutti i cammini minimi a partire dalla radice. L’algoritmo di Dijkstra permette di calcolare l’albero dei cammini minimi. L’algoritmo divide i nodi in due insiemi: finali e temporanei; un nodo diventa finale quando si scopre il precorso più breve dalla radice verso quel nodo. Partendo da un nodo finale, l’algoritmo considera tutti i vicini come nodi temporanei e quei vicini che soddisfano un determinato criterio, diventano finali.
107
(1) In questo esempio, inizialmente, l’unico nodo considerato è la radice stessa; la radice viene inserita nell’insieme dei nodi temporanei. • Nodi finali: nessuno; • Nodi temporanei: A (distanza dalla radice: 0). (2) Il nodo A è l’unico nell’insieme dei nodi temporanei ed è anche quello con distanza minima dalla radice, pertanto viene spostato nella lista dei nodi finali. I suoi vicini B, C e D vengono inseriti nella lista dei nodi temporanei. • Nodi finali: A (0); • Nodi temporanei: B (5), C (2), D (3). (3) Fra i nodi temporanei C è quello a distanza minima dalla radice, quindi viene spostato nella lista dei nodi finali. Inseriamo, quindi, nella lista dei nodi temporanei i vicini di C. i vicini di C sono A, B ed E. A non viene considerato perché è già presente nella lista dei nodi finali, il nodo B è già nella lista dei nodi temporanei e può essere raggiunto con una distanza 5 dalla radice. Se si volesse raggiungere il nodo B attraverso C la distanza sarebbe 6 dalla radice (2 è la distanza dalla radice a C e 4 la distanza tra C e B). Poiché conosciamo già la distanza minima per raggiungere B (5) < 6 non consideriamo questa ultima possibilità; in altre parole B rimane nella lista dei nodi temporanei con distanza 5. Il nodo E viene inserito nella lista dei nodi temporanei. • Nodi finali: A (0), C (2); • Nodi temporanei: B (5), D (3), E (7). (4) Tra i nodi temporanei, il nodo con distanza minima è D, e pertanto viene inserito nella lista dei nodi finali. Il nodo D ha come unico vicino il nodo A e quindi non viene considerato. • Nodi finali: A (0), C (2), D (3); • Nodi temporanei: B (5), E (7). (5) Tra i nodi temporanei il nodo con distanza minima è B pertanto viene inserito nella lista dei nodi finali. I vicini di B sono A, C, E. Sapendo che C e A sono nodi finali, viene considerato solo il nodo E. Raggiungere il nodo E attraverso B costa 6 (5 per raggiungere B e 1 la distanza tra B e E). Sappiamo anche che il nodo E è già presente nella lista dei nodi temporanei, con distanza 7 dalla radice, quindi conviene utilizzare la nuova strada • Nodi finali: A (0), C (2), D (3), B (5); • Nodi temporanei: E (6). (6) Nella lista dei nodi temporanei c’è solo E e quindi viene spostato nella lista dei nodi finali. I nodi vicini di E sono già finali e quindi non vengono considerati. • Nodi finali: A (0), C (2), D (3), B (5), E(6); • Nodi temporanei: nessuno. 4. Dall’albero dei cammini minimi è facile costruire la tavola di routing. Riportiamo di seguito la tavola di routing del nodo A dell’esempio precedente 108
Destinazione A B C D E
Costo Next-hop 0 5 2 3 6 C
OSPF (Open Shortest Path First): è un protocollo di routing intradominio basato sullo stato dei collegamenti. Viene utilizzato all’interno dei sistemi autonomi. Tale protocollo per gestire efficientemente l’intera rete divide un sistema autonomo in aree. Un’area quindi è un insieme di reti all’interno del sistema autonomo. A ogni area viene assegnato un identificativo. All’interno di queste aree i router disseminano le informazioni di routing. Ai bordi delle aree vi sono dei particolari router, chiamati router di confine. Fra le aree di un sistema autonomo vi è un’area particolare, chiamata area dorsale, alla quale devono essere connesse tutte le aree del sistema autonomo. I router all’interno dell’area dorsale sono chiamati router di dorsale. Il protocollo OSPF permette all’amministratore del sistema di assegnare un costo, chiamato metrica, a ogni percorso. •
Routing basato sul vettore dei cammini: I protocolli basati sul vettore delle distanze e sullo stato dei collegamenti sono protocolli per il routing intradominio, cioè per il routing all’interno di un sistema autonomo. Per il routing interdominio occorre un approccio diverso. Tale routing si basa su una tecnica detta vettore dei cammini. In pratica in ogni sistema autonomo c’è un nodo che funge da portavoce; I portavoce operano più o meno come i router all’interno di un sistema autonomo solo che le informazioni che si scambiano i portavoce sono diverse da quelle che si scambiano i router: cioè vengono comunicati i cammini che permettono di raggiungere i sistemi autonomi e non vengono utilizzate metriche. I portavoce, quindi, formano una “rete logica” e si scambiano informazioni di raggiungibilità. Inizializzazione: Inizialmente ogni portavoce può controllare la raggiungibilità dei nodi all’interno del proprio sistema autonomo.
In questo esempio il nodo A1 è il portavoce per il sistema autonomo AS1, il nodo B1 è il portavoce per il sistema AS2, C1 per AS3, D1 per AS4. Il nodo A1 crea una tavola di routing con la seguente informazione: le reti A1….A5 sono nel sistema autonomo AS1 e possono essere raggiunte attraverso AS1. In modo simile, gli altri nodi portavoce creano delle tavole per i propri sistemi autonomi. Condivisione delle informazioni: un portavoce di un sistema autonomo condivide la sua tavola di routing con i propri vicini (vicini intesi come portavoce direttamente connessi). Facendo riferimento, quindi, all’esempio precedente il nodo A1 condivide la propria tavola di routing con i nodi B1 e C1, il nodo B1 con i nodi A1 e C1, il nodo C1 con i nodi A1, B1 e D1, e il nodo D1 con il nodo C1. 109
Aggiornamento: Quando un portavoce riceve una tavola di routing da un proprio vicino, aggiorna la propria tavola di routing, aggiungendo quei nodi che può raggiungere attraverso il sistema autonomo che ha spedito le informazioni. Riprendendo l’esempio precedente, se il portavoce A1 spedisce la propria tavola di routing al portavoce C1, la tavola di routing del nodo C1 verrà aggiornata con le informazioni di raggiungibilità dei nodi A1…A5; il percorso per raggiungere questi nodi dal sistema autonomo AS3 è AS3-AS1. La figura sottostante mostra le tavole di routing finali dei quattro sistemi autonomi.
Utilizzando queste tavole , se il router A1 riceve un pacchetto per A3 sa che il pacchetto deve rimanere all’interno del proprio sistema autonomo; se invece A1 riceve un pacchetto destinato a D1, sa che il pacchetto dovrà passare da AS1 ad AS2 e poi ad AS3 per raggiungere la propria destinazione. BGP (Border Gateway Protocol): è un protocollo di routing interdominio basato sul vettore dei cammini. Il protocollo BGP divide i sistemi autonomi in tre categorie: • AS terminale: è un sistema autonomo con una sola connessione verso un altro sistema autonomo, quindi i pacchetti che entrano in un AS terminale sono destinati ad un host che si trova all’interno di esso. Es. di AS terminali sono gli ISP locali. • AS di transito: è un sistema autonomo che consente ai pacchetti provenienti da altri AS di essere inoltrati verso il sistema autonomo di destinazione passando per i propri router. Es. di AS di transito sono gli ISP nazionali. • AS con più connessioni: è un sistema autonomo con più connessioni che non permette il passaggio di pacchetti verso altri sistemi autonomi. Es. di AS con più connessioni è un sistema autonomo di una grande azienda connesso a più ISP. BGP interno ed esterno: La sessione E-BGP viene utilizzata per scambiare informazioni fra due nodi portavoce che appartengono a due sistemi autonomi diversi. Una sessione I-BGP viene utilizzata per scambiare informazioni fra due router all’interno dello stesso sistema autonomo.
110
PARTE V CAPITOLO 22:
STRATO DI TRASPORTO PROTOCOLLI UDP, TCP E SCTP
Lo strato di collegamento di una interrete permette di trasferire i frame fra i due host direttamente collegati, cioè che si trovano sulla stessa rete. Lo strato di rete, invece, permette di trasferire i datagram fra due host indipendentemente dalla loro posizione nella rete. Ciò che a noi interessa, però, è la possibilità di far comunicare due processi, cioè due programmi in esecuzione, che vengono eseguiti su due host qualsiasi della rete. Lo strato di trasporto, quindi, ha proprio queste responsabilità: fornire un servizio di comunicazione che permetta a due processi di comunicare fra di loro. Nello strato di trasporto la suite di protocolli usati in Internet sono: • TCP (Transmission Control Protocol): è complesso ma fornisce garanzie sulla consegna dei dati; • UDP (User Datagram Protocol): è il più semplice ma non fornisce nessuna garanzia; • SCTP (Stream Control Transmission Protocol): introdotto di recente per soddisfare le esigenze di gestione di flussi multimediali (audio/video). Nello strato di rete due calcolatori comunicano mediante gli indirizzi IP, questo però non è sufficiente nello strato di trasporto in quanto abbiamo visto che gli indirizzi IP permettono di identificare due calcolatori ma non i processi in esecuzione sui singoli calcolatori. Per questo motivo abbiamo bisogno di un ulteriore meccanismo che permetta di identificare il processo di destinazione una volta che il datagram è giunto nell’host di destinazione. Lo strato di trasporto, quindi, risolve questo problema utilizzando i numeri di porta. Dunque la comunicazione tra due host, nello strato di trasporto, sarà caratterizzata dalla coppia di valori (IP, numero di porta) per ogni host. I numeri di porta sono interi a 16 bit, cioè compresi tra 0 e 65535. I numeri di porta vengono gestiti dall’associazione IANA (Internet Assigned Number Authority) che divide tali numeri di porte in tre categorie: • Porte ben note: da 0 a 1023. Assegnate a servizi ben specifici; • Porte registrate: da 1024 a 49151. È possibile registrare presso IANA l’utilizzo di uno di questi numeri di porta per evitare conflitti con altri utenti; • Porte dinamiche: da 49152 a 65535. Non sono controllate da IANA, il sistema operativo le utilizza come porte effimere.
111
Modello client/server: sebbene ci siano vari modi per far comunicare due processi il più comune è il modello client/server: un processo, chiamato Client, necessita di servizi di un altro processo, chiamato Server. • Server: o Processo che offre un servizio; o Sempre in esecuzione; Almeno quando il servizio è attivo; In attesa di richieste. • Client: o Usufruisce del servizio; o Contatta il server (inizia la comunicazione). Ritornando, quindi, al concetto di numero di porta il processo client utilizza un numero di porta scelto in modo casuale dallo strato di trasporto, chiamata porta effimera (il suo utilizzo è limitato alla durata della connessione). Invece il numero di porta utilizzato dal processo server deve essere una porta nota. In questo esempio il server Daytime offre il proprio servizio sulla porta ben nota 13, mentre il processo client utilizza la porta effimera 52000 per stabilire la comunicazione con il server. N.B. l’indirizzo IP serve a identificare l’host di destinazione mentre il numero di porta serve a identificare il processo una volta che il datagram è giunto nell’host di destinazione. Socket Abbiamo visto che per identificare univocamente un processo abbiamo bisogno dell’indirizzo IP per identificare l’host sul quale è in esecuzione il processo e il numero di porta per identificare il processo all’interno dell’host. La combinazione di indirizzo IP e numero di porta viene chiamato indirizzo di socket o più semplicemente socket.
Per una comunicazione fra un client e un server abbiamo bisogno di un socket per il client e di un socket per il server. Multiplexing e demultiplexing Il meccanismo di indirizzamento dei numeri di porta è una forma di multiplexing e demultiplexing effettuata dallo strato di trasporto.
Nell’host mittente possono esserci vari processi che spediscono dati. Pertanto lo strato di trasporto deve effettuare il multiplexing dei dati in arrivo dai vari processi. Per fare ciò, assegna un numero di 112
porta a ogni processo, aggiunge tale numero in una propria intestazione per i dati in arrivo dal processo e spedisce i dati utilizzando lo strato di rete. Lo strato di trasporto della destinazione, grazie al numero di porta inserito nell’intestazione creata dallo strato di trasporto nel mittente, consegna i datagram ai processi di destinazione. Comunicazione senza e con connessione Un protocollo di trasporto può offrire un servizio di comunicazione orientato alla connessione oppure senza connessione. In un servizio di comunicazione senza connessione i dati vengono spediti dal mittente al destinatario, senza dover stabilire una connessione prima della spedizione dei dati. I datagram non vengono numerati; poiché non c’è una connessione, ognuno di essi viaggia indipendentemente dagli altri e senza nessuna relazione con quelli spediti prima o dopo. Ogni datagram può essere perso o ritardato o arrivare fuori sequenza. Il protocollo più semplice dei tre protocolli di trasporto usati per Internet è il protocollo UDP. In un servizio di comunicazione con connessione, prima di poter spedire dati, il mittente e il destinatario devono instaurare una connessione. Dopo aver trasferito tutti i dati, la connessione deve essere eliminata. Affidabilità I servizi di comunicazione dello strato di trasporto possono essere classificati in affidabili e inaffidabili. Un servizio di comunicazione inaffidabile come il protocollo UDP, non fornisce alcuna garanzia sulla consegna dei pacchetti. N servizio di comunicazione affidabile, come TCP o SCTP, può offrire varie garanzie sulla consegna dei dati utilizzando meccanismi per il controllo del flusso e degli errori.
I tre protocolli dello strato di trasporto Originariamente la suite di protocolli TCP/IP specificava due protocolli per lo strato di trasporto: il protocollo UDP e TCP. Un nuovo protocollo SCTP è stato recentemente inserito nella suite.
PROTOCOLLO UDP Il protocollo UDP (User Datagram Protocol) è un protocollo di trasporto inaffidabile e senza connessione. Non offre nient’altro che l’indirizzamento dei processi attraverso il numero di porta oltre al sevizio già offerto dal protocollo IP. Il protocollo UDP viene utilizzato perché ha comunque dei lati positivi. Grazie alla sua semplicità il sovraccarico dovuto al protocollo è minimo. Nei casi in cui un processo voglia spedire una piccola quantità di dati e i dati non siano di vitale importanza, può utilizzare il protocollo UDP. L’utilizzo del protocollo UDP richiede meno interazione fra mittente e destinatario e se i dati vengono consegnati come succede nella maggior parte dei casi, risulta più efficiente rispetto a TCP o SCTP.
113
In un sistema Unix/Linux i numeri di porta ben noti sono memorizzati nel file /etc/services. Datagram I pacchetti del protocollo UDP vengono chiamati datagram e hanno l’intestazione di lunghezza fissa di 8 byte.
I campi dell’intestazione sono: 1. numero di porta del mittente. Questo campo significa il numero di porta utilizzato dal processo che spedisce il datagram. È un campo di 16 bit e contiene un numero di porta compreso fra 0 e 65535. 2. numero di porta del destinatario. Questo campo specifica il numero di porta del processo destinazione; anche questo campo è di 16 bit. 3. lunghezza. Questo campo di 16 bit definisce la lunghezza totale del datagram. In realtà non è necessario. La lunghezza del datagram UDP = lunghezza datagram IP – lunghezza intestazione IP. 4. somma di controllo. Questo campo viene utilizzato per rilevare errori sull’intero datagram, cioè sia nell’intestazione che nei dati. Somma di controllo La somma di controllo utilizzata dal protocollo UDP viene calcolata in un modo diverso da quello descritto nel capitolo 9. in questo caso la somma include tre sezioni: una pseudointestazione, l’intestazione del pacchetto UDP e i dati che arrivano allo strato superiore.
114
Esempio 22.2 Il datagram utilizza 7 byte di dati. Si utilizzano gli zeri per allineare i byte di dati per il controllo della somma di controllo. Sia la pseudointestazione che il riempimento finale non fanno parte del datagram ma solo per il calcolo della somma di controllo. Tale somma è opzionale. Se non viene utilizzata il campo relativo alla somma di controllo contiene tutti 1 (una somma reale non può mai contenere tutti 1, dato che i campi dell’intestazione non possono essere formati da solo 0).
Code L’implementazione dei numeri di porta prevede l’utilizzo di code per memorizzare i datagram in uscita e quelli in entrata.
Quando un processo richiede la comunicazione attraverso un particolare numero di porta UDP, vengono create, da parte del sistema operativo, delle code. Alcune implementazioni creano sia una coda di entrata che una coda di uscita associate a ogni processo. Altre implementazioni creano solo una coda di entrata associata a ogni processo. si noti che le code sono associate al numero di porta e sono operative finché il processo è in esecuzione. Quando il processo termina le code vengono eliminate. Per spedire i dati il processo mittente li inserisce nella coda di uscita. Il protocollo UDP preleva i dati dalla coda di uscita, aggiunge l’intestazione UDP e consegna il datagram UDP al protocollo IP. Quando arriva un datagram UDP, il protocollo UDP controlla se esiste già una coda di entrata associata al numero di porta specificato come porta destinazione. Nel caso la coda esista, il datagram in arrivo viene inserito nella coda di entrata. Se la coda non esiste, il protocollo UDP elimina il datagram e chiede al protocollo ICMP di spedire al mittente un messaggio di errore (porta non raggiungibile). PROTOCOLLO TCP TCP (Transfer Control Protocol), come UDP, permette la comunicazione fra due processi; pertanto anch’esso utilizza i numeri di porta. Diversamente da UDP, TCP è un protocollo di trasporto che utilizza una connessione. Prima di spedire i dati crea una connessione virtuale fra il mittente e il destinatario. Inoltre, il protocollo TCP utilizza dei meccanismi per il controllo del flusso e degli errori. Flusso di dati Con il protocollo TCP, invece, il processo mittente spedisce un flusso di byte, senza limitazione sulla dimensione, e il protocollo destinatario riceve esattamente lo stesso flusso di byte. Il protocollo TCP crea una connessione virtuale che può essere paragonata a un tubo che collega il mittente e il destinatario, nel quale possiamo far fluire i dati. 115
Buffer. Poiché il processo mittente e il processo destinatario potrebbero non scrivere e leggere alla stessa velocità, il protocollo TCP utilizza dei buffer per memorizzare sia il flusso dei dati in uscita dal processo mittente sia il flusso di dati in entrata per il processo destinatario.
Un buffer è una coda circolare di celle di memoria capaci ognuna di contenere un byte. Il buffer del mittente è diviso in tre zone. La zona bianca contiene celle di memoria che possono essere utilizzare dal processo mittente per scrivere nuovi byte da spedire. La scrittura di 1 byte fa cambiare lo stato della cella da bianca a colorata. L’area blu contiene byte che sono stati spediti dal protocollo TCP ma per i quali non si è ancora ricevuto un riscontro; TCP mantiene i byte spediti nel buffer se non è sicuro che questi byte sono stati ricevuti dal destinatario. Quando TCP è sicuro che i byte sono stati consegnati al destinatario, libera le corrispondenti celle di memoria allargando la zona libera (quella bianca). La zona rossa, infine, contiene i byte che il processo mittente ha già scritto ma che devono essere ancora spediti dal protocollo TCP. La spedizione di 1 byte fa cambiare lo stato della cella corrispondente da rossa a blu. Si noti che TCP potrebbe spedire anche solo una parte di byte da spedire; ci sono vari motivi per cui TCP potrebbe spedire solo una parte di questi byte. Il funzionamento del buffer del destinatario è più semplice. il buffer circolare è diviso in due zone in questo caso. La zona bianca contiene celle vuote che possono essere utilizzate per memorizzare i byte in arrivo, mente la sezione colorata contiene quei byte che sono stati ricevuti e memorizzati nel buffer ma che devono ancora essere prelevati dal processo destinatario. Quando un byte viene letto dal processo destinatario, la corrispondente cella del buffer viene riciclata. Segmenti. Poiché i dati devono comunque essere trasportati dal protocollo IP, il flusso di dati fornito dal processo mittente dovrà essere diviso in pezzi che possono essere inseriti in datagram IP. Pertanto il protocollo TCP si preoccuperà di spedire il flusso di dati in pezzi che vengono chiamati segmenti. A ogni segmento il protocollo TCP aggiunge un’intestazione TCP e utilizza lo strato di rete per incapsulare il tutto in un datagram IP. All’arrivo i segmenti dovranno essere rimessi insieme per creare il flusso di dati originali da consegnare al processo destinatario. Anche questo è ovviamente compito del protocollo TCP.
116
Comunicazione bidirezionale Il protocollo TCP offre un servizio di comunicazione bidirezionale e quindi permette la spedizione dei dati in entrambe le direzioni contemporaneamente. Pertanto in una comunicazione TCP ci sono 4 buffer, uno di spedizione e uno di ricezione in ognuno dei due host coinvolti nella comunicazione. Connessione Prima di spedire i dati, il protocollo TCP crea una connessione fra i due processi; tale connessione verrà eliminata alla fine dello scambio dati. Il funzionamento del protocollo TCP passa attraverso le seguenti 3 fasi: 1. instaurazione della connessione 2. scambio dati in entrambe le direzioni 3. chiusura e eliminazione della connessione Affidabilità Il servizio offerto dal protocollo IP per la consegna dei dati contenuti nei segmenti non fornisce alcun tipo di garanzia. È responsabilità del protocollo TCP creare una connessione virtuale affidabile controllando che tutti i byte vengano ricevuti, eventualmente rispedendo quelli che non vengono ricevuti e ristabilendo l’ordine dei byte qualora questo venga perso. Numerazione del flusso di byte TCP utilizza un sistema di numerazione che numera tutti i byte del flusso. Ogni segmento includerà un numero di sequenza che specifica il numero di sequenza del primo byte contenuto nel segmento. Poiché la comunicazione è bidirezionale, ogni segmento trasporta anche un numero di riscontro. I byte spediti dal protocollo TCP vengono numerati. La numerazione inizia da un numero casuale. Esempio Supponiamo che vengano trasferiti 5000 byte utilizzando una connessione TCP e che la numerazione parte da 10001. supponendo che i dati vengano trasferiti in cinque segmenti di 1000 byte, quali sono i numeri di sequenza specificati in ogni segmento? Soluzione Il primo segmento avrà numero di sequenza 10001, esso trasporta i primi 1000 byte, dal numero 10001 al 11000. il secondo segmento avrà numero di sequenza 11001; esso trasporta i successivi 1000 byte dal 11001 al 12000 e così via. Il numero di sequenza di un segmento TCP fa riferimento al primo byte dei dati contenuti nel segmento. Numero di riscontro. Una comunicazione TCP è bidirezionale. Poiché i dati fluiscono sia da A a B che da B ad A, il protocollo TCP spedisce segmenti in entrambi le direzioni. Per poter comunicare l’avvenuta ricezione dei byte, il protocollo TCP utilizza dei numeri di riscontro che devono essere spediti nella direzione opposta a quella della spedizione dei dati. Per evitare di spedire dei messaggi che contengono solo i numeri di riscontro, poiché ci sono dei segmenti di dati che viaggiano nella stessa direzione in cui devono viaggiare i riscontri, il protocollo utilizza una tecnica detta di piggyback: i numeri di riscontro che B deve spedire ad A vengono inseriti nei segmenti di dati che vanno da B verso A. Il numero di riscontro x vale come riscontro per tutti i byte numerati fino a x-1. 117
Il valore del numero di riscontro definisce il numero del prossimo byte che il destinatario si aspetta di ricevere. Il riscontro è cumulativo. Controllo del flusso Il protocollo TCP fornisce dei meccanismi per il controllo del flusso. Il destinatario dei dati può controllare la quantità di dati che possono essere spediti dal mittente. Questa caratteristica è utile per impedire al mittente di sovraccaricare il destinatario con dati che non possono essere memorizzati nei buffer. Controllo degli errori Il protocollo TCP fornisce anche dei meccanismi per il controllo degli errori, che viene fatto per ogni segmento. Ovviamente garantisce che non ci sono errori in tutti i segmenti equivale a garantire che on ci sono errori in tutto il flusso di byte. Controllo della congestione Il controllo della congestione permette al destinatario di regolare opportunamente secondo le proprie necessità la velocità di spedizione della sorgente. Oltre a questa funzionalità il protocollo TCP permette di regolare la velocità di spedizione dei dati in funzione del livello di congestione della rete. Segmenti
L’intestazione di un segmento TCP è lunga da un minimo di 20 byte a un massimo di 60 byte ed è seguita dai dati contenuti nel segmento. L’intestazione è lunga 20 byte se non ci sono opzioni. ¾ Numero di porta del mittente. Questo campo di 16 bit specifica il numero di porta utilizzato dal processo mittente. ¾ Numero di porta del destinatario. Questo campo di 16 bit specifica il numero di porta del processo destinatario ¾ Numero di sequenza. Di 32 bit specifica il numero di sequenza del primo byte contenuto nella sezione dei dati del segmento. Durante l’instaurazione della connessine viene utilizzato un numero di sequenza casuale, x, che fornisce anche la numerazione, x+1, del primo byte che dovrà essere trasmesso ¾ Numero di riscontro. Di 32 bit specifica il numero del prossimo byte che il destinatario si aspetta di ricevere dal mittente. ¾ Lunghezza di intestazione. Questo campo di 4 bit definisce la lunghezza dell’intestazione TCP misurata in gruppi di 4 byte. Poiché la lunghezza dell’intestazione di un segmento varia fra 20 e 60 byte, il valore varia fra 5 (5x4=20) e 15 (15x4=60). ¾ Bit riservati. 6 bit riservati per utilizzi futuri ¾ Bit di controllo. Di 6 bit fornisce 6 bit di controllo utilizzati per vari scopi.
¾ Lunghezza della finestra. Il protocollo TCP basa il proprio funzionamento sull’algoritmo della finestra scorrevole. Di 16 bit definisce la dimensione della finestra scorrevole. ¾ Somma di controllo. Di 16 bit contiene il valore della somma di controllo 118
¾ Puntatore dati urgenti. Questo campo di 16 bit è valido solo quando il corrispondente bit vale a 1. viene utilizzato quando il segmento contiene dei dati urgenti, cioè dei dati che devono essere letti subito dal processo destinazione. Il puntatore urgente contiene il numero di byte urgente. Pertanto i dai urgenti sono quelli numerati dal numero x di sequenza del segmento fino al numero x+y-1 dove y è il valore del puntatore urgente. ¾ Opzioni. Ci possono essere fino a 40 byte di informazioni opzionali nell’intestazione di un segmento TCP. CONNESSIONE TCP Instaurazione della connessione
La fase di instaurazione della connessione in TCP viene chiamata three-way handshanking. Uno dei processi chiamato client vuole aprire una connessione con l’altro processo chiamato server utilizzando il protocollo TCP. Il processo server deve innanzitutto comunicare al protocollo TCP che è pronto ad accettare una connessione TCP. Questa richiesta viene chiamata apertura passiva. Il processo client invece chiede al protocollo TCP di instaurare una connessione con un processo server che deve aver già effettuato l’apertura passiva. Tale richiesta è chiamata apertura attiva. Vengono scambiati 3 segmenti: 1. il client spedisce il primo segmento che viene chiamato segmento di SYNC, nel quale l’unico bit di controllo che vale 1 è SYNC. Questo segmento serve per la sincronizzazione. Il numero di sequenza specificato viene scelto in modo causale. 2. il server risponde con un altro segmento, chiamato segmento di SYNC+ACK, nel quale i bit di controllo posti a 1 sono SYNC e ACK. Questo segmento ha una doppia funzione, è un segmento SYNC nell’altra direzione e allo stesso tempo un riscontro per il segmento SYNC spedito dal client. 3. il client spedisce un terzo segmento in risposta al segmento spedito dal server. Quest’ultimo segmento è semplicemente un segmento di ACK che conferma la ricezione del segmento SYNC spedito dal server. Trasferimento dati Instaurata la connessione, possono essere trasferiti i dati. Sia il client che il server possono spedire dati e riscontri.
119
In questo esempio dopo l’instaurazione della connessione, il client spedisce 2000 byte di dati in due segmenti. Quindi il server risponde spedendo 2000 byte in un solo segmento. Il client spedisce un ulteriore segmento che però non contiene dati, ma solo un riscontro. I segmenti di dati spediti dal client viaggiano con il bit di controllo PSH impostato a 1; il segmento spedito dal server invece non utilizza il bit di PSH. Chiusura della connessione Sia il server che il client possono decidere di chiudere la connessione, anche se la chiusura della connessione viene tipicamente iniziata dal client. La chiusura può avvenire in 2 modi: three-way e mezza-chiusura. Chiusura three-way. 1. il processo client richiede la chiusura e spedisce un segmento con il bit do controllo FIN a 1. può contenere anche l’ultima parte dei dati che il client vuole spedire. 2. il protocollo TCP nel lato server, dopo aver ricevuto il segmento di FIN notifica la richiesta di chiusura spedendo un segmento con i bit FIN+ACK impostati. Anche il questo caso il segmento può trasportare dati. 3. infine il client spedisce l’ultimo segmento di ACK per confermare la ricezione del segmento di FIN spedito dal server. Questo segmento non trasporta dati e contiene un numero di riscontri pari al numero di sequenza ricevuto nel segmento di FIN spedito dal server e incrementato di 1.
Mezza chiusura. Nella chiusura three-way si assume che il server chiuda immediatamente la connessione dopo aver ricevuto la richiesta di chiusura. Tuttavia ci possono essere delle situazioni in cui il client chieda la chiusura della connessione perché non ha più dati da spedire al server, ma il server ha ancora dati da spedire al client e pertanto vuole mantenere aperta la connessione. 120
I primi due segmenti sono il segmento di FIN che richiede la chiusura della connessione da parte del client e il segmento di ACK spedito dal server. Dopo la spedizione di questi due segmenti la connessione è chiusa a metà, il client non può più spedire dati, mentre il server ha mantenuto aperta la connessione e quindi può ancora spedire segmenti di dati. Quando anche il server avrà finito di spedire i propri dati potrà effettuare la chiusura della connessione spedendo un segmento di FIN. Diagramma di stato di TCP Tuttavia tali fasi sono sufficientemente complicate da richiedere un diagramma di stato per la descrizione dettagliata del comportamento di TCP. La notazione Evento/Spedisci indica ciò che TCP spedisce nell’accadere di un evento; se viene specificato solo l’evento significa che TCP no spedisce niente e c’è solo il passaggio da uno stato all’altro. Lo stato di TIMEWAIT indica che bisogna aspettare prima della chiusura della connessione per due motivi: il primo è per evitare problemi durante la chiusura della connessione, il secondo motivo è per evitare problemi con la reincarnazione di una connessione. Una connessione è univocamente determinata dagli indirizzi IP e dalle porte dei socket coinvolti. Anche se raro, è possibile che una nuova connessione usi esattamene gli stessi numeri di porta e indirizzi IP. Pertanto se nella rete esistono ancora pacchetti appartenenti alla vecchia connessione il loro arrivo alla destinazione creerebbe problemi alla nuova. Lo stato di TIME WAIT risolve questo problema usando una stima di vita di segmento pari a 2 minuti.
121
Controllo del flusso Il protocollo TCP utilizza l’algoritmo della finestra scorrevole per poter controllare il flusso di dati. Tuttavia il modo in cui TCP utilizza la finestra scorrevole è una via di mezzo fra l’algoritmo go-backN e quello di ripetizione selettiva. La finestra scorrevole utilizzata da TCP è simile all’algoritmo goback-N in quanto non vengono utilizzati riscontri negativi. Ci sono 2 differenze sostanziali: la finestra scorrevole del protocollo TCP ha come elementi i singoli byte; la seconda differenza è che la dimensione della finestra scorrevole del protocollo TCP è variabile. La dimensione della finestra viene determinata dal minimo di 2 valori: la dimensione della finestra del ricevitore (rwnd) e la dimensione della finestra di congestione (cwnd). La dimensione della finestra del ricevitore è il valore che viene cominciato dal destinatario nei segmenti che trasportano un riscontro nell’apposito campo dell’intestazione del segmento; in pratica è il numero dei byte che il destinatario può ancora accettare prima di finire lo spazio disponibile del buffer di ricezione. Problema della finestra futile Utilizzando l’algoritmo della finestra scorrevole, TCP può spedire byte quando la finestra non è nulla. Se però la finestra è molto piccola si creano segmenti che contengono pochi dati e pertanto si crea molto sovraccarico dovuto alle intestazioni. Se il destinatario pubblicizza sempre una finestra di un solo byte, il protocollo TCP crea segmenti contenenti un singolo byte. Questo problema è conosciuto con il nome di finestra futile. Per risolvere questo problema si potrebbe pensare di imporre una limitazione a TCP: spedire dati solo quando la finestra è sufficientemente grande. Sebbene questo crei meno sovraccarico dovuto alle intestazioni, non è sempre fattibile. L’algoritmo di Nagle offre una soluzione elegante. Se si possono creare segmenti grandi, allora si può spedire subito perché il problema della finestra futile non si pone. Se ci sono solo pochi byte da spedire, allora si utilizza la seguente regola: se ci sono dati non riscontrati, non spedire; altrimenti spedisci subito anche se il segmento è molto piccolo. Il altre parole, se il mittente sta aspettando un riscontro, allora sa che prima o poi qualcosa succederò e quindi può permettersi di aspettare. Se invece non sta aspettando un riscontro, non può permettersi di aspettare perché potrebbe rischiare di aspettare per sempre; in questo caso spedisce i dati anche se sono pochi. Controllo degli errori Il controllo degli errori nel protocollo TCP viene effettuato attraverso l’utilizzo di somme di controllo, riscontri e ritrasmissioni. Trasmissione senza problemi. Il client spedisce un segmento di 200 byte e il server risponde con un segmento di 1000 byte che contiene anche il riscontro dei 200 byte spediti dal client. Il client, che non ha altri dati da spedire, aspetta per un tempo pari a 500 ms prima di spedire un riscontro. Tale attesa viene fatta per aspettare ulteriori dati e quindi spedire un unico riscontro cumulativo; ovviamente non si può aspettare pr un tempo indefinito, in quanto no si sa se arriveranno altri dati. Dopo la spedizione del primo riscontro da parte del client, il server spedisce un primo segmento di 1000 byte. Il client non spedisce subito un riscontro per questo segmento ma attende di nuovo 500 ms. durante questa attesa arriva un nuovo segmento di dati spedito dal server. Il client spedisce un unico riscontro per entrambi i segmenti di dati ricevuti.
122
Trasmissione con segmento perso. Nell’esempio un segmento viene perso o ricevuto con errori. I primi 2 segmenti spediti dal mittente vengono ricevuti dal destinatario il quale spedisce un riscontro cumulativo per entrambi i segmenti. Il 3 segmento invece, no viene ricevuto dal destinatario che invece riceve il 4 segmento. Il destinatario riceve quindi dei dati fuori ordine che comunque memorizza nel buffer. Il riscontro spedito dopo il 4 segmento fa capire che si aspetta ancora il 3 segmento. Alla scadenza del time out viene rispedito il segmento 3. il protocollo TCP consegna i byte in arrivo al processo destinatario nell’ordine in cui questi sono stati spediti, anche se i segmenti arrivano fuori ordine.
Ritrasmissione veloce. In questo esempio il valore timeout è molto più grande. Quando il ricevitore riceve il 4, 5, 6 segmento, poiché il 3 non è stato ricevuto, viene spedito un riscontro per il byte numero 301. alla ricezione del 3 duplicato del riscontro che specifica sempre il byte 301, il mittente spedisce in segmento che contiene i byte 301-400 senza aspettare il time out. Viene rispedito solo un segmento. Alla ricezione del segmento il ricevente invierà un riscontro per il byte 701. quando il mittente riceverà tale riscontro capirà che tutti gli altri segmenti sono andati a buon fine.
destinazione.
123
CAPITOLO 23:
CONTROLLO DELLA CONGESTIONE E QUALITA’ DEL SERVIZIO
Il Controllo della congestione e la qualità del servizio sono due aspetti fondamentali del funzionamento di una rete di calcolatori profondamente collegati tra di loro. Questi due aspetti dipendono fortemente dal traffico dei dati. In una rete di calcolatori, se si spediscono talmente tanti dati da esaurire tutte le capacità trasmissivo dei collegamenti e dei router, non è più possibile comunicare o si riesce a farlo solo lentamente. Quindi per poter offrire un servizio migliore , occorre poter controllare la congestione della rete. Il controllo della congestione non è un aspetto legato ad un singolo strato dell’architettura di rete, ma a tre strati: quello di collegamento, quello di rete e quello di trasporto. TRAFFICO DATI: Il controllo della congestione ha come obiettivo quello di evitare la congestione che verrebbe causata da un elevato traffico dati. Cosa è il traffico dati? Il traffico dati presente sulla rete può essere rappresentato con dei parametri caratteristici: -. Velocità massima: la velocità massima è il valore massimo della velocità con cui possono essere spediti i dati; raggiunta solo in pochi momenti. -. Velocità media: la velocità media, in un certo periodo, è data dalla quantità di dati (numero di byte) spediti nel periodo di tempo diviso il numero di secondi del periodo di tempo. -. Raffiche: Per raffiche di dati si intendono la spedizione di dati per un certo periodo di tempo alla velocità massima. Tipicamente le raffiche di dati sono molto brevi. Se si verificano molte raffiche si possono verificare dei problemi.
Il traffico può essere a velocità costante, velocità variabile, a raffiche. -. Il traffico a velocità costante è caratterizzato da una velocità di spedizione che non cambia nel tempo. La velocità massima coincide con la velocità media e in questo caso non ha senso di parlare di raffiche di dati. -. Il traffico a velocità variabile è caratterizzato da una velocità di spedizione che cambia nel tempo. I cambiamenti sono tipicamente graduali e possono esserci brevi raffiche di dati. Questo tipo di traffico è più difficile da gestire rispetto a quello con velocità costante. -. Il traffico a raffiche è caratterizzato da improvvisi cambi di velocità di spedizione. Ad esempio si può passare da una velocità di spedizione nulla (nessun dato spedito) a una velocità di spedizione di 10 Mbps in pochi microsecondi e viceversa. Questo tipo di traffico è molto difficile da gestire. Il traffico a raffiche è la causa principale della congestione della rete.
124
CONGESTIONE: In una rete di calcolatori a commutazione di pacchetto si verifica una situazione di congestione quando il carico sulla rete, cioè la quantità di dati spediti, è più grande della capacità della rete, cioè della quantità di dati che la rete può gestire. La congestione può avvenire anche per altri motivi. Infatti i router, per inoltrare i pacchetti ricevuti, devono memorizzarli nelle code e tale operazione crea un’attesa. Se l’attesa diventa lunga si può creare una situazione di congestione. Prestazioni della rete: Per valutare gli effetti della congestione si possono valutare le prestazioni della rete. In situazioni di congestione le prestazioni degradano. Per misurare le prestazioni tipicamente si utilizzano due misure: il ritardo e il throughput. Ritardo: Quando il carico è molto più basso della capacità della rete, il ritardo è minimo; quando il carico cresce e si avvicina alla capacità della rete, il ritardo aumenta notevolmente; quando il carico è maggiore della capacità allora è possibile che la congestione diventi totale e nessun pacchetto riesce più a raggiungere la destinazione, pertanto il ritardo diventa infinito. Throughput: è la quantità di dati che effettivamente si riesce a trasferire nell’unità di tempo. Quando il carico è minore della capacità della rete, il throughput cresce proporzionalmente al carico; infatti tutti i dati che si spediscono, poiché non c’è congestione, vengono consegnati senza problemi. Quando il carico raggiunge e supera la capacità della rete, il throughput decresce; infatti quando c’è congestione i router eliminano i pacchetti. CONTROLLO DELLA CONGESTIONE: possiamo dividere i meccanismi di controllo della congestione in due categorie: proattivi e reattivi. Controllo proattivo: Le tecniche di controllo della congestione proattive servono a prevenire la congestione prima che questa accada. Esistono varie tecniche di controllo della congestione proattivo: • Politiche di ritrasmissione: la ritrasmissione è necessaria quando ci sono stati problemi con trasmissioni precedenti. Ovviamente la ritrasmissione di pacchetti genera ulteriore traffico e quindi può incrementare la congestione della rete. Ritardare la ritrasmissione può aiutare a evitare il problema della congestione. • Gestione della finestra scorrevole: Diminuire la dimensione della finestra scorrevole comporta la riduzione del traffico dati. • Regole per i riscontri: Il destinatario potrebbe spedire un riscontro solo se ha un pacchetto di dati da spedire o se un apposito timeout è scaduto. Oppure il destinatario potrebbe decidere di spedire un riscontro solo ogni N pacchetti. Oltre a rallentare la sorgente, spedire meno riscontri crea anche meno traffico aggiuntivo sulla rete. • Politiche di eliminazione dei pacchetti: Nei casi di congestione i router devono eliminare i pacchetti. In realtà i router possono decidere di eliminare alcuni pacchetti anche prima della congestione per evitarla. Quindi le politiche di eliminazione dei pacchetti possono aiutare a prevenire la congestione. • Politiche di accesso: Le politiche di accesso sono in realtà un meccanismo per la qualità del servizio, ma possono anche aiutare a prevenire la congestione nelle reti a circuito virtuale. Qualsiasi router coinvolto nel circuito virtuale può negare la sua disponibilità, impedendo così la trasmissione. Non si applica a Internet. Controllo reattivo: Le tecniche di controllo della congestione reattive servono a cercare di eliminare la congestione dopo che questa si è verificata. Esistono varie tecniche di controllo della congestione reattivo: • Pressione all’indietro: Con questa tecnica un nodo congestionato smette di accettare dati dal nodo precedente. Questo può causare congestione anche in tale nodo e così via fino al mittente. Può essere applicata sono nelle reti che utilizzano circuiti virtuali.
In questa figura il nodo III è congestionato e fa pressione sul nodo II non accettando più dati spediti ; il nodo II può quindi congestionarsi e a sua volta fare pressione sul nodo I, che farà pressione sul mittente che, quindi, sarà costretto a smettere di spedire o rallentare la spedizione. 125
• Segnalazione al mittente: Con questa tecnica un router congestionato spedisce un pacchetto di segnalazione direttamente al mittente. Eventuali altri router intermedi non vengono informati.
• Segnalazione implicita: Con questa tecnica non c’è nessuna comunicazione fra un nodo congestionato e il mittente dei pacchetti. Il mittente può accorgersi che c’è congestione da alcuni sintomi. Ad esempio, quando spedisce molti pacchetti e non riceve nessun riscontro per un lungo periodo di tempo, il ritardo nella ricezione di un riscontro, sono tutti sintomi di congestione. In questi casi bisognerebbe rallentare la velocità di trasmissione. • Segnalazione esplicita: Con questa tecnica, un nodo congestionato spedisce un segnale al Mittente (segnalazione all’indietro) o al destinatario (segnalazione in avanti). La segnalazione esplicita è diversa dalla segnalazione alla sorgente in quanto non viene utilizzato uno speciale pacchetto di segnalazione. Nella segnalazione esplicita il segnale viene inserito all’interno di un pacchetto dati. Controllo della congestione in TCP: Finestra di congestione. Abbiamo visto precedentemente che il destinatario comunica la dimensione della propria finestra al mittente in modo che quest’ultimo sappia quanto spazio il destinatario ha ancora a disposizione. Il mittente mantiene una variabile, rwnd (receive window), in cui memorizza la dimensione della finestra del destinatario. Per non sovraccaricare il destinatario, il mittente sceglie per la propria finestra una dimensione minore o uguale a rwnd. Il mittente mantiene anche un’altra variabile, cwnd (congestion window), che permette di tener conto di un’eventuale situazione di congestione della rete. Quando la rete è congestionata questa variabile assume valori piccoli, mentre quando la rete non è congestionata questa variabile assume valori più grandi. Per tener conto sia dello stato del destinatario sia dello stato di congestione della rete, il mittente utilizza una dimensione effettiva della finestra data dal minimo di queste due variabili: Finestra effettiva = minimo (rwnd, cwnd). Gestione della finestra di congestione. I meccanismi per la gestione della finestra di congestione in TCP sono tre: 1. Avvio lento (aumento moltiplicativo):
La dimensione iniziale della finestra di congestione viene impostata a 1 MSS. Supponiamo che il destinatario spedisce un riscontro per ogni pacchetto ricevuto e che la variabile rwnd sia sufficientemente grande in modo tale che la finestra effettiva sia sempre determinata da cwnd. Quindi quando la finestra di congestione vale 1 il mittente potrà spedire un solo segmento TCP. Se il mittente riceve un riscontro, il valore cwnd viene incrementato di 1, quindi il mittente potrà spedire altri due segmenti. Alla ricezione dei riscontri di questi due segmenti, il valore della finestra verrà incrementato di 1 per ogni riscontro, quindi da 2 diventa 4. Ora possono essere spediti 4 segmenti. Alla ricezione di ognuno dei 4 riscontri, la variabile cwnd viene incrementata di 1, e alla fine varrà 8. Con l’avvio lento la finestra di congestione viene raddoppiata, se non ci sono problemi di trasmissione. L’approccio usato nell’avvio lento viene detto aumento moltiplicativo, in quanto la dimensione della finestra viene moltiplicata per un fattore 2 in ogni aumento.
126
2. Prevenzione della congestione (aumento additivo):
Poiché l’avvio lento non è proprio lento, c’è il rischio di creare una congestione in quanto la finestra di congestione aumenta esponenzialmente. Per ridurre tale rischio si utilizza una soglia oltre la quale questo raddoppio si ferma. Il mittente mantiene un’altra variabile, sstresh (slow-start-threshold), quindi quando la dimensione della finestra di congestione supera il valore si sstresh la fase di avvio lento termina. Il valore tipico di sstresh è 65535 byte. Quando viene superato il limite di sstresh, ogni qualvolta si riceve un riscontro si incrementa di 1 il valore di cwnd anziché raddoppiarlo. Quest’approccio viene chiamato aumento additivo. 3. Rilevamento della congestione (diminuzione moltiplicativa): Quando si verifica una congestione la dimensione della finestra di congestione deve essere decrementata. L’approccio utilizzato viene detto diminuzione moltiplicativa. La finestra viene quindi dimezzata sia a causa dello scadere del timeout sia a causa della ricezione di vari riscontri duplicati. Se si ritrasmette a causa dello scadere del timeout, è più probabile che ci sia congestione e quindi TCP reagisce nel modo seguente: a. Il valore di sstresh viene posto pari alla metà della dimensione della finestra attuale. b. Il valore cwnd viene posto pari a sstresh. c. Si riprende dalla fase di avvio lento. Se si ritrasmette alla ricezione di vari ACK duplicati, allora è meno probabile che ci sia congestione e quindi TCP reagisce nel modo seguente: a. Il valore di sstresh viene posto pari alla metà della dimensione della finestra attuale. b. Il valore cwnd viene posto pari a sstresh. c. Si riprende dalla fase di prevenzione della congestione.
In questo esempio la dimensione massima della finestra di congestione è di 32 segmenti e la soglia viene posta pari a 16. Nella fase di avvio lento la finestra di congestione parte da 1 e cresce esponenzialmente fino a raggiungere il valore della soglia. A questo punto inizia la fase di aumento additivo. In quest’esempio il mittente deve rispedire un segmento a causa dello scadere del timeout quando la finestra ha una dimensione di 20 segmenti. Pertanto il nuovo valore di sstresh è di 10 (diminuzione moltiplicativa) e si riprende dalla fase di avvio lento, partendo da una finestra di dimensione 1. Quando la finestra diventa di dimensione 10, TCP utilizza di nuovo l’aumento additivo. A questo punto il mittente deve rispedire un segmento a causa della ricezione di tre ACK duplicati quando la finestra ha dimensione 12. In questo caso il valore di sstresh è 6, ma anziché riprendere dalla fase di avvio lento, si riprende dalla fase di aumento additivo, partendo da una finestra di dimensione 6.
127
Algoritmo RED: Le politiche di eliminazione dei pacchetti possono aiutare a prevenire la congestione. È possibile eliminare pacchetti anche prima che si verifichi una congestione. Descriviamo ora un protocollo che è in grado di fare ciò. Questo protocollo è noto con il nome di rilevazione casuale anticipata o RED(Random Early Detection). L’algoritmo RED controlla le code dei router, se il traffico è elevato e la rete si avvicina alla congestione, allora comincia ad eliminare i pacchetti. L’eliminazione è casuale perché avviene in base ad una probabilità p che diventa sempre più grande all’avvicinarsi della congestione. Quando c’è congestione, RED usa p = 1, cioè elimina sempre i pacchetti in arrivo. L’algoritmo RED opera sulla coda di entrata di un router. Assumiamo che la grandezza della coda sia tale da contenere T pacchetti. L’algoritmo RED utilizza due soglie Tmin e Tmax, con Tmin < Tmax <= T e funziona nel seguente modo: Quando arriva un pacchetto P, viene controllato il numero x di pacchetti già presenti nella coda. Se x < Tmin, allora il pacchetto P viene inserito nella coda; se Tmin <= x < Tmax , allora il pacchetto P viene eliminato con una probabilità p che è funzione di x; infine se x > Tmax, allora il pacchetto P viene eliminato. La scelta della probabilità di scarto p e delle soglie Tmin e Tmax determinano il comportamento dell’algoritmo RED . L’algoritmo RED, dunque, inizia a eliminare i pacchetti, anche se con probabilità bassa, quando la coda comincia a riempirsi. Più pacchetti ci sono nella coda più alta è la probabilità di eliminazione. Un difetto di quest’algoritmo è che si possono eliminare pacchetti inutilmente, cioè l’eliminazione può verificarsi anche se il router è in grado di gestire la situazione. Per evitare questo problema quindi non si considera il numero x di pacchetti effettivamente presenti nella coda, ma si mantiene una media y del numero di pacchetti presenti nella coda. Quando arriva un pacchetto P, si confronta y con Tmin e Tmax , per decidere se accettare o eliminare il pacchetto. QUALITA’ DEL SERVIZIO: La qualità del servizio, spesso indicata con l’acronimo QoS (Quality of Service), fa riferimento alla bontà del servizio offerto. La qualità del servizio viene valutata in base a quattro caratteristiche: • Affidabilità: è una garanzia di consegna dei dati spediti dal mittente. • Ritardo: tempo necessario affinché un pacchetto arrivi dalla sorgente alla destinazione. • Jitter: variabilità del ritardo. • Larghezza di banda: la velocità con cui si possono trasmettere i dati. • Classi: i servizi di comunicazione possono essere classificati in gruppi in base alle caratteristiche offerte dai servizi. Vediamo ora alcune tecniche che vengono utilizzate per migliorare la qualità del servizio: • Schedulazione: Esistono varie tecniche di schedulazione: o Code FIFO. I pacchetti vengono serviti nell’ordine in cui arrivano. Maggiore è il numero di pacchetti presenti nella coda, maggiore sarà l’attesa per i nuovi pacchetti che arrivano. Se il tempo medio di arrivo dei pacchetti è maggiore del tempo medio di smaltimento dei pacchetti, la coda si riempirà e i pacchetti dovranno essere eliminati.
o Code a priorità. Vengono definite delle classi di priorità e i pacchetti in arrivo vengono classificati e inseriti in una di queste classi. I pacchetti che si trovano nelle classi con priorità più alta verranno serviti prima. Solo quando non ci sono più pacchetti appartenenti a classi di priorità alta, il router serve i pacchetti appartenenti alle classi di priorità bassa. Il problema è che questo miglioramento viene pagato da un servizio peggiore per il traffico appartenenti alle classi più basse.
128
o Code pesate. Migliora l’approccio visto con le code a priorità. In pratica a ognuna delle classi di priorità viene assegnato un peso. Ad esempio se ci sono tre code con i pesi 5, 3, 2, su 10 pacchetti inoltrati dal router, 5 vengono presi dalla prima coda, 3 dalla seconda e 2 dalla terza.
•
• •
Controllo del traffico: Le tecniche del controllo del traffico sono meccanismi che permettono di controllare la quantità di dati immessa nella rete. Esistono diverse tecniche di controllo del traffico: o Imbuto. o Deposito di token. o Deposito di token e tecnica di imbuto. Prenotazione delle risorse: Un flusso di comunicazione che richiede una certa QoS ha bisogno di consumare risorse. Se tali risorse vengono prenotate prima della comunicazione, la qualità del servizio sarà garantita. Controllo di accesso: Il controllo dell’accesso fa riferimento ai meccanismi utilizzati dai router per accettare o rifiutare il traffico in arrivo in base a determinati parametri che specificano il flusso ammissibile. Se al nuovo flusso non può essere garantita la QoS richiesto, il servizio viene rifiutato.
129
PARTE VI CAPITOLO 24:
STRATO DELLE APPLICAZIONI DOMAIN NAME SYSTEM (DNS)
Il sistema dei nomi di servizio, è una applicazione Internet di servizio che permette agli utenti finali di utilizzare nomi mnemonici, come ad esempio www.unisa.it, al posto degli indirizzi IP. NOMI DI DOMINIO E INDIRIZZI IP:Un nodo della rete Internet è identificato univocamente da un indirizzo IP; due processi per poter dialogare devono utilizzare un protocollo di trasporto, come il TCP, che deve conoscere gli indirizzi dei due host per poter instaurare una connessione e trasferire i dati. L’uso di indirizzi IP, però, risulta alquanto scomodo da ricordare per gli utenti. Il sistema dei nomi di dominio crea una associazione fra indirizzi IP e nomi di dominio e offre un servizio di traduzione fra indirizzi IP e nomi di dominio. Il sistema può essere utilizzato da tutte le applicazioni che richiedono la traduzione di domini in indirizzi IP. Nella Fig. 24.1 viene mostrata l’operazione di traduzione del dominio da parte di un programma di trasferimento della posta elettronica.
Esempio: il nome di dominio identifica l’host con il quale si vuole comunicare. Il programma di posta elettronica interroga il DNS per trasformare il nome di dominio nel corrispondente indirizzo IP (il programma di posta deve necessariamente conoscere l’indirizzo IP del server DNS) ed inoltrare il messaggio nella casella di posta dell’utente destinatario. In principio, la trasformazione da nome di dominio ad indirizzo IP veniva fatta memorizzando su ogni singolo nodo della rete un file che specificava la corrispondenza fra indirizzi IP e nomi di dominio. Questo file era aggiornato manualmente e periodicamente e la traduzione era effettuata dall’utente stesso che, consultando il file, ricavava l’effettivo indirizzo IP. Questo approccio, oggi, è impossibile in quanto il numero di host connessi è enorme; come conseguenza il file sarebbe eccessivamente grande e l’aggiornamento da parte di tutti gli host genererebbe una quantità di traffico inaccettabile. La soluzione al problema è stata quella di adottare un sistema distribuito: le informazioni vengono memorizzate in molti server, dividendo lo spazio dei nomi in domini. Il sistema costituito da tutti questi server viene chiamato DNS. Un host che deve tradurre un nome di dominio in indirizzo IP deve semplicemente contattare il DNS più vicino ed ottenerne la traduzione. SPAZIO DEI NOMI DI DOMINIO:
130
Un nome di dominio è una sequenza di caratteri che, per essere gestito in maniera efficiente, viene usato uno spazio dei nomi gestito in maniera gerarchica. I nomi di dominio, quindi, sono costituiti da varie parti strutturalmente collegate fra di loro con un preciso schema. La struttura gerarchica dello spazio di dominio è rappresentata da un albero la cui radice rappresenta il livello 0. La struttura gerarchica dei nomi di dominio prevede fino a 128 livelli (generalmente si usano 2, 3 livelli; raramente con 4 o 5). Ogni nodo dell’albero che rappresenta la struttura gerarchica dello spazio dei nomi è identificato da un’etichetta, che è una sequenza di 63 caratteri al massimo. Per mantenere l’unicità dei nomi dello spazio, tutti i figli del nodo devono avere etichette diverse. Nomi di dominio: Un nome di dominio è composto da una sequenza di etichette separate dal carattere “.”; ogni nodo dell’albero rappresenta un nome di dominio, dato dalla sequenza di etichette che si incontrano procedendo dal nodo alla radice.
I nomi di dominio possono essere di due tipi: . Nomi di domino completi: quando un nome di dominio viene completato da un’etichetta vuota (che rappresenta la radice) e che quindi termina con il carattere “.”. Un nome di domino completo viene definito Fully Qualified Domain Name (FQDN), ad esempio l’indirizzo: . Challenger.atc.fhda.edu. . Solo un nome di dominio completo può corrispondere a un indirizzo IP; 2. Nomi di dominio parziali: quando non arriva alla radice ma si ferma prima. In questo caso il nome non termina con il punto. Un nome di dominio parziale viene definito Partially Qualified Domain Name (PQDN). Un nome di domino parziale non corrisponde a un indirizzo IP. Per poterne ottenere un IP è necessario completare un nome di dominio parziale. Generalmente questa procedura è effettuata dal client DNS che mantiene una lista di suffissi (Possibili completamenti). Il client DNS prova a completare i nomi parziali con i suffissi presenti nella lista, nell’ordine in cui questi prefissi vengono elencati. Ad esempio, i seguenti suffissi potrebbero essere i suffissi utilizzati per completare il nome challenger: LISTA atc.fhda.edu fhda.edu null
NOME COMPLETO challenger.atc.fhda.edu. challenger.fhda.edu. challenger.
131
Dominio: Un dominio è un sottoalbero dello spazio dei nomi di dominio. Il nome del dominio è il nome di dominio della radice del sottoalbero. Un dominio è spesso diviso in altri domini, chiamati sottodomini.
DISTRIBUZIONE DELLO SPAZIO DEI NOMI DI DOMINIO: La gerarchia dello spazio dei nomi di dominio serve anche a distribuire le informazioni relative all’associazione fra nomi e indirizzi IP. Gerarchia di name server: le informazioni all’interno dei DNS sono memorizzate nei name server. A ogni domino della struttura gerarchica corrispondono uno o più name server; quindi i name server possono essere organizzati nella struttura gerarchica che corrisponde a quella dei nomi di dominio .
Zone: Un singolo dominio può essere diviso in varie parti chiamate zone. Ogni name server è responsabile solo per una particolare zona. Se il name server è responsabile per l’intero domino allora la zona e il dominio fanno riferimento alla stessa cosa. Quando un name server, invece, divide il dominio in zone che vengono affidate ad altri name server allora zona e dominio si riferiranno a due cose distinte: le informazioni riguardanti l’intero domino verranno memorizzate nei name server responsabili per i vari sottodomini, mentre il server di dominio manterrà solo delle informazioni riguardanti i name server dei sottodomini. Root name server: è un name server la cui zona consiste nell’intero albero dei nomi di dominio. Per motivi di efficienza e di affidabilità esistono vari root name server (attualmente 13). I root name server sono distribuiti un po’ dappertutto. Sono funzionalmente equivalenti, basta contattarne uno. DNS E INTERNET: Il DNS è un sistema molto generale e il suo uso non è limitato solo ad Internet o agli indirizzi IP. Esistono tre tipi di domini: 1. Domini generici: i domini generici sono dei sottodomini della radice, ognuno dei quali corrisponde a un generico gruppo di nomi di dominio. Ad esempio il dominio edu raggruppa tutti i nomi di dominio assegnati a istituzioni scolastiche. Attualmente vengono utilizzati 14 nomi di dominio che sono: Etichetta aero
Descrizione Compagnie aeree
biz
Commerciale (simile a com)
com
Organizzazioni commerciali
coop
Cooperative
132
Etichetta
Descrizione
edu
Istituzioni educative
gov
Istituzioni governative
info
Punti di informazione
int
Organizzazioni internazionali
mil
Gruppi militari
museum name
Musei Siti personali
net
Centri di supporto per internet
org
organizzazioni non - profit
pro
Organizzazioni professionali
2. Domini delle nazioni: sono dei sottodomini, ognuno dei quali corrisponde a una nazione. Le etichette utilizzate per rappresentare le nazioni sono composte da due caratteri; ad es. it; 3. Nomi inversi: una particolarità del sistema DNS è che può essere usato anche per convertire un indirizzo IP nel corrispondente nome di dominio. Per poter effettuare la trasformazione inversa il sistema utilizza il dominio speciale in-addr.arpa che contiene tutti gli indirizzi IP in forma di etichette.
Per rispettare la struttura gerarchica dei nomi di dominio, i quattro numeri decimali che specificano l’indirizzo IP, appaiono in ordine inverso. Ad esempio, l’indirizzo IP 132.34.45.121 corrisponde al nome di dominio 121.45.34.132.in-addr.arpa. RISOLUZIONE: La trasformazione di un nome di dominio ad un indirizzo IP viene chiamata risoluzione. Resolver: Ogni host ha un DNS client che viene chiamato resolver. Quando un processo ha bisogno di eseguire una trasformazione invoca il resolver, che contatterà il server DNS che fornirà la risposta oppure fornirà gli indirizzi di altri server DNS ai quali chiedere la risoluzione. Quando il resolver riceve risposta verifica se si tratta effettivamente di un indirizzo IP valido e consegna il risultato al processo chiamante. Come abbiamo detto nel paragrafo precedente è possibile anche eseguire una risoluzione inversa: un determinato IP ‘xxx.xxx.xxx.xxx’ viene trasformato nel nome di dominio ‘xxx.xxx.xxx.xxx.in-addr.arpa’ e poi si esegue la normale risoluzione che, anziché fornire un indirizzo IP, restituisce il nome di dominio dell’IP di partenza. Il resolver può chiedere due tipi di risoluzione: 133
Risoluzione ricorsiva: in questo tipo di risoluzione il server DNS è tenuto a fornire la risposta finale. Se il server conosce la risposta, perché il nome richiesto ricade nel dominio di autorità del server, allora potrà rispondere facilmente; altrimenti dovrà inoltrare la richiesta ad un altro server che si comporterà nella stessa maniera, fino ad arrivare al server DNS che conoscerà la risposta.
Risoluzione iterativa: in questo tipo di risoluzione, invece, il server non è tenuto a fornire la risposta finale nel caso non la conosca. Se il server conosce la risposta la fornirà altrimenti fornirà l’indirizzo di un nuovo server DNS a cui rivolgersi per ottenere la risposta. Questa procedura si ripete finché non verrà ricevuta una risposta.
Caching: Per rendere più efficienti le prestazioni di un server DNS, le informazioni che potrebbero essere riutilizzate vengono mantenute in una memoria cache. Le informazioni contenute nella cache, comunque, possono diventare obsolete e quindi si memorizza anche un tempo di scadenza oltre il quale le informazioni vengono cancellate.
134
Esempio: Supponiamo di digitare l’indirizzo www.azienda.it. Il browser ha bisogno dell’indirizzo IP per contattare il server web. Tramite il resolver verrò inviata una richiesta al name server locale, che è sulla stessa rete locale del browser (messaggio 1). L’indirizzo del name server locale è spesso contenuto in un file o ottenuto dinamicamente all’atto dell’accensione della macchina o della connessione. Ad esempio, supponiamo di essere connessi dal nostro PC di casa tramite Alice. Al momento della connessione, al nostro PC viene comunicato l’indirizzo IP di un name server di Alice che è il name server locale. Quando digitiamo www.azienda.it, il resolver contatterà un name server locale e chiede la risoluzione ricorsiva aggiungendo al nome di dominio il “.” . In assenza di informazioni sul nome www.azienda.it il name server locale esegue una richiesta di risoluzione iterativa al root name server (messaggio 2). Siccome ce ne sono pochi, attualmente 13, non è difficile conoscere gli indirizzi di questi server. Il root name server contattato dal name server locale risponderà dicendo che non conosce l’indirizzo IP di www.azienda.it, però conosce i name server che hanno autorità sulla zona .it; la risposta (messaggio 3) includerà gli indirizzi IP, e i nomi di dominio di tale server. A questo punto il name server locale ripeterà la richiesta di risoluzione di www.azienda.it a un name server responsabile per .it (messaggio 4). La risposta (messaggio 5) sarà simile a quella ottenuta dal root name server: non conosco l’indirizzo IP richiesto, ma conosco gli indirizzi IP dei name server responsabili per la zona azienda.it . Anche in questo caso il name server locale dovrà ripetere la richiesta a un name server responsabile per azienda.it (messaggio 6). In quest’ultimo caso il name server contattato conosce l’indirizzo IP di www.azienda.it e può restituire tale indirizzo al name server locale (messaggio 7), che lo restituisce al resolver (messaggio 8) e finalmente il broswer potrà contattare il server web.
REGISTRO DEI DOMINI: Per poter utilizzare un nome di dominio occorre registrare il nome, la registrazione è affidata ai cosiddetti registrar: organizzazioni commerciali accreditate dall’ICANN. Queste organizzazioni richiedono il pagamento di un affitto per il nome di dominio. Per poter effettuare la registrazione di un nome di dominio, l’utente deve fornire anche l’indirizzo IP da associare al nome. DNS E PROTOCOLLI DI TRASPORTO: Un client e un server DNS possono comunicare utilizzando sia il protocollo UDP che TCP. In entrambi i casi si usa la porta ben nota 53. Quando i messaggi sono più piccoli di 512 byte, viene utilizzato il protocollo UDP; dimensioni superiori potrebbero creare problemi di frammentazione e quindi si usa il protocollo TCP. Poiché il messaggio di richiesta è più piccolo del messaggio di risposta potrebbe capitare che la risposta sia più grande di 512 byte.
135
CAPITOLO 25:
ACCESSO REMOTO, POSTA ELETTRONICA E TRASFERIMENTO FILE
ACCESSO REMOTO Poiché internet mette in comunicazione tantissimi computer, una delle necessità più naturali è quella di voler utilizzare un computer che si trova fisicamente lontano. Ad esempio da un computer di casa connesso a Internet, si potrebbe voler accedere al computer del proprio ufficio ovviamente anch’esso connesso a internet. l’accesso remoto permetto l’accesso al computer dell’ufficio stando a casa. Accesso al sistema In un sistema che può essere utilizzato da più utenti, come un sistema di time sharing, ogni utente ha determinati diritti di utilizzo delle risorse. Quindi per accedere al sistema l’utente fornisce il proprio nome utente e la propria password e dopo aver effettuato il login, e tutto ciò che digita sul proprio terminale, vengono inviati al client il quale il SO provvederà ad interpretare i comandi.
POSTA ELETTRONICA Uno dei servizi più popolari offerti da internet è la posta elettronica, comunemente detta email. La posta elettronica è stata una delle prime applicazioni. Agli albori di Internet, i messaggi venivano scambiati tramite posta elettronica ed erano brevi messaggi di testo. Oggi la posta elettronica è molto più complessa in quanto include anche immagini, suoni, video. Primo esempio Il mettente ed il destinatario del messaggio di posta elettronica sono utenti o programmi applicativi sullo stesso sistema. L’amministratore ha creato una mailbox per ogni utente; tale mailbox serve per contenere i messaggi ricevuti dall’utente. Una mailbox è un file system locale con particolari permessi di accesso. Quando un utente vuole spedire un messaggio ad un altro utente, utilizza un programma utente, PU, per la gestione della posta elettronica che le permette di preparare il messaggio e di memorizzarlo nella mailbox del destinatario. L’utente per controllare i propri messaggi utilizza un proprio PU.
Secondo esempio Il mittente e il destinatario sono utenti su due sistemi diversi collegati a internet. per raggiungere il destinatario il messaggio deve essere spedito su internet. in questo caso oltre al programma utente occorrerà anche un programma per il trasferimento del messaggio PTM. Il mittente scrive il messaggio il quale dovrà essere trasferito al mail server attraverso l’uso di un PTM. Il PU del 136
mittente passa il messaggio al PTM. Il messaggio così viene memorizzato nella mailbox del destinatario.
Terzo esempio In questo esempio i 2 utenti utilizzano una connessione punto-punto come ad esempio una connessione ADSL. Il mittente utilizza il PU per preparare il messaggio il quale sarà trasmesso al PTM che provvederà ad inoltrarlo al mail server della mailbox del destinatario il quale attraverso il proprio PU potrà leggere il messaggio.
Quarto esempio Nessuno dei due utenti è connesso al proprio mail server. La distinzione dal precedente esempio è che anche il destinatario dovrà utilizzare un programma di accesso ai messaggi PAM. I programmi PTM e PAM devono essere sempre in esecuzione per svolgere la loro funzione di server.
Indirizzi email Gli utenti di un sistema di posta elettronica vengono individuati grazie a un indirizzo di posta elettronica. Di fatto il termine email viene utilizzato anche per indicare un indirizzo di posta elettronica. Tale indirizzo è costituito da 2 parti: una locale (il nome dell’utente) e un nome di domicilio separati da @. Il nome di dominio individua il mail server e il nome dell’utente individua l’utente all’interno del dominio. È possibile gestire gli alias, cioè un nome fittizio che viene trasformato in un indirizzo reale o in una lista di indirizzi. Programmi utente Il programma utente permette la gestione di una email Spedire un messaggio Una delle funzionalità primarie del PU è quella di spedire il messaggio. Per spedire il messaggio, il PU aggiunge delle informazioni addizionali al testo preparato dall’utente. Ricevere un messaggio 137
L’altra funzionalità primaria del PU è quella di recuperare i messaggi inviati all’utente. Per far ciò il PU deve controllare la mailbox dell’utente. Questa operazione potrebbe richiedere l’utilizzo di un PAM. Il PU controlla la presenza di email in arrivo periodicamente o su richiesta dell’utente stesso. Trasferimento dei messaggi: SMTP Il trasferimento fisico dei messaggi da un client a un server viene effettuato dai PTM: il client PTM invia il messaggio al server PTM. Per svolger questa operazione deve esser utilizzato un protocollo. Il protocollo attualmente utilizzato in Internet è il protocollo SMTP (Simple Mail Transfer Protocol). Nel caso più tipico il protocollo SMTP deve essere usato 2 volte: una volta per trasferire il messaggio dal mittente al mail server del mittente e una volta per trasferire il messaggio dal mai server del mittente al mail server del destinatario.
Esempio 25.3 Vediamo come trasferire un messaggio di posta elettronica con il protocollo SMTP usando direttamente i comandi del protocollo. Possiamo utilizzare il programma di accesso remoto telnet per effettuare un accesso al server sulla porta ben nota 25 (la porta utilizzata per il protocollo SMTP). Stabilita la connessione con il server possiamo digitare direttamente i comandi del protocollo SMTP; di seguito riportiamo una sessione SMTP. prompt> telnet mail.adelphia.net 25 Trying 68.168.78.100 ... Connected to mail.adelphia.net (68.168.78.100). mtal3.adelphia.net SMTP server ready Fri, 6 Aug 2004 HELO mail.adelphia.net
250 mtal3.adelphia.net MAIL FROM: forouzanb@adeplhia.net 250 Sender <forouzanb@adeplhia.net> Ok RCPT TO: forouzanb@adeplhia.net 250 Recipient forouzanb@adeplhia.net Ok DATA Ok Send data ending with <CRLF>.<CRLF> From: Forouzan
To: Forouzan Questo e' un messaggio di prova Per mostrare l'uso del protocollo SMTP. Message recived adelphia.net@mail.adeplhia.net QUIT mta13.adeplhia.net SMTP server closing connection Connection closed by foreign host
Accesso ai messaggi: POP e IMAP Per poter accedere alla propria mailbox, quando essa è situata su un server remoto, l’utente deve usare un programma di accesso ai messaggi. Attualmente vengono utilizzati 2 protocolli per implementare un programma di accesso ai messaggi: POP3 e IMAP4.
POP3 Il protocollo POP3 (Post Office Protocol, v3) è molto semplice pertanto ha poche funzionalità. Il destinatario dell’email utilizza un PAM client POP3, mentre il mail server utilizza un PAM server POP3. il client apre una connessione TCP verso il server POP3 sulla porta ben nota 110. dopodichè spedisce il proprio identificativo, cioè nome utente e password . fatto ciò l’utente può vedere l’elenco dei suoi messaggi. Il protocollo POP3 ha 2 modalità di funzionamento: nella prima i 138
messaggi che il client trasferisce dal server vengono cancellati dalla mailbox mantenuta dal server. Nella seconda i messaggi rimangono sul server; in pratica il client ottiene una copia dei messaggi che rimarranno disponibili per successive consultazioni IMAP4 Il protocollo IMAP4 (Internet Mail Access Protocol, v4) è un’evoluzione di POP3, è molto simile ma ha molte più funzionalità. • Il destinatario può controllare l’intestazione del messaggio prima di trasferire il messaggio stesso • Il destinatario può eseguire ricerche di particolare stringhe • Si può effettuare il trasferimento parziale • Si può gestire la propria mailbox direttamente dal mail server. MIME Il protocollo SMTP prevede l’utilizzo di un particolare insieme di caratteri per il corpo del messaggio di posta elettronica. Tale insieme di caratteri viene detto NVT ASCII e corrisponde ai caratteri ASCII a 7 bit. Il formato MIME prevede la trasformazione da parte del mittente di dati binari in dati NVT ASCII che possono essere trasferiti utilizzando il protocollo SMTP.
Accesso ai messaggi via Web L’utilizzo della posta elettronica è così diffuso che il servizio viene spesso offerto direttamente tramite siti web. Fra i fornitori più noti abbiamo Alice, Hotmail, Libero, ecc. L’accesso alla posta elettronica avviene via Web attraverso l’utilizzo di un browser con il quale possiamo accedere al servizio di posta elettronica. Il browser utilizza il protocollo SMTP per spedire la posta elettronica, per ricevere la posta elettronica invece non vengono utilizzati i protocolli POP3 e IMAP ma direttamene tramite il protocollo HTTP.
139
CAPITOLO 20:
WEB E SERVIZI WEB
Il WWW o più semplicemente Web, è un immenso sistema di informazioni fisicamente memorizzate su tanti host della rete Internet, molto spesso collegate fra loro. Il CDN (Content Distribution Network) permette una distribuzione più efficiente e veloce delle pagine web. ARCHITETTURA Il WWW è un’applicazione client/server: il programma client viene chiamato browser mentre il programma server viene chiamato server web. La peculiarità di questa applicazione e che esistono tantissimi server web. Ogni server offre delle informazioni organizzare in pagine web che possono essere sfogliate. Client Un browser tipicamente consiste in 3 componenti: un modulo di controllo, un protocollo e un interprete. Il modulo di controllo riceve i comandi dell’utente da tastiera e mouse e utilizza un protocollo per recuperare le pagine web dai server. Quando una pagine web viene trasferita dal server, il browser utilizza un interprete per visualizzare correttamente le informazioni contenute nella pagina. Un browser può memorizzare le pagine web sul proprio disco per velocizzare eventuali accessi futuri alle stesse pagine. Server Le pagine web sono memorizzare nei server. Ogni volta che un server web riceve la richiesta di un client, il documento richiesto viene spedito al client. Protocollo Il trasferimento delle pagine web avviene grazie all’utilizzo di un protocollo fra il client e il server. Vari protocolli possono essere utilizzati a questo scopo. Quello più comunemente utilizzato è il protocollo http. URL Abbiamo detto che le informazioni offerte dal WWW sono organizzate in pagine web. Occorre un sistema di indirizzamento della pagine web. Tale sistema utilizza degli indirizzi chiamati URL. L’URL è costituito da quattro elementi: protocollo, host, numero di porta e nome del file.
PAGINE WEB Le pagine web possono essere classificate in statiche, dinamiche e attive. • Statiche. Una pagina web statica è semplicemente un file memorizzato nel server web. Il browser che fa richiesta di una pagina statica riceve una copia della pagina. Il contenuto della pagina viene determinato nel momento della sua creazione. Il linguaggio in cui vengono definite le pagine statiche è l’HTML. • Dinamiche. Una pagina dinamica è una pagina che viene creata dal server web nel momento in cui il browser effettua la richiesta. Quando il browser effettua la richiesta, il server web esegue un programma o uno script che crea la pagina web. L’output del programma o dello script viene spedito come risposta alla richiesta del browser. Poiché una nuova pagina web viene creata per ogni richiesta, il contenuto della pagina può variare da richiesta a richiesta. La tecnica CGI permette di gestire pagine web dinamiche. Essa p un insieme di standard che definiscono come una pagina dinamica viene scritta. Come i dati vengono passati in input al programma che crea la pagina e come il risultato del programma viene utilizzato. Normalmente quando un programma è in esecuzione possiamo passargli dei parametri in modo tale da specializzare l’esecuzione. Tali dati vengono inseriti nelle pagine dall’utente attraverso una form. L’output generalmente è una pagina web descritta attraverso il linguaggio HTML. • Attive. Per molte applicazioni occorre costruire la pagina web eseguendo un programma o uno script sul computer del client. Le pagine create in questo modo vengono dette pagine attive. Es. programma che crea delle immagine allineate o che interagisce con l’utente. Le tecnologie più usate per creare pagine attive sono il linguaggio Java e Javascript. 140
HTTP Il protocollo http viene utilizzato per trasferire le pagine web. Il formato di richiesta è simile a quella di risposta. Il messaggio di richiesta è cosi costituito: il primo elemento è il tipo della richiesta (get, put, post, ecc), il secondo elemento è l’URL e il terzo la versione del protocollo che si sta utilizzando. CACHE NEI BROWSER Un browser può memorizzare in una memoria cache le pagine web che l’utente richiede. Nel caso in cui un utente ritorna in una pagina web che ha già visitato, questa viene trovata nella cache. Se è stata aggiornata tramite la linea di intestazione If-modified-since si verifica e se la risposta è positiva si ricarica altrimenti viene mostrata la pagina presente in cache. SERVER PROXY Il protocollo HTTP supporta i server proxy. Un proxy è un host che memorizza copie delle risposte alle richieste più recenti. Il client spedisce le proprie richieste al server proxy. Il proxy controlla la propria memoria cache; se la risposta è nella cache potrà spedirla subito al client, altrimenti spedisce la richiesta al server reale ottenendo così la risposta per poi inviarla al client oltre a memorizzarla.
141